第1部分 程序改错题
第1部分程序改错题第1题在主函数中从键盘输入若干个数放入数组中,输入0结束输入并放在最后一个元素中。
给定程序MODI0.C中函数fun的功能是:计算数组中值为正数的平均值(不包括0)。
例如:数组中元素的值依次为:39,-47,21,2,-8,15,0,则程序的运行结果为:19.25。
请改正函数fun中的错误,使它能输出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <conio.h>#include <stdio.h>double fun (int x[]){int sum=0.0;int c=0,i=0;while(x[i]!=0){if (x[i]>0){sum+=x[i];c++}i++;}sum\=c;return sum;}main(){int x[1000]; int i=0;clrscr();printf("\nPlease enter some data (end with 0):");do {scanf("%d",&x[i]);} while (x[i++]!=0);printf("%f\n",fun(x));}第2题学生花名册可以用结构体型链表存放。
结构中包含成员学号(int xh)、姓名(char xm[8])、性别(char sex)、班级号(int bj)、成绩(int cj),sex='m'表示男学生,'w'为女学生,班级序号bj为1至9。
该结构已用typedef 定义为数据类型STUDENT。
给定程序FILL0.C就建立了这样一个链表,函数ftotal()的功能是:统计各班的平均成绩。
请改正函数ftotal中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>#include <alloc.h>typedef struct STUDENT{long xh;char xm[8];char sex;int bj;int cj;struct STUDENT * next;};void ftotal(struct STUDENT *head,int a[]){struct STUDENT * p;int b[9],i;p=head;for(i=0;i<9;i++){a[i]=0;b[i]=0;}while(p){a[p->bj-1]=p->cj;b[p->bj-1]=1;p=p->next;}for(i=0;i<9;i++)if (b[i]) a[i]=a[i]/b[i];else a[i]=0;}void finput(struct STUDENT *head){struct STUDENT * p;p=head;while(p){printf("\nPlease nput the score of class %d the student %s :",p->bj,p->xm);scanf("%d",&p->cj);p=p->next;}}struct STUDENT * fsetup(){struct STUDENT *h,*p,*p1;h=NULL;p1=NULL;while(1){p=(struct STUDENT * )malloc (sizeof(struct STUDENT));scanf("%ld %s %c %d",&p->xh,p->xm,&p->sex,&p->bj);p->cj=0;if (p->xh==0){free(p);if (p1) p1->next=NULL;break;} else {if(h==0){h=p;p1=p;}else {p1->next=p;p1=p;}}}return h;}print(struct STUDENT * head){struct STUDENT * p;p=head;while(p){printf("%08ld,%-8s,%c,%1d,%3d\n",p->xh,p->xm,p->sex,p->bj,p->cj);p=p->next;}printf("\n");}main(){struct STUDENT *h;int a[9],i;h=fsetup();print(h);finput(h);print(h);ftotal(h,a);for (i=0;i<9;i++)if (a[i]) printf("The score of class %d is %d\n",i+1,a[i]);第3题给定程序MODI1.C中函数fun的功能是:求广义菲玻那级数的第n项。
1,1,1,3,5,9,17,31,..... 项值通过函数值返回main()函数。
例如:若n=15,则应输出:2209。
请改正函数fun中的语法错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <conio.h>#include <stdio.h>long fun(int n){long a=1,b=1,c=1,d=1,k;For (k=4;k<=n;k++){d=a+b+c;a=b;b=c;c=d}return d;}main(){int n=15;clrscr();printf("The value is %ld\n",fun(n));NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件*/FILE *rf,*wf;int i,n;rf=fopen("gc01.in","r");wf=fopen("gc01.out","w");for(i=0;i<10;i++){fscanf(rf,"%d,",&n);fprintf(wf,"%ld\n",fun(n));}fclose(rf);fclose(wf);}第4题给定程序FILL1.C中函数scmp的功能是比较两个给出的C字符串。
按比较结果,函数将返回如下函数值:若:s1=s2 返回0s1<s2 返回负值s1>s2 返回正值请改正函数scmp中的语法和逻辑错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include<stdio.h>#include<conio.h>#include<stdlib.h>#define N 40scmp(char * s1,char * s2){while(*s1)if(s1!=s2)return (*s1-*s2) ;else{(*s1)++;s2++;}return ( *s1 );}main(){char str1[]="china",str2[]="chiness",str3[]="china",str4[]="chinaren";printf("the result for compare %s and %s is %d\n",str1,str2,scmp(str1,str2));printf("the result for compare %s and %s is %d\n",str2,str3,scmp(str2,str3));printf("the result for compare %s and %s is %d\n",str1,str3,scmp(str1,str3));printf("the result for compare %s and %s is %d\n",str3,str4,scmp(str3,str4));NONO();}NONO(){/*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件*/ FILE *rf,*wf;int i,n;char str1[N],str2[N];rf=fopen("tk01.in","r");wf=fopen("tk01.out","w");for(i=0;i<3;i++){fscanf(rf,"%s %s",&str1,&str2);fprintf(wf,"%d\n",scmp(str1,str2));}fclose(rf);fclose(wf);}第5题给定程序MODI2.C中函数fun的功能是:通过某种程度方式实现两个变量的值交换的操作,例如变量a中的值原为8,b中的值原为3,程序运行后变量a中的值为3,b中的值原为8。
请改正函数fun中的错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <conio.h>#include <stdio.h>int fun(int *x,int y){int t;t=x;x=y;return(y);}main(){int a=3,b=8;clrscr();printf("%d %d\n",a,b);b=fun(&a,b);printf("%d %d\n",a,b);}第6题给定程序FILL2.C中函数printd(int n)的功能是以十进制数形式打印出任int型数。
请改正函数printd中的语法和逻辑错误,使它能计算出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!下面函数的功能是以十进制数形式打印出任int型数。
请填入适当语句完善之。
#include"stdio.h"printd(int n){int i;if(n<0){n=-n;printf("+");}if( i=n/10 !=0 )printd(i);putchar( n + '0' );}main(){printd(12345);printf("\n");printd(-32091);printf("\n");printd(0);printf("\n");printd(-2);printf("\n");}第7题给定程序MODI3.C中函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。
C语言程序改错题
第1题【程序改错】【2 】功效:先将在字符串s中的字符按逆序存放到t串中,然后把s中的字符按正序衔接到t串的后面.例如:当s中的字符串为:“ABCDE”时,则t中的字符串应为:“EDCBAABCDE”.------------------------------------------------------*/#include <conio.h>#include <stdio.h>#include <string.h>void fun (char *s, char *t){/**********FOUND**********/int i;sl = strlen(s);for (i=0; i<sl; i++)/**********FOUND**********/t[i] = s[sl-i];for (i=0; i<sl; i++)t[sl+i] = s[i];/**********FOUND**********/t[2*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);}答案:1). int i,sl;2). t[i] = s[sl-i-1];3). t[2*sl] = '\0'; 或 t[2*sl] = 0;第2题【程序改错】功效:求出以下分数序列的前n项之和.和值经由过程函数值返回main 函数.2/1+3/2+5/3+8/5+13/8+21/13 ……例如:若n = 5,则应输出:8.391667.------------------------------------------------------*/#include <conio.h>#include <stdio.h>/**********FOUND**********/fun ( int n ){int a, b, c, k; double s;s = 0.0; a = 2; b = 1;for ( k = 1; k <= n; k++ ){/**********FOUND**********/s = (double)a / b;c = a;a = a + b;b = c;}/**********FOUND**********/return c;}main( ){int n = 5;printf( "\nThe value of function is: %lf\n", fun ( n ) );}答案:1). double fun(int n)2). s = s + (double)a / b; 或 s += (double)a / b; 或 s += a /(double)b; 或 s=s+a/(double)b;3). return s;第3题【程序改错】功效:读入一个整数m( 5≤m≤20 ),函数getarr挪用函数rnd获得m个随机整数,函数sortpb将这m个随机整数从小到大排序.例如:若输入整数7,则应输出:3 10 17 28 32 36 47.------------------------------------------------------*/#include "conio.h"#include <stdio.h>sortpb ( int n, int *a ){/**********FOUND**********/int i, j, p, tfor ( j = 0; j < n-1 ; j++ ){p = j;for ( i = j + 1; i < n ; i ++ )/**********FOUND**********/if ( a[p] > a[j] ) p = i;/**********FOUND**********/if ( p == j ){t = a[j];a[j] = a[p];a[p] = t;}}}double rnd ( ){static t = 29, c = 217, m = 1024, r = 0; r =( r*t + c )%m; return( ( double )r/m ); }getarr( int n, int *x ){int i;for( i = 1; i <= n; i++, x++ ) *x = ( int )( 50*rnd() );}putarr( int n, int *z ){int i;for( i = 1; i <= n; i++, z++ ){printf( "%4d", *z );if ( !( i%10 ) ) printf( "\n" );}printf("\n");}main(){int aa[20], n;printf( "\nPlease enter an integer number between 5 and 20: " ); scanf( "%d", &n );getarr( n, aa );printf( "\n\nBefore sorting %d numbers:\n", n ); putarr( n, aa ); sortpb( n, aa );printf( "\nAfter sorting %d numbers:\n", n ); putarr( n, aa );}答案:1). int i, j, p, t;2). if ( a[p] > a[i] ) p = i;3). if ( p != j )第4题【程序改错】--------------------------------------------------------功效:以下程序能求出1*1+2*2+......+n*n<=1000中知足前提的最大的n.------------------------------------------------------*/#include <stdio.h>#include "string.h"main(){int n,s;/**********FOUND**********/s==n=0;/**********FOUND**********/while(s>1000){++n;s+=n*n;}/**********FOUND**********/printf("n=%d\n",&n-1);}答案:1). s=n=0;2). while(s<=1000)3). printf("n=%d\n",n-1);第5题【程序改错】--------------------------------------------------------功效:求出a所指数组中最大数和次最大数(划定最大数和次最大数不在a[0]和a[1]中),依次和a[0].a[1]中的数对调.例如:数组华夏有的数:7.10.12.0.3.6.9.11.5.8,输出的成果为:12.11.7.0.3.6.9.10.5.8.------------------------------------------------------*/#include <conio.h>#include <stdio.h>#define N 20void fun ( int * a, int n ){int k,m1,m2,max1,max2,t;max1=max2= -32768; m1=m2=0;for ( k = 0; k < n; k++ )if ( a[k]>max1 ){max2 = max1; m2 = m1;max1 = a[k]; m1 = k;}/**********FOUND**********/else if( a[k]>max1 ){max2 = a[k]; m2 = k; }/**********FOUND**********/t = a[0];a[m1]=a[0];a[m1] = t;/**********FOUND**********/t = a[1];a[m2]=a[1];a[m2] = t;}main( ){int b[N]={7,10,12,0,3,6,9,11,5,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");}答案:1). else if( a[k]>max2 )2). t = a[0]; a[0]=a[m1]; a[m1] = t;3). t = a[1]; a[1]=a[m2]; a[m2] = t;第6题【程序改错】--------------------------------------------------------功效:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子).例如:若输入整数:2310,则应输出:2.3.5.7.11.请纠正程序中的语法错误,使程序能得出准确的成果.------------------------------------------------------*/#include "conio.h"#include <stdio.h>/**********FOUND**********/isPrime(integer n ){int i, m;m = 1;for ( i = 2; i < n; i++ )/**********FOUND**********/if ( n%i ){m = 0;break;}/**********FOUND**********/return n ;}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");}答案:1). IsPrime(int n)2). if(!(n%i))3). return m ;第7 题【程序改错】--------------------------------------------------------功效:为一维数组输入10个整数;将个中最小的数与第一个数对调,将最大的数与最后一个数对调,输出数组元素.------------------------------------------------------*/#include <stdio.h>main(){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<n;i++)/**********FOUND**********/ scanf("%d",p);}void max_min(int *arr,int n){int *min,*max,*p,t;min=max=arr;for(p=arr+1;p<arr+n;p++)/**********FOUND**********/ if(*p<*max)max=p;else if(*p<*min) min=p;t=*arr;*arr=*min;*min=t;/**********FOUND**********/ if(max=arr) max=min;t=*(arr+n-1);*(arr+n-1)=*max;*max=t;}void output(int *arr,int n){int *p,i;p=arr;printf("The changed array is:\n");/**********FOUND**********/while(i=0;i<n;i++)printf("%3d",*p++);printf("\n");}答案:1). scanf("%d",p ++); 或 scanf("%d",arr[i]); 或 scanf("%d",p+i); 或 scanf("%d",arr+i);2). if(*p>*max) 或 if(*max<*p)3). if( max == arr )4). for(i=0;i<n;i++) 或 for(i=0;n>i;i++) 或 for(p=arr;p<arr+n;) 或 for(i=0;i<=n-1;i++) 或for(i=0;n-1>=i;i++) 或 for(p=arr;p<=arr+n-1;) 或 for(p=arr;arr+n-1>=p;)第8题【程序改错】--------------------------------------------------------功效:求出在字符串中最后一次消失的子字符串的地址,经由过程函数值返回,在主函数中输出从此地址开端的字符串;若未找到,则函数值为NULL.例如:当字符串中的内容为:"abcdabfabcdx",t中的内容为:"ab"时,输出成果应是:abcdx.当字符串中的内容为: "abcdabfabcdx",t中的内容为:"abd"时,则程序输出未找到信息:not found!.------------------------------------------------------*/#include <conio.h>#include <stdio.h>#include <string.h>char * fun (char *s, char *t ){char *p , *r, *a;/**********FOUND**********/a == NULL;while ( *s ){p = s;r = t;while ( *r )/**********FOUND**********/if ( r == p ){r++;p++;}elsebreak;/**********FOUND**********/if ( *r ='\0' ) a = s;s++;}return a ;}main(){char s[100], t[100], *p;printf("\nPlease enter string S :"); scanf("%s", s );printf("\nPlease enter substring t :"); scanf("%s", t );p = fun( s, t );if ( p )printf("\nThe result is : %s\n", p);elseprintf("\nNot found !\n" );}答案:1). a = NULL;2). if ( *r == *p )3). if ( *r == '\0' ) a = s;第9题【程序改错】--------------------------------------------------------功效:从m个学生的成绩中统计出高于和等于平均分的学生人数,此人数由函数值返回.平均分经由过程形参传回,输入学生成绩时,用-1停止输入,由程序主动统计学生人数.例如:若输入 8 逻辑学生的成绩,输入情势如下: 80.5 60 72 90.5 98 51.5 88 64 -1成果为:The number of students :4Ave = 75.56.------------------------------------------------------*/#include <conio.h>#include <stdio.h>#define N 20int fun ( float *s, int n, float *aver ){float av, t ; int count , i;count = 0; t=0.0;for ( i = 0; i < n; i++ ) t += s [ i ];av = t / n; printf( "ave =%f\n",av );for ( i = 0; i < n; i++ )/**********FOUND**********/if ( s[ i ] < av ) count++;/**********FOUND**********/aver = av;/**********FOUND**********/return count}main(){float a, s[30], aver;int m = 0;printf ( "\nPlease enter marks ( -1 to end):\n ");scanf("%f",&a );while( a>0 ){s[m] = a;m++;scanf ( "%f", &a );}printf( "\nThe number of students : %d\n" , fun ( s, m, &aver ));printf( "Ave = %6.2f\n",aver );}答案:1). if ( s[ i ] >= av ) count++;2). *aver = av;3). return count;第10题【程序改错】--------------------------------------------------------功效:依据以下公式求π值,并作为函数值返回.例如:给指定精度的变量eps输入0.0005时,应该输出Pi=3.140578.π 1 1 2 1 2 3 1 2 3 4— = 1 + — + — x — + — x — x — + — x — x — x — + ...2 3 3 5 3 5 7 3 5 7 9------------------------------------------------------*/ #include <stdio.h>double fun(double eps){double s,t;int n=1;s=0.0;t=1;/**********FOUND**********/while(t<=eps){s+=t;/**********FOUND**********/t=n/(2*n+1)*t;n++;}/**********FOUND**********/return s;}main(){double x;scanf("%lf",&x);printf("\neps=%lf,Pi=%lf\n\n",x,fun(x));}答案:1). while(t>eps) 或 while(eps<t) 或 while(t>=eps) 或 while(eps<=t) 或 while (t>eps) 或 while (eps<t) 或 while (t>=eps) 或 while (eps<=t)2). t=t*n/(2*n+1); 或 t=1.0*n/(2*n+1)*t; 或 t=n/(2*n+1.0)*t; 或 t=n/(2.0*n+1)*t; 或t=n/(2.0*n+1.0)*t; 或 t=1.0*n/(2.0*n+1.0)*t;3). return 2 * s ; 或 return (2*s); 或 return(2*s); 或 return (s*2); 或 return(s*2);第11题【程序改错】--------------------------------------------------------功效:实现两个字符串的衔接.例如:输入dfdfqe和12345时,则输出dfdfqe12345.------------------------------------------------------*/#include <stdio.h>main(){char s1[80],s2[80];void scat(char s1[],char s2[]);gets(s1);gets(s2);scat(s1,s2);puts(s1);}void scat (char s1[],char s2[]){int i=0,j=0;/**********FOUND**********/while(s1[i]= ='\0')i++;/**********FOUND**********/while(s2[j]= ='\0'){/**********FOUND**********/s2[j]=s1[i];i++;j++;}/**********FOUND**********/s2[j]='\0';}答案:1). while( s1[i] != '\0' ) 或 while(s1[i]) 或 while( s1[i] != 0 )2). while( s2[j] != '\0' ) 或 while(s2[j]) 或 while( s2[j] != 0 )3). s1[i]=s2[j];4). s1[i]='\0'; 或 *(s1+i)='\0'; 或 s1[i]=0;第12题【程序改错】--------------------------------------------------------功效:求二分之一的圆面积,函数经由过程形参得到圆的半径,函数返回二分之一的圆面积.例如:输入圆的半径值:19.527 输出为:s = 598.950017.------------------------------------------------------*/#include <stdio.h>#include <conio.h>/**********FOUND**********/double fun( r){double s;/**********FOUND**********/s=1/2*3.14159* r * r;/**********FOUND**********/return r;}main(){float x;printf ( "Enter x: ");scanf ( "%f", &x );printf (" s = %f\n ", fun ( x ) );}答案:1). float fun(float r) 或 double fun(float r) 或 double fun(double r)2). s=1.0/2*3.14159* r * r;3). return s;第13题【程序改错】--------------------------------------------------------功效:应用二维数组输出如图所示的图形. *******************************------------------------------------------------------*/ #include <stdio.h>#include <conio.h>/**********FOUND**********/#define N= 7main(){char a[N][N];int i,j,z;for(i=0;i<N;i++)for(j=0;j<N;j++)/**********FOUND**********/a[i][j]=;z=0;for(i=0;i<(N+1)/2;i++){for(j=z;j<N-z;j++)a[i][j]='*';z=z+1;}/**********FOUND**********/ z=0;for(i=(N+1)/2;i<N;i++){z=z-1;for(j=z;j<N-z;j++)a[i][j]='*';}for(i=0;i<N;i++){for(j=0;j<N;j++)/**********FOUND**********/ printf("%d",a[i][j]);printf("\n");}}答案:1). #define N 72). a[i][j]=' ';3). z=z-1; 或 z--; 或 z=-1+z;4). printf("%c",a[i][j]);第14题【程序改错】--------------------------------------------------------功效:读取7个数(1-50)的整数值,每读取一个值,程序打印出该值个数的*.------------------------------------------------------*/#include <stdio.h>main(){int i,a,n=1;/**********FOUND**********/while(n<7){do{scanf("%d",&a);}/**********FOUND**********/while(a<1&&a>50);/**********FOUND**********/for(i=0;i<=a;i++)printf("*");printf("\n");n++;}}答案:1). while(n<=7) 或 while(n<8)2). while(a<1||a>50); 或 while(a>50||a<1);3). for(i=1;i<=a;i++)。
c语言程序改错讲解
c语言程序改错讲解一、程序改错共44题第1题(10.0分)题号:380 难度:中第2章/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:输入两个双精度数,函数返回它们的平方和的平方根值。
例如:输入:22.936 和 14.121,输出为:y = 26.934415。
------------------------------------------------------*/#include#include#include/**********FOUND**********/double fun (double *a, *b) // double fun (double *a, double *b) {double c;/**********FOUND**********/c = sqr(a*a + b*b); // c = sqrt(a*a + b*b);/**********FOUND**********/return *c; // return c;}main ( ){double a, b, y;printf ( "Enter a, b : ");scanf ("%lf%lf", &a, &b );y = fun (&a, &b);printf ("y = %f \n", y );}第2题(10.0分)题号:438 难度:中第2章/*------------------------------------------------【程序改错】--------------------------------------------------功能:编写函数fun,求两个整数的最小公倍数,然后用主函数main()调用这个函数并输出结果,两个整数由键盘输入。
程序改错——精选推荐
程序改错【程序改错】--------------------------------------------------------功能:在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。
------------------------------------------------------*/#include <stdio.h>#define N 11main(){int i,number,a[N]={1,2,4,6,8,9,12,15,149,156};printf("please enter an integer to insert in the array:\n");/**********FOUND**********/scanf("%d",&number);printf("The original array:\n");for(i=0;i<N-1;i++)printf("%5d",a[i]);printf("\n");/**********FOUND**********/for(i=N-2;i>=0;i--)if(number<=a[i])/**********FOUND**********/a[i+1]=a[i];else{a[i+1]=number;/**********FOUND**********/break;}if(number<a[0]) a[0]=number;printf("The result array:\n");for(i=0;i<N;i++)printf("%5d",a[i]);printf("\n");}【程序改错】--------------------------------------------------------功能:判断m是否为素数,若是返回1,否则返回0。
程序改错完整版---C语言
(一)功能:用选择法对数组中的 #include "stdio.h"n 个元素按从小到大的顺序进行排序#define N 20 void fun(int a[], int n){int i, j, t, k;for (j = 0 ;j < n-1 ;j++) {k = jfor (i = j+1;i < n; i++)if(a[i] >a[k])k=j; t = a[k] ; a[k] = 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");【参考答案】 k = j;【参考答案】 if(a[i] < a[k]) if(a[k] > a[i]) ERROR* ERROR* ERROR*参考答案】k = i;(二)功能:求广义菲玻那契级数的第n项。
广义菲玻那契级数的前n 项为:1 ,1,1,3,5,9,17,31,⋯⋯项值通过函数值返回main ( ) 函数。
例如:若n = 15 ,则应输出:The value is: 2209 。
#include "conio.h"#include "stdio.h" long fun ( int n ) {long a=1, b=1, c=1, d=1, k;ERROR*for (k=4; k<n; k++) {d = a+b+c;ERROR*a=bb=c; c=d;}ERROR*return k;}main( ){int n = 15;printf( "The value is: %ld\n", fun ( n ) ); }【参考答案】for (k=4; k<=n; k++) 【参考答案】a=b;【参考答案】return d;(三)功能:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
C语言程序改错题汇总.doc
C语言程序改错题汇总程序改错题汇总1、用“起泡法“对连续输入的十个字符排序后按从小到大的次序输出. 2、分别统计字符串中大写字母和小写字母的个数。
3、求1到10的阶乘的和。
4、判断m是否为素数,若是返回1,否则返回0。
5、用选择法对数组中的n个元素按从小到大的顺序进行排序。
6、求一个3行4列矩阵的外框的元素值之和。
7、以下程序把两个数按由大到小的顺序输出来。
8、求1到20的阶乘的和。
9、判断字符ch是否与str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。
(指针)10、已知一个数列从第0项开始的前三项分别为0、0、1,以后的各项都是其相邻的前三项的和。
下列给定程序中,函数fun的功能是计算并输出该数列的前n项的平方根之和sum,n的值通过形参传入。
11、有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数都是多少12、编写函数fun计算下列分段函数的值x*xx x0.0 { 累计营业额;输入下一笔交易额;} 输出营业额;} 记一笔交易额为变量sale,营业额为sigma。
124、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少125、编写一个程序模拟袖珍计算器的加、减、乘、除四则运算。
例如输入35=或5-2=或3*4=或4/2=,求表达式结果。
126、输入字符序列,字符序列以特殊字符“”结束。
程序从前向后依次读入字符,并翻译出新的字符输出。
翻译的规则是如果当前读入的字符是数字符,如果该字符的面值为n,则它的后一个字符包括数字符需重复输出n1次如果当前读入的字符不是数字符,则输出该字符。
输出时,以上述一次翻译为一组,不同组间输出用一个空白字符隔开。
翻译直至当前读入的字符为字符‘’,结束翻译和输出。
127、某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下每位数字都加上5,然后除以10的余数代替该位数字。
大学C语言期末考试练习题程序改错(带详解答案)
y=3.5+x;
printf(“y=%d”);
}
正确的:
int x; float y;
printf(“y=%f”,y);
6 编程计算下面分段函数, 输入 x, 输出 y
x 1 x 0 y 2x 1 0 x 10
3x 11 x 10
main() { int x,y;
第三处改为:if(n%3==0)
第四处改为:sum=sum+n;
8. 求表达式 c ab 的值
#include <stdio.h>
#include <math.h>
int fun(int x, int y);
main()
{ int a,b; float f; scanf(“%d,%d”,a,b); //与改错第 1 题中的 scanf 错误相同 if(ab>0){ // C 语言中乘号不能省略,且用*表示乘法运算 fun(a,b); // 调用带有返回值的函数,应将函数的返回值保存在变量里
} 第四行改为:for(j=0;j<5;j++) 第五行改为:scanf(“%d”,&a[j]); 第七行改为:for(j=1;j<5;j++) 第八行改为:if(max<a[j]) 第十三行改为:printf(“下标:%d\n 最大值:%d”, m,max)
3.用一个函数求两个数之和。 sum(x,y) //函数定义的一般形式 p173-174 { float z; z=x+y; return; //return 语句后面可以返回 0、常量、变量和表达式的值。 } main() { float a,b; int c; / /若定义变量的语句有错误,常见考点有两个:(1)变量的类型,(2)在定
程序改错题——精选推荐
1、Gaicuo1.cpp的功能是:1!+2!+3!+……+20!。
程序有两处错误,在****found****处附近有错,请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void main(){float s=0,t;int n,i;for(n=1;n<=20;n++)/****found*****/{for(i=1,t=1;i<=n;i++)t=t*i;/****found****/s=s+t;}printf("the sum is:%e.\n",s);}2、gaicuo2.cpp的功能是:输入两个不等的整数分别给x和y,输出其中的大数。
程序有两处错误,在****found****处附近有错,请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void main( ){ int x,y;printf("Enter x & y:\n");scanf("%d%d",&x,&y);if(x<y)printf ("max=%d",y) ;elseprintf ("max=%d",x) ;}3、gaicuo3.cpp的功能是交换两个数,若输入10和20,则输出20和10。
程序有两处错误,在****found****处附近有错,请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!#include <stdio.h>void main( ){int x,y,t;printf("Enter x & y:\n");scanf("%d%d",&x,&y);t=x;x=y; y=t;printf("x=%d y=%d",x,y) ;}4. gaicuo4.cpp的功能是输入一个整数,判别它是否能被3整除,若能整除,打印YES;不能打印NO。
计算机二级上机考试(程序改错题)1
程序编程题目1、第一大类(交换类)共7道2. 程序修改(第3套)给定程序中函数fun 的功能是:通过某种方式实现两个变量的交换,规定不允许增加语句和表达式。
例如变量a中的值原为8,b中的值原为3,程序运行后a中值为3,b 中的值为8./**found**/t=*x; *x=y;/**found**/return(t);2. 程序修改(第60套)给定程序中函数fun的功能是:实现两个整数的交换。
例如给a和b分别输入60和65,输出为:a=65 b=60/**found**/void fun(int *a,int *b)/**found**/t=*b;*b=*a;*a=t;2. 程序修改(第88套)给定程序中函数fun的功能是:将主函数中两个变量的值进行交换。
例如,若变量a中的值为8,b中的值为3,则程序运行后,a中的值为3,b中的值为8。
/**found**/void fun(int *x, int *y)/**found**/t=*x,*x=*y,*y=t;2、第二大类(计算类)共22道2. 程序修改(第1套)给定程序中函数fun的功能是:求出以下分数序列的前n项之和。
2/1+3/2+5/3+8/5+13/8+21/13+……和值通过函数值返回main函数。
例如n=5,则应输出:。
/**found**/double fun(int n)/**found**/s=s+(double)a/b;2. 程序修改(第6套)给定程序中函数fun的功能是:用递归算法计算列中第n项的值。
从第一项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……/**found**/switch(g)/**found**/case 1:case 2:return 1;2. 程序修改(第13套)给定程序中函数fun的功能是:求 s=aa…aa—…—aaa—aa—a(此处aa…aa表示n个a,a和n的值在1至9之间)。
例如,a=3,n=6,则以下表达式为:S=333333-33333-3333-333-33-3其值是296298。
c语言改错题题库及详解答案
c语言改错题题库及详解答案C语言是一种广泛使用的计算机编程语言,它以其高效性、灵活性和强大的功能而受到程序员的青睐。
然而,即使是经验丰富的程序员也难免会在编写C语言程序时犯一些错误。
下面是一个C语言改错题题库及其详解答案,帮助学习者识别并改正常见的编程错误。
题目1:错误的变量初始化```cint main() {int a;printf("%d", a); // 错误:变量a未初始化return 0;}```详解答案:在C语言中,如果一个变量在使用前没有被显式地初始化,它的值是不确定的。
为了修复这个错误,我们应该在声明变量时对其进行初始化。
```cint main() {int a = 0; // 正确的初始化printf("%d", a);return 0;}```题目2:错误的数组索引```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[5]); // 错误:数组索引越界return 0;}```详解答案:数组索引是从0开始的,所以对于一个有5个元素的数组,有效的索引范围是0到4。
访问数组的第6个元素会导致越界错误。
```cint main() {int arr[5] = {1, 2, 3, 4, 5};printf("%d", arr[4]); // 正确的索引return 0;}```题目3:错误的循环使用```cint main() {int i;for (i = 0; i <= 10; i++) {printf("%d ", i);} // 错误:循环条件错误return 0;}```详解答案:循环条件应该是`i < 10`,以确保循环不会无限执行。
```cint main() {int i;for (i = 0; i < 10; i++) {printf("%d ", i);}return 0;}```题目4:错误的函数调用```cint main() {int result = add(5, 3); // 错误:add函数未定义printf("%d", result);return 0;}```详解答案:在调用一个函数之前,需要确保该函数已经被定义。
历年上机练习系统部分程序改错题及答案共11页文档
程序调试1、#include <stdio.h>#include <string.h>void fun(char *s,char *t)int i,sl;sl=strlen(s);for(i=0;i<sl;i++)t[i]=s[i];for(i=0;i<sl;i++)/********1********/ // t[sl+i]=s[s1-1-i];t[sl+i]=s[sl-i];/********2********/t[sl]="\0"; // t[sl+s1]=’\0’; void main()char s[100],t[100];scanf("%s",s);fun(s,t);printf("%s",t);2、#include <stdio.h>void main(){ int n,i;scanf("%d",&n);/****** 1 ******/i=1;// i=2;while(n>1)if(n%i==0) {printf("%d\t",i);n/=i;else/******** 2 *******/n++;// i++;3、#include <stdio.h>#include <math.h>void main(){ int n,s=0;scanf("%d",&n);n=fabs(n);/******** 1 *******/while(n>1) { // 1}n 2}n!=0 s=s+n%10;/******** 2 ******/n=n%10; // n=n/10;printf("%d\n",s);4、#include <stdio.h>#include <math.h>#include <stdlib.h>void main()int i,n;/***** 1 *****/struct axy { float x,y; } a;//struct axy { float x,y; } *a; scanf("%d",&n);a=(float*) malloc(n*2*sizeof(float));for(i=0;i<n;i++)/***** 2 *****/scanf("%f%f",a[i].x,a[i].y);//scanf("%f%f",&a[i].x,&a[i].y);for(i=0;i<n;i++)if(sqrt(a[i].x*a[i].x+a[i].y*a[i].y)<=5)printf("%f,%f\n",a[i].x,a[i].y);5、#include<stdio.h>void itoa(long i,char *s)if(i==0)return;/****** 1 ******/*s = '1'+i%10;//*s = '0'+i%10;itoa(i/10,s-1);void main()long n;char str[7]="";scanf("%ld",&n);/****** 2 ******/itoa(n,str+6);// itoa(n,str+5);printf("%s",str);6、#include <stdio.h>#define N 10void main()int i,j,min,temp;int a[N]={5,4,3,2,1,9,8,7,6,0};printf("\nThe array is:\n"); /* 输出数组元素 */ for (i=0;i<N;i++)printf("%5d",a[i]);for (i=0;i<N-1;i++) /* 排序操作 */min = i;for (j=i+1; j<N; j++)/****** 1 ******/if (a[min]<=a[j]) min =j; // if (a[min]>=a[j]) /****** 2 ******/temp=a[min]; a[min]=a[j]; a[j]=temp; /* 数据交换 */// temp=a[min]; a[min]=a[i]; a[i]=temp; printf("\nThe sorted numbers: \n"); /* 输出排序结果 */for (i=0;i<N;i++)printf("%5d",a[i]);printf("\n");7、#include <stdio.h>void main()char s1[80],s2[40];int i=0,j=0;printf("\nInput the first string:");scanf("%s",s1);printf("\nInput the second string:");scanf("%s",s2);while (s1[i] !='\0')/****** 1 ******/i+1;// i= i+1;while (s2[j] !='\0')/****** 2 ******/s1[++i]=s2[++j];/* 拼接字符到s1 */ //s1[i++]=s2[j++];s1[i] ='\0';printf("\nNew string: %s",s1);8、#include <stdio.h>void main(){ int i,a,n,t=0;/***** 1 *****/s=0; // int s=0;scanf("%d%d",&a,&n);for(i=1;i<=n;i++) {/******* 2 ******/t=t*10+i; // t=t*10+1;s=s+t;s=s*a;printf("%d\n",s);9、#include <stdio.h>#include <math.h>void main(){ float x,eps,s=1,t=1,i=1;scanf("%f%f",&x,&eps);do {/***** 1 *****/t=-t*x/++i;// t = -t * x / i++;s+=t;/***** 2 *****/} while(fabs(t)<eps) // while(fabs(t)>=eps) ;printf("%f\n",s);10、#include <stdio.h>void main(){ float x,max,min; int i;/******** 1 *******/for(i=0;i<=10;i++) { // i<10循环的个数不对,如果i<=10话则i=1;那下面的应改为i==1scanf("%f",&x);/******* 2 ********/if(i=1) { max=x;min=x;} // i==0保证第一次时条件成立if(x>max) max=x;if(x<min) min=x;printf("%f,%f\n",max,min);11、#include <stdio.h>#include <string.h>void main()char str[256];int i,j,k=0,n;gets(str);n=strlen(str);for(i=0;i<n;i++)/********1********/if (tolower(str[i])<'a' || tolower(str[i])>'z')// (str[i])>='a' && (str[i])<='z'||(str[i] )>='A' && (str[i] )<='Z')或tolower(str[i])<'a' && tolower(str[i])>'z' /********2********/str[n]=str[i]; n++; //{str[k]=str[i]; k++;}str[k]='\0';printf("%s\n",str);12、在考生目录下,有Modify.c程序,该程序中”/******N******/”的下一行中有错误,请改正(注意:不得加行、减行、加句、减句,否则后果自负)。
