/*------------------------------------------------------ 【程序改错】
--------------------------------------------------------
功能:将 m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指字符串中。
例如:把3个串:“abc”,“CD”,“EF”串连起来,结果是
“The result is: abcCDEF”。
------------------------------------------------------*/
#include
#include
#include
int fun ( char str[][10], int m, char *pt )
{
/**********ERROR**********/
int k, q, i
for ( k = 0; k < m; k++ )
{
q = strlen ( str [k] );
for (i=0; i /**********ERROR**********/ pt[i] = str[k,i] ; /**********ERROR**********/ 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) ; } 【改错1】正确 【学生答案】 int k, q, i; 【参考答案】 int k, q, i; ============================================================ 【改错2】错误 【学生答案】 pt[i] = str[k,i] ; 【参考答案】 pt[i] = str[k][i] ; ============================================================ 【改错3】错误 【学生答案】 pt = q ; 【参考答案】 pt += q ; pt=pt+q; ============================================================ /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:使数组左下三角元素中的值乘以n 。 ------------------------------------------------------*/ #include #include #include #define N 3 int fun ( int a[][N], int n ) { /**********ERROR**********/ int i;j; for(i=0; i < N; i++) /**********ERROR**********/ for(j=0; j /**********ERROR**********/ a[i][j]=*n; } main ( ) { int a[N][N], n, i, j; printf("***** The array *****\n"); for ( i =0; i<3;i++) { for ( j =0; j<3;j++) { a[i][j] = rand()%10; printf( "%4d", a[i][j] ); } printf("\n"); } do n = rand(); while ( n >=5||n<1 ); printf("n = %4d\n",n); fun ( a, n ); printf ("***** THE RESULT *****\n"); for ( i =0; i<3;i++) { for ( j =0; j<3;j++) printf( "%4d", a[i][j] ); printf("\n"); } 【改错1】正确 【学生答案】 int i,j; 【参考答案】 int i,j; ============================================================ 【改错2】错误 【学生答案】 for(j=1; j 【参考答案】 for(j=0; j<=i; j++) ============================================================ 【改错3】错误 【学生答案】 a[i][j]==n; 【参考答案】 a[i][j]*=n; ============================================================ /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:以下程序是用选择法对10个整数按升序排序。 -------------------------------------------------------*/ #include /**********FILL**********/ _____ main() { int i,j,k,t,a[N]; for(i=0;i<=N-1;i++) scanf("%d",&a[i]); for(i=0;i { /**********FILL**********/ _____ /**********FILL**********/ for(j=i+1; _____;j++) if(a[j] /**********FILL**********/ if(_____) { t=a[i]; a[i]=a[k]; a[k]=t; } } printf("output the sorted array:\n"); for(i=0;i<=N-1;i++) printf("%5d",a[i]); printf("\n"); } 【空1】错误 【学生答案】 _____ 【参考答案】 #define N 10 ============================================================ 【空2】错误 【学生答案】 _____ 【参考答案】 k=i ============================================================ 【空3】错误 【学生答案】 for(j=i+1; _____;j++) 【参考答案】 j N>j j<=N-1 N-1>=j ============================================================ 【空4】错误 【学生答案】 if(_____) 【参考答案】 k!=i i!=k ============================================================ /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:文件操作。 -------------------------------------------------------*/ # include # include void main() { /* 定义一个文件指针fp */ /**********FILL**********/ _____ *fp; char ch, filename[10]; printf("Please input the name of file: "); scanf("%s", filename); /* 输入字符串并赋给变量filename */ /* 以读的使用方式打开文件filename */ /**********FILL**********/ if((fp=fopen(filename, "_____")) == NULL) { printf("Cannot open the file.\n"); exit(0); /* 正常跳出程序 */ } /* 关闭文件 */ /**********FILL**********/ _____; } 【空1】错误 【学生答案】 _____ *fp; 【参考答案】 FILE ============================================================ 【空2】错误 【学生答案】 if((fp=fopen(filename, "_____")) == NULL) 【参考答案】 r ============================================================ 【空3】错误 【学生答案】 break; 【参考答案】 fclose(fp) ============================================================ /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:求一个3行4列矩阵的外框的元素值之和。 注意:矩阵四个角上的元素不能重复加。 例如:矩阵元素为1,2,3,4,5,6,7,8,9,10,11,12时,四框元素值之和应为65。 ------------------------------------------------------*/ int fun(int a[3][4],int m,int n) { /**********ERROR**********/ int i,j,s,s1=s2=s3=s4=0; for(j=0;j { s1=s1+a[0][j]; /**********ERROR**********/ s2=s2+a[m][j]; } /**********ERROR**********/ for(i=0;i { s3=s3+a[i][0]; s4=s4+a[i][n-1]; } /**********ERROR**********/ s=s1-s2-s3-s4; return s; } main() { int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; printf("total=%d\n",fun(a,3,4)); } 【改错1】错误 【学生答案】 int i,j,s,s1=s2=s3=s4=0; 【参考答案】 int i,j,s,s1=0,s2=0,s3=0,s4=0; ============================================================ 【改错2】错误 【学生答案】 s2=s2+a[n][j]; 【参考答案】 s2=s2+a[m-1][j]; s2+=a[m-1][j]; s2=a[m-1][j]+s2; ============================================================ 【改错3】错误 【学生答案】 for(i=0;i 【参考答案】 for(i=1;i for(i=1;i<-1+m;i++) for(i=1;m-1>i;i++) for(i=1;-1+m>i;i++) for(i=1;i<=m-2;i++) for(i=1;m-2>=i;i++) ============================================================ 【改错4】错误 【学生答案】 s=s1-s2-s3-s4; 【参考答案】 s=s1+s2+s3+s4; ============================================================ /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:请编写函数fun,对长度为8个字符的字符串,将8个字符按降序排列。 例如:原来的字符串为CEAedcab,排序后输出为edcbaECA。 ------------------------------------------------------*/ #include #include #include int fun(char *s,int num) { /**********ERROR**********/ int i;j; char t; for(i=0;i /**********ERROR**********/ for(j=i;j /**********ERROR**********/ if(s[i]>s[j]) { t=s[i]; s[i]=s[j]; s[j]=t; } } main() { char s[10]; printf("输入8个字符的字符串:"); gets(s); fun(s,8); printf("\n%s",s); } 【改错1】正确 【学生答案】 int i,j; 【参考答案】 int i,j; ============================================================ 【改错2】错误 【学生答案】 for(j=0;j 【参考答案】 for(j=i+1;j ============================================================ 【改错3】错误 【学生答案】 if(s[i]>s[j]) 【参考答案】 if(s[i] ============================================================ /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 函数max_sum的功能是:利用函数计算连续的数组元素累加和的最大值。如果最大值是负数则返回0; -------------------------------------------------------*/ int max_sum(int x[], int n) { int max; int i; /**********FILL**********/ _____; /**********FILL**********/ for (i = 0; i < _____; i++) max =max+x[i]; /**********FILL**********/ if (max>_____) return max; else return 0; } #include void main(void) { int x[20] = { 2, -3, 1, -1, 3, -2, -3, 3}; int n=5; int i; printf("\n\nGiven Array :"); for (i = 0; i < n; i++) printf("%4d", x[i]); printf("\n\nMaximum Sum is %d", max_sum(x, n)); } 【空1】错误 【学生答案】 ; 【参考答案】 max=0 ============================================================ 【空2】错误 【学生答案】 for (i = 0; i < max; i++) 【参考答案】 n ============================================================ 【空3】错误 【学生答案】 if (max>i) 【参考答案】 ============================================================ 空1】正确 【学生答案】 for(hb=0;hb<=100;hb+=hb/3) 【参考答案】 3 ============================================================ 【空2】正确 【学生答案】 for(hm=0;hm<=100-hb;hm+=hm/2) 【参考答案】 2 ============================================================ 【空3】正确 【学生答案】 hl=100-hb-hm; 【参考答案】 hm ============================================================ 【空4】正确 【学生答案】 if(hb/3+hm/2+2*hl==100) 【参考答案】 hl ============================================================ /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:百马百担问题:有100匹马,驮100担货,大马驮三担,中 马驮2担,两匹小马驮一担,求大、中、小马各多少匹? -------------------------------------------------------*/ #include main() { int hb,hm,hl,n=0; /**********FILL**********/ for(hb=0;hb<=100;hb+=_____) /**********FILL**********/ for(hm=0;hm<=100-hb;hm+=_____) { /**********FILL**********/ hl=100-hb-_____; /**********FILL**********/ if(hb/3+hm/2+2*_____==100) { n++; printf("hb=%d,hm=%d,hl=%d\n",hb/3,hm/2,2*hl); } } printf("n=%d\n",n); static struct {int a1;float a2;char a3;}a[10]={1,3.5,'A'}; 说明数组a是地址常量,它有10个结构体型的下标变量,采用静态存 储方式,其中被初始化的下标变量是(B)。 A、a[10] B、a[0] C、a[1] D、a[-1] 对以下说明语句 int a[10]={6,7,8,9,10}; 的正确理解是(D)。 A、将5个初值依次赋给a[1]至a[5] B、将5个初值依次赋给a[6]至a[10] C、因为数组长度与初值的个数不相同,所以此语句不正确 D、将5个初值依次赋给a[0]至a[4] 在C语言中,能代表逻辑值“真”的是(C)。 A、大于0的数 B、True C、非0的数 D、非0整数 假定所有变量均已正确定义,下列程序段运行后x的值是(D)。 k1=1; k2=2; k3=3; x=15; if(!k1) x--; else if(k2) x=4; else x=3; A、15 B、14 C、3 D、4 若有说明语句:char c='\72';则变量c(C)。 A、说明不合法,c的值不确定 B、包含3个字符 C、包含1个字符 D、包含2个字符 以下不符合C语言语法的赋值语句是(B)。 A、a=b=5; B、a=1,b=2 C、++j; D、y=(a=3,6*5); C 语言程序的三种基本结构是顺序结构、选择结构和___D___结构. A、递归 B、转移 C、嵌套 D、循环 以下叙述中不正确的是(A)。 A、在C程序中,赋值运算符的优先级最低 B、在C程序中,j++;是一条赋值语句 C、C程序中的#include和#define均不是C语句 D、一个好的程序应该有详尽的注释 若有下列定义,则对a数组元素地址的正确引用是(B)。 int a[5],*p=a; A、&a B、p+2 C、a++ D、&a[5] static char str[10]="China";数组元素个数为(B)。 A、5 B、10 C、6 D、9 以下程序中,c的二进制值是 D char a = 3, b = 6, c; c = a ^ b << 2; A、00011100 B、00010100 C、00011000 D、00011011 以下程序的输出结果是_A_______. void fun(int a, int b, int c) { a=456; b=567; c=678; } main() { int x=10, y=20, z=30; fun(x, y, z); printf("%d,%d,%d\n", z, y, x);} B、10,20,30 C、678567456 D、456567678 执行下列程序后,其输出结果是(B)。 main() {int a=9; a+=a-=a+a; printf("%d\n",a); } A、18 B、-18 C、-9 D、9 若从终端输入以下数据,要给变量c赋以283.19,则正确的输入语句是 D A、scanf(%8.4f”, &c); B、scanf(%6.2f”, &c); C、scanf(%f”,c) D、scanf(%8f”, &c); 下列变量定义中合法的是(A)。 A、short _a=1-.1e-1; B、long do=0xfdaL; C、double b=1+5e2.5; D、float 2_and=1-e-3; 以下程序的输出结果是 D #define FMT “%d,” main() { int b[][4] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23}; printf(FMT, *(*(b+1)+1)); printfFMT, b[2][2]); } A、1,11, B、1,11 C、11,21 D、11,21, 若int a=3,则执行完表达式a-=a+=a*a后,a的值是 B A、-15 B、0 C、-9 D、-3 以下read函数的调用形式中,参数类型正确的是(D)。 A、read(int fd,int count,char *buf) B、read(int count,char *buf,int fd) C、read(int *buf,int fd,int count) D、read(int fd,char *buf,int count) 已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用 八进制表示的字符常量'\101'是(D)。 A、字符e C、非法的常量 D、字符A C语言规定,函数返回值的类型是由(D)。 A、调用该函数时的主调函数类型所决定 B、return语句中的表达式类型所决定 C、调用该函数时系统临时决定 D、在定义该函数时所指定的函数类型所决定 与实际参数为实型数组名相对应的形式参数不可以定义为(A)。 A、float a; B、float a[]; C、float (*a)[3]; D、float *a; 若有定义和语句: int a[4][3] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}, (*prt )[3] = a, *p[4], i; for(i = 0; i < 4; i++) p[i] = a[i]; 则不能够正确表示a数组元素的表达式是 B A、(*(p+1))[1] B、a[4][3] C、p[0][0] D、prt[2][2] 为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else总与( C )配对 A、同一行上的if B、其之后最近的if C、其之前最近的未配对的if D、缩排位置相同的if 以下程序的输出结果是 A 。 typedef union { long i; int k[5]; char c; } DATE; struct date { int cat; DATE cow; double dog; } too; DATE max; main() { printf(“%d\n”, sizeof(struct date) + sizeof(max) ); } A、30 B、25 C、18 D、8 下列程序的输出结果为(D)。 {int m=7,n=4; float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2; printf("%f\n",x); } A、28.000000 B、27.500000 C、28.500000 D、27.000000 有以下程序(提示:程序中fseek(fp, -2L * sizeof(int), SEEK_END);语句的作用是 A 使位置指针从文件末尾向前移2*sizeof(int)字节) #include main() { FILE *fp; int i, a[4] = {1, 2, 3, 4}, b; fp = fopen(“data.dat”, “wb”); for(i = 0; i < 4; i++) fwrite(&a[i], sizeof(int), 1, fp); fclose(fp); fp = fopen(“data.dat”, “rb”); fseek(fp, -2L * sizeof(int), SEEK_END); fread(&b, sizeof(int), 1, fp); /*从文件中读取sizeof(int)字节的数据到变量b中*/ fclose(fp); } 执行后输出结果是 A、3 B、4 C、1 D、2 printf函数中用到格式符%5s,其中数字5表示输出的字符串占用 5列,如果字符串长度大于5,则输出按方式(C)。 A、右对齐输出该字串,左补空格 B、从左起输出该字符串,右补空格 C、按原字符长从左向右全部输出 D、输出错误信息 1 语句int max(int x,int max(int y, int z));是正确的函数声明语句. F 2 若有int ⅰ=10, j=0;则执行完语句 if (j=0)ⅰ+ +; else ⅰ- -; ⅰ的值为11。F 3 char *p="girl";的含义是定义字符型指针变量p,p的值是字符串"girl"。F 4 如果想使一个数组中全部元素的值为0,可以写成 int a[10]={0*10};F 5 如果有一个字符串,其中第十个字符为'\n',则此字符串的 有效字符为9个。F 6 共同体变量所占的内存长度等于最长的成员的长度。T 7 函数调用语句:func(rec1,rec2+rec3,(rec4,rec5));中,含有的实参个数是5.F 8 #define 和printf 都不是C语句。T 9 C语言本身不提供输入输出语句,输入和输出操作是由函数来 实现的。T 10 若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t没定义, 所以此宏定义是错误的。F /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:根据整型形参 m,计算某一数据项的值。 y = 1/(100*100)+1/(200*200)+1/(300*300)+ …… +1/(m*m) 例如:若m = 2000,则应输出: 0.000160。 ------------------------------------------------------*/ #include #include /**********ERROR**********/ fun ( int m ) { double y = 0, d ; int i ; /**********ERROR**********/ for( i = 100, i <= m, i += 100 ) { d = (double)i * (double)i ; /**********ERROR**********/ y += 1.0 \ d ; } return( y ) ; } main( ) { int n = 2000 ; clrscr( ) ; printf( "\nThe result is %lf\n", fun ( n ) ) ; } 【改错1】错误 【学生答案】 fun ( int m ) 【参考答案】 double fun ( int m ) ============================================================ 【改错2】错误 【学生答案】 for( i = 100, i <= m, i += 100 ) 【参考答案】 for( i = 100; i <= m; i += 100 ) ============================================================ 【改错3】错误 【学生答案】 y += 1.0 \ d ; 【参考答案】 y += 1.0 / d ; ============================================================ /*------------------------------------------------------ 【程序改错】 -------------------------------------------------------- 功能:移动一维数组中的内容; 若数组中有n个整数, 要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。 例如:一维数组中的原始内容为:“1,2,3,4,5,6,7,8,9,10” p的值为3。移动后,一维数组中的内容应为“ 5,6,7,8,9,10,1,2,3,4” ------------------------------------------------------*/ #include #define N 80 void fun(int *w, int p, int n) { /**********ERROR**********/ int i,k=0;b[N]; /**********ERROR**********/ for(i=1; i < n; i++) b[k++]=w[i]; /**********ERROR**********/ for(i=0; i <= p; i++) b[k]=w[i]; for(i=0; i < n; i++) w[i]=b[i]; } main() { int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i,p,n=15; printf("The original data:\n"); printf("\n\nEnter p: ");scanf("%d",&p); fun(a,p,n); printf("\nThe data after moving:\n"); for(i=0; i < n; i++) printf("%d ",a[i]); printf("\n\n"); 【改错1】错误 【学生答案】 int i,k=0;b[N]; 【参考答案】 int i,k=0,b[N]; ============================================================ 【改错2】错误 【学生答案】 for(i=1; i < n; i++) b[k++]=w[i]; 【参考答案】 for(i=p+1; i < n; i++) b[k++]=w[i]; ============================================================ 【改错3】错误 【学生答案】 for(i=0; i <= p; i++) b[k]=w[i]; 【参考答案】 for(i=0; i <= p; i++) b[k++]=w[i]; ============================================================ /*------------------------------------------------------- 【程序填空】 --------------------------------------------------------- 功能:打印以下图形。 ***** ***** ***** ***** ***** -------------------------------------------------------*/ main ( ) { char a[5][9]={" "}; for (i=0;i<5;i++) /**********FILL**********/ for(j=i; _____;j++) a[i][j]='*'; /**********FILL**********/ for(_____;i<5;i++) { for(j=0;j<9;j++) /**********FILL**********/ printf("%c", _____ ); /**********FILL**********/ _____; } } 【空1】错误 【学生答案】 for(j=i; _____;j++) 【参考答案】 j i+5>j j<=i+4 i+4>j ============================================================ 【空2】错误 【学生答案】 for(_____;i<5;i++) 【参考答案】 i=0 ============================================================ 【空3】错误 【学生答案】 printf("%c", _____ ); 【参考答案】 a[i][j] ============================================================ 【空4】错误 【学生答案】 _____; 【参考答案】 11 *程序名:TEST.prg *检索选修课程门数等于3门或3门以上,每门课程成绩大于或等于70分的每个学生的 *学号,姓名,性别,平均成绩,最低分和选课门数,并将结果存储到表NEW_TEST中. *以下程序有三处错误,请改正 OPEN DA TABASE SDB SELECT STUDENT.学号,姓名,性别,A VG(成绩) 平均成绩,MIN(成绩) 最低分,COUNT(*) 选课门数; FROM STUDENT,SC; WHere STUDENT.学号= SC.学号AND 成绩>= 70 ; &&**********Error********** GROUP BY STUDENT.学号HA VING count(课程号) >= 3; &&**********Error********** inTO table NEW_TEST &&**********Error********** CLOSE ALL 9 *程序名:dbtest3.prg *定义一个视图VS1, *检索选课门数是3门以上的每个学生的学号、姓名、平均成绩、最低分、选课门数和院系编号, *并按平均成绩降序排序. *以下程序有三处错误,请改正 SET TALK OFF SET SAFETY OFF open DATABASE SDB &&****Error***修改本行的语法错误,不许注释掉本行或删除本行 CREATE VIEW VS1 SELECT STUDENT2.学号, 姓名, A VG(成绩) 平均成绩, MIN(成绩) 最低分, COUNT(*) 选课门数, 院系编号; FROM STUDENT2, sc; &&*************Error************* WHERE STUDENT2.学号= SC.学号; GROUP BY SC.学号HA VING COUNT(课程号) > 3; ORDER BY 平均成绩desc &&*************Error************* CLOSE DATABASE RETURN i=2 create table four(结果I) do while i<=1000 if i%3=0 insert into four values(i) &&错误语句请修改 endif 程序改错 ================================================== 题号:7471 /*------------------------------------------------------ 【程序改错】:只允许修改错误代码,其他代码不允许修改! -------------------------------------------------------- 功能:计算正整数num的各位上的数字之积。 例如:若输入:252,则输出应该是:20。 若输入:202,则输出应该是:0。 ------------------------------------------------------*/ #include num/=10; 【或】 num=num/10; 位置 3: } while(num) ; 【或】 while(num!=0) 题号:7383 /*------------------------------------------------------ 【程序改错】:只允许修改错误代码,其他代码不允许修改! -------------------------------------------------------- 功能:统计出若干个学生的平均成绩,最低分以及得最低分的人数。例如:输入10名学生的成绩分别为92,87,68,56,92,84,67, 75,92,66,则输出平均成绩为77.9,最低高分为56,得最低分的人数为1人。 ------------------------------------------------------*/ #include "stdio.h" float Min=0; int J=0; float fun(float array[],int n) { int i;float sum=0,ave; Min=array[0]; for(i=0;i 程序改错题 (注意:每小题只有1行有错误,答题时请指出错误位置并给出改正结果)1. 输出计算结果。 main() { int a=b=10; a+=b+5; b*=a+=10; printf("%d%d\n",a,b); } 2. 输出计算结果。 #include 输出程序运行结果。 #include 计算机程序改错题,及答案
程序改错C
程序改错题
c语言程序改错