发布时间 : 星期一 文章C语言编程及上机题更新完毕开始阅读75d743e55ef7ba0d4a733b4b
40. 改错题。本程序的功能是任取一个十进制整数,将其倒过来后与原来的整数相加,得到
一个新的整数后重复上述步骤,则最终可得到一个回文数。 #define MAX 2147483647 #include
{ long int n,m; int count=0;
printf(\ scanf(\
printf(\ while(!nonre(m+n))
if(m+n>=MAX) { printf(\
else { printf(\ printf(\ }
long rev(long int a) { long int t;
for(t=0; a>0; a/=10) t=t+a; return t; }
nonre(long int *s)
{ if(rev(s)==s) return 1; else return 0;
}
41. 改错题:本程序中函数check检查给定的字符串s中左圆插号与右圆括号的个数是否匹
配,若两者个数匹配则函数返回值为0,若左括号数大于右括号数则返回两者差值的负值,否则返回两者差值的正值。 # include
{ char a[100]; int i;
a=”(((a+b)-c)*d)-e”; i=check(a);
printf(“a=%s i=%d\\n”, a, i ); }
int check(char *s) { int left, right; left=0, right=0; while (s=?\\0?)
{ if (*s= =?(?) left ++; if (*s= =?)?) right ++; s++; }
if (left>right) return(left-right); else if (left 42. 改错题:本程序中函数delete(s,i,L)的功能是从字符数组s中的指定位置i开始删 除指定的L个字符,结果仍放在字符数组s中。例如:字符数组中有“abcdefghijk”,调用delete(s,3,3)后,s中的字符串为“abfghijk”。 #include { static char s[20]=”abcdefghijk”; int i, j; scanf (“%d%d”, i , j ); switch (delete (s, i, j )){ case -1: printf (“No copy!\\n s=%s i=%d j=%d\\n”, s, i, j); break; case 0: printf (“All right!\\n s=%s i=%d j=%d\\n”, s, i, j); break; case 1: printf (“Local copy!\\n s=%s i=%d j=%d\\n”, s, i, j); } } delete(char s, int i, int L) { int j, k; char *p; while (*s&& i ) s++; i--; if (*s= =’\\0’) return (-1); p=s; j=L; while (*p&& j ) p++; j--; if (*p= =’\\0’) { *(s+1)=’\\0’; return(1); } while (*s= *s) s++; return 0; } 43. 改错题:将数组str中的若干个字符串按ASCII码的升序进行排序,将排序后的结果输 出。 #include { int i, n=5; static char str[ ]={“Follow Me”, “Basic Program”, “Great Wall”, “C Language”,“Computer System”}; for ( i=0; i<5; i++) printf(“%s\\n”, str[i]); sort(str, n); for ( i=0; i printf(“%s\\n”, str[i]); } sort (char s[ ], int n) { int i, j, k; char *p; for ( i=0; i for (strlen(s[i])>0 && strlen(s[j]>0) if (strcmp(s[k], s[j])>0) k=j; if (k=j) { p=s[k]; s[k]=s[i]; s[i]=p; } )} 44. 下面程序的功能是:用选择法对7个学生的成绩按降序排序,并输出排序后的学生的姓 名和成绩。含有错误的源程序为: #include struct student { char name[10]; float score; }; void sort(struct student *, int ); main() { static struct student stu[7]={{\ {\ int i; sort(stu,7); for(i=0;i<7;i++) printf(\} void sort(struct student x[], int n) { int i,j,k; float t; for(i=0;i for(j=0;j if(x[j].score>x[k].score) k=j; if(k!=j){t=x[i]; x[i]=x[k]; x[k]=t;} } } 注意: 以下各题,每2题是历年等级考试的一份上机试卷,其中前一题是改错题,后一题为编程题。改错题的要求如下: (1)把改错题所给的程序录入到文件myf1.c中,根据题目要求及程序中语句之间的逻辑关系对程序中错误进行修改。 (2)改错时,可以修改语句中的一部分,调整语句次序,增加少量的变量说明或编译预处理命令,但不能增加其它语句,也不能删去整条语句。 (3)改正后的源程序(文件名myf1.c)必须放在考试盘的根目录上,供阅卷用。 编程题的要求如下: (1)源程序名必须取为myf2.c,输出结果文件名必须取为myf2.out。 (2)数据文件的打开、使用、关闭均按TURBO C文件操作实现。 (3)源程序文件和运行结果文件,均需放在考试盘的根目录上,供阅卷用。 (4)不能将myf2.obj和myf2.exe保存到考试盘上。 45. 改错题:输入一行字符串,把该字符串中的每一个字母串的首字母都换成在写字母,并 输出转换后的字符串。如输入good mor23ning!,则输出为Good Mor23Ning!。注:字母串是以字母开头的字母序列(不区分大小写),即不同字母串这间用非字母隔开。 # include int change (char *c, int flag) { if (flag= =0&&(*c<=?z?&&*c>=?a?||*c<=?Z?&&*c>=?A?)){ if (*c<=?z?&&*c>=?a?) c=c-?a?; return 1; } else if (flag= =1&&(c<=?z?&&c>=?a?||c<=?Z?&&c>=?A?)) return 1; return flag; } main ( ) { int flag=0; char c; for ( ; (c=gerchar( ))!=?\\n?;) { flag=change(c); putchar(c); } putchar(?\\n?); } 46. 编程题:用筛选法求100以内的素数。算法为:(1)用一个一维数组a,其初值为:2, 3,4,5,6,7,8,9,?,100; (2)对每一元素a[i](i=1,2,?,99),若a[i]不等于0,则从该元素的后一个元素开始,凡是a[i]的倍数的数组元素均不是素数(置为0); (3)数组a中不为0的元素,均为素数。 47. 改错题:输入一行字符串,求出它所包含的字母串的个数及最长字母串的长度。注:以 字母开头的字母序列(不区分大小写)称为字母串,字母串之间用非字母作为分隔符。如:You are worker23too。其中字母串的个数为4,即:You、are、worker、too,其中最长字母串worker的长度为6。 # include { char s[300]; int i, j; printf(“Input string :”); gets(s) i=count(s, j); if (i= =0) printf(“s=%s\\n No letter strings! \\n”, s); else printf(“s=%s\\n max length is %d\\n number is %d\\n”, s, j, i ); } count (char *p, int i ) { int j=0, k, m=0; char c; while(p=) { while (!((c=*p)>=?a? && c<=?z? || c>=?A? && c<=?Z?) && *p) p++; k=0; if (*p!=?\\0?) m++; while (c=*p){ p++; k++; } if (k>j) j=k; } *i=j; return m; } ?2244662n2n2?1?3?3?5?5?7?...?2n?1?2n?148. 编程题:求π的近似值: -5 要求:先求出前2n项的π值,再求出2n+2项的π值,直至二者之差小于10为止。 49. 改错题:计算二维数组全部外侧元素之和及全部非外侧元素之和。含有错误的源程序为: # include