fccjxxw.com
非常超级学习网 学习超级帮手
当前位置:首页 >> >>

2012年3月份二C改错题答案


2012 年 3 月上机改错题
1、

#include <stdio.h> #include <stdlib.h> typedef struct aa { int data; struct aa *next; } NODE; int fun ( NODE *h ) { int max=-1; NODE *p; /***********found**********/ p=h ;

p=h->next; /*h 指向的是头节点,题目要求 不要头节点, 那么我们从第 2 个结点 开始*/

while(p) { if(p->data>max ) max=p->data; /***********found**********/ p=h->next ; } return max; } outresult(int s, FILE *pf) { fprintf(pf,"\nThe max in link : %d\n",s);}

p=p->next;

/*链表中的指针后移*/

NODE *creatlink(int n, int m) { NODE *h, *p, *s; int i; h=p=(NODE *)malloc(sizeof(NODE));h->data=9999; for(i=1; i<=n; i++) { s=(NODE *)malloc(sizeof(NODE)); s->data=rand()%m; s->next=p->next; p->next=s; p=p->next; } p->next=NULL; return h;

} outlink(NODE *h, FILE *pf) { NODE *p; p=h->next; fprintf(pf,"\nTHE LIST :\n\n HEAD "); while(p) { fprintf(pf,"->%d ",p->data); p=p->next; } fprintf(pf,"\n"); } main() { NODE *head; int m; head=creatlink(12, 100); outlink(head , stdout); m=fun(head); printf("\nTHE RESULT :\n"); outresult(m, stdout); }

2、

#include <stdio.h> double fun ( int m ) { double y = 1.0 ; int i ; /**************found**************/ for(i = 2 ; i < m ; i++) /**************found**************/ y -= 1 /(i * i) ;

for(i = 2 ; i < =m ; i++) /*根据题意循环条件 是 i<=m*/ y -= 1.0 /(i * i) ; /*i 是整型 等号右边都是整 型,得到结果也是整型,我 们想要的是实型所以,要求 1 改成 1.0*/

return( y ) ; } main( ) { int n = 5 ;

printf( "\nThe result is %lf\n", fun ( n ) ) ; } 3

#include <stdio.h> #include <string.h> char* fun( char tt[] ) { int i; for( i = 0; tt[i]; i++ ) /**********found***********/ if(( 'a' <= tt[i] )||( tt[i] <= 'z' ) ) /**********found***********/ tt[i] += 32; return( tt ); }

if(( 'a' <= tt[i] )&&( tt[i] <= 'z' ) ) 这个地方是并且,用 &&*/ tt[i] -= 32; /*小写变大写是减去 32*/

/*很明显,

main( ) { char tt[81]; printf( "\nPlease enter a string: " ); gets( tt ); printf( "\nThe result string is:\n%s", fun( tt ) ); } 4

#include <math.h> #include <stdio.h>

float fun ( float num ) { int s ; float n, t, pi ; t = 1 ; pi = 0 ; n = 1 ; s = 1 ; /**************found**************/ while(t >= num)

while(fabs(t) >= num) /*这里的 t 可能会是负数, 所以要取绝对值 用函 数 fabs() 来实现*/

{ pi = pi + t ; n=n+2; s = -s ; /**************found**************/ t=s%n; } pi = pi * 4 ; return pi ; } main( ) { float n1, n2 ; printf("Enter a float number: ") ; scanf("%f", &n1) ; n2 = fun(n1) ; printf("%6.4f\n", n2) ; }

t=s/n;

/*这里对应题目是除法*/

5

#include <stdio.h> int fun(int *x,int y) { int t ; /**************found**************/ t=x;x=y;

t=*x;

*x=y; /*这里的 x 是指针变量,

可以通过 间址运算符 * 来运算 , *x 就是 变量 a */ /**************found**************/ return(y) ; return t; /*返回的值给变量 b ,应 是原来 a 的内容 ,也就是 *x 的内容*/

} main() { int a = 3, b = 8 ; printf("%d %d\n", a, b) ; b = fun(&a, b) ; printf("%d %d\n", a, b) ; }

6

#include <stdio.h> void fun (long s, long *t) { int d; long sl=1; /************found************/ t = 0; while ( s > 0) { d = s%10; /************found************/ if (d%2 == 0) { *t = d * sl + *t; sl *= 10; } s /= 10; } } main()

*t=0;

/*

t 是指针变量

*/

if (d%2 != 0)

/*这里应该是留下奇数*/

{ long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); }

7

#include <stdio.h> int fun(int a,int b) { int r,t; if(a<b) { /************found************/ t=a; b=a; a=t; } r=a%b; while(r!=0) { a=b; b=r; r=a%b; } /************found************/ return(a); return (b); /*这里 b 存放的最大公约数*/ } main() { int num1, num2,a; printf("Input num1 num2: "); scanf("%d%d",&num1,&num2); printf("num1= %d num2= %d\n\n",num1,num2); a=fun(num1,num2); printf("The maximun common divisor is %d\n\n",a); }

8

#include <stdio.h> /**************found**************/ fun (int n )

double fun (int n ) /*根据函数被使用的类 型,或者返回值得到 函数类型是 double */

{

int a = 2, b = 1, c, k ; double s=0.0 ; for ( k = 1; k <= n; k++ ) { s = s + 1.0 * a / b ; /**************found**************/ c = a; a += b; b += c; c = a; a += b; b = c; /*根据题目要求来, 看出来 b =c*/ } return(s) ; } main( ) { int n = 5 ; printf( "\nThe value of function is: %lf\n", fun ( n ) ) ; }

9

#include <stdio.h> #define N 10 int findmid(int a, int b, int c)

{ int t; t = (a>b)?(b>c?b:(a>c?c:a)):((a>c)?a:((b>c)?c:b)); /**********found**********/ return b; retrun t; /*算了好久,算出来的 t ,当然是返回 t 啦*/ } void fun(int x[]) { int i,a,b,c,t[N]; /**********found**********/ for(i=0;i<N;i++) t[i]=x[i] for(i=0;i<N;i++) t[i]=x[i]; /*C 语言语句最后要分 号结束*/ for(i=0;i<N-2;i++) { a=t[i];b=t[i+1];c=t[i+2]; /**********found**********/ t[i+1]=findmid(a,b,c); x[i+1]=findmid(a,b,c); /*最终结果要放在 x 数组中*/ } } main() { int i, x[N]={6,5,7,23,18,5,8,21,45,38}; for(i=0; i<N; i++) printf("%d ",x[i]); printf("\n"); fun(x); for(i=0; i<N; i++) printf("%d ",x[i]); printf("\n"); } 10

#include <stdio.h> /************found************/ void fun (long s, long t)

void fun (long s, long * t) /*这里的 t 是指 针变量,应该定义的时候有 * */

{

long sl=10; s /= 10; *t = s % 10; /************found************/ while ( s < 0)

while ( s >0) /*很明显,这里的条件不对嘛*/

{ s = s/100; *t = s%10*sl + *t; sl = sl * 10; } } main() { long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); }

11

#include <stdio.h> int fun ( int m ) { int k = 2; while ( k <= m && (m%k)) /************found************/ k++ /************found************/ if (m = k ) return 1; else return 0; } main( ) { int n; printf( "\nPlease enter n: " ); scanf( "%d", &n ); if ( fun ( n ) ) printf( "YES\n" ); else printf( "NO!\n" ); }

k++;

/*语句少了 分号*/

if (m == k ) /*这里是比较,不是赋值,要用 == 是两个等号*/

12

#include <stdio.h> int fun(int m) { int i, k ; for (i = m + 1 ; ; i++) { for (k = 2 ; k < i ; k++) /**************found**************/ if (i % k != 0) break ; /**************found**************/ if (k < i)

if (i % k == 0) /*这里是能被整除的 时候 break*/

if (k >= i) /*内层的 for 循环的条 件 不 是 break 结 束 也就是从来没有被整 除过,最后得到的是 素数*/

return(i); } } void main() { int n ; n = fun(20) ; printf("n=%d\n", n) ; }

13

#include <stdio.h>

int fun(double x[], int n) { /************found************/ int j, c=0, double xa=0.0; for (j=0; j<n; j++ ) xa += x[j]/n; printf("ave =%f\n",xa); for (j=0; j<n; j++ ) /************found************/ if (x[j] => xa) c++; return c; }

int j, c=0; double xa=0.0; /*定义完一种类型 之后,应该以分号结束 */

if (x[j] >= xa) /*大于等于 的符号怎么 写,一定看清楚了哦*/

main ( ) { double x[100] = {193.199, 195.673, 195.757, 196.051, 196.092, 196.596, 196.579, 196.763}; printf("%d\n", fun (x, 8)); } 14

