第1页共75页 Examination 全国计算机等级考试 供2005年全年使用 上机试习题集 二级C语言程序设计 National Computer Rank Examination 教育部考试中心编 赠送 南开大学出版社 参考答案 全新光盘 唯C动力(htp:/www.clearner.net)版权所有
第 1 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有
第2页共75页 前言 在唯C动力网站至2005年6月8日开办两个月来,始终以帮助考友 顺利通过等级考试为目的。网站得到了许多考友的认可,同时站长和大 家一直在为网站办得更好在努力着,所以此时推出了免费的《南开二级 C上机100题》的电子版。因为时间仓促,在录入过程中难免有错误 诚恳地希望考友指正。谢谢! 特别感谢: Mickey、咖啡的学生、唯C动力QQ群、关心本站的网友们 声明 《南开二级C上机100题》电子版版权归唯C动力网站站长:一杯咖啡 所有。 《南开二级C上机100题》电子版使用权归关心唯C动力网站的网友们 所有。 杯咖啡 2005年8月8日 唯C动力(htp:/www.clearner.net)版权所有
第 2 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有 前 言 在唯 C 动力网站至 2005年6月8 日开办两个月来,始终以帮助考友 顺利通过等级考试为目的。网站得到了许多考友的认可,同时站长和大 家一直在为网站办得更好在努力着,所以此时推出了免费的《南开二级 C 上机 100 题》的电子版。因为时间仓促,在录入过程中难免有错误, 诚恳地希望考友指正。谢谢! 特别感谢:Mickey、咖啡的学生、唯 C 动力 QQ 群、关心本站的网友们 声 明 《南开二级 C 上机 100 题》电子版版权归唯 C 动力网站站长:一杯咖啡 所有。 《南开二级 C 上机 100 题》电子版使用权归关心唯 C 动力网站的网友们 所有。 一杯咖啡 2005 年 8 月 8 日
第3页共75页 第一部分改错题 1、下列给定程序的功能是:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有 为素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。 请改正程序中的错误,使程序能得出正确的结果 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <c #include <stdio. h> lint i m=1; ***率** found*****/ if (n%1) 1 m=0: break eturn (m) main i int j cUrsor printf (" nPlease enter integer number between 2 and 10000:"); scanf("%d",&k) printf ("onThe prime factor(s) of %d is (are):", k) for (j=2: j<=k: j++) if ((!(k%j))&&(IsPrime(j))printf("n %4d", j) printf("n) 2、下列给定程序中,函数fun的功能是:逐个比较a、b两个字符串对应位置中的字符,把 ASCII值大或等于的字符一次存放到c数组中,形成一个新的字符串。例如,若a中的字符 串为 aBCDefgH,b中的字符串为:ABcd,则c中的字符串为: aBcdefgh 请改正程序中的错误,使程序能得出正确的结果 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <studio. h> #include <string. h> void fun (char *p char *g char *c found**冰*冰水*冰*/ 唯C动力(htp:/www.clearner.net)版权所有
第 3 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有 第一部分 改错题 1、 下列给定程序的功能是:读入一个整数 k(2≤k≤10000),打印它的所有质因子(即所有 为素数的因子)。例如,若输入整数 2310,则应输出:2、3、5、7、11。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include <conio.h> #include <stdio.h> /**********found***********/ IsPrime(int n); {int i,m; m=1; for ( i=2; i<n; i++) /**********found***********/ if !(n%i) { m=0; break; } return (m); } main() { int j,k; clrscr(); printf("nPlease enter an integer number between 2 and 10000:");scanf("%d",&k); printf("nnThe prime factor(s) of %d is (are):",k); for (j=2;j<=k;j++) if ((!(k%j))&&(IsPrime(j)) printf("n %4d",j); printf("n"); } 2、下列给定程序中,函数 fun 的功能是:逐个比较 a、b 两个字符串对应位置中的字符,把 ASCII 值大或等于的字符一次存放到 c 数组中,形成一个新的字符串。例如,若 a 中的字符 串为 aBCDeFgH,b 中的字符串为:ABcd,则 c 中的字符串为:aBcdeFgh。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include <studio.h> #include <string.h> /**********found***********/ void fun(char *p,char *q,char *c) /**********found***********/ {int k=1;
/*****水** found*****/ while(=!=*g) /******* found**冰***/ Hif (p<*g) c[k]=q c[k]=*p f(*q)q++ main O Ichar a[10]=aBCDeFgh", b[10]="ABcd" c[80]=T'\0] fun(a, b, c) printf( the string a: ) puts(a) printf( The string b: ) puts(b) printf(" The result: ) puts(c) 3、下列给定程序中,函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符 串,并取代原字符串。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <stdio. h> #include void fun (char *s) t int i, j for(i=0,j=0;s[i]!=\0’;i++) /*水***水** found***率水*/ if(s[i]>='0&&s[i]<='9 sLj]=s[i] /*****水* found******/ s[j]="0 (char item[80] 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) 4、下列给定程序中,函数fun的功能是:分别铜级字符串中大写字母和小写字母的个数 唯C动力(htp:/www.clearner.net)版权所有
第 4 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有 /**********found***********/ while(*p!=*q) /**********found***********/ {if (*p<*q) c[k]=*q; else c[k]=*p; if (*p) p++; if (*q) q++; k++; } } main() {char a[10]="aBCDeFgh",b[10]="ABcd",c[80]={'\0'}; fun(a,b,c); printf("The string a:"); puts(a); printf("The string b:"); puts (b); printf("The result:"); puts(c); } 3、下列给定程序中,函数 fun 的功能是:依次取出字符串中所有数字字符,形成新的字符 串,并取代原字符串。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <stdio.h> #include <conio.h> void fun (char *s) { int i,j; for (i=0,j=0;s[i]!='\0';i++) /**********found***********/ if (s[i]>='0' && s[i]<='9') s[j]=s[i]; /**********found***********/ s[j]="\0"; } main() {char item[80]; clrscr(); 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); } 4、下列给定程序中,函数 fun 的功能是:分别铜级字符串中大写字母和小写字母的个数
例如,给字符串s输入: AAaabBb123 CCccccd,则应该输出结果: upper=6, lower=8 请改正程序中的错误,使程序能得出正确的结果 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <conio. h finc lude <stdio. h> void fun (char ss, int a, int b) i while(=s) {if(*s>=A’&&*s<=Z) /****冰水** found***水*/ a++ /*水*水*水** found*****/ maino i char s[100]: int upper=0, lower=0 cIrscr O printf("nPlease a string: ) gets(s) fun (s, &upper, &lower printf ("n upper=%d lower=%dn", upper, lower) 5、假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数fun的功能是 删除数列中值为x的元素。n中存放的是数列中元素的个数。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <stdio. h #definen 20 fun (int *a, int n, int x) while (x!=aLp]) if (p==n) return -1 Ifor (i=: i<n: i++) 唯C动力(htp:/www.clearner.net)版权所有
第 5 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有 例如,给字符串 s 输入:AAaaBBb123CCccccd,则应该输出结果:upper=6,lower=8。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <conio.h> #include <stdio.h> /**********found***********/ void fun (char *s,int a, int b) { while(*s) { if (*s>='A' && *s<='Z') /**********found***********/ a++; if (*s>='a' && *s<='z') /**********found***********/ b++; s++; } } main() { char s[100];int upper=0,lower=0; clrscr(); printf("nPlease a string:");gets(s); fun(s,&upper, &lower); printf("n upper=%d lower=%dn",upper,lower); } 5、假定整数数列中的数不重复,并存放在数组中。下列给定程序中,函数 fun 的功能是: 删除数列中值为 x 的元素。n 中存放的是数列中元素的个数。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <stdio.h> #define N 20 fun (int *a,int n, int x) {int p=0,i; a[n]=x; while (x!=a[p]) p=p+1; if (p==n) return -1; else {for (i=p;i<n;i++)