第一步:觀察函數定義
第二步:進行加減運算過程html
` #include <stdio.h> void sum_diff( float op1, float op2, float *psum, float *pdiff ); int main() { float a, b, sum, diff; scanf("%f %f", &a, &b); sum_diff(a, b, &sum, &diff); printf("The sum is %.2f\nThe diff is %.2f\n", sum, diff); return 0; } void sum_diff( float op1, float op2, float *psum, float *pdiff ) { *psum = op1+op2; *pdiff = op1-op2; } `
開始指針忘記加*,加上後答案正確。git
第一步:觀察函數定義。
第二步:將整數部分賦值給int型傳入數據,以後用float型傳入數據減去整數部分得出小數部分。算法
` #include <stdio.h> void splitfloat( float x, int *intpart, float *fracpart ); int main() { float x, fracpart; int intpart; scanf("%f", &x); splitfloat(x, &intpart, &fracpart); printf("The integer part is %d\n", intpart); printf("The fractional part is %g\n", fracpart); return 0; } void splitfloat( float x, int *intpart, float *fracpart ) { *intpart = x; *fracpart=x - *intpart; } `
本題沒有遇到問題。數組
第一步:觀察函數定義。
第二步:判斷遍歷數字是否與查找數字相同,若是相同index=i,並跳出循環,不相同則等於-1,直到循環結束,返回index的值。函數
`#include <stdio.h> #define MAXN 10 int search( int list[], int n, int x ); int main() { int i, index, n, x; int a[MAXN]; scanf("%d", &n); for( i = 0; i < n; i++ ) scanf("%d", &a[i]); scanf("%d", &x); index = search( a, n, x ); if( index != -1 ) printf("index = %d\n", index); else printf("Not found\n"); return 0; } int search(int list[], int n, int x ){ int i,index; for(i=0;i<n;i++) { if(list[i]==x){ index = i; break; }else{ index = -1; } } return index; } `
開始將return放進了循環中致使程序不能結束,改正後答案正確。學習
第一步:觀察函數定義。
第二步:用if語句判斷遍歷數與a[i]的大小,若是a[i]小於遍歷數則把a[i]賦值給max,其下標存到指針b所指變量,函數返回最大值。.net
` #include<stdio.h> #define N 10 int fun(int *a,int *b,int n); int main() { int a[N],i,max,p=0; for(i=0;i<N;i++) scanf("%d",&a[i]); max=fun(a,&p,N); printf("max=%d,position=%d\n",max,p); return 0; } int fun(int *a,int *b,int n){ int i; for(i=0;i<n;i++){ if(a[i]>*a){ *a = a[i]; *b = i; } }return *a; } `
本題沒有問題。設計
第一步:觀察函數定義。
第二步:用if語句比較當前數與最小值的大小,若是大於最大值則將數組下標賦值給idx,判斷idx是否爲0,如不等於0則將a[idx]與a[0]調換。3d
` #include<stdio.h> void input(int *arr,int n); void max_min(int *arr,int n); void output(int *arr,int n); int main() { int a[10]; input(a,10); max_min(a,10); output(a,10); return 0; } void input(int *arr,int n) { int i; for(i = 0;i < n;i++){ scanf("%d",& *(arr + i)); } } void max_min(int *arr,int n) { int idx=0,i,t; for ( i = 0; i < n; i++ ) { if ( arr[i] < arr[idx] ) { idx=i; } } if(idx!=0){ t=arr[0];arr[0]=arr[idx];arr[idx]=t; } idx=0; for ( i = 0; i < n; i++ ) { if ( arr[i] > arr[idx] ) { idx=i;} } if(idx!=(n-1)){ t=arr[n-1]; arr[n-1]=arr[idx]; arr[idx]=t;} } void output(int *arr,int n) { int i; for(i = 0;i < n;i++){ printf("%3d",*(arr + i)); } } `
arr[i]與arr[idx]比較大小時符號錯誤,改正後答案正確。指針
第一步:觀察函數定義。
第二步:用for循環遍歷數組,用if語句判斷遍歷數與後一個數的大小,若後一個數大於遍歷數則兩數交換。
` #include<stdio.h> void sort(int *x,int n); int main ( ) {int *p,i,a[10]; p=a; for (i=0;i<10;i++) scanf("%d",p++); p=a; sort(a,10); for(i=0;i<10;i++) printf("%4d",*p++); printf("\n"); return 0; } void sort(int *x,int n) { int j,i,t; for(j=1;j<=n-1;j++) for(i=0;i<=n-j-1;i++) if(x[i]<x[i+1]) {t=x[i]; x[i]=x[i+1]; x[i+1]=t;} } `
本題沒有問題。
第一步:觀察函數定義。
第二步:用for循環便利數組,用if語句判斷相應字符是否相等,若相等則k加一,不然返回false,以後判斷k是否等於n,相等則返回true。
` #include <stdio.h> #include <string.h> #define MAXN 20 typedef enum {false, true} bool; bool palindrome( char *s ); int main() { char s[MAXN]; scanf("%s", s); if ( palindrome(s)==true ) printf("Yes\n"); else printf("No\n"); printf("%s\n", s); return 0; } bool palindrome( char *s ) { int n = strlen(s); int i , j , k = 0; for(i = 0 ,j = n - 1;i < n; i ++,j --) { if(*(s + i) == *(s + j)){ k ++; }else{ return false; } } if(k == n){ return true; } } `
開始誤將k與n的比較放入for循環中,致使程序錯誤,放到循環外後答案正確。
第一步:觀察函數定義。
第二步:先求出長度n,以後判斷m與n的大小,若m>n則返回空數組,不然用for語句遍歷,將數組t的第m個開始的元素數值賦值給數組s,最後一個地址填入'/0'。
` #include <stdio.h> #define MAXN 20 void strmcpy( char *t, int m, char *s ); void ReadString( char s[] ); int main() { char t[MAXN], s[MAXN]; int m; scanf("%d\n", &m); ReadString(t); strmcpy( t, m, s ); printf("%s\n", s); return 0; } void strmcpy( char *t, int m, char *s ) { int n = strlen(t); int i; if(m <= n){ for(i = 0;*(t + i) != '\0';i ++){ *(s+i) = *(t + m - 1 + i); } *(s + n) = '\0'; }else{ *s = '\0'; } } `
if語句條件開始寫錯,且‘\0’表示錯誤,修改後正確。
第一步:獲取字符串並傳入函數。
第二步:用for語句遍歷,用if語句判斷遍歷字符是否爲y,z,若不是則碼值加二,如果則分別變爲a,b。
` #include<stdio.h> #define max 100 void jiami(char *); int main() { char name[max]; gets(name); jiami(name); printf("%s",name); return 0; } void jiami (char *s) { for(;*s!='\0';s++) { if(*s=='z'){ *s='b'; }else if(*s=='y'){ *s='a'; }else{ *s=*s+2; } } } `
本題沒有問題。
這兩週所學知識對我來講比較困難,目前只瞭解了指針和字符串的基本知識,對這部分的知識還須要花費時間去練習。
豐大爲 http://www.cnblogs.com/DavidPark/p/8551402.html
高立彬 http://www.cnblogs.com/gao628526/p/8551285.html
班慶澤 http://www.cnblogs.com/wsbqz/p/8641741.html