#include <stdio.h> void fun(char *s) { int i,j; for(i=0,j=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') /**********found**********/ s[j]=s[i];

s[j++]=s[i]; /*s[j] 被赋值了之后,j 要++运算,以便 s[j]是下一个元素*/

/**********found**********/ s[j]="\0"; s[j]=’\0’; /*这里是字符 0 不是字符串 0*/ } main() { char item[80]; printf("\nEnter a string : ");gets(item); printf("\n\nThe string is : \"%s\"\n",item); fun(item); printf("\n\nThe string of changing is : \"%s\"\n",item );

} 15

#include <conio.h> #include <stdio.h> #define M 10 int a[M][M] = {0} ; /**************found**************/ void fun(int **a, int m)

void fun(int a[M][M], int m) /*这里定义变量 能够接受具体二维数组 a[M][M] ,如果不知道怎 么定义,直接照抄数组原来 的定义都可以*/

{ int j, k ; for (j = 0 ; j < m ; j++ ) for (k = 0 ; k < m ; k++ ) /**************found**************/ a[j][k] = k * j ;

a[j][k] = (k +1)* (j+1) ; /*这里是根据题目要 求, 大家可以算出来第一个数字应该怎么得 到*/

} main ( ) { int i, j, n ; printf ( " Enter n : " ) ; scanf ("%d", &n ) ; fun ( a, n ) ; for ( i = 0 ; i < n ; i++) { for (j = 0 ; j < n ; j++) printf ( "%4d", a[i][j] ) ; printf ( "\n" ) ; } }

16

#include <stdio.h> long fun(int g) { /**********found**********/ switch(g); { case 0: return 0; /**********found**********/ case 1 ;case 2 : return 1 ; } return( fun(g-1)+fun(g-2) );

switch(g) /*switch()

后面没有分号*/

case 1 : case 2 : return 1 ; /*case 1 后面应该 冒号 case 之后必须有冒号 */

} main() { long fib; int n; printf("Input n: "); scanf("%d",&n); printf("n = %d\n",n); fib=fun(n); printf("fib = %d\n\n",fib); } 17

#include <stdio.h> double fun( double q ) { int n; double s,t; n = 2; s = 2.0; while (s<=q) {

t=s; /************found************/ s=s+(n+1)/n;

s=s+(n+1.0)/n; /*这里的 n 是整形,(n+1)/n 得到的 结果也肯定是整形,而我们要得到实 型/

n++; } printf("n=%d\n",n); /************found************/ return s;

return t ; /*如果是 return s 根据循环条件会多 加了一项 所以返回时加最后之前的 t */

} main ( ) { printf("%f\n", fun(50)); } 18

#include <stdio.h> int fun( int k ) { int m=0, mc=0 ; while ((k >= 2) && (mc < 10)) { /************found************/ if ((k%13 = 0) || (k%17 = 0))

if ((k%13 == 0) || (k%17 = =0)) /*这里是比 较不是赋值,所以用两个连续的等号 ==*/

{ m = m+ k; mc++; } k--; } return m; /************found************/ _____ main ( ) {

} /*函数体结束的时候用 } 结束*/

printf("%d\n", fun (500)); } 19

#include <stdio.h> #define N 10 /************found************/ void fun(int a[], int m )

int fun(int a[], int m ) /* 根据 主函数调用 fun 函数的,可以看到 要求 fun 函数返回的是个 int 型*/

{ int low=0,high=N-1,mid; while(low<=high) { mid=(low+high)/2; if(m<a[mid]) high=mid-1; /************found************/ else If(m > a[mid]) low=mid+1; else return(mid); } return(-1); } main() { int i,a[N]={-3,4,7,9,13,45,67,89,100,180 },k,m; printf("a 数组中的数据如下:"); for(i=0;i<N;i++) printf("%d ", a[i]); printf("Enter m: "); scanf("%d",&m); k=fun(a,m); if(k>=0) printf("m=%d,index=%d\n",m,k); else printf("Not be found!\n"); }

else if(m > a[mid]) /*这里的 if 是关 键字 ,关键字必须全部小写*/

20

#include <stdio.h> #include <string.h> #define MAXLINE 20 fun ( char *pstr[6]) { int i, j ; char *p ; for (i = 0 ; i < 5 ; i++ ) { /**************found**************/ for (j = i + 1, j < 6, j++) { if(strcmp(*(pstr + i), *(pstr + j)) > 0) { p = *(pstr + i) ; /**************found**************/ *(pstr + i) = pstr + j ; *(pstr + i) = *(pstr + j) /* pstr + j 是地址, 要通过 * 运算符 取得这个地址对应的内容*/ *(pstr + j) = p ; } } } } main( ) { int i ; char *pstr[6], str[6][MAXLINE] ; for(i = 0; i < 6 ; i++) pstr[i] = str[i] ; printf( "\nEnter 6 string(1 string at each line): \n" ) ; for(i = 0 ; i < 6 ; i++) scanf("%s", pstr[i]) ; fun(pstr) ; printf("The strings after sorting:\n") ; for(i = 0 ; i < 6 ; i++) printf("%s\n", pstr[i]) ; } 21

for (j = i + 1;j < 6; j++) /*for 循环里面必须是 2 个分号,这是格式,必须记牢*/

#include <stdio.h> void fun(char *p, char *b) { int i, k=0; while(*p) { i=1; while( i<=3 && *p ) { /**********found**********/ b[k]=p; k++; p++; i++; } if(*p)

b[k]=p; /*

p 是指针变量 ,要取得内容,要使用 * 运算符*/

{ /**********found**********/ b[k++]=" "; b[k++]=’ ’; /*空格字符就是单引号里面的一个空格*/ } } b[k]='\0'; } main() { char a[80],b[80]; printf("Enter a string: "); gets(a); printf("The original string: "); puts(a); fun(a,b); printf("\nThe string after insert space: "); puts(b); printf("\n\n"); } 22

#include <stdio.h> #include <math.h>

/************found************/ f( double x) { if (x == 0.0 || x == 2.0) return 0.0; else if (x < 0.0) return (x -1)/(x-2); else return (x +1)/(x-2); } double fun( int n ) { int i; double s=0.0, y; for (i= -n; i<=n; i++) {y=f(1.0*i); s += y;} /************found************/ return s } main ( ) { printf("%f\n", fun(5) ); }

double f( double x) /*根据函数被调用地 方决定函数的类型 这里是 double */

return s ; /*return 语句后面必须有分号 (少了分号 了,看到没有啊)*/

23

#include <stdio.h> #include <math.h> int fun( int high ) { int sum = 0, n=0, j, yes; /************found************/ while ((high >= 2) && (n < 10) while ((high >= 2) && (n < 10)) /*while 最后少了个 ) 有没有注意到。。。*/ 。。

{ yes = 1; for (j=2; j<=high/2; j++ ) if (high % j ==0 ){ /************found************/ yes=0; break } if (yes) { sum +=high; n++; } high--; } return sum ; } main ( ) { printf("%d\n", fun (100)); } 24

yes=0; break ; /*break 注意到了吧*/

后面少个分号,应该

#include <stdio.h> #include <math.h> /************found************/ void fun( int k ) { int n; double s, w, p, q; n = 1; s = 1.0; while ( n <= k ) { w = 2.0 * n; p = w - 1.0; q = w + 1.0; s = s * w *w/p/q; n++; } /************found************/ return s

double fun( int k ) /*说到不想说了,函 数的类型就是被调用处的类型*/

return s ; /*return

语句后面又少了分号*/

} main ( ) { printf("%f\n", fun (10)); } 25

#include <stdio.h> int fun (char *str,char *substr) { int i,j,k,num=0; /************found************/ for(i = 0, str[i], i++) for(j=i,k=0;substr[k]==str[j];k++,j++) /************found************/ If(substr[k+1]=='\0') { num++; break; } return num; } main() { char str[80],substr[80]; printf("Input a string:") ; gets(str); printf("Input a substring:") ; gets(substr); printf("%d\n",fun(str,substr)); } 26

for(i = 0;str[i];i++) /*for 语句中有 2 个 分号,一定记住,格式背下来*/

if(substr[k+1]=='\0') /*if 是关键字, 关键 字必须都是小写字母*/

#include <stdio.h> #define SIZE 20 fun(double *s, double *w) { int k,i; double sum; for(k=2,i=0;i<SIZE;i++) { s[i]=k; k+=2; } /**********found**********/ sun=0.0; for(k=0,i=0;i<SIZE;i++) { sum+=s[i]; /**********found**********/ if(i+1%5==0)

