第一步:根據題意對函數進行定義。
第二步:分析得該函數所求爲op1與op2的和與差,將所得和與差分別爲psum和pdiff。
第三步:得出代碼。html
void sum_diff(float op1,float op2,float *psum,float *pdiff) { *psum=op1+op2; *pdiff=op1-op2; }
問題:編譯錯誤
解決:在定義函數時像定義變量同樣在結尾加上了逗號,刪除了逗號後答案便正確了。git
第一步:定義函數。
第二步:根據題意分析,要將一個數的整數部分和小數部分分開,首先會想到int由此獲得整數部分,而後用原來的數減去整數部分便能獲得小數部分。
第三步:指針intpart指向x的整數部分,fracpart指向其小數部分。數組
void splitfloat(float x, int *intpart,float *fracpart) { *intpart=(int)x; *fracpart=x-*intpart; }
該題沒有遇到問題。函數
第一步:定義函數。
第二步:若是沒有找到與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
第一步:定義函數。
第二步:將指針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
第一步:定義函數。
第二步:本題其實就是三個小函數的集合,每個函數都是在比較大小而後按照題意交換位置,小的數換到前面大的數換到後面,循環。
第三步:輸出。指針
#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]); } }
這道題我剛開始作時徹底沒有思路,以爲很複雜,因此是經過其餘同窗的幫助完成的。調試
第一步:定義函數。
第二步:循環判斷,並根據題意交換位置。
第三步:結束循環。
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,沒有中止循環。
第一步:定義函數。
第二步:當不是空格時開始判斷一直到最後,由於最後一位時\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的狀況。
第一步:定義函數。
第二步:前移。
第三步:結束。
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
四、