1、计算机技能改错易计算机技能改错(易)2011-02-09 19:53试卷编号:8539所属语言:大学计算机基础试卷方案:程序改错易试卷总分:300分共有题型:1种一、程序改错 共10题 (共计300分)第1题 (30.0分) 题号:4/*- 【程序改错】-功能:在一个已按升序排列的数组中插入一个数,插入后,数 组元素仍按升序排列。-*/#define N 11main() int i,j,t,number,aN=1,2,4,6,8,9,12,15,149,156; printf(please enter an integer to insert in the array:n); /*FOUND
2、*/ scanf(%d,&number) printf(The original array:n); for(i=0;i=0;i-) if(number=ai) /*FOUND*/ ai=ai-1; else ai+1=number; /*FOUND*/ exit; if(numbera0) a0=number; printf(The result array:n); for(i=0;i=0;i-) 或 for(i=N-2;0=i;i-) 3). a i + 1 =ai; 4). break;第2题 (30.0分) 题号:255/*- 【程序改错】-功能:以下程序把两个数按由大到小的顺序输出来
3、.-*/*FOUND*/swap( int *p1,*p2) int p; p=*p1; *p1=*p2; *p2=p;main( ) int a,b, *p,*q; printf(input a,b:); /*FOUND*/ scanf(%d%d,a,b); p=&a; q=&b; if(ab) swap(p,q); printf(a=%d,b=%dn,a,b); /*FOUND*/ printf(max=%d,min=%dn,p,q);答案: 1). swap( int *p1,int *p2) 或 void swap( int *p1,int *p2) 2). scanf(%d%d,&a
4、,&b); 3). printf(max=%d,min=%dn,*p1,*p2); 或 printf(max=%d,min=%dn,a,b);第3题 (30.0分) 题号:370/*- 【程序改错】-功能:将s所指字符串中出现的、t1所指子串全部替换成t2所指 子字符串,所形成的新串放在w所指的数组中。在此处, 要求t1和t2所指字符串的长度相同。例如:当s所指字符串中的内容为:abcdabfab,t1所指子串中 的内容为:ab,t2所指子串中的内容为:99时,结果 在w所指的数组中的内容应为:99cd99f99。-*/#include #include #include int fun (c
5、har *s, char *t1, char *t2 , char *w) int i; char *p , *r, *a; strcpy( w, s ); while ( *w ) p = w; r = t1; /*FOUND*/ while ( r ) if ( *r = *p ) r+; p+; else break; /*FOUND*/ if ( *r = 0 ) a = w; r = t2; /*FOUND*/ while ( *a ) *a = *r; a+; r+; w += strlen(t2) ; else w+; main() char s100, t1100, t2100
6、, w100; clrscr(); 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 : %sn, w); else printf(Error : strlen(t1) != strlen(t2)n);答案
7、: 1). while(*r) 2). if ( *r = 0 ) 3). while ( *r )第4题 (30.0分) 题号:402/*- 【程序改错】-功能:编写函数fun求20以内所有5的倍数之积。-*/#define N 20#include stdio.hmain() int sum; sum=fun(5); printf(%d以内所有%d的倍数之积为: %dn,N,5,sum); getch(); int fun(int m) /*FOUND*/ int s=0,i; for(i=1;iN;i+) /*FOUND*/ if(i%m=0) /*FOUND*/ s=*i; retur
8、n s; 答案: 1). int s=1 , i ; 2). if(i%m=0) 3). s=s*i 或 s=i*s 或 s*=i第5题 (30.0分) 题号:448/*- 【程序改错】-功能:编写函数fun计算下列分段函数的值: x*20 x0且x-3 f(x)= sin(x) 0x10且x2及x3 x*x+x-1 其它-*/#include #include stdio.hfloat fun(float x) /*FOUND*/ float y /*FOUND*/ if (x=0 & x10.0 & x!=2.0 & x!=3.0) y=sin(x); else y=x*x+x-1; /*
9、FOUND*/ return x;main() float x,f; printf(Input x=); scanf(%f,&x); f=fun(x); printf(x=%f,f(x)=%fn,x,f); getch(); 答案: 1). float y; 2). if (x0 & x!=-3.0) 3). return y;第6题 (30.0分) 题号:9/*- 【程序改错】-功能:将一个字符串中的大写字母转换成小写字母。例如:输入aSdFG输出为asdfg。-*/#include/*FOUND*/bool fun(char *c) if(*c=A)*c-=A-a; /*FOUND*/ f
10、un= c;main() /*FOUND*/ char s81,p=s; gets(s); while(*p) *p=fun(p); /*FOUND*/ puts(*p); p+; putchar(n);答案: 1). char fun(char *c) 2). return *c; 或 return (*c); 或 return(*c); 3). char s81,*p=s; 4). putchar(*p); 或 printf(%c,*p);第7题 (30.0分) 题号:253/*- 【程序改错】-功能:输入10个数,要求输出这10个数的平均值-*/float average(float a
11、rray10) int i; float aver,sum=array0; /*FOUND*/ for(i=0;i10;i+) sum=sum+arrayi; aver=sum/10.0; return(aver);main( ) /*FOUND*/ int score10,aver ; int i; printf(input 10 scores:n); for(i=0;i10;i+) /*FOUND*/ scanf(%f, score); printf(n); /*FOUND*/ aver=average(score10); printf(average score is %5.2f,ave
12、r);答案: 1). for(i=1;i10;i+) 或 for(i=1;i=9;i+) 2). float score10,aver; 或 float aver,score10; 3). scanf(%f, &scorei); 或 scanf(%f, score+i); 4). aver=average(score);第8题 (30.0分) 题号:386/*- 【程序改错】-功能:分别统计输入的字符串中各元音字母(即:A、E、I、O、U) 的个数。注意:字母不分大、小写。例如:若输入:THIs is a boot,则输出应该是:1、0、2、2、0。-*/#include #include f
13、un ( char *s, int num5 ) int k, i=5; for ( k = 0; ki; k+ ) /*FOUND*/ numi=0; for (; *s; s+) i = -1; /*FOUND*/ switch ( s ) case a: case A: i=0; break; case e: case E: i=1; break; case i: case I: i=2; break; case o: case O: i=3; break; case u: case U: i=4; break; /*FOUND*/ if (i 0) numi+; main( ) cha
14、r s181; int num15, i; clrscr(); printf( nPlease enter a string: ); gets( s1 ); fun ( s1, num1 ); for ( i=0; i = 0)第9题 (30.0分) 题号:381/*- 【程序改错】-功能:读入一个英文文本行,将其中每个单词的第一个字母改成 大写,然后输出此文本行 (这里的“单词”是指由空格 隔开的字符串)。例如:若输入:“I am a student to take the examination.”, 则应输出:“I Am A Student To Take The Examination
15、.”。-*/#include #include #include /*FOUND*/upfst ( char p ) int k=0; /*FOUND*/ for ( ; p; p+ ) if ( k ) if ( *p = ) k = 0; /*FOUND*/ else if ( *p = ) k = 1; *p = toupper( *p ); main( ) char chrstr81; clrscr(); printf( nPlease enter an English text line: ); gets( chrstr ); printf( nnBefore changing:n
16、%s, chrstr ); upfst( chrstr ); printf( nAfter changing:n %sn, chrstr );答案: 1). upfst(char *p) 2). for ( ; *p; p+ ) 3). else if ( *p != )第10题 (30.0分) 题号:431/*- 【程序改错】-功能:编写input()和output()函数输入,输出5个学生的数据记录。-*/#include stdio.h#define N 5struct student char num6; char name8; int score4; stuN;input(stu)s
17、truct student stu; /*FOUND*/ int i;j; for(i=0;iN;i+) printf(n please input %d of %dn,i+1,N); printf(num: ); scanf(%s,&stui.num); printf(name: ); scanf(%s,stui.name); for(j=0;j3;j+) /*FOUND*/ printf(score %d.,j); scanf(%d,&stui.scorej); printf(n); print(stu)struct student stu; int i,j; printf(nNo. Name Sco1 Sco2 Sco3n); /*FOUND*/ for(i=0;i=N;i+) printf(%-6s%-10s,stui.num,stui.name); for(j=0;j3;j+) printf(%-8d,stui.scorej); printf(n); main() input(); print(); getch();答案: 1). int i , j ; 2). printf(score %d., j + 1 ); 3). for(i=0;iN;i+)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1