printf(\"%5d\ printf(\"\\n\"); }答案:
1). scanf(\"%d\
2). for(i=N-2;i>=0;i--) 或 for(i=N-2;0<=i;i--) 3). a[ i + 1 ]=a[i]; 4). break;
第2题 (30.0分) 题号:255
/*------------------------------------------------------ 【程序改错】
--------------------------------------------------------
功能:以下程序把两个数按由大到小的顺序输出来.
------------------------------------------------------*/
/***********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\ p=&a; q=&b; if(aprintf(\"a=%d,b=%d\\n\ /***********FOUND***********/ printf(\"max=%d,min=%d\\n\
}
答案:
1). swap( int *p1,int *p2) 或 void swap( int *p1,int *p2) 2). scanf(\"%d%d\
3). printf(\"max=%d,min=%d\\n\或 printf(\"max=%d,min=%d\\n\
第3题 (30.0分) 题号:370
/*------------------------------------------------------ 【程序改错】
--------------------------------------------------------
功能:将s所指字符串中出现的、t1所指子串全部替换成t2所指 子字符串,所形成的新串放在w所指的数组中。在此处, 要求t1和t2所指字符串的长度相同。
例如:当s所指字符串中的内容为:\"abcdabfab\",t1所指子串中 的内容为:\"ab\",t2所指子串中的内容为:\"99\"时,结果 在w所指的数组中的内容应为:\"99cd99f99\"。
------------------------------------------------------*/
#include #include #include int fun (char *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 s[100], t1[100], t2[100], w[100]; clrscr();
printf(\"\\nPlease enter string S:\"); scanf(\"%s\
printf(\"\\nPlease enter substring t1:\"); scanf(\"%s\ printf(\"\\nPlease enter substring t2:\"); scanf(\"%s\ if ( strlen(t1)==strlen(t2) ) {
fun( s, t1, t2, w);
printf(\"\\nThe result is : %s\\n\ } else
printf(\"Error : strlen(t1) != strlen(t2)\\n\"); }
答案:
1). while(*r)
2). if ( *r == '\\0' ) 3). while ( *r )
第4题 (30.0分) 题号:402
/*------------------------------------------------------ 【程序改错】
--------------------------------------------------------
功能:编写函数fun求20以内所有5的倍数之积。
------------------------------------------------------*/
#define N 20
#include \"stdio.h\"
main() {
int sum; sum=fun(5);
printf(\"%d以内所有%d的倍数之积为: %d\\n\ getch(); }
int fun(int m) {
/**********FOUND**********/ int s=0,i;
for(i=1;i/**********FOUND**********/ if(i%m=0)/**********FOUND**********/ s=*i; return 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 x<0且x≠-3
f(x)= sin(x) 0≤x<10且x≠2及x≠3 x*x+x-1 其它
------------------------------------------------------*/
#include #include \"stdio.h\"float fun(float x) {
/**********FOUND**********/ float y
/**********FOUND**********/ if (x<0 || x!=-3.0) y=x*20;
else if(x>=0 && x<10.0 && x!=2.0 && x!=3.0) y=sin(x); else y=x*x+x-1;
/**********FOUND**********/ return x; }
main() {
float x,f;
printf(\"Input x=\"); scanf(\"%f\ f=fun(x);
printf(\"x=%f,f(x)=%f\\n\ getch(); }
答案:
1). float y;
2). if (x<0 && x!=-3.0) 3). return y;
第6题 (30.0分) 题号:9
/*------------------------------------------------------ 【程序改错】
--------------------------------------------------------
功能:将一个字符串中的大写字母转换成小写字母。 例如:输入aSdFG输出为asdfg。
------------------------------------------------------*/
#include/**********FOUND**********/ bool fun(char *c) {
if(*c<='Z'&&*c>='A')*c-='A'-'a'; /**********FOUND**********/ fun= c; }
main() {
/**********FOUND**********/ char s[81],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 s[81],*p=s;
4). putchar(*p); 或 printf(\"%c\
第7题 (30.0分) 题号:253
/*------------------------------------------------------ 【程序改错】
--------------------------------------------------------
功能:输入10个数,要求输出这10个数的平均值
------------------------------------------------------*/
float average(float array[10])
{
int i;
float aver,sum=array[0];
/***********FOUND***********/ for(i=0;i<10;i++) sum=sum+array[i]; aver=sum/10.0; return(aver); }
main( ) {
/***********FOUND***********/ int score[10],aver ; int i;
printf(\"input 10 scores:\\n\"); for(i=0;i<10;i++)
/***********FOUND***********/ scanf(\"%f\ printf(\"\\n\");
/***********FOUND***********/ aver=average(score[10]);
printf(\"average score is %5.2f\}
答案:
1). for(i=1;i<10;i++) 或 for(i=1;i<=9;i++)
2). float score[10],aver; 或 float aver,score[10]; 3). scanf(\"%f\或 scanf(\"%f\ 4). aver=average(score);
第8题 (30.0分) 题号:386
/*------------------------------------------------------ 【程序改错】
--------------------------------------------------------
功能:分别统计输入的字符串中各元音字母(即:A、E、I、O、U) 的个数。
注意:字母不分大、小写。
例如:若输入:THIs is a boot,则输出应该是:1、0、2、2、0。
------------------------------------------------------*/
#include #include fun ( char *s, int num[5] ) {
int k, i=5;
for ( k = 0; k/**********FOUND**********/ num[i]=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) num[i]++; } }
main( ) {
char s1[81]; int num1[5], i; clrscr();
printf( \"\\nPlease enter a string: \" ); gets( s1 ); fun ( s1, num1 );
for ( i=0; i < 5; i++ ) printf (\"%d \ printf (\"\\n\"); }
答案:
1). num[k]=0; 2). switch(*s) 3). if (i >= 0)
第9题 (30.0分) 题号:381
/*------------------------------------------------------ 【程序改错】
--------------------------------------------------------
功能:读入一个英文文本行,将其中每个单词的第一个字母改成 大写,然后输出此文本行 (这里的“单词”是指由空格 隔开的字符串)。 例如:若输入:“I am a student to take the examination.”, 则应输出:“I Am A Student To Take The Examination.”。
------------------------------------------------------*/
#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 chrstr[81]; clrscr();
printf( \"\\nPlease enter an English text line: \" ); gets( chrstr );
printf( \"\\n\\nBefore changing:\\n %s\ upfst( chrstr );
printf( \"\\nAfter changing:\\n %s\\n\}
答案:
1). upfst(char *p) 2). for ( ; *p; p++ ) 3). else if ( *p != ' ' )
第10题 (30.0分) 题号:431
/*------------------------------------------------------ 【程序改错】
--------------------------------------------------------
功能:编写input()和output()函数输入,输出5个学生的数据记录。
------------------------------------------------------*/
#include \"stdio.h\" #define N 5
struct student {
char num[6]; char name[8]; int score[4]; } stu[N];
input(stu)
struct student stu[]; {
/**********FOUND**********/ int i;j;
for(i=0;iprintf(\"\\n please input %d of %d\\n\ printf(\"num: \");scanf(\"%s\ printf(\"name: \");
scanf(\"%s\ for(j=0;j<3;j++) {
/**********FOUND**********/ printf(\"score %d.\
scanf(\"%d\ }
printf(\"\\n\"); } }
print(stu)
struct student stu[]; {
int i,j;
printf(\"\\nNo. Name Sco1 Sco2 Sco3\\n\"); /**********FOUND**********/ for(i=0;i<=N;i++) {
printf(\"%-6s%-10s\ for(j=0;j<3;j++)
printf(\"%-8d\ printf(\"\\n\"); } }
main() {
input(); print(); getch(); }
答案:
1). int i , j ;
2). printf(\"score %d.\ 3). for(i=0;i