sum=0.0; /* sum 不是 sun ,看清变量的名 字 (纯粹是陷阱啊。。。 )*/ 。。

if((i+1)%5==0) /*这里要加个括号,因为 (i+1) 求余才是每 5 个求平均数操 %5 作*/

{

w[k]=sum/5; sum=0; k++; }

} return k; } main( ) { double a[SIZE],b[SIZE/5]; int i, k; k = fun(a,b); printf("The original data:\n"); for(i=0; i<SIZE; i++) { if(i%5==0) printf("\n"); printf("%4.0f", a[i]); } printf("\n\nThe result :\n"); for(i=0; i<k; i++) printf("%6.2f ",b[i]); printf("\n\n"); }

27

#include <stdio.h> #define M 5 /************found************/ int fun(int n, int xx[][])

int fun(int n, int xx[][M]) /*对具体 二维数组引用的时候的定义的方法之一, 后面 中括号中的数字不能省略*/

{ int i, j, sum=0; printf( "\nThe %d x %d matrix:\n", M, M ); for( i = 0; i < M; i++ ) { for( j = 0; j < M; j++ ) /************found************/ printf( "%f ", xx[i][j] ); printf("\n"); } for( i = 0 ; i < n ; i++ ) sum += xx[i][i]+xx[i][ n-i-1 ]; return( sum ); }

printf( "%d ", xx[i][j] ); /*看清楚输出格式 要对应好,xx 数组是 int 型的*/

main( ) { int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0}, {6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}}; printf ( "\nThe sum of all elements on 2 diagnals is %d.",fun( M, aa )); } 28

#include <stdio.h> #include <string.h> /************found************/ void fun (char s, char t)

void fun (char *s, char *t) /*形参接收一维数组时, 可

以用指针变量接收*/ { int i, d; d = strlen(s); for (i = 0; i<d; i++) t[i] = s[i]; for (i = 0; i<d; i++) t[d+i] = s[d-1-i]; /************found************/ t[2*d-1] = '\0'; }

t[2*d] = '\0'; /*最后加’\0’的位置要算清楚*/

main() { char s[100], t[100]; printf("\nPlease enter string S:"); scanf("%s", s); fun(s, t); printf("\nThe result is: %s\n", t); } 29

#include <stdio.h> #include <stdlib.h> typedef struct aa { int data; struct aa *next; }NODE; int fun(NODE *h) { int sum = 0 ; NODE *p; /***********found**********/ p=h; p=h->next ; /*根据题目要求,不包含头结点,也就是 说 我们要从第二个结点开始*/ while(p) { if(p->data%2==0) sum +=p->data; /***********found**********/ p=h->next; p=p->next; /*这里的 p=p->next 是指针后移,相当于 数组里的 p++,不过这里是非线性的存储结构,所 以只能这么用,背下来吧,抽到链表一定考的地方 */ } return sum;

} NODE *creatlink(int n) { NODE *h, *p, *s; int i; h=p=(NODE *)malloc(sizeof(NODE)); for(i=1; i<=n; i++) { s=(NODE *)malloc(sizeof(NODE)); s->data=rand()%16; s->next=p->next; p->next=s; p=p->next; } p->next=NULL; return h; } outlink(NODE *h, FILE *pf) { NODE *p; p = h->next; fprintf(pf ,"\n\nTHE LIST :\n\n HEAD " ); while(p) { fprintf(pf ,"->%d ",p->data ); p=p->next; } fprintf (pf,"\n"); } outresult(int s, FILE *pf) { fprintf(pf,"\nThe sum of even numbers : %d\n",s);} main() { NODE *head; int even; head=creatlink(12); head->data=9000; outlink(head , stdout); even=fun(head); printf("\nThe result :\n"); outresult(even, stdout); }

30

#include <stdio.h> long fun (int a, int n) { int j ; /**************found**************/ long s = 0, t = 1 ; long s = 0, t = 0 ; /*把 t 带进去算第一次循环就能 确定其初值是多少*/ for ( j = 0 ; j < n ; j++) t = t * 10 + a ; s=t; for ( j = 1 ; j < n ; j++) { /**************found**************/ t = t % 10 ; t=t/10; /*根据题目要求得到的, 每次 t 都变小一 位数*/ s=s-t; } return(s) ; } main( ) { int a, n ; printf( "\nPlease enter a and n:") ; scanf( "%d%d", &a, &n ) ; printf( "The value of function is: %ld\n", fun ( a, n ) ); } 31

#include <stdio.h> #include <math.h> #include <stdlib.h> /************found************/ #define FU(m,n) (m/n)

#define FU(m,n) ((m)/(n)) /*#define 这种宏替换是原样替换的,所以 m 相 当于 a+b ,两边要有括号*/

float fun(float a,float b,float c) { float value; value=FU(a+b,a-b)+FU(c+b,c-b); /************found************/

Return(Value);

return(value); /*注意大小写*/

} main() { float x,y,z,sum; printf("Input x y z: "); scanf("%f%f%f",&x,&y,&z); printf("x=%f,y=%f,z=%f\n",x,y,z); if (x==y||y==z){printf("Data error!\n");exit(0);} sum=fun(x,y,z); printf("The result is : %5.2f\n",sum); } 32

#include <stdio.h> #include <string.h> void fun( char t[] ) { char c; int i, j; /**********found***********/ for( i = strlen( t ); i; i-- )

for( i = strlen( t ); i>0; i-- )

/*循环应该有结束条件,否则 就是死循环了*/

for( j = 0; j < i; j++ ) /**********found***********/ if( t[j] < t[ j + 1 ] ) if( t[j]> t[ j + 1 ] ) /*根据题目要求排序,应该是从小到大*/ { c = t[j]; t[j] = t[ j + 1 ]; t[j + 1 ] = c; } } main() { char s[81]; printf( "\nPlease enter a character string: " ); gets( s );

printf( "\n\nBefore sorting:\n \"%s\"", s ); fun( s ); printf( "\nAfter sorting decendingly:\n \"%s\"\n", s ); } 33

#include <stdio.h> double fun ( int x[]) { /************found************/ int sum = 0.0; int c=0, i=0; while (x[i] != 0) { if (x[i] > 0) { sum += x[i]; c++; } i++; } /************found************/ sum \= c; return sum; }

double sum = 0.0; /*这里的 sum 应该是 double 型*/

sum /= c;

/*除号等号是怎么写,认真看清楚*/

main( ) { int x[1000]; int i=0; printf( "\nPlease enter some data (end with 0): " ); do { scanf("%d", &x[i]); } while (x[i++] != 0); printf("%f\n", fun ( x )); } 34

#include <stdio.h> #include <stdlib.h> #include <string.h> int fun( char *p ) { int n; /**********found**********/ n= *P-'o';

n= *p-'0'; /*这里小心改两个地方哦,一是大 写 P 改成小写 p 二是 ‘o’改成’0’ 也就是字符 o 改成字符 0*/

p++; while( *p!=0 ) { /**********found**********/ n=n*8+*P-'o'; p++; } return n; } main() { char s[6]; int i; int n; printf("Enter a string (Ocatal digits): "); gets(s); if(strlen(s)>5){ printf("Error: String too longer !\n\n");exit(0); } for(i=0; s[i]; i++) if(s[i]<'0'||s[i]>'7') { printf("Error: %c not is ocatal digits!\n\n",s[i]);exit(0); } printf("The original string: "); puts(s); n=fun(s); printf("\n%s is convered to integer number: %d\n\n",s,n); } 35

#include <stdio.h> #include <ctype.h> void fun (char *s)

{ /**********found***********/ while(*s!='@') while(*s!='\0') /*循环的结束条件是*s== ‘\0’*/ { if(*s>='A' && *s<='Z' || *s>='a' && *s<='z') { if(*s=='Z') *s='A'; else if(*s=='z') *s='a'; else *s += 1; } /**********found***********/ (*s)++; s++ /*指针后移*/ } } main() { char s[80]; printf("\n Enter a string with length < 80. :\n\n "); gets(s); printf("\n The string : \n\n "); puts(s); fun ( s ); printf ("\n\n The Cords :\n\n "); puts(s); } 36

#include <stdio.h> /************found************/ fun ( n )

int fun (n) /*函数类型就是被调用处返回什么类型, 函数就是什么类型,若无返回,则是 void 类型*/

{ int c; /************found************/ if(n=1) c = 10 ; else c= fun(n-1)+2; return(c); } main() { int

if(n==1) /*这里是比较, 不是赋值, 用两个连 续等号 == 来运算*/

n;

printf("Enter n : "); scanf("%d",&n); printf("The result : %d\n\n", fun(n)); }

37

