第一次做業(2)

6-1 計算兩數的和與差

一、設計思路

第一步:根據題意對函數進行定義。
第二步:分析得該函數所求爲op1與op2的和與差,將所得和與差分別爲psum和pdiff。
第三步:得出代碼。html

二、實驗代碼

void sum_diff(float op1,float op2,float *psum,float *pdiff)
{
  *psum=op1+op2;
  *pdiff=op1-op2;
}

三、本題調試過程碰到問題及解決辦法


問題:編譯錯誤
解決:在定義函數時像定義變量同樣在結尾加上了逗號,刪除了逗號後答案便正確了。git

6-2 拆分實數的整數與小數部分

一、設計思路

第一步:定義函數。
第二步:根據題意分析,要將一個數的整數部分和小數部分分開,首先會想到int由此獲得整數部分,而後用原來的數減去整數部分便能獲得小數部分。
第三步:指針intpart指向x的整數部分,fracpart指向其小數部分。數組

二、實驗代碼

void splitfloat(float x, int *intpart,float *fracpart)
{
  *intpart=(int)x;
  *fracpart=x-*intpart;
}

三、本題調試過程碰到問題及解決辦法

該題沒有遇到問題。函數

6-1 在數組中查找指定元素

一、設計思路

第一步:定義函數。
第二步:若是沒有找到與x相等的數則返回-1,因此先定義k並賦予初值-1。在比較中只有遇到與x相等的數時k纔會被賦予其餘的值不然最後返回-1。因爲k爲最小座標,因此在遇到第一個與x相等的數後跳出循環。
第三步:得出代碼。學習

二、實驗代碼:

int search( int a[], int n, int x )
{
 int i=0;
 int k=-1;
 for(i=0;i<n;i++)
 {
 if(a[i]==x)
 {
  k=i; 
  break;
 }
}
return k;
}

三、流程圖

四、本題調試過程碰到問題及解決辦法


這是我最開始的答案,結果是部分錯誤。由於我將return放在了for循環中並無中止,因此出現了錯誤。修改無果找了其餘出路。.net

6-2 找最大值及其下標

一、設計思路

第一步:定義函數。
第二步:將指針max指向a[]首元素地址,在for循環中當遇到大於它的數時從新賦值max且b指向其下標,一直循環到最後返回最後的max。
第三步:得出代碼。設計

二、實驗代碼:

int fun(int *a,int *b,int n)
{
  int i;
  int *max=a;
  *b=0;
  for(i=0;i<n;i++)
  {
    if(a[i]>*max)
    {
      *max=a[i];
      *b=i;
    }
  }
  return *max;
}

三、流程圖

四、本題調試過程碰到問題及解決辦法


在該題中我出現的問題在於對max初值的定義的錯誤,我習慣性地將它定義爲0了。而a表示a[i]的首元素地址,再將後面的與max比較。3d

6-1 最小數放前最大數放後

一、設計思路

第一步:定義函數。
第二步:本題其實就是三個小函數的集合,每個函數都是在比較大小而後按照題意交換位置,小的數換到前面大的數換到後面,循環。
第三步:輸出。指針

二、實驗代碼

#include<stdio.h>
void input(int *arr,int n)
{
int i=0;
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
} 
void max_min(int *arr,int n)
{
int j=0,x=0,y=n-1;
for(j=0;j<n;j++)
{
if(arr[x]>arr[j])
{
int swap;
swap=arr[x];arr[x]=arr[j];arr[j]=swap;
}
}
for(j=n-1;j>0;j--)
{
if(arr[y]<arr[j])
{
int temp;
temp=arr[y];arr[y]=arr[j];arr[j]=temp;
}
}
}
void output(int *arr,int n)
{
int k=0;
for(k=0;k<n;k++)
{
printf("%3d",arr[k]);
}
}

三、流程圖

四、本題調試過程碰到問題及解決辦法

這道題我剛開始作時徹底沒有思路,以爲很複雜,因此是經過其餘同窗的幫助完成的。調試

6-2 指針選擇法排序

一、設計思路

第一步:定義函數。
第二步:循環判斷,並根據題意交換位置。
第三步:結束循環。

二、實驗代碼

void sort(int *x,int n)
{
int i,j;
int a;
for(i=0;i<n;i++)
{
for(j=i;j<n;j++) 
{
if(*(x+i)<*(x+j))
{
a = *(x+i);
*(x+i) = *(x+j);
*(x+j) = a;
}
}
}
return 0;
}

三、流程圖

四、本題調試過程碰到問題及解決辦法


少了return 0,沒有中止循環。

6-1判斷迴文字符串

一、設計思路

第一步:定義函數。
第二步:當不是空格時開始判斷一直到最後,由於最後一位時\0因此減1,進行比較,若是k=i則返回true。
第三步:結束代碼。

二、實驗代碼

bool palindrome(char *s)    
{  
char *a = s; 
int i = 0,j=0,k=0;  
while (*a != '\0')       
{  
  a++;  
  i++;  
  }  
a--;                     
 while (*s != '\0')         
{  
if (*s == *a)  
{  
  k++;  
}  
  else   
{  
  return false;  
}  
s++;  
a--;
}
if (k == i)         
{  
    return true;  
}  
}

三、流程圖

四、本題調試過程碰到問題及解決辦法


沒有考慮到不能時\0的狀況。

6-2使用函數實現字符串部分複製

一、設計思路

第一步:定義函數。
第二步:前移。
第三步:結束。

二、實驗代碼

void strmcpy( char *t, int m, char *s )
{
int i,j,k;
k=strlen(t);
strcpy(s,t);
for(i=m-1;i>0;i--)
 {  
for(j=i;j<k;j++){  
*(s+j-1)=*(s+j);  
}  
}  
*(s+k-m+1)='\0'; 
}

三、流程圖

四、本題調試過程遇到的問題及解決辦法

學習總結和進度

一、總結兩週裏所學的知識點有哪些學會了?哪些尚未學會?
本週咱們主要學習將新知識點指針與數列、地址聯繫起來,做業都是與函數相關聯的,對指針的運用還不熟悉。
二、個人git地址是: https://coding.net/u/zhouxuan12

三、點評
http://www.cnblogs.com/exo123/p/8575595.html
http://www.cnblogs.com/fengzx/p/8612048.html
http://www.cnblogs.com/dx2017/p/8560765.html
四、

相關文章
相關標籤/搜索