C语言上机改错题解
国家二级c语言上机考试分类程序改错
改错1#include <stdio.h>/************found************/void 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 = s + (Double)a / b;c = a; a = a + b; b = c;}return s;}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;2#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));}【参考答案】(1)for(i=0;str[i];i++)(2)if(substr[k+1]== ′\0′)3#include <stdio.h>int fun(int *x,int y){int t ;/**************found**************/ t = x ; x = y ;/**************found**************/ return(y) ;}main(){int a = 3, b = 8 ;printf("%d %d\n", a, b) ;b = fun(&a, b) ;printf("%d %d\n", a, b) ;}【参考答案】(1)t = *x ; *x = y ;(2)return(t) ;或return t;4#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);}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);}【参考答案】(1) t=a;a=b;b=t;(2) return(b);或return b;5、#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(){ long s, t;printf("\nPlease enter s:"); scanf("%ld", &s);fun(s, &t);printf("The result is: %ld\n", t);}【参考答案】(1)*t=0;(2)if(d%2!=0)或if(d%2==1)6#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) );}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);}【参考答案】(1) 去掉分号(2) case 1:case 2:return 1;7#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){/**********found**********/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"); }【参考答案】(1) b[k]=*p;(2) b[k]=′′;k++;8#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 );}main( ){char tt[81];printf( "\nPlease enter a string: " );gets( tt );printf( "\nThe result string is:\n%s", fun( tt ) ); }【参考答案】(1)if(( tt[i]>=a′)&&( tt[i] <= ′z′)(2)tt[i]-=32;9#include <stdio.h>#include <string.h>#define MAXLINE 20fun ( 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 + 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]) ;}【参考答案】(1)for (j = i + 1; j < 6; j++)(2)*(pstr + i) = *(pstr + j) ;10#include <stdio.h>long fun (long num){/************found************/long k;do{ k*=num%10 ;/************found************/num\=10 ;} while(num) ;return (k) ;}main( ){ long n ;printf("\nPlease enter a number:") ; scanf("%ld",&n) ; printf("\n%ld\n",fun(n)) ;}【参考答案】(1)long k=1;(2)num /=10;11#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; }}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);}【参考答案】(1)float k;(2)if(*a< *c)12#include <stdio.h>long fun (int a, int n){ int j ;/**************found**************/long s = 0, t = 1 ;for ( j = 0 ; j < n ; j++)t = t * 10 + a ;s = t ;for ( j = 1 ; j < n ; j++) {/**************found**************/t = t % 10 ;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 ) ); }【参考答案】(1)long s=0, t=0;(2)t=t/10;13#include <stdio.h>long fun (int a, int n){ int j ;/**************found**************/long s = 0, t = 1 ;for ( j = 0 ; j < n ; j++)t = t * 10 + a ;s = t ;for ( j = 1 ; j < n ; j++) {/**************found**************/t = t % 10 ;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 ) ); }【参考答案】(1)long s=0, t=0;(2)t=t/10;14#include <stdio.h>int fun( int *b ){ int k,a1,a2,i=0;for(k=10; k<=55; k++) {/************found************/a2=k/1O;a1=k-a2*10;if((k%3==0 && a2==5)||(k%3==0 && a1==5)){ b[i]=k; i++; }}/************found************/return k;}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"); }【参考答案】(1)a2=k/10;(2)return i;15#include <stdio.h>/************found************/void 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") ;}【参考答案】(1)void fun(char *a)(2)printf("%c" ,*a) ;16#include <stdio.h>int fun( char *p ){ int n;/**********found**********/n= *P-'o';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);}【参考答案】(1)n= *p-′0′;(2)n=n*8+*p-′0′;17#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){ *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);}【参考答案】(1)if(d%2==0)(2)s/=10;18#include <stdio.h>#include <math.h>int fun( int high ){ int sum = 0, n=0, j, yes;/************found************/while ((high >= 2) && (n < 10){ 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));}【参考答案】(1)while((high>=2) && (n<10))(2)yes=0; break;19#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];/************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"); }【参考答案】(1)s[j++]=s[i];或{s[j]=s[i];j++;}(2)s[j]= ′\0′;20#include <stdio.h>/************found************/void fun (long s, long t){ long sl=10;*t = s % 10;while ( s > 0){ s = s/100;*t = s%10 * sl + *t;/************found************/sl = sl*100;}}main(){ long s, t;printf("\nPlease enter s:"); scanf("%ld", &s);fun(s, &t);printf("The result is: %ld\n", t);}【参考答案】(1)void fun(long s,long *t)(2)s1=s1*10;21#include <stdlib.h>#include <conio.h>#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);elsereturn(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}void main(){ system("CLS");printf("%f\n", fun(5));}【参考答案】(1)double f(double x)(2)return s ;22#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;}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);}【参考答案】(1)fun(int x,int y, int z)或int fun(int x,int y,int z)(2)return j;23#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 )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); 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");}【参考答案】(1)while( *r)(2){*a=*r;a++;r++;}24#include <stdio.h>#include <string.h>#define N 5#define M 81/**********found**********/fun(char (*sq)[M]){ int i; char *sp;sp=sq[0];for(i=0;i<N;i++)if(strlen( sp)<strlen(sq[i]))sp=sq[i] ;/**********found**********/return sq;}main(){ char str[N][M], *longest; int i;printf("Enter %d lines :\n",N);for(i=0; i<N; i++) gets(str[i]);printf("\nThe N string :\n",N);for(i=0; i<N; i++) puts(str[i]);longest=fun(str);printf("\nThe longest string :\n"); puts(longest); }【参考答案】(1)char *fun(char (*sq)[M])(2)return sp;25#include <stdio.h>#define N 10/************found************/void fun(int a[], int m ){ 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");}【参考答案】(1)int fun(int a[],int m)或fun(int a[],int m)(2)else if(m>a[mid])26#include <stdio.h>/************found************/void fun (long s, long t){ long sl=10;s /= 10;*t = s % 10;/************found************/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);}【参考答案】(1)void fun(long s,long *t)(2)while(s>0)27#include <stdio.h>#include <math.h>/**********found**********/fun(double a, dounle x0){ double x1, y;x1=(x0+ a/x0)/2.0;/**********found**********/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)); }【参考答案】(1)double fun(double a,double x0)(2)if(fabs(x1-x0)>=0.00001)28#include <stdio.h>#define N 20void fun(int a[], int n){ int i, j, t, p;for (j = 0 ;j < n-1 ;j++) {/************found************/p = jfor (i = j;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");}【参考答案】(1)p=j ;(2)p=i;29#include <stdio.h>#include <math.h>#include <stdlib.h>/************found************/#define FU(m,n) ((m/n))float fun(float a,float b,float c){ float value;value=FU(a+b,a-b)+FU(c+b,c-b);/************found************/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);}【参考答案】(1)#define FU(m,n) (m)/(n)(2)return (value);30#include <stdio.h>#include <string.h>#define N 80void insert(char *aa){ int i,j,n; char ch;/**********found**********/n=strlen[ aa ];for( i=1; i<n ;i++ ) {/**********found**********/c=aa[i];j=i-1;while ((j>=0) && ( ch<aa[j] )){ aa[j+1]=aa[j];j--;}aa[j+1]=ch;}}main( ){ char a[N]="QWERTYUIOPASDFGHJKLMNBVCXZ";printf ("The original string : %s\n", a);insert(a) ;printf("The string after sorting : %s\n\n",a );}【参考答案】(1)n=strlen( aa ) ;(2)ch=aa[i];31.#include <stdlib.h>#include <conio.h>#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;}void main(){ int n;system("CLS");printf("\nPlease enter n: ");scanf("%d",&n);if(fun(n)) printf("YES\n");else printf("NO!\n");}【参考答案】(1)正确:k++;(2)正确:if(m==k)32.#include <stdio.h>#include <string.h>/************found************/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';}main(){char s[100], t[100];printf("\nPlease enter string S:"); scanf("%s", s);fun(s, t);printf("\nThe result is: %s\n", t);}【参考答案】(1)void fun ( char *s , char *t )(2)t[2*d]='\0';或t[d+i]='\0';或t[2*d]=0;或t[d+i]=0;33.#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) ;return( y ) ;}main( ){ int n = 5 ;printf( "\nThe result is %lf\n", fun ( n ) ) ;}【参考答案】(1)for(i=2;i<=m;i++)(2)y+=1.0/(i*i);或y+=(double)1.0/(i*i)34.#include <stdlib.h>#include <conio.h>#include <stdio.h>#include <string.h>#define N 80void 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)t[j++]=s[i] ;/*************found**************/t[i]='\0';}void main(){char s[N], t[N];system("CLS");printf("\nPlease enter string s :");gets(s);fun(s,t);printf("\nThe result is :%s\n",t);}【参考答案】(1)if(i%2 || s[i]%2==0) 或 if(i%2 !=0 || s[i]%2==0)(2)t[j]= ′\0′; 或 t[j]=0;35.#include <stdio.h>#define N 20int 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;else{ for(i=p;i<n-1;i++)/**********found**********/a[i+1]=a[i];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");}}【参考答案】(1)if(p==n) return -1;(2)a[i]=a[i+1];36.#include <stdlib.h>#include <conio.h>#include <string.h>#include <stdio.h>#define N 80int fun(char *s,char *t){ int n;char *p, *r;n=0;p=&s[0];/*************found**************/*r=t;while(*p){if(*r==*p){r++;if(*r=='\0'){n++;/*************found**************/【1】;}}p++;}return n;}void main(){char a[N],b[N]; int m;system("CLS");printf("\nPlease enter string a: ");gets(a);printf("\nPlease enter substring b: ");gets(b);m=fun(a,b);m=printf("\nThe result is :m=%d\n",m);}【参考答案】(1)r=t;(2)应填:r=t;或r=&t[0];37.#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){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) ;}【参考答案】(1)while(fabs(t)>=num)(2)t=s/n;38.#include <stdlib.h>#include <stdio.h>#include <ctype.h>#include <conio.h>void fun(char *s)/*************found**************/{ while(*s!= '@'){ 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)++;}}void main(){ char s[80];system("CLS");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);}【参考答案】(1)while(*s)或while(*s!='\0')(2)s++;39.#include <stdlib.h>#include <stdio.h>#include <conio.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];/*************found**************/s[j]=”\0”;}void main(){char item[80];system("CLS");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); }【参考答案】(1)s[j++]=s[i];(2)s[j]= '\0';40.#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;}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 ));}【参考答案】(1)double sum=0.0;(2)sum/=c;41.#include <stdio.h>#include <string.h>void fun (char *s, char *t1, char *t2 , char *w){char *p , *r, *a=s;strcpy( w, s );/************found************/while ( w ){ p = w; r = t1;while ( *r )/************found************/IF ( *r == *p ){ r++; p++; }else break;if ( *r == '\0' ) a = w;w++;}r = t2;while ( *r ){ *a = *r; a++; r++; }}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); if ( strlen(t1)==strlen(t2) ){ fun( s, t1, t2, w);printf("\nThe result is : %s\n", w);}else printf("\nError : strlen(t1) != strlen(t2)\n");}【参考答案】(1)while (*w)(2)if ( *r ==*p )42.#include <stdlib.h>#include <conio.h>#include <string.h>#include <stdio.h>#include <malloc.h>#define N 10typedef struct ss{ char num[10];int s;} STU;STU *fun(STU a[], int m){ STU b[N],*t;int i, j,k;/*************found**************/*t=calloc(m,sizeof(STU));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].num=b[j].num;t[k].s=b[j].s;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 ");}void 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;system("CLS");printf("*****THE RESULT*****\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);}【参考答案】(1)t=calloc(m,sizeof(STU));(2)t[k]=b[j];43.#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;}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);}【参考答案】(1)double r ;(2)while (fabs(n-m) >0.001)44.#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];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, s1;(2)t[i]=s[s1-i-1];45.#include <math.h>#include <stdio.h>double fun(double eps){ double s,t; int n=1;s=0.0;/************found************/t=0;while( t>eps){ s+=t;t=t * n/(2*n+1);n++;}/************found************/return(s);}main(){ double x;printf("\nPlease enter a precision: "); scanf("%lf",&x);printf("\neps=%lf, Pi=%lf\n\n",x,fun(x));}【参考答案】(1)t=1.0;(2)return(s*2);46.#include <stdio.h>#include <stdlib.h>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++ )if ( a[p]>a[i] )/************found************/t=i;if ( p!=j ){ t = a[j]; a[j] = a[p]; a[p] = t; }}}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]={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 );。
c语言改错题及答案
c语言改错题及答案【篇一: c 语言二级上机(t 填空 ,改错 ,编程 )题库及答案】100套题目(每套题目包含 3 道题:一道程序填空题、一道程序修改题、一道程序设计题),真实考试的时候,考生输入准考证后计算机随机为你抽取一套考试,每个考生考试时只需考一套题目(包含三道题)二级 c 语言上机试题汇编※※※※※※※※※※※※※※※※※※※※※※※第01套:给定程序中,函数 fun 的功能是:将形参 n 所指变量中,各位上为偶数的数去除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针 n 传回所指变量。
例如,输入一个数:27638496 ,新的数:为739 。
请在程序的下划线处填入正确的内容并把下划线删除 , 使程序得出正确的结果。
注意:源程序存放在考生文件夹下的blank1.c中。
不得增行或删行,也不得更改程序的结构!给定源程序:#include stdio.hvoid fun(unsigned long *n){ unsigned long x=0, i; int t;i=1;while(*n)/**********found**********/{ t=*n % __1__;/**********found**********/if(t%2!= __2__){ x=x+t*i; i=i*10; }*n =*n /10;}/**********found**********/*n=__3__;}main(){ unsigned long n=-1;while(n99999999||n0){ printf(please input(0n100000000): ); scanf(%ld,n); }fun(n);printf(\nthe result is: %ld\n,n);}【参考答案】(1)10 (2) 0 (3) x解题思路:第一处: t 是通过取模的方式来得到*n 的个位数字,所以应填:10 。
@所有人,二级C语言上机考试改错题总结!
@所有人,二级C语言上机考试改错题总结!1、if或while语句若错误行是if或者while语句,则要注意以下点:(1)首先判断是否正确书写if或while关键字;(2)然后看有没有用小括号把整个表达式括起来,若没有则加上小括号;(3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符;(4)若if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(= =)。
2.for语句若错误行是for语句,则要注意以下几点:(1)首先判断for有没有书写正确;(2)然后看for中的表达式是不是用分号(;)隔开,若不是则改为分号。
记住是分号(;),不是逗号(,)!(3)再者,分析for中的三个表达式,是否符合题意。
3. return语句若错误行为return语句,则要注意以下几点:(1)首先看是不是正确书写return关键字;(2)然后看是不是缺少分号,若是则加上分号即可;(3)再者判断return后的变量或表达式是否正确;这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。
4. 赋值语句若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。
5. 定义语句若错误行是定义语句,则要注意:(1)首先分析变量类型名是否写对;(2)然后分析给变量赋初值是否正确;(3)若以上均不是,则看是不是少定义了某个变量或少了花括号。
6. 表达式错误问题若错误行中有整数1除以某个表达式或变量时,必须把整数1改为1.0;若变量或表达式是整型时,则只能进行强制类型转换。
7. 字符串类问题若错误行中有字符串结束符,则特别要要注意结束符有没有写错。
但是要区分清楚字符‘o’和数字’0’。
以及字符串结束标记‘\0’。
8. 指针类问题若错误行中有指针变量,并且该变量名之前没有指针运算符,则一般都是加上指针运算符。
9. 函数首部类问题若错误行是函数首部,则要注意:(1)首先看该行最后有没有分号,若有则删掉分号;若中间有分号则要改为逗号;(2)形参和实参类型不一致问题:① 若实参是个地址或数组名或指针变量名,则对应的形参肯定是指针或数组;②若实参是二维数组名,则对应的形参应该是指针数组或是二维数组;③若后面用到某形参的时候有指针运算符,则该形参比为指针类型;④若形参是二维数组或指向M 个元素的指针变量,则该二维的长度必须与main中对于数组的第二维的长度相同。
c语言题库改错题及详解答案
c语言题库改错题及详解答案C语言是一种广泛使用的计算机编程语言,它以其强大的功能和灵活性而闻名。
在学习和掌握C语言的过程中,练习题库中的改错题是提高编程技能的有效方式。
以下是一些常见的C语言改错题及其详解答案。
1. 题目:编写一个程序,计算并输出1到10的累加和。
错误代码:```cint main() {int sum = 0;for(int i = 1; i <= 10; i++) {sum = sum + i;}print("Sum is %d", sum);return 0;}```错误点: `print` 函数应为 `printf`。
正确代码:```c#include <stdio.h>int main() {int sum = 0;for(int i = 1; i <= 10; i++) {sum += i; // 可以简化为 sum += i;}printf("Sum is %d\n", sum);return 0;}```2. 题目:编写一个程序,判断输入的年份是否为闰年。
错误代码:```cint main() {int year;printf("Enter a year: ");scanf("%d", &year);if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {printf("%d is a leap year.\n", year);} else {printf("%d is not a leap year.\n", year);}return 0;}```错误点:逻辑判断的括号使用不正确。
正确代码:```c#include <stdio.h>int main() {int year;printf("Enter a year: ");scanf("%d", &year);if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {printf("%d is a leap year.\n", year);} else {printf("%d is not a leap year.\n", year);}return 0;}```3. 题目:编写一个程序,实现字符串的反转。
C语言改错题-含答案
第1题【程序改错】功能:先将在字符串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个随机整数从小到大排序。
计算机等级考试二级C语言上机改错题考点汇总
计算机等级考试二级C语言上机改错题考点汇总改错题的错误主要分为以下几类:1、if或while语句若错误行是if或者while语句,则要注意以下点:1)首先判断是否正确书写if或while关键字;2)然后看有没有用小括号把while或者if后面的条件表达式括起来,若没有则加上小括号;3)若条件表达式中有指针变量而且没有指针运算符时,则加上指针运算符; int *p;* 指针运算符4)若if条件表达式中只有一个等于号即数学等号(=),则要改写成两个等于号即逻辑等号(= =);5)若if条件表达式为其他的比较运算符,则一般是进行逆转或加一个等于号;2、for语句若错误行是for语句,则要注意以下几点:1)首先判断for有没有书写正确;2)然后看for中的表达式是不是用分号(;)隔开,不是则改为分号。
记住是分号(;),不是逗号(,)!3) 再者,分析for中的三个表达式,是否符合题意;第一个表达式表示起始条件,第二个表达式表示终止条件,第三个表达式表示循环变量的变化。
3、return语句若错误为return语句,则要注意以下几点:1)首先看是不是正确书写return关键字;2)然后看是不是缺少分号,若是则加上分号即可;3)再者判断return后的变量或表达式是否正确;4)函数开头的返回值类型与return 返回类型一致,这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。
4、赋值语句若错误行是赋值语句,则要看赋值是否正确,然后看赋值运算符是否写正确。
5、定义语句若错误行是定义语句,则要注意:1)首先分析变量类型名是否写对, 前后对应;2)然后分析给变量赋初值是否正确;3)若以上均不是,则看是不是少定义了某个变量或少了花括号;int i,sum;6、表达式错误问题:若错误行中有整数1除以某个表达式或变量时,需要double或float类型结果时必须把整数1改为1.0; double a=1/b; b int若变量或表达式是整型时,进行强制类型转换。
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;}```详解答案:在调用一个函数之前,需要确保该函数已经被定义。
计算机等级C语言上机考试填空题和改错题技巧
计算机等级C语言上机考试填空题分类总结填空题是计算机等级考试中的难点,占有的分值为30分。
做填空题时注意掌握答题技巧。
填空题的分类(分为7类):解题方法:1、如果在函数中定义变量,但是没有定义成静态存储变量,即变量前面没有static,应给变量赋初值,如果以后用到的是加减运算,则赋初值为0或者0.0;如果以后用到的是乘除运算,则赋初值为1或者1.0;2、循环条件的填空,分析表达式的规律,看表达式中的最后一项的值是否到了第m项或者是第n项,如果到了第m或者第n项,则在循环中的第二个表达式中用到的是i<=m或者是i<n;3、循环条件中如果用的是while语句,则循环变量的初值应该在while的外面定义和赋初值,在循环语句中必须给变量自加或者是自减。
如果没有则一般填的是i++;4、看表达式中的每一项的运算规则,按照运算的规则把每一项中n值替换为i,特殊情况例外。
如果表达式中用到的是间隔相加减的运算时,注意给中间变量赋初值为1或者是1.0;在后面的运算中给变量乘以一个-1,以改变中间变量的符号。
1、循环的条件是判断该字符是否和结束符相等,如果相等,说明该字符串结束,否则说明没有结束,继续循环。
2、把一个数字字符转变成对应的数值的格式是:ch=ch-‘0’;把大写字母转变为小写字母的格式;ch=ch+32;把小写字母转变为大写字母的格式为:ch=ch-32;3、区分好字符数组中的指针和指针所指的值的关系。
在循环语句中,当指针往后走一个位置的时候,用的是指针的自加,而不是指导针所指的值的自加。
4、掌握字符数组中的函数的使用的格式。
即:strlen、strcmp、strcpy、sizeof、strcat的使用格式。
注意里面的格式中使用的都是指针(或地址)。
5、字符数组结果时都有一个结束符:’\0’;在字符数组中的题目中的结束后要加上一个结束符。
结构体类型的题目1、看清题目的意思。
2、定义结构体变量时的格式。
c语言改错题题库及详解答案
c语言改错题题库及详解答案1. 题目:以下代码段中存在错误,请找出并改正。
```c#include <stdio.h>int main() {int a = 10;int b = 20;int c = a + b;printf("The sum is %d", c);return 0;}```答案:代码中缺少了字符串结束的空格。
应改为:```cprintf("The sum is %d ", c);```2. 题目:找出并改正以下代码段中的错误。
```c#include <stdio.h>int main() {int num = 100;if (num = 100)printf("Number is 100\n");return 0;}答案:代码中使用了赋值运算符 "=" 而不是比较运算符 "=="。
应改为:```cif (num == 100)```3. 题目:以下代码段中存在逻辑错误,请指出并改正。
```c#include <stdio.h>int main() {float a, b, c;scanf("%f %f", &a, &b);c = a / b;printf("The result is %f", c);return 0;}```答案:代码中没有检查除数 b 是否为 0,这会导致运行时错误。
应添加检查:```cif (b != 0) {c = a / b;printf("The result is %f", c);} else {printf("Error: Division by zero.\n");}```4. 题目:找出并改正以下代码段中的语法错误。
c语言上机题库改错题
return(y);
}
main()
{
int n=5;
clrscr();
printf("\nThe result is %1f\n",fun(n));
}
程序第一处改错将for(i=2;i<m;i++)修改为for(i=2;i<=m;i++)
{
while(*s)
{
/********found********/
if (*s>='A'&&*s<='Z')
a++;
/********found********/
if(*s>='a'&&*s<='z')
gets(s);
fun(s, &upper, &lower);
printf("\n upper=%d lower=%d\n", upper,lower);
}
第一处改错处应该将以下语句
void fun(char *s,int a,int b)
修改为
a[n]=x;
while(x!=a[p])
{
p=p+1;
}
if(p==n)
return -1;
else
{
/********found********/
for(i=p;i<n;i++)
if(n==-1)
printf("***Not be found!***\n\n");
福建省计算机二级考试C语言上机题库改错填空编程
二、改错题Cmody191.c修改程序,用以计算1~100之间所有的偶数之和。
#include <stdio.h>#include <math.h>void main( ){int i=1;/**/ int sum=2 /**/;while(i++,i<=100){ if(/**/ i==(i/2)*2 /**/)continue;sum+=i;}printf("Sum is %d\n",sum);getch();}Cmody192.c修改程序,将二维数组表示的方阵左下半三角(不含对角线)各元素加4,右上半三角(含对角线)各元素乘2。
#include <stdio.h>#define N 5void main(){int a[N][N],i,j;for(i=0;i<N;i++)for(j=0;j<N;j++)a[i][j]=i*5+j+11;printf("\nArray a is:\n");for(i=0;i<N;i++){for(j=0;j<N;j++) printf("%3d ",a[i][j]);printf("\n");}for(i=0;i<N;i++)/**/ for(j=0;j<=i;j++)/**/a[i][j]+=4;for(i=0;i<N;i++)/**/ for(j=i+1 ;j<N;j++) /**/a[i][j]*=2;printf("\nArray a is turned:\n");for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%3d ",a[i][j]);printf("\n");}getch();}Cmody201.c修改程序,计算满足以下条件的整数n的最大值。
计算机二级C语言上机改错题考点总结
XX年计算机二级C语言上机改错题考点总结对上机改错题的做题方法和总结,改错题的错误主要分为以下几类:假设错误行是if或者while语句,那么要注意以下点:1)首先判断是否正确书写if或while关键字;2)然后看有没有用小括号把整个表达式括起来,假设没有那么加上小括号;3)假设条件表达式中有指针变量而且没有指针运算符时,那么加上指针运算符;4)假设if条件表达式中只有一个等于号即数学等号(=),那么要改写成两个等于号即逻辑等号(= =);5) 假设if条件表达式为其他的比较运算符,那么一般是进展逆转或加一个等于号;假设错误行是for语句,那么要注意以下几点:1)首先判断for有没有书写正确;2)然后看for中的表达式是不是用分号(;)隔开,假设不是那么改为分号。
记住是分号(;),不是逗号(,)!3) 再者,分析for中的三个表达式,是否符合题意;第一个表达式表示起始条件,第二个表达式表示终止条件,第三个表达式表示循环变量的变化。
假设错误行为return语句,那么要注意以下几点:1)首先看是不是正确书写return关键字;2)然后看是不是缺少分号,假设是那么加上分号即可;3)再者判断return后的变量或表达式是否正确;这种错误需要根据题意来分析,分析返回变量或表达式的值和类型。
4、赋值语句假设错误行是赋值语句,那么要看赋值是否正确,然后看赋值运算符是否写正确。
假设错误行是定义语句,那么要注意:1)首先分析变量类型名是否写对;2)然后分析给变量赋初值是否正确;3)假设以上均不是,那么看是不是少定义了某个变量或少了花括号;假设错误行中有整数1除以某个表达式或变量时,必须把整数1改为1.0;假设变量或表达式是整型时,那么只能进展强制类型转换。
假设错误行中有字符串完毕符,那么特别要要注意完毕符有没有写错。
但是要区分清楚字符‘o’和数字’0’。
假设错误行中有指针变量,并且该变量名之前没有指针运算符,那么一般都是加上指针运算符;假设错误行是函数首部,那么要注意:1)首先看该行最后有没有分号,假设有那么删掉分号;假设中间有分号那么要改为逗号;2)形参和实参类型不一致问题①假设实参是个地址或数组名或指针变量名,那么对应的形参肯定是指针或数组;②假设实参是二维数组名,那么对应的形参应该是指针数组或是二维数组;③假设后面用到某形参的时候有指针运算符,那么该形参比为指针类型;④假设形参是二维数组或指向M个元素的指针变量,那么该二维的长度必须与main中对于数组的第二维的长度相同。
二级C上机之改错题做题方法和技巧
二级C语言上机改错题做题方法和技巧总结一、改错题之方法步骤1.上机考试中改错题占18,一般有两个地方有错误,题型简单2.做改错题时先看出错的地方,分析语法错误,如果能用C语言的语法判断出错误,改之即可3.没有语法错误即分析逻辑错误,逻辑错误可以从几个方面分析:(1)从题目的要求中找到错误,例如:题目要求计算s=1+1/2+1/3+…+1/n,那么循环的范围就应该是for(i=0;i<=n;i++),但是考试中经常将其写为:for(i=0;i<n;i++) (2)根据题目中的关键字改错,例如:题目中要求从小到大排序,则“从小到大”就是关键字(3)重点注意函数的调用、函数的返回值类型,函数的形参,这个是上机考试中的重点(4)注意细节,请参考以下为考生总结的知识(5)多练习,多思考,多总结二、改错题之语法错误1.关键字出错(1)关键字出错,指的是C语言中的关键字出错。
C语言的关键字都是小写字母,并且在VC++6.0中以蓝色字体显示,如果常见的关键字是黑色字体,可以断定关键字出错;(2) if关键字出错/************found************/If(substr[k+1]=='\0')(3) double关键字出错/**********found**********/double fun(double a, dounle x0)(4) while关键字出错/**********found**********/wihle( q>p )(5) return关键字出错/************found************/Return(Value);2.格式出错(1) C语言中的语句、基本结构、函数等都有相应的规范格式,程序中将这些格式书写错误,将导致编译器无法识别程序,因此导致出错;(2)语句末尾少分号1)分号是语句结束的标志,每个语句都必须以分号结尾2)举例:3) /**********found**********/q=p+i(3) for结构格式出错1)for结构的格式:for(表达式1;表达式2;表达式3){ 循环体语句 },for结构体中表达式必须以分号隔开,改错题中经常出现将for结构中分号错写为逗号的情况;2)举例:/************found************/for( i = 100, i <= m, i += 100 )(4) if结构格式出错1)if结构的格式:if(表达式),if后面必须加上小括号2)举例:/************found************/if n = = 0(5)数组格式出错1)一维数组的定义形式:类型名数组名[常量表达式],谨记[]是数组的独有特征2)举例:/**********found**********/t(k)=b(j);3)举例2:(二维数组不能省略列下标)/************found************/int fun(int n, int xx[][])(6)函数格式出错1)记住函数名后面一定是花括号,不能是方括号,方括号只有在数组下标中用到2)举例:/**********found**********/n=strlen[ aa ];3)scanf(输入控制,输入数据列表),scanf函数中输入数据列表要求为变量的地址4)举例2:/*********found**********/scanf("%d",a[i][j]);(7)命令行格式错误1)#include “stdio.h”,include和define前面都必须有#2)举例:/************found************/include (stdio.a)3.使用了未定义的变量:变量必须先定义后执行(1)0(零)和o(字母欧)的区别1)区别:零像鸡蛋,字母欧像乒乓球2)举例:/************found************/a2=k/1o;(2)P(大)和p(小)的区别1)区别:一般在定义时候p为小写,但是在使用的时候变为大写P,做题时候一定要细心2)举例: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;(3)普通变量大小写的区别1)定义时候和使用时候变量的大小写不一致,违背了变量必须“先定义后执行”的原则2)举例: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 ;/*分析:定义时候float ave, t = 0.0 ;ave为小写,但是此时使用时候却是Ave大写,因此出错*/return count ;}三、改错题之逻辑错误1.运算符号出错:(1)C语言中除号是“/”不是“\”(2)赋值号(=)和等号(= =)混淆1)记住在if语句中出现赋值号(=)一般是讲它改为等号(= =)。
计算机二级C上机:程序改错题
计算机二级C上机:程序改错题计算机二级C上机:程序改错题为了使广大考生在备战计算机等级考试时,更快的掌握相应知识点,下面是店铺搜索整理的计算机二级C上机:程序改错题,供参考练习,预祝考生们考出自己理想的成绩!程序改错题使用VC++6.0打开考生文件夹下的源程序文件1.cpp,该程序运行时有错,请改正程序中的错误,使程序输出的结果为150200注意:错误的语句在//******error******的下面,修改该语句即可。
提示:定义Numl为一个整型数据位长的`变量。
试题程序:#include//******error******struct{//******error******intNuml:1;intNum2;}MyStruct;voidmain(){MyStructmstr;mstr.Num1=150;mstr.Num2=15;//******error******int*ptr=&mstr.Numl;cout<<*ptr<<endl;*ptr=200;cout<<*ptr<<endl;}答案:(1)“typedefstruct”。
(2)“intNuml:32;”或“intNuml;”。
(3)“int*ptr=(int*)&mstr;”。
【解析】第1处是定义结构体,结构体定义的一般形式为struct(结构体名>{<成员列表>}(变量名列表);程序当中定义结构体名放在后面,MyStruct为结构体变量类型,相当于typedef为已有的类型定义一个新的类型,第1处应改为“typedefstruct”。
第2处是定义Numl为一个整型数据变量,整型数据位数为32(4字节),因此第2处应改成“intNuml:32;”或“intNuml;”。
ptr为整型数据指针,mstr为MyStruct类型结构变量,两者类型不一致应该做强制类型转换,第3处应改成“int*ptr=(int*)&mstr;”,表示将mstr的地址给ptr,ptr指向MyStruct的第一个域Numl,Numl也是整型,类型一致,故可通过ptr指针来改变Numl的值。
C语言程序改错——答案
C语言程序改错——答案(总33页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--程序改错--------------------------------------------------------请改正程序中的错误,使它能得出正确的结果。
注意:不可以增加或删除程序行,也不可以更改程序的结构。
------------------------------------------------------*/题目1:函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。
例如,若给num1和num2分别输入49 和21,则输出的最大公约数为7。
int fun(int a,int b) {int r,t;if(a<b){t=a;/**********FOUND**********/b=a;/**********FOUND**********/a=t;}r=a%b;while(r!=0){a=b;b=r;/**********FOUND**********/r=a/b;}/**********FOUND**********/return a;}int main(void){int num1,num2,a;scanf("%d%d",&num1,&num2);a=fun(num1,num2);printf("the maximum common divisor is %d\n\n",a);return 0;}答案:1). a=b;2). b=t;3). r=a%b;}4). return b; 或 return(b); 或 return(b);题目2:下列给定程序中,函数fun 的功能是:判断m是否为素数,若是返回1,否则返回0。
主函数的功能是:按每行5个输出1-100之间的全部素数。
请改正程序中的4个错误,使它能得出正确的结果。
全国计算机二级C语言上机(2改错题)
全国计算机二级C语言上机(2改错题)1、请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。
例如,字符串中原有的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是:DEFGHIJKABC。
注意:部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include#include#defineN80voidfun1(char某w)/某本函数的功能是将字符串中字符循环左移一个位置某/{inti;chart;t=w[0];for(i=0;ivoidfun(char某w,intm)/某可调用fun1函数左移字符某/{}main(){chara[N]=\intm;printf(\printf(\fun(a,m);printf(\printf(\NONO();}NONO(){/某请在此函数内打开文件,输入测试数据,调用fun函数,输出数据,关闭文件。
FILE某rf,某wf;chara[N];intm,i;rf=fopen(\wf=fopen(\for(i=0;i<10;i++){ fcanf(rf,\fun(a,m);fprintf(wf,\}fcloe(rf);fcloe(wf);某/}2、学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组中,请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数组中,分数范围内的学生人数由函数值返回。
例如,输入的分数是6069,则应当把分数在60到69的学生数据进行输出,包含60分和69分的学生数据。
主函数中将把60放在low中,把69放在heigh中。
注意:部分源程序在文件PROG1.C文件中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
C语言改错题真题解析(30题)
1.改错题(30题)第一题:#include<stdio.h>void main(){int a,b,c;/**/ float f; /**/ f为小数类型,具体下方f的输出用%f可看出为float 类型clrscr();printf("Please input a b :");scanf("%d%d",/**/&a,&b/**/);变量a,b必须取地址,除非数组名不取地址,因数组名就是地址f=/**/ (float)a/b; /**/ a,b均为整数,要获得结果的小数部分必须进行强制类型转换c=(int)((f-(int)f)*10);printf("\n%f %d\n",f,c);getch();}第二题:#include <stdio.h>void find(/**/int m /**/)参数类型必须指出,具体main函数中调用find函数的参数k为int 类型,所以对应的参数m也是int类型{int a1,a2;a1=m%10;求m的个位a2=m/10;求m的十位if(m%3==0 &&(/**/ a1==4 || a2==4 /**/))如果m能被3整除且个位或者十位是4 printf("%d\n",m);则输出m}void main(){ int k;for(k=10;k<=99;k++)k从10到99,一一尝试/**/ find( k ) /**/;调用函数find,函数的作用是寻找满足条件的数getch();}第三题:#include<stdio.h>void main(){/**/ int a,tag; /**/语法错误c语言的变量区分大小写,程序中用到小写tag,此处改为小写int num1=0,num2=0; num1和num2分别为大于个数和小于个数的计数器,程序开始归零clrscr();printf("please input numbers :");scanf("%d",/**/ &a /**/);语法错误变量a需取地址,输入第一个数tag=a;将第一个数放入tag中while(a)程序以0结束,循环的条件为:只要不输入0{ scanf("%d",&a);程序循环输入数字,存入a/**/ if(!a) /**/ continue;逻辑错误,程序执行的条件,a不为0else if(a<tag) num1++;如果a中数比tag小,计数器num1增加1else if(a>tag) num2++;如果a中数比tag大,计数器num2增加1}printf("\n%d %d\n",num1,num2);getch();}第四题:#include <stdio.h>long int fsum(int n) fsum函数用于求阶乘{long int k;if(n==1)/**/ k=1 /**/;逻辑错误,1的阶乘为1elsek=n*fsum(n-1);n的阶乘为n-1的阶乘乘以nreturn (/**/ k /**/);逻辑错误,运算结果在k中}void main(){ int i;long int sum;sum=0;for(i=1;i<=9;/**/ i++,i++ /**/)语法错误for语句格式不符sum+=fsum(i);printf("sum=%ld\n",sum);getch();}第五题:#include<stdio.h>void main(){ int i,a=0;/**/char c1,c2; /**/ 语法错误c1,c2为字符类型,程序中用getchar()获取clrscr();printf("Enter an 8 bit binary number :");c2=getchar();/**/ for(i=1;i<=7;i++) /**/语法错误for语句中间为;{ c1=getchar();a=a*2+c1-'0';}/**/ if (c2=='1') /**/ a=(-1)*a;如果依照题意c2=='1',a是负数printf("\n%d \n",a);getch();}第六题:#include<stdio.h>void main( ){int i,n;/**/ n = 0; /**/n为计数器,从0开始for(i=10;i<=100;i++)判断10-99是否是对称数if(i/10==i%10) i/10得到十位,i%10得到个位,若相等则是对称数{printf("%5d",i);输出对称数n++;计数器增加1if(/**/ n%9==0 /**/)语法错误表示相等的关系用双等号;printf("\n");9个数一行输出,换行}for(i=100;i<=999;i++)判断100-999是否是对称数if(/**/ i/100==i%10 /**/) i/100得到百位,i%10得到个位,若相等则是对称数{printf("%5d",i);n++;if(n%9==0)printf("\n");}getch();}第七题:#include <stdio.h>void main(){/**/ int a[10]; /**/语法错误数组下标用中括号;int i,j,k,x;printf("Enter 10 numbers:");scanf("%d",/**/ &x /**/);语法错误x需取地址;a[0]=x;for(k=1;k<=9;k++){ scanf("%d",&x);for(i=0;i<k;i++)if (a[i]>x) break;if(i<k)for(j=k;j>i;j--) a[j]=a[j-1];a[i]=x;}/**/ for(i=0;i<10;i++) /**/逻辑错误,数组下标从0开始printf("%d ",a[i]);printf("\n");getch();}第八题:#include <stdio.h>#include <math.h>int fun( /**/ float a,float b,float c /**/)语法错误函数三个参数的类型此处必须列出;{float t;int mk = 0;if(c<a){ t = a; a = c; c = t;}if(c<b){ t = b; b = c; c = t;}通过以上两次比较将最大的边放入c中if( fabs( c*c - (a*a+b*b)) < 1.0e-8)mk = 1;/**/ return mk; /**/}main(){float a,b,c;printf("Please input three numbers(a b c):\n");scanf("%f%f%f",&a,&b,&c);if(/**/ fun(a,b,c) /**/== 1)法错误调用函数三个参数之间用,分隔;printf("Yes\n");elseprintf("No\n");getch();}第9题:基本思路:每一趟从待排序的数列中选出值最小(或最大)的数据,将它与当前待排序的子数列的最后一个数据进行交换,直到全部数据排序完毕。
C语言程序设计-上机改错题
程序改错1. 在下面的定义中,NODE是链表结点的结构,appendToList则是一函数,其功能是:在list 所指向的链表的末尾添加一个新的值为x的结点,并返回表头指针。
函数中有两处错误,指出错误所在行的行号并提出改正意见。
struct NODE{int data;NODE *next;};NODE* appendToList(NODE *list, int x){ //1行NODE *p=new int; //2行p->data=x; //3行p->next=NULL; //4行if(list==NULL) return p; //5行NODE *p1=list; //6行while(p1->next!=NULL) p1=p1->next; //7行p1=p; //8行return list;}错误行的行号为______和________。
分别改正为______________和______________。
2. 在下面的定义中,NODE是链表结点的结构,addToList则是一函数,其功能是:将一个值为x的新结点添加到以plist为表头指针的链表的首部(即第一个结点的前面)并返回表头指针。
函数中有两处错误,指出错误所在行的行号并提出改正意见。
struct NODE{int data;NODE *next;};NODE* adndToList(NODE * plist, int x){ //1行NODE *p; //2行*p=new NODE; //3行p->data=x; //4行p->next=NULL; //5行plist=p; //6行return p; //7行}错误行的行号为______和________。
分别改正为______________和______________。
程序改错参考解答1. 2 8NODE *p=new NODE; p1->next=p;2. 3 5p=new NODE; p->next=plist;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、fibonacci1、已知fibonacci数列:1,1,2,3,5,8,......,以下程序是求F(30),请修改程序中的错误:(832040)#include <math.h>#include <stdio.h>main(){double f1,f2;int i;f1=1;f2=1;for (i=1;i<=30;i++) ** for (i=1;i<=14;i++){f1=f1+f2;f2=f2+f1;}clrscr();printf("\n the number is :%12.0lf",f1);}** printf("\n the number is :%12.0lf",f2);}2、已知fibonacci数列:1,1,2,3,5,8,...,以下程序是求F(1)+F(3)+F(5)+...+F(49)的值,请修改程序中的错误:(12586269025)#include <math.h>#include <stdio.h>main(){double f1,f2;double sum=2; ** double sum=1;int i;f1=2;f2=3; ** f1=1;f2=1;for (i=1;i<=19;i++) ** for (i=1;i<=24;i++){f1=f1+f2;sum=sum+f1;f2=f2+f1;sum=sum+f2; ** 去掉此句}clrscr();printf("\n the number is :%12.0lf",sum);}二、prime1、下面的程序是求1000以内的最大的20个素数之和。
请修改程序中的错误:(18580)#include <conio.h>#include <stdio.h>#include <math.h>int fun(int high){ int sum=0, n=0, j, yes;while((high>=2) ||(n<10))** while((high>=2) && (n<20)){yes=1 ;for(j=2; j<=sqrt(high); j++)if(high%j==0)yes=0; break; ** {yes=0; break;}if(yes) {sum+=high;n++;}high--;}return sum;}main(){ clrscr();printf("%d \n",fun(1000)); }2、下面的程序是求[100,999]之间所有的素数的个数。
请修改程序中的错误:(143) #include <conio.h>#include <stdio.h>#include <math.h>int prime(int n){ int yes, i;if(n<=1) {return 0;}yes=0; ** yes=1;for(i=2; i<=sqrt(n); i++)if(n%i!=0){ yes=0; break;}** if(n%i==0) { yes=0; break;}return yes;}main(){ int count=0, i;clrscr();for(i=100;i<999; i++)if(prime(i)) count+=1;printf("%d\n", count);}3、下面的程序是求[2,500]之间的所有的素数之和。
请修改程序中的错误:(21536) #include <conio.h>#include <stdio.h>#include <math.h>int prime(int n){ int yes, i;if(n<=1) {return 1;} ** if(n<=1) {return 0;}yes=1;for(i=2; i<=sqrt(n); i++)if(n%i==0){ yes=0; break;}return 1; ** return yes;}main(){ int sum=0, i;clrscr();for(i=2;i<=500; i++)if(prime(i)) sum+=i;printf("%d\n", sum);}三、平方和、立方和1、下面程序是求[20,400]之间的能被9整除的数的平方和。
请修改程序中的错误:(2378565) (特别注意提示数据类型)#include <conio.h>#include <stdio.h>#include <math.h>main(){long sum;int i; ** long i;sum=1; ** sum=0;for (i=20;i<=400;i++){if (fmod(i,9)==0)sum+=i*i;}clrscr();printf("%d\n",sum); **printf("%ld\n",sum);}2、下面程序是求[2,60]之间的所有偶数的立方和。
请修改程序中的错误:(1729800) #include <conio.h>#include <stdio.h>#include <math.h>main(){long sum;int i; ** long i;sum=0;for (i=2;i<=60;i++){if (fmod(i,2)==0)sum+=i*3; ** sum+=i*i*i;}clrscr();printf("%ld\n",sum);}四、整除求余:1、下列程序中,函数fun的功能是:计算并输出k以内的最大的10个能被13或17整除的自然数之和。
请改正程序中的错误,并运行正确的程序。
当从键盘输入500时,给出程序运行的正确结果。
(4622)#include <conio.h>#include <stdio.h>int fun(int k){ int m=0, mc=0, j;while((k>=2) || mc<10) ** while((k>=2) && mc<20){if ((k%13==0) && (k%17==0))**{ if ((k%13==0) || (k%17==0)){ m=m+1; mc++; } ** { m=m+k; mc++; }k--;}return m;}main(){ int k;clrscr();printf("\n 请输入整数:");scanf("%d", &k);printf("\n 结果是: %d\n",fun(k));}五、完数(6、28、496、8128) && 多因子完备数 && 24因子1、求10000以内的所有完全数的个数,请修改程序中的错误:(4)#include <conio.h>#include <stdio.h>#include <math.h>main(){int count,n,m,s,k;count=0;for (n=3;n<=10000;n++){s=1; ** s=0;k=n/2+1;for (m=1;m<k;m++)if (n%m==0)s+=1; ** s+=m;if (s==n){count+=1;}}printf("\nThe count=%d",count);}2、若某个整数N的所有因子之和等于N的倍数,则称N为多因子完备数。
例如,28是多因子完备数。
因为:1+2+4+7+14+28=56=28*2,下面程序求[1,700]间有多少个多因子完备数,请修改程序中的错误:(6)#include <conio.h>#include <stdio.h>#include <math.h>main(){int a,c,n,count=0;for (a=1; a<=700; a++){ b=0;for (c=2;c<=a;c++)if (a%c ==0)b=b+1; ** b+=c;if (b%a==0){count+=a; ** count++;}}printf("\n count = %d",count);}3、已知24有8个因子,而24正好被8整除。
下面程序求[1,100]之间有多少个整数能被其因子的个数整除,请修改程序中的错误:(16)#include <conio.h>#include <stdio.h>#include <math.h>main(){int a,b,c,n,count=0;for (a=1; a<=100; a++){b=1 ** b=0;for (c=1;c<=a;c++)if (a%c ==0)b=b+1;if (a%b==0){count=count+b; ** count++;}}printf("\n count = %d",count);}六、表达式计算:1、下列程序是求分数序列的前30项之和,2/1,3/2,5/3,8/5,13/8,21/13,......请改正程序中的错误:(48.840601)#include <conio.h>#include <stdio.h>main(){ long a,b,c,k;double s;clrscr();s=0.0; a=2; b=1;for(k=1;k<=30;k++)s=s+a/b; ** {s=s+(double)a/b;c=a; a=a+b; b=c; ** c=a; a=a+b; b=c; }printf("\n 结果: %lf\n", s);}2、下面的程序是计算如下公式的A15值。
A1=1, A2=1/(1+A1), A3=1/(1+A2),A4=1/(1+A3), ......请改正程序中的错误,并将结果按四舍五入保留10位小数:(0.6180344478)#include <conio.h>#include <stdio.h>double fun(int n){ int A=1.0;int i; ** double A=1.0;for(i=2; i<=n; i++)A+=1.0/(1+A); ** A=1.0/(1+A);return A;}main(){ clrscr();printf("%12.10lf\n", fun(15)); }3、下面的程序中,函数fun的功能是:根据形参m,计算下面公式的值T=1+1/(2*3)+1/(3*4)+......+1/(m*(m+1))。