#include <stdio.h> void fun( int *s, int n ) { /**********found**********/ int i, one=0, zero ; for(i=0; i<n; i++) /**********found**********/ switch( s[i] ); { /**********found**********/ case 0 : zero++;

int i, one=0, zero=0 ; /*zero 要赋初值 0 ,因 为要统计个数做++运算*/

case 0 : zero++; break; /*如果没有 break , 统计 完了 0 的个数, 还要继续运行 case 1 的语句, 使 用 break 可以直接结束 switch 结构*/

case 1 : one ++; zero : %d\n", one, zero); } main() { int a[20]={1,1,1,0,1,0,0,0,1,0,0,1,1,0,0,1,0,1,0,0}, n=20; fun( a, n ); } 38 } printf( "one : %d

#include <stdio.h> double fun ( int n )

{ double result = 1.0 ; /************found************/ if n = = 0 if (n = = 0) /*if 后面有( )这个格式必须记住,切记*/ return 1.0 ; while( n >1 && n < 170 ) /************found************/ result *= n-result *= n-- ; /*C 语言语句丢失分号*/ return result ; } main ( ) { int n ; printf("Input N:") ; scanf("%d", &n) ; printf("\n\n%d! =%lf\n\n", n, fun(n)) ; } 39

#include <stdio.h> #include <string.h> #define N 80 void fun(char *s, char t[]) { int i, j=0; for(i=0; i<(int)strlen(s); i++) /***********found**********/ if(i%2 && s[i]%2==0)

if(i%2 || s[i]%2==0) /*题目要求是或,用 || 这个 符号来或运算 , 不知道键盘上怎么输入的, 赶紧来找老师*/

t[j++]=s[i]; /***********found**********/ t[i]='\0';

t[j]='\0'; /*这里 j 作为新的下标,来存放符合题 目要求的数字*/

} main() { char s[N], t[N]; printf("\nPlease enter string s : "); gets(s); fun(s, t); printf("\nThe result is : %s\n",t); }

40

#include <stdio.h> #include <math.h> /************found************/ fun(int n) { double sum, s0, s1, s2, s; int k; sum = 1.0; if (n <= 2) sum = 0.0; s0 = 0.0; s1 = 0.0; s2 = 1.0; for (k = 4; k <= n; k++) { s = s0 + s1 + s2; sum += sqrt(s); s0 = s1; s1 = s2; s2 = s; } /************found************/ return sum } main ( ) { int n; printf("Input N="); scanf("%d", &n); printf("%f\n", fun(n) ); } 41

double fun(int n) /*函数类型就是被调用处的返 回类型*/

return sum ; /*丢失分号*/

#include <stdio.h> /************found************/ fun (char a)

fun(char *a) 一维数组的参数形式

{ if ( *a ) { fun(a+1) ; /************found************/ printf("%c" *a) ; } } main( ) { char s[10]="abcd"; printf("处理前字符串=%s\n 处理后字符串=", s); fun(s); printf("\n") ; }

printf("%c", *a) ; 双引号后面丢了逗号

42

#include <stdio.h> long fun (long num) { /************found************/ long k; do { k*=num%10 ; /************found************/ num\=10 ; } while(num) ; return (k) ; }

long k=1; 要有初值

num/=10 ; 除号的写法

main( ) { long n ; printf("\nPlease enter a number:") ; scanf("%ld",&n) ; printf("\n%ld\n",fun(n)) ; }

43 给定程序的功能是将十进制正整数 m 转换成 k 进制(2≤k≤9)数的数字输出。

例如,若输入 8 和 2,则应输出 1000(即十进制数 8 转换成二进制表示是 1000) 。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! #include <conio.h> #include <stdio.h> void fun( int m, int k ) { int aa[20], i; for( i = 0; m; i++ ) { /**********found**********/ aa[i] = m/k; m /= k; } for( ; i; i-- ) /**********found**********/ printf( "%d", aa[ i ] );

aa[i] = m%k; 求余数 ,因为下面 有求商的运算了

printf( "%d", aa[ i-1 ] ); 输出的时候,从 哪里开始,自己比较下 ,数组最后个 数是 0,所以从倒数第二个开始输出

} main() { int b, n; printf( "\nPlease enter a number and a base:\n" ); scanf( "%d %d", &n, &b ); fun( n, b ); printf("\n"); }
44

给定程序 MODI1.C 中函数 fun 的功能是:从 n(形参)个学生的成绩中统 计出低于平均分的学生人数,此人数由函数值返回,平均分存放在形参 aver 所 指的存储单元中。 例如:若输入 8 名学生的成绩:80.5 60 72 90.5 98 52.5 88 64 则低于 平均分的学生人数为:4(平均分为:75.5625) 。 请改正程序中的错误,使程序得出正确的结果。 注意:不要改动 main 函数,不得删行或增行,也不得更改程序的结构!

#include <stdio.h> #define N 20 int fun ( float *s, int n, float *aver ) { float ave, t = 0.0 ; int count = 0, k, i ; for ( k = 0 ; k < n ; k++ ) /**************found**************/ t = s[k] ; ave = t / n ; for ( i = 0 ; i < n ; i++ ) if ( s[ i ] < ave ) count++ ; /**************found**************/ *aver = Ave ; return count ; } main() { float s[30], aver ; int m, i ;

t += s[k] ;

累加和

*aver = ave ;

大小写

printf ( "\nPlease enter m: " ) ; scanf ("%d", &m ) ; printf ( "\nPlease enter %d mark :\n ", m ) ; for( i = 0 ; i < m ; i++ ) scanf ( "%f", s + i ) ; printf( "\nThe number of students : %d \n" , fun ( s, m, &aver ) ); printf( "Ave = %f\n", aver ) ; }
45

给定程序 MODI1.C 中函数 fun 的功能是:求 S 的值。
S? 12 42 62 ( 2k ) 2 ? ? ? ?? 1? 3 3 ? 5 5 ? 7 (2k ? 1)( 2k ? 1)

例如:当 k 为 10 时,函数值应为:1.533852。 请改正程序中的错误,使程序得出正确的结果。 注意:不要改动 main 函数,不得删行或增行,也不得更改程序的结构! #include <stdio.h> #include <math.h> /************found************/ void fun( int k ) { int n; float s, w, p, q; n = 1;

float fun( int

k ) 函数类型

s = 1.0; while ( n <= k ) { w = 2.0 * n; p = w - 1.0; q = w + 1.0; s = s * w *w/p/q; n++; } /************found************/ return s }

return

s; 丢分号

main ( ) { printf("%f\n", fun (10)); } 46 给定程序 modi1.c 中函数 fun 的功能是:根据以下式求 ? 值,并作为函数值返 回。 例如:给指定精度的变量 eps 输入 0.0005 时,应当输出 Pi=3.140578。 ? 1 1 2 1 2 3 1 2 3 4 ? 1 ? ? ? ? ? ? ? ? ? ? ? ?? 2 3 3 5 3 5 7 3 5 7 9 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数。不得增行或删行,也不得更改程序的结构! #include <math.h> #include <stdio.h> double fun(double eps) { double s,t; int n=1; s=0.0; /************found************/ t=0; t=1; 如果是 t=0 那么 while 循环就不 能运行了 while( t>eps) { s+=t; t=t * n/(2*n+1); n++; } /************found************/ return(s); return(2*s); 这里是 2*s 看题目 } main() { double x; printf("\nPlease enter a precision: "); scanf("%lf",&x); printf("\neps=%lf, Pi=%lf\n\n",x,fun(x));

}

47

#include <stdio.h> /************found************/ int fun ( int n ) { float A=1; int i; /************found************/ for (i=2; i<n; i++) A = 1.0/(1+A); return A ; } main( ) { int n ; printf("\nPlease enter n: ") ; scanf("%d", &n ) ; printf("A%d=%f\n", n, fun(n) ) ; }

float

fun ( int n ) 函数类型

for (i=2; i<=n; i++)

取值范围

48

给定程序 modi1.c 中,函数 fun 的功能是: 比较两个字符串,将长的那个字符 串的首地址作为函数值返回。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! #include <stdio.h> /**********found**********/ char fun(char *s, char *t) char *fun(char *s, char *t) 函数类型 { int sl=0,tl=0; char *ss, *tt; ss=s; tt=t; while(*ss)

{ sl++; /**********found**********/ (*ss)++; ss++; 指针移动 } while(*tt) { tl++; /**********found**********/ (*tt)++; tt++; 指针移动 } if(tl>sl) return t; else return s; } main() { char a[80],b[80],*p,*q; int i; printf("\nEnter a string : "); gets(a); printf("\nEnter a string again : "); gets(b); printf("\nThe longer is :\n\n\"%s\"\n",fun(a,b)); }
49

