第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 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 #include 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 #include /**********found***********/ IsPrime(int n); {int i,m; m=1; for ( i=2; i #include /**********found***********/ void fun(char *p,char *q,char *c) /**********found***********/ {int k=1;
/*****水** found*****/ while(=!=*g) /******* found**冰***/ Hif (p #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 #include 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 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 #include /**********found***********/ void fun (char *s,int a, int b) { while(*s) { if (*s>='A' && *s='a' && *s #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++)
*******fOnd*水*冰*水/ a[i+1]=a[i] return n-1 ain {intw[N={-3,0,1,5,7,99,10,15,30,90},x,n,i printf( The original data: n") for(i=0; ile*Nor be found! =ke*nn) else printf( the data after deleted: n") for (i=0, i #include <stdio double fun (int m) int l /*****水* found******/ /*****水** found******/ return(y) int n=5 cIrscro printf( \nRhe result is %1f\n", fun(n)) 唯C动力(htp:/www.clearner.net)版权所有
第 6 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有 /**********found***********/ a[i+1]=a[i]; return n-1; } } main() {int w[N]={-3,0,1,5,7,99,10,15,30,90},x,n,i; n=10; printf("The original data:n"); for (i=0;i #include double fun (int m) { double y=1.0; int i; /**********found***********/ for (i=2;i<m;i++) /**********found***********/ y-=1/(i*i); return(y); } main () {int n=5; clrscr(); printf("\nRhe result is %1f\n",fun(n)); }
第7页共75页 7、下列给定程序中,函数fun的功能是:用选择法对数组中的n个元素按从小到大的顺序 进行排序。 请改正程序中的错误,使程序能得出正确的结果 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include #definen 20 void fun (int a[, int n) I int i, j, t, p for (j=0: j i char max, aq: int i=0 maxp[i] while(phil! =0) 唯C动力(htp:/www.clearner.net)版权所有
第 7 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有 7、下列给定程序中,函数 fun 的功能是:用选择法对数组中的 n 个元素按从小到大的顺序 进行排序。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include #define N 20 void fun(int a[],int n) { int i,j,t,p; for (j=0;j fun(char *p) { char max,*q;int i=0; max=p[i]; while(p[i]!=0)
第8页共75页 t if(maxpli]) Imax=p[i] /****冰水** found***水*/ /*****水* found******/ hile(ap) {*q=*(q-1) p[0]= maino (char str[80] printf( Enter a string: ) gets(Str) printf ("\nThe original string ) puts(Str) fun(str) printf( \nThe string agter moving: ) puts (str): ptintf( \n\n") 9、下列给定程序中,函数fun的功能是:从n个学生的成绩中统计出低于平均分的学生人 数,此人数由函数值返回,平均分存放在形参aver所指的存储单元中。例如,若输入8名 学生的成绩 80.5607290.59851.58864 则低于平均分的学生人数为4(平均分为:75.5625)。 请改正程序中的错误,使程序能得出正确的结果。 注意,不要改多main函数,不得增行或删行,也不得更改程序的结构! 试题程序 #include <conio. h #include <stdio. h #definen 20 int fun (float *s, int n, float *aver) Float ave, t=0. 0 int count=0k i for(k=0; k<n: k++) found*******/ ave=t for (i=0: i<n: i++) 唯C动力(htp:/www.clearner.net)版权所有
第 8 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有 { if(max #include #define N 20 int fun (float *s,int n,float *aver) {float ave,t=0.0; int count=0,k,i; for (k=0;k<n;k++) /**********found***********/ t=s[k]; ave=t/n; for (i=0;i<n;i++)
第9页共75页 f (sli] #include<stdio. h int fun (char *s, char *tl, char*t2, char*w) int char *p, r, *a: /****冰水** found***水*/ if(*r==*p){x+;p++} else break hile(*r){*a=*r;a++;r++} 唯C动力(htp:/www.clearner.net)版权所有
第 9 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有 if (s[i] #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; if(*r=='') {a=w;r=t2; /**********found***********/ while(*r){*a=*r;a++;r++}
第10页共75页 w+=strlen(t2) main char s[100],t1[100],t2[00],w[100] clrscr o printf("nPlease enter string S: ) scanf("%s", s) printf ("nPlease enter string t1: ) scanf (%s", t1) printf( nPlease enter string t2: ) scanf ("%s", t2) if (strlen(t1)==strlen(t2)) printf (" nThe result is: %sn", w) else printf(Error: strlen(t1)!=strlen(t2)n") 11、下列给定的程序中,函数fun的功能是将一个由八进制数字字符组成的字符串转换为与 其面值相等的十进制整数。规定属土的字符串最多只能包含5位8进制数字。例如,若输入 77777,则输出将是32767。 请改正程序中的错误,使它能得到正确的结果 注意不要改动main函数不得增行或删行,也不得更改程序的结构 试题程序 #include int fun( char *p) /*水***水** found**率*/ /*****水** found****/ while(pl=0 maino i char s[6]; int i; int n printf("Er if(strlen(s)5)(printf( "Error: String too longer n\n"); exit(O); r(i=0,s[i++) 唯C动力(htp:/www.clearner.net)版权所有
第 10 页 共 75 页 唯 C 动力(http://www.clearner.net)版权所有 w+=strlen(t2); } else w++; } } main() { char s[100],t1[100],t2[100],w[100]; clrscr(); printf("nPlease enter string S:");scanf("%s",s); printf("nPlease enter string t1:");scanf("%s",t1); printf("nPlease enter string t2:");scanf("%s",t2); if (strlen(t1)==strlen(t2)) { printf("nThe result is :%sn",w); } else printf("Error:strlen(t1)!=strlen(t2)n"); } 11、下列给定的程序中,函数 fun 的功能是:将一个由八进制数字字符组成的字符串转换为与 其面值相等的十进制整数。规定属土的字符串最多只能包含 5 位 8 进制数字。例如,若输入 77777,则输出将是 32767。 请改正程序中的错误,使它能得到正确的结果. 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include int fun(char *p) /**********found**********/ { int n; n=*p-‘o’; p++; /**********found**********/ while(*p!=0) { n=n*7+*p-‘o’; p++; } return n; } main() { char s[6]; int i; int n; printf(“Enter a srting (ocaral digits ):”);gets(s); if(strlen(s)>5){printf(“Error: String too longer !|\n\n”);exit(0);} for(i=0;s[i];i++)