第一步:观察函数定义
第二步:进行加减运算过程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