给定程序modi.c功能是: 读入一个英文文本行,将其中每个单词的第一个字母改 成大写,然后输出此文本行(这里的"单词"是指由空格隔开的字符串) 。 例如,若输入:I am a student to take the examination., 则应输出:I Am A Student To Take The Examination.。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include <ctype.h> #include <string.h>

/************found************/ include <stdio.h> /************found************/ upfst ( char p )

#include <stdio.h> 说,格式,记住

这里都不想

upfst ( char *p ) 这里的函数 参数是用来接收传来的数组名, 所以是指针类型

{ int k=0; for ( ; *p; p++ ) if ( k )

{ if ( *p == ' ' ) k = 0; } else if ( *p != ' ' ) { k = 1; *p = toupper( *p ); } } main( ) { char chrstr[81]; printf( "\nPlease enter an English text line: " ); printf( "\n\nBefore changing:\n %s", chrstr ); upfst( chrstr ); printf( "\nAfter changing:\n %s\n", chrstr ); }
50

gets( chrstr );

#include <stdio.h> fun ( char *s, int num[5] ) { int k, i=5; for ( k = 0; k<i; k++ ) /**********found**********/ num[i]=0; for (; *s; s++) { i = -1; /**********found**********/ switch ( s ) { case 'a': case 'A': {i=0; break;} case 'e': case 'E': {i=1; break;} case 'i': case 'I': {i=2; break;} case 'o': case 'O': {i=3; break;} case 'u': case 'U': {i=4; break;} } if (i >= 0) num[i]++; } }

num[k]=0;

k 一直在改变

switch (*s )

s 是指针

main( ) { char s1[81]; int num1[5], i; printf( "\nPlease enter a string: " ); gets( s1 );

fun ( s1, num1 ); for ( i=0; i < 5; i++ } 51

) printf ("%d ",num1[i]); printf ("\n");

#include <stdio.h> #define N 100 int fun(int *s, int n) { int i,j,k,a,b,c; j=0; for(i=100; i<n; i++) { /**************found**************/ k=n;

k=i; 这里 i 是从 100 开始变 化的,n 的值没有变化,n 是范 围的上界

a=k%10; k/=10; b=k%10; k/=10; /**************found**************/ c=k%10 c=k%10; 丢了分号 if( a==b && a==c ) s[j++]=i; } return j; } main() { int a[N], n, num=0, i; do { printf("\nEnter n( <=1000 ) : "); scanf("%d",&n); } while(n > 1000); num = fun( a,n ); printf("\n\nThe result :\n"); for(i=0; i<num; i++)printf("%5d",a[i]); printf("\n\n"); }

52

#include <stdio.h> int fun( int *b ) { int k,a1,a2,i=0; for(k=10; k<=55; k++) { /************found************/ a2=k/1O;

a2=k/10; 10 后面的 数字 0 写成了英文字 母o

a1=k-a2*10; if((k%3==0 && a2==5)||(k%3==0 && a1==5)) { b[i]=k; i++; } } /************found************/ return k;

return i; 这里返回 的是个数,所以正好 是数组的下标

} main( ) { int a[100],k,m; m=fun( a ); printf("The result is :\n"); for(k=0; k<m; k++) printf("%4d",a[k]); printf("\n"); } 53

#include <stdio.h> int fun(unsigned n, int *zero) { int count=0,max=0,t; do { t=n%10; /**************found**************/ if(t=0)

t==0 这里是等于,不是赋值

count++; if(max<t) max=t; n=n/10; }while(n); /**************found**************/ zero=count; return max;

zero 是指针变量,前面加*运算 正好是主函数 zero 变量

} main() { unsigned n; int zero,max; printf("\nInput n(unsigned): "); scanf("%d",&n); max = fun( n,&zero ); printf("\nThe result: max=%d zero=%d\n",max,zero); } 54

#include <stdio.h> #define N 20 int fun(int *a,int n,int x) { int p=0,i; a[n]=x; while( x!=a[p] ) p=p+1; /**********found**********/ if(P==n) return -1;

if(p==n) return -1;这 里的 p 应该是小写 字母

else { for(i=p;i<n-1;i++) /**********found**********/ a[i+1]=a[i]; a[i]=a[i+1]; 删 除 的时候,应该是后 面的元素,覆盖前 面的元素 return n-1; } }

main() { int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i; n=10; printf("The original data :\n"); for(i=0;i<n;i++) printf("%5d",w[i]); printf("\nInput x (to delete): "); scanf("%d",&x); printf("Delete : %d\n",x); n=fun(w,n,x); if ( n==-1 ) printf("***Not be found!***\n\n"); else { printf("The data after deleted:\n"); for(i=0;i<n;i++) printf("%5d",w[i]);printf("\n\n"); } } 55

#include <stdio.h> #include <stdlib.h> void fun ( int n, int *a ) { int i, j, p, t; for ( j = 0; j<n-1 ; j++ ) { p = j; /************found************/ for ( i=j+1; i<n-1 ; i++ )

for ( i=j+1; i<n; i++ ) i 的取值范 围是应该到最后一个数的, 上面 的 j 可以不用排最后一个数的序

if ( a[p]>a[i] ) /************found************/ t=i; if ( p!=j ) { t = a[j]; a[j] = a[p]; a[p] = t; } } } void putarr( int n, int *z ) { int i; for ( i = 1; i <= n; i++, z++ ) { printf( "%4d", *z ); if ( !( i%10 ) ) printf( "\n" );

p 是最小的数字的下标

} printf("\n"); } main() { int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11; printf( "\n\nBefore sorting %d numbers:\n", n ); putarr( n, aa ); fun( n, aa ); printf( "\nAfter sorting %d numbers:\n", n ); putarr( n, aa ); } 56

#include <stdio.h> /************found************/ IsPrime ( int n ); { int i, m; m = 1; for ( i = 2; i < n; i++ ) /************found************/ if !( n%i ) { m = 0; return ( m ); } break ; }

IsPrime ( int n ) 函数首部后面没有分号

if ( !( n%i )) if 后面的条件 要用 ()都括起来

main( ) { int j, k; printf( "\nPlease enter an integer number between 2 and 10000: " ); scanf( "%d", &k ); printf( "\n\nThe prime factor(s) of %d is( are ):", k ); for( j = 2; j <= k; j++ ) if( ( !( k%j ) )&&( IsPrime( j ) ) ) printf( "\n %4d", j ); printf("\n"); }

58

#include <stdio.h> #include <string.h> void fun (char *s, char *t1, char *t2 , char *w) { char *p , *r, *a; strcpy( w, s ); while ( *w ) { p = w; r = t1; /************found************/ while ( r )

while ( *r ) 这里 r 是指 针, 根据题意, 这里是 条件是当 r 所指向的 空间内容不是’\0’的时 候执行循环

if ( *r == *p ) { r++; p++; } else break; if ( *r == '\0' ) { a = w; r = t2; while ( *r ){ /************found************/ *a = *r; a++; r++ } w += strlen(t2) ; } else w++; } } main() { char s[100], t1[100], t2[100], w[100]; printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring t1:"); scanf("%s", t1); printf("\nPlease enter substring t2:"); scanf("%s", t2);

*a = *r; a++; r++;

丢分号了

if ( strlen(t1)==strlen(t2) ) { fun( s, t1, t2, w); printf("\nThe result is : %s\n", w); } else printf("Error : strlen(t1) != strlen(t2)\n"); }

58

#include <stdio.h> /************found************/ fun(int x, y, z ) { int j,t ,n ,m; j=1; t=j%x; m=j%y ; n=j%z; while(t!=0||m!=0||n!=0) { j = j+1; t=j%x; m=j%y; n=j%z; } /************found************/ return i;

fun(int x, int y, int z ) 的参数要分别定义

函数首部

return j; 这里变量 j 存放的是最 小公倍数,没有变量 i

} main( ) { int x1,x2,x3,j ; printf("Input x1 x2 x3: "); scanf("%d%d%d",&x1,&x2,&x3); printf("x1=%d, x2=%d, x3=%d \n",x1,x2,x3); j=fun(x1,x2,x3); printf("The minimal common multiple is : %d\n",j); }

59

#include <stdio.h> #include <math.h> /**************found**************/ void fun(int a,int b,int c)

int fun(int a,int b,int c)这里的函数类型 是又返回值的类型,根据主函数 fun 函数 的调用处,返回的应该是 int 类型

{ if(a+b>c && b+c>a && a+c>b) { if(a==b && b==c) return 3; else if(a==b||b==c||a==c) return 2; /**************found**************/ else retrun 1 else return 1; } else return 0; } main() { int a,b,c,shape; printf("\nInput a,b,c: "); scanf("%d%d%d",&a,&b,&c); printf("\na=%d, b=%d, c=%d\n",a,b,c); shape =fun(a,b,c); printf("\n\nThe shape : %d\n",shape); } 60

return 写错, 最后丢分号

#include <stdio.h> #include <string.h> void fun( char *a, char *b, char *c ) {

int i , j; char ch; i = 0; j = strlen(b)-1; /************found************/ while ( i > j ) { ch = b[i]; b[i] = b[j]; b[j] = ch; i++; j--;

while ( i < j )很明显,这里是 i < j ,看 i 和 j 的初值就知道了

} while ( *a || *b ) { /************found************/ If ( *a ) { *c = *a; c++; a++; } if ( *b ) { *c = *b; c++; b++; } } *c = 0; } main() { char s1[100],s2[100],t[200]; printf("\nEnter s1 string : ");scanf("%s",s1); printf("\nEnter s2 string : ");scanf("%s",s2); fun( s1, s2, t ); printf("\nThe result is : %s\n", t ); } 61

if ( *a ) 这里的 if 中的 I 大写了

#include <stdio.h> void fun (long s, long *t) { int d; long sl=1; *t = 0; while ( s > 0) { d = s%10; /************found************/ if (d%2=0)

if (d%2==0) 这里是比较,

不是赋值 { *t=d* sl+ *t; sl *= 10; } /************found************/ s \= 10; } } main() { long s, t; printf("\nPlease enter s:"); scanf("%ld", &s); fun(s, &t); printf("The result is: %ld\n", t); } 62

s /= 10; 除号写成了反斜杠

#include <stdio.h> #define N 4 void fun(int a[][N], int b[]) { int i, j; for (i=0; i<N; i++) { /**********found**********/ b[i] = a[0][0]; /**********found**********/ for (j=1; j<N-1; j++) /**********found**********/ if ( b[i] < a[i][j] ) b[i] = a[i][j]; } } main()

b[i] = a[i][0]; b[i]初值应该是 i 行的第一个数 for (j=1; j<=N-1; j++) j 作为下标的取值范围 是 1 到最后一列 N-1 if ( b[i] > a[i][j] ) 这里是找最小值,所以应 该是大于号

{

int a[N][N]={{1,4,3,2},{8,6,5,7},{11,10,12,9},{13,16,14,15}},b[N]; fun(a,b); for (i=0; i<N; i++) printf("%d,", b[i]); printf("\n");

int i;

} 63

#include <stdio.h> #include <math.h> void fun(int a,int *b,int *c) { int i,j,d,y; for(i=3;i<=a/2;i=i+2) { /**************found**************/ Y=1; for(j=2;j<=sqrt((double)i);j++) if(i%j==0) y=0; if(y==1) { /**************found**************/ d==a-i; for(j=2;j<=sqrt((double)d);j++) if(d%j==0) y=0; if(y==1) { *b=i; *c=d; } } } } main() { int a,b,c; do { printf("\nInput a: "); scanf("%d",&a); } while(a%2); fun(a,&b,&c); printf("\n\n%d = %d + %d\n",a,b,c); }

y=1; 这里的 y 应该是小写字母

d=a-i; 这里是赋值,不是比较,应 该用一个等号

64

#include <stdio.h> #include <math.h> int fun( int n ,int *value ) { int d,s,i; /**************found**************/ d=0; s=0; d=1; s=0; for(i=1; i<=5; i++) d=d*n; *value=d; for(i=1; i<=3; i++) { s=s+d%10; /**************found**************/ d=d\10; d=d/10; } return s; } main() { int n, sum, v; do { printf("\nEnter n( 2<n<8): ");scanf("%d",&n); } while(n<=2||n>=8); sum=fun( n,&v ); printf("\n\nThe result:\n value=%d sum=%d\n\n",v,sum); }

d 用来做阶乘, 所以初值是 1

除号写成了反斜杠

65

#include <stdio.h> #include <math.h> /**********found**********/ double fun(double a, dounle x0)

double fun(double a, double x0)

double 写错了

{

double x1, y; x1=(x0+ a/x0)/2.0; /**********found**********/ if( fabs(x1-xo)>0.00001 ) if( fabs(x1-x0)>0.00001 ) y=fun(a,x1); else y=x1; return y; } main( ) { double x; printf("Enter x: "); scanf("%lf",&x); printf("The square root of %lf is %lf\n",x,fun(x,1.0)); } 66

x0 写成了 xo

#include <stdio.h> int fun() { int i,j,k,sum=0; printf("\nThe result :\n\n"); /**************found**************/ for(i=0; i<=3; i++)

for(i=1; i<=3; i++) 这里 i 代 表的是红球,红球的个数应 该最少是一个

{ for(j=1; j<=5; j++) { k=8-i-j; /**************found**************/ if(K>=0 && K<=6) { sum=sum+1; printf("red:%4d white:%4d black:%4d\n",i,j,k); } } } return sum; } main() { int sum; sum=fun();

if(k>=0 && k<=6) 变量 k 应该 是小写字母

printf("sum =%4d\n\n",sum); } 67

#include <stdio.h> #define N 20 void fun ( int * a, int n ) { int i, m, t, k ; for(i=0;i<2;i++) { /**********found**********/ m=0;

m=i; m 是最大数的下标,第一遍循环 是 0 ,第二遍循环是 1 ,正好是 i 的值, 并不是一直都是 0

for(k=i+1;k<n;k++) /**********found**********/ if(a[k]>a[m]) k=m; t=a[i];a[i]=a[m];a[m]=t; } } main( ) { int b[N]={11,5,12,0,3,6,9,7,10,8}, n=10, i; for ( i=0; i<n; i++ ) printf("%d ", b[i]); printf("\n"); fun ( b, n ); for ( i=0; i<n; i++ ) printf("%d ", b[i]); printf("\n"); } 68

if(a[k]>a[m]) m=k; 这里 k 是不停的往 后移动,m 是最大数的下标

#include <stdio.h>

/************found************/ fun ( int m ) { double y = 0, d ; int i; /************found************/ for( i = 100, i <= m, i += 100 ) { d = (double)i * (double)i ; y += 1.0 / d ; } return( y ) ; } main( ) { int n = 2000 ; printf( "\nThe result is %lf\n", fun ( n ) ) ; } 69

double fun ( int m )根据主函数调用 fun 函数 的形式, %lf 输出的是 double 类型

for( i = 100;i <= m; i += 100 ) 号里面是 2 个分号

for 循环的括

#include <stdio.h> #include <string.h> int fun (char *s, char *t) { int n; char *p , *r; n = 0; while ( *s ) { p = s; r = t; while ( *r ) if ( *r == *p ) { /************found************/ r++; p++ } else break; /************found************/ if ( r == '\0' )

r++; p++;

丢分号

if ( *r == '\0' ) 这里 r 是指针,所 以前面必须加* ,得到 r 所指向

的空间的内容 n++; s++; } return n; } main() { char s[100], t[100]; int m; printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring t:"); scanf("%s", t); m = fun( s, t); printf("\nThe result is: m = %d\n", m); } 70

#include <stdio.h> /**********found**********/ void fun ( char *s, int a, int b ) { while ( *s ) { if ( *s >= 'A' && *s <= 'Z' ) /**********found**********/ *a=a+1 ; if ( *s >= 'a' && *s <= 'z' ) /**********found**********/ *b=b+1;

void fun ( char *s, int *a, int *b ) 根据函数调用 出,这里传递是地址,应该用指针变量

*a=*a+1 ; a 是指针变量,应该用*a 代表指针 所指向的内容

*b=*b+1; b 是指针变量,应该用*b 代表指 针所指向的内容

s++; } } main( ) { char

s[100]; int

upper = 0, lower = 0 ;

printf( "\nPlease a string : " ); gets ( s ); fun ( s, & upper, &lower ); printf( "\n upper = %d lower = %d\n", upper, lower ); }

71

#include <ctype.h> #include <stdio.h> #include <string.h> void fun( char *p ) { int k = 0; for( ; *p; p++ ) if( k ) { /**********found***********/ if( p == ' ' )

if( *p == ' ' ) 这里 p 是指 针 ,所以前面加* 代表 p 所指向的空间

{ k = 0; /**********found***********/ * (p-1) = toupper( *( p - 1 ) ) } } else k = 1; } main() { char chrstr[64]; int d ; printf( "\nPlease enter an English sentence within 63 letters: ");

* (p-1) = toupper( *( p - 1 ) ); 丢了分号 空格前面的字母变大写

gets(chrstr); d=strlen(chrstr) ; chrstr[d] = ' ' ; chrstr[d+1] = 0 ; printf("\n\nBefore changing:\n %s", chrstr); fun(chrstr); printf("\nAfter changing:\n %s", chrstr); } 72

