logo资料库

C语言程序改错题库.doc

第1页 / 共80页
第2页 / 共80页
第3页 / 共80页
第4页 / 共80页
第5页 / 共80页
第6页 / 共80页
第7页 / 共80页
第8页 / 共80页
资料共80页,剩余部分请下载后查看
━━━━━━━━━━━━━━━━━━ 一、程序改错 共 138 题 (共计 1380 分) ━━━━━━━━━━━━━━━━━━ 第 1 题 (10.0 分) /*------------------------------------------------------ 3). y+=1.0/(2*i-3); 第 2 题 (10.0 分) /*------------------------------------------------------ 功能:根据整型形参 m,计算如下公式的值: y=1+1/3+1/5+1/7+...+1/(2m-3) ------------------------------------------------------*/ 功能:用选择法对数组中的 n 个元素按从小 到大的顺序进行排序。 ------------------------------------------------------*/ #include "stdio.h" double fun(int m) { /**********FOUND**********/ double y=1 int i; /**********FOUND**********/ for(i=3; i #define N 20 void fun(int a[], int n) { int i, j, t, p; for (j = 0 ;j < n-1 ;j++) { /**********FOUND**********/ p = j for (i = j;i < n; i++) /**********FOUND**********/ 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"); getch(); } 答案: 1). p = j; 2). if(a[i] < a[p]) 或 if(a[p] > a[i]) 3). p = i; 第 3 题 (10.0 分) /*------------------------------------------------------ 功能:编写一个程序,从键盘接收一个字符 串,然后按照字符顺 序从小到大进行排序,并删除重复的 字符。 ------------------------------------------------------*/ #include #include void main() { char str[100],*p,*q,*r,c; printf("输入字符串:"); gets(str); /**********FOUND**********/ for(p=str;p;p++) { for(q=r=p;*q;q++) if(*r>*q) r=q; /**********FOUND**********/ if(r==p) { /**********FOUND**********/ c=r; *r=*p; *p=c; } } for(p=str;*p;p++) { for(q=p;*p==*q;q++); strcpy(p+1,q); } printf("结果字符串:%s\n\n",str); getch(); } 答案: 1). for(p=str;*p;p++) 2). if(r!=p) 3). c=*r; 第 4 题 (10.0 分) /*------------------------------------------------------ 功能:编写程序, 求矩阵(3 行 3 列)与 5 的乘积 例如:输入下面的矩阵: 100 200 300 400 500 600 700 800 900 程序输出: 500 1000 1500 2000 2500 3000 3500 4000 4500 ------------------------------------------------------*/ #include "stdio.h" int fun(int array[3][3]) { /**********FOUND**********/ int i;j; /**********FOUND**********/ for(i=1; i < 3; i++) for(j=0; j < 3; j++) /**********FOUND**********/ array[i][j]=array[i][j]/5;
} main() { #include #include int i,j; int array[3][3]={{100,200,300}, main( ) { {400,500,600}, {700,800,900}}; clrscr() ; for (i=0; i < 3; i++) { for (j=0; j < 3; j++) printf("%7d",array[i][j]); printf("\n"); } fun(array); printf("Converted array:\n"); for (i=0; i < 3; i++) { for (j=0; j < 3; j++) printf("%7d",array[i][j]); printf("\n"); } getch(); } 答案: 1). int i,j; 2). for(i=0; i < 3; i++) 3). array[i][j]=array[i][j]*5; 第 5 题 (10.0 分) /*------------------------------------------------------ 功能:用"起泡法"对连续输入的十个字符排 序后按从小到大的次序 输出. ------------------------------------------------------*/ i; str[N]; int char /***********FOUND***********/ for(i=0;istr[i+1]) 或 if(str[i+1]
的最后一个字母改成 printf( "\nAfter changing:\n %s", chrstr ); 大写,然后输出此文本行 (这里的 } “单词”是指由空格 隔开的字符串)。 例 如 : 若 输 入 “ I am a student to take the examination.”, 则应输出“I aM A studenT tO takE thE examination.”。 ------------------------------------------------------*/ #include "conio.h" #include "stdio.h" #include "ctype.h" #include "string.h" up1st ( char *p ) { /**********FOUND**********/ integer k = 0; for ( ; *p; p++ ) if ( k ) { /**********FOUND**********/ if ( *p = ' ' ) { k = 0; /**********FOUND**********/ *(p -1 ) = toupper( *( p - 1 ); } } else if ( *p != ' ' ) k = 1; *( p-1 ) = toupper( *(p-1) ); } main( ) { char chrstr[81]; clrscr(); printf( "\nPlease enter a string: " ); gets ( chrstr ); printf( chrstr ); "\n\nBefore changing:\n %s", up1st( chrstr ); 答案: 1). int k=0; 2). if ( *p == ' ' ) 3). *(p -1 ) = toupper( *( p - 1 )); 第 7 题 (10.0 分) /*------------------------------------------------------ 功能:在一个一维整型数组中找出其中最大 的数及其下标。 ------------------------------------------------------*/ #define N 10 /**********FOUND**********/ float fun(int *a,int *b,int n) { int *c,max=*a; for(c=a+1;cmax) { max=*c; /**********FOUND**********/ b=c-a; } return max; } void main(void) { int a[N],i,max,p=0; printf("please enter 10 integers:\n"); for(i=0;i
printf("max=%d,position=%d",max,p); } 答案: 1). int fun(int *a,int *b,int n) 2). *b=c-a; 3). scanf("%d",&a[i]); 或 scanf("%d", a + i ); 4). max=fun(a,&p,N); 第 8 题 (10.0 分) /*------------------------------------------------------ 功能:为一维数组输入 10 个整数;将其中 最小的数与第一个数 对换,将最大的数与最后一个数对 换,输出数组元素。 ------------------------------------------------------*/ void main(void) { int a[10]; void input(); void output(); void max_min(); input(a,10); max_min(a,10); output(a,10); } void input(int *arr,int n) { int *p,i; p=arr; printf("please enter 10 integers:\n"); for(i=0;i*max) 或 if(*max<*p) 3). if( max == arr ) 4). for(i=0;ii;i++) 或 或 for(i=0;i<=n-1;i++) 或 for(i=0;n-1>=i;i++) 或 或 for(p=arr;arr+n-1>=p;) for(p=arr;p<=arr+n-1;) for(p=arr;p
功能:求两个形参的乘积和商数,并通过形 参返回调用程序。 例如:输入:61.82 和 12.65,输出为:c = 782.023000 d = 4.886957 ------------------------------------------------------*/ #include #include /**********FOUND**********/ void fun ( double a, b, double *x, double *y ) { /**********FOUND**********/ x = a * b; /**********FOUND**********/ y = a / b; } main ( ) { double a, b, c, d; clrscr( ); printf ( "Enter a , b : "); scanf ( "%lf%lf", &a, &b ); fun ( a , b, &c, &d ) ; printf (" c = %f d = %f\n ", c, d ); getch(); } 答案: ex=1+x+x2/2!+x3/3!+ ...+xn/n! 的值。 ------------------------------------------------------*/ #include"stdio.h" main() { int m,n; float x,term,ex1,ex2; printf("x,m="); scanf("%f %d",&x,&m); /**********FOUND**********/ ex1==ex2=1; term=1; for(n=1;n<=m;n++) { /**********FOUND**********/ term*=x%n; ex1+=term; } ex2=term; /**********FOUND**********/ for (n=m;n>1; n--) { term*=n/x; ex2+=term; } printf("exforward=%f exbackrard=%f\n",ex1,ex2); getch(); } 1). void fun ( double a, double b, double 答案: *x, double *y ) 2). *x = a * b; 3). *y = a / b; 1). ex1=ex2=1; 2). term*=x/n; 3). for (n=m;n>=1; n--) 第 10 题 (10.0 分) /*------------------------------------------------------ 第 11 题 (10.0 分) /*------------------------------------------------------ 功 能 : 写 计 算 级 数 功能:编制统计营业员一天的营业额的程序,
设程序采用一个循环 答案: 实现,每次循环输入一笔交易金额并 累计营业额。由于营 业员一天完成的交易次数是不确定 的,为此以最后附加输 入一笔 0 或负数交易额作为交易金额 已全部输入结束的标志。 有以下统计营业员一天营业额的算 1). float sale,sigma; 2). scanf("%f",&sale); 3). sigma+=sale; 或 sigma=sigma+sale; 第 12 题 (10.0 分) /*------------------------------------------------------ 法: 统计营业员一天营业额 { 营业额清 0; 输入第一笔交易额; while(交易额>0.0) { 累计营业额; 输入下一笔交易额; } 输出营业额; } 记一笔交易额为变量 sale,营业额为 sigma。 ------------------------------------------------------*/ #include void main() { /**********FOUND**********/ float sale,sigma sigma=0.0; printf("Enter sale data.\n"); /**********FOUND**********/ scanf("%f",sale); while(sale>0.0) { /**********FOUND**********/ sigma+==sale; printf("Enter next sale data(<=0 to finish).\n"); scanf("%f",&sale); } printf("Sigma of sale is %.2f\n",sigma); getch(); } 功能:根据整型形参 n,计算某一数据项的 值。 A[1]=1, A[2]=1/(1 + A[1]), A[3]=1/(1 + A[2]), …, A[n]=1/(1 + A[n-1]) 例如:若 n=10,则应输出:a10=0.617977。 ------------------------------------------------------*/ #include #include /**********FOUND**********/ int fun ( int n ) { float A=1; int i; /**********FOUND**********/ for (i=2; i
3). A = 1.0/(1+A); 第 13 题 (10.0 分) /*------------------------------------------------------ 功能:求 0-7 这 8 个数字所能组成的奇数个 数。 功能:将 a 所指字符串中的字符和 b 所指字 符串中的字符, 按排 列的顺序交叉合并到 c 所指数组中, 过长的剩余字符接在 c 所指数组的尾部。 例 如 : 当 a 所 指 字 符 串 中 的 内 容 为 “abcdefg”,b 所指字符串中 的内容为“1234”时,c 所指数组中 的内容应该为“a1b2 c3d4efg”;而当 a 所指字符串中的内 ------------------------------------------------------*/ 容为“1234”,b 所 #include "stdio.h" main() { /**********FOUND**********/ long sum=4;s=4; int j; for(j=2;j<=8;j++) { /**********FOUND**********/ printf("\n%d",sum); /**********FOUND**********/ if(j<2) s*=7; else s*=8; sum+=s; } printf("\nsum=%ld",sum); getch(); } 答案: 1). long sum=4,s=4; 2). printf("\n%ld",sum); 3). if(j<=2) 或 if(j<3) 第 14 题 (10.0 分) /*------------------------------------------------------ 指字符串中的内容为“abcdefg”时, c 所指数组中的内 容应该为“1a2b3c4defg”。 ------------------------------------------------------*/ #include #include #include /**********FOUND**********/ fun( char a, char b, char c ) { while ( *a && *b ) { *c = *a; c++; a++; *c = *b; c++; b++; } if( *a == '\0' ) /**********FOUND**********/ while( *b ) *c = *b; c++; b++; } else /**********FOUND**********/ while( *a ) *c = *a; c++; a++; } *c = '\0'; } main() { char s1[100], s2[100], t[200];
分享到:
收藏