#include <stdio.h> long fun ( int k) { /************found************/ if k > 0 return (k*fun(k-1)); /************found************/ else if ( k=0 ) return 1L; else return 1L; } main() { int k = 10 ; printf("%d!=%ld\n", k, fun ( k )) ; } 73

if (k > 0)

if 后面的条件要加()

else if ( k==0 ) 是赋值

这里是比较,不

#include <stdio.h> double fun(int n) { double result=1.0; while (n>1 && n<170)

/*********found*********/ result*=--n;

result*=n--; --n 是先减去 1 再算赋值 n—是先 赋值再做 减去 1 的运算 n 的阶乘应该包含 乘以 n 本身 return result; 变量 result 存储 n 的阶乘

/*********found*********/ return _____; } main() { int n; printf("Enter an integer: "); scanf("%d",&n); printf("\n\n%d!=%lg\n\n",n,fun(n)); } 74

#include <stdio.h> /**********found**********/ void fun ( int a, b ) { int t; /**********found**********/ t = b; b = a ; a = t;

void fun ( int *a,int *b ) 函数传递过来的是地 址,所以应该分别定义 指针变量

t = *b; *b = *a ; *a = t; a b 是指针变 量,应该是交换 a , b 所指向的内容,所 以应该是 *a *b

} main ( ) { int a, b; printf ( "Enter a , b : "); scanf ( "%d,%d", &a, &b ); fun ( &a , &b ) ; printf (" a = %d b = %d\n ", a, b ); }

75

#include <stdio.h> #include <ctype.h> char fun(char c) { if( c>='A' && c<='Z') /**************found**************/ C=C+32; c=c+32; 变量 c 是小写字母 if(c>='a' && c<='u') /**************found**************/ c=c-5; c=c+5;变成后面的字母要+5 else if(c>='v'&&c<='z') c=c-21; return c; } main() { char c1,c2; printf("\nEnter a letter(A-Z): "); c1=getchar(); if( isupper( c1 ) ) { c2=fun(c1); printf("\n\nThe letter \'%c\' change to \'%c\'\n", c1,c2); } else printf("\nEnter (A-Z)!\n"); }

76

#include <stdio.h> #define N 20 void fun(int a[], int n) { int i, j, t, p; for (j = 0 ;j < n-1 ;j++) { /************found************/ p=j

p = j;

丢分号

for (i = j+1;i < n; i++) if(a[i] < a[p]) /************found************/ p = j; t = a[p] ; a[p] = a[j] ; a[j] = t; } } main() { int a[N]={9,6,8,3,-1},i, m = 5; printf("排序前的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); fun(a,m); printf("排序后的数据:") ; for(i = 0;i < m;i++) printf("%d ",a[i]); printf("\n"); } 77

p = i; p 是代表最小数的下标, 是在 i 往后移动

#include <stdio.h> #define N 20 int fun(int n,int *a) { int i,j,k,sum; /**************found**************/ sum=j==0; for(k=3,i=0;i<n;i++,k+=5) { sum=sum+k; /**************found**************/ if(sum%4=2) a[j++]=sum; } return j; } main() { int a[N],d,n,i;

sum=j=0; 这里是给 sum ,j 赋值为 0 是赋值号,不是比较

if(sum%4==2) 这里是比较,不是赋值

printf("\nEnter n (4<n<=50): ");scanf("%d",&n); d=fun(n,a); printf("\n\nThe result :\n"); for(i=0; i<d; i++)printf("%6d",a[i]);printf("\n\n"); } 78

#include <stdio.h> #include <string.h> /**********found**********/ void fun(char str, char ch ) { while ( *str && *str != ch ) str++; /**********found**********/ if ( *str == ch ) { str [ 0 ] = ch; /**********found**********/ str[1] = '0'; } }

void fun(char *str, char ch )传递的数组名 是地址,所以形参是指针变量

if ( *str != ch )如果不相同才插入

str[1] = '\0'; 字符串末尾放'\0' ,注意此 时的 str 已经指向了字符串最后

main( ) { char s[81], c ; printf( "\nPlease enter a string:\n" ); gets ( s ); printf ("\n Please enter the character to search : " ); c = getchar(); fun(s, c) ; printf( "\nThe result is %s\n", s); } 79

#include <stdio.h> #define M 4 /**************found**************/ void fun(int a) { int i,j,k,m; printf("Enter 4 number : "); for(i=0; i<M; i++) scanf("%d",&a[i]); printf("\n\nThe result :\n\n"); for(i=M;i>0;i--) { k=a[M-1]; for(j=M-1;j>0;j--) /**************found**************/ aa[j]=a[j-1];

void fun(int *a) 参数传递的是数组名,所 以形参应该是指针变量

a[j]=a[j-1]; 这里是 a[j] 不是 aa[j] 多了个 a

a[0]=k; for(m=0; m<M; m++) printf("%d ",a[m]); printf("\n"); } } main() { int a[M]; fun(a); printf("\n\n"); }

80

#include <stdio.h> long fun(int x,int y,long *p ) { int i; long t=1; /**************found**************/ for(i=1; i<y; i++) t=t*x; *p=t; /**************found**************/ t=t/1000; return t; }

for(i=1; i<=y; i++) 注意循环的次数 一共是 y 次

t=t%1000; 后三位是和 1000 求余数

main() { long t,r; int x,y; printf("\nInput x and y: "); scanf("%ld%ld",&x,&y); t=fun(x,y,&r); printf("\n\nx=%d, y=%d, r=%ld, last=%ld\n\n",x, y,r,t ); } 81

#include <string.h> #include <stdio.h> #include <ctype.h> fun ( char *p) { int i,t; char c[80]; /************found************/ For (i = 0,t = 0; p[i] ; i++) if(!isspace(*(p+i))) c[t++]=p[i]; /************found************/ c[t]="\0"; strcpy(p,c); } main( ) { char c,s[80]; int i=0; printf("Input a string:"); c=getchar(); while(c!='#') { s[i]=c;i++;c=getchar(); } s[i]='\0'; fun(s); puts(s); }

for (i = 0,t = 0; p[i] ; i++)

关键字都是小写

c[t]='\0'; 字符串最后是'\0' 这个要注意!! !!

82

#include <stdio.h> #include <string.h> void fun ( char str[][10], int m, char { /************found************/ Int k, q, i ; for ( k = 0; k < m; k++ ) { q = strlen ( str [k] ); for (i=0; i<q; i++) /************found************/ pt[i] = str[k,i] ;

*pt )

int k, q, i ; int 是关键字,要小写

pt[i] = str[k][i] ; 将 k 行的每个字符都 放到 pt 数组中 str 是而为数组指 针,所以用 2 个【】

pt += q ; pt[0] = 0 ; } } main( ) { int m, h ; char s[10][10], p[120] ; printf( "\nPlease enter m:" ) ; scanf("%d", &m) ; gets(s[0]) ; printf( "\nPlease enter %d string:\n", m ) ; for ( h = 0; h < m; h++ ) gets( s[h]) ; fun(s, m, p) ; printf( "\nThe result is : %s\n", p) ; } 83

#include <stdio.h> double fun( int m ) { double t = 1.0; int i; for( i = 2; i <= m; i++ ) /**********found**********/ t += 1.0/k; /**********found**********/ ________ } main() { int m; printf( "\nPlease enter 1 integer number:" ); scanf( "%d", &m ); printf( "\nThe result is %lf\n", fun( m ) ); }

t +=

1.0/i; 变量写错,这里是变量 i return t; 最后应该返回 和 ,也就是变量 t

84

#include <stdio.h> #include <string.h> void fun(char *p ,char *q, char *c) { /************found************/ int k = 1; /************found************/ while( *p != *q ) { if( *p<*q ) c[k]=*q; else c[k]=*p; if(*p) p++; if(*q) q++;

int k = 0; k 作为下标,从 0 开始 while( *p || *q ) 这里和*p 是不是到’\0’有关 , *q 的内容

k++; } } main() { char a[10]="aBCDeFgH", b[10]="ABcd", c[80]={'\0'}; fun(a,b,c); printf("The string a: "); puts(a); printf("The string b: "); puts(b); printf("The result : "); puts(c); } 85

#include <stdio.h> #include <string.h> void fun (char *s, char *t) { int i, sl; sl = strlen(s); /************found************/ for( i=0; i<=s1; i ++) t[i] = s[i]; for (i=0; i<sl; i++) t[sl+i] = s[sl-i-1]; /************found************/ t[sl] = '\0'; } main() { char s[100], t[100]; printf("\nPlease enter string s:"); scanf("%s", s); fun(s, t); printf("The result is: %s\n", t); }

for( i=0; i<sl; i ++) 这里有 2 处错误,一是 sl 写 成了 s1 , 二是 i<sl 这个下标范围要注意

t[2*sl] = '\0';因为 t 是存放了 2 次, 所以下标的范围到了 2*sl

86

#include <stdio.h> void fun( char *s ) { int i,j; for(i=j=0; s[i]!='\0'; i++) if(s[i]!='c') /************found************/ s[j]=s[i];

s[j++]=s[i]; j++的意思是作为 下标使用完之后 ,加 1,然后做下次循 环的下标 s[j]='\0'; 因为新的字符串是放在 s[j]中 的,所以最后是 s[j]='\0'

/************found************/ s[i]='\0';

} main() { char s[80]; printf("Enter a string: "); gets(s); printf("The original string: "); puts(s); fun(s); printf("The string after deleted : "); puts(s);printf("\n\n"); } 87

#include <stdio.h> double fun ( int m ) { double y = 1.0 ; int i; /**************found**************/ for(i = 2 ; i < m ; i++) /**************found**************/ y += 1 / (i * i) ;

for(i = 2 ; i <= m ; i++)这里 i 的范围是从 2 到 m,包含 m y += 1.0 / (i * i) ; i 和 m 都是整型, 所以 得到结果是整型,如

果要得到小数,需要 把 1 改成 1.0 return( y ) ; } main( ) { int n = 5 ; printf( "\nThe result is %lf\n", fun ( n ) ) ; } 88

#include <stdio.h> #include <stdlib.h> typedef struct aa { int data; struct aa *next; } NODE; NODE *Creatlink(int n, int m) { NODE *h=NULL, *p, *s; int i; /**********found***********/ p=(NODE )malloc(sizeof(NODE));

p=(NODE *)malloc(sizeof(NODE));强制类型 转换,注意 p 的类型是什么

h=p; p->next=NULL; for(i=1; i<=n; i++) { s=(NODE *)malloc(sizeof(NODE)); s->data=rand()%m; s->next=p->next; p->next=s; p=p->next; } /**********found***********/ return p; } outlink(NODE *h) { NODE *p; p=h->next; printf("\n\nTHE LIST :\n\n HEAD "); while(p)

return h;这里返回的是头指针

{ printf("->%d ",p->data); p=p->next; } printf("\n"); } main() { NODE *head; head=Creatlink(8,22); outlink(head); } 89

#include <stdio.h> void fun() { int a[3][3],sum; int i,j; /*********found**********/ ______; printf("Input data:"); for (i=0;i<3;i++) { for (j=0;j<3;j++) /*********found**********/ scanf("%d",a[i][j]); } for (i=0;i<3;i++) sum=sum+a[i][i]; printf("Sum=%d\n",sum); } main() { fun(); } 90

sum=0; sum 用来统计数据之和,所以初值为 0

scanf("%d",&a[i][j]); 输入语句输入项是地址

#include <stdio.h> void fun(float *a,float *b,float *c) { /**********found**********/ float *k; if( *a<*b ) { k=*a; *a=*b; *b=k; } /**********found**********/ if( *a>*c ) { k=*c; *c=*a; *a=k; } if( *b<*c ) { k=*b; *b=*c; *c=k; }

float

k; 这里只需要个普通变量 k 就行了,不用指针

if( *a<*c ) 从题目要求上看*a 最大*c 最小这里*a<*c 才做交换

} main() { float a,b,c; printf("Input a b c: "); scanf("%f%f%f",&a,&b,&c); printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c); fun(&a,&b,&c); printf("a = %4.1f, b = %4.1f, c = %4.1f\n\n",a,b,c); } 91

#include <stdio.h> #include <stdlib.h> #include <string.h> #define N 10 typedef struct ss { char num[10]; int s; } STU; STU *fun(STU a[], int m)

{ STU b[N], *t; int i,j,k; /**********found**********/ t=(STU *)calloc(sizeof(STU),m) t=(STU *)calloc(sizeof(STU),m);漏分号,有木有 for(i=0; i<N; i++) b[i]=a[i]; for(k=0; k<m; k++) { for(i=j=0; i<N; i++) if(b[i].s > b[j].s) j=i; /**********found**********/ t(k)=b(j); t[k]=b[j];数组元素下标,两边是【】 b[j].s=0; } return t; } outresult(STU a[], FILE *pf) { int i; for(i=0; i<N; i++) fprintf(pf,"No = %s Mark = %d\n", a[i].num,a[i].s); fprintf(pf,"\n\n"); } main() { STU a[N]={ {"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77}, {"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71} }; STU *pOrder; int i, m; printf("***** The Original data *****\n"); outresult(a, stdout); printf("\nGive the number of the students who have better score: "); scanf("%d",&m); while( m>10 ) { printf("\nGive the number of the students who have better score: "); scanf("%d",&m); } pOrder=fun(a,m); printf("***** THE RESULT *****\n"); printf("The top :\n"); for(i=0; i<m; i++) printf(" %s %d\n",pOrder[i].num , pOrder[i].s); free(pOrder); } 92

#include <stdio.h> #include <stdlib.h> #define N 20 int fun( int *b ) { /**********found**********/ int t[N] ,i, num int t[N] ,i, num=0; 漏分号,num 作为下标应该有初值 0 for(i=0; i<N; i++) if(b[i]>=10) /**********found**********/ t[++num]=b[i]; t[num++]=b[i]; 这里 num 应先使用,再++ /**********found**********/ for(i=0; i<nun; i++) for(i=0; i<num; i++) num 写错,不解释 b[i]=t[i]; return( num ); } main() { int a[N],i,num; printf("a 数组中的数据 :\n"); for(i=0;i<N ;i++) {a[i]=rand()%21; printf("%4d",a[i]);} printf("\n"); num=fun(a); for(i=0;i<num ;i++) printf("%4d",a[i]); printf("\n"); } 93

#include <stdio.h> double fun( int m ) { double t = 1.0;

int i; for( i = 2; i <= m; i++ ) /**********found**********/ t = 1.0-1 /i; /**********found**********/ _______; }

t = t-1.0 /i; 每次循环都是上次的结果减去一个 数,1/i 是整型除法,得到的结果都是整数 return t; 函数需要返回值

main() { int m ; printf( "\nPlease enter 1 integer numbers:\n" ); scanf( "%d", &m); printf( "\n\nThe result is %lf\n", fun( m ) ); }

94

#include<stdio.h> #include <stdio.h> #include <string.h> void fun(char a[]) { int b[26], i, n,max; for (i=0; i<26; i++) /**********found**********/ a[i] = 0; n= strlen(a); for (i=0; i<n; i++) if (a[i] >='a' && a[i]<='z') /**********found**********/ b[a[i] - 'A']++; else if (a[i] >='A' && a[i]<='Z') b[a[i] -'A']++; max = 0; for (i=1; i<26; i++) /**********found**********/

b[i] = 0; 存放统计结果并清零的数组是 b 数组

b[a[i] - 'a']++; 小写字母的时候减去’a’做 b 数组下标

if (b[max] > b[i]) if (b[max] < b[i]) 找最多次数,所以是< max=i; printf("出现次数最多的字符是 : %c\n", max + 'a'); } main( ) { char a[200]; printf("请输入一个待统计的字符串 : fun(a); }

");

scanf("%s", a);

95

#include <stdio.h> /*********found**********/ void fun(int x,int y) { int t; /*********found**********/ t=x;x=y;y=t; } main() { int a,b; a=8;b=3; fun(&a,&b); printf("%d, %d\n",a,b); } 96

void fun(int *x,int *y) 函数传过来的是地址, 所 以用指针变量接受

t=*x;*x=*y;*y=t; x 存储 a 的地址,所以*x 就是 a ,y 同理

#include <stdio.h> #include <math.h> double funx(double x) { return(2*x*x*x-4*x*x+3*x-6); } double fun( double m, double n) { /************found************/ int r; r=(m+n)/2; /************found************/ while(fabs(n-m)<0.001) { if(funx(r)*funx(n)<0) m=r; else n=r; r=(m+n)/2; } return r;

double r;

r 用来存放实数,不能是 int

while(fabs(n-m)>0.001) 大于精度要继续运 算,小于精度才停止

} main( ) { double m,n, root; printf("Enter m n : \n"); scanf("%lf%lf",&m,&n); root=fun( m,n ); printf("root = %6.3f\n",root); }


更多相关文章:

非常超级学习网 fccjxxw.com

copyright ©right 2010-2021。
非常超级学习网内容来自网络,如有侵犯请联系客服。zhit325@126.com|网站地图