《C语言-理论考试资料.doc》由会员分享,可在线阅读,更多相关《C语言-理论考试资料.doc(180页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目 录第一部分 理论笔试题2第一章 程序填空题2第二章 程序阅读题20第三章 程序设计题42第二部分 上机操作模拟题63第一章 程序调试模拟试题63第二章 程序设计模拟试题78第三章 程序设计模拟试题(附)99附录I 历年浙江省计算机等级考试试题(二级C)1171999年秋浙江省高校 计算机等级考试试卷(二级C)1172000年秋浙江省高校 计算机等级考试试卷(二级C)1202001年秋浙江省高校 计算机等级考试试卷(二级C)1232002年秋浙江省高校 计算机等级考试试卷(二级C)1282003年秋浙江省高校 计算机登记考试试卷(二级C)1332004年秋浙江省高校 计算机等级考试试卷(二级
2、 C)1372005年秋浙江省高校 计算机等级考试试卷(二级 C)1422006年春浙江省高校 计算机等级考试试卷(二级 C)1482006年秋浙江省高校 计算机等级考试试卷(二级 C)1532007年春浙江省高校 计算机等级考试试卷(二级 C)1572008年春浙江省高校 计算机等级考试试卷(二级 C)162附录 历年浙江省计算机等级考试答案(二级C)1671999年秋浙江省高校 计算机等级考试参考答案(二级C)1672000年秋浙江省高校 计算机等级考试参考答案(二级C)1682001年秋浙江省高校 计算机等级考试参考答案(二级C)1692002年秋浙江省高校 计算机等级考试参考答案(二级
3、C)1702003年秋浙江省高校 计算机等级考试参考答案(二级C)1712004年秋浙江省高校 计算机等级考试参考答案(二级C)1722005年秋浙江省高校 计算机等级考试参考答案(二级C)1732006年春浙江省高校 计算机等级考试参考答案(二级C)1742006年秋浙江省高校 计算机等级考试参考答案(二级C)1762007年春浙江省高校 计算机等级考试参考答案(二级C)1772008年春浙江省高校 计算机等级考试参考答案(二级C)177第一部分 理论笔试题第一章 程序填空题一程序填空题专项练习下列程序的输出结果是16.00,请填空main ( ) int a=9,b=2 ; float x
4、= , y=1.1 , z ; z= a/2+b*x/y+1/2 ;printf (“%5.2f n”,z);下面的程序求两个数中的较小值,请填空int main (int x ,int y) int z ; z=xy? ;return ( z );# include main ( ) int a ,b ;printf (“%d”, );下面的程序输出x,y,z三个数中的最小值,请填空# include int x=4 ,y=5 ,x=8 ;int u,v ;u=xy ? ;v=uz ? ;printf (“%d”,v) ;下面的程序从键盘输入一组字符,分别统计大写字母和小写字母的个数,请填空
5、# include main ( ) int m=0,n=0 ; char c ; while (!= n) if ( c=A c=Z) m+ ;if ( ) n+ ; 下面的程序是在输入的一批正数中求最大值,输入0结束循环,请填空# include main ( ) int a, max=0 ; scanf (“%d ”,&a); while ( ) if () max=a ; scanf (“%d”,&a ) ; printf (“%d”,&a) ;下面的程序计算1到200之间的奇数之和以及偶数之和,请天空# include main ( ) int k ,n , s1=0 , s2=0
6、; for (k=1; ; k+ ) if ()s2=s2+k ; else s1=s1+k ;printf (“s1=%d , s2=%d n” , s1 ,s2 );一个整数与3的和是5的倍数,与3的差是6的倍数,下面的程序求符合条件的最小数,请填空# include main ( ) int n ; n=1; while (1) n=n+1; if () break ; printf (“n=%d” , n) ;下面的程序在输入m后求n使n!=m= (n+1)! (例如输入726,应输出n=6),请填空void main ( ) int ; scanf (); for ( n=2 ; j
7、c=m ;n+) jc=jc*n ; printf (“n=%d n”,); 若a,b是亲密数对,则a的因子和等于b,b的因子和等于a且a不等于b,下面的程序是输出6至10000之间的亲密数对,请填空# include viod main ( ) int a , b, c, i ; for (a=6; a=10000 ;a+) b=1;for (i=2; i=a/2 ;i+) if () b+= i ; for (i=2 ; i=b/2 ;i+) if (b%i=0) c+=i ;if(a!=b!) printf (“%d %d n”,a ,b) ; 下述程序用“碾转相除法”计算两个整数m和n
8、的最大公约数。该方法的基本思想是计算m和n相除的余数,如果余数为0则结束,此时的被除数就是最大公约数。否则,将除数作为新的被除数,余数作为新的除数,继续计算 m和n相除的余数,判断是否为0,请填空。# include main ( )int m ,n , w ; scanf (“%d ,%d ”,&m ,%n ); while (n) w=; m=; n=;printf (“%d”,m) ;输入个实数,输出其中最大值,最小值,请填空# include void main ( )float num ,nmax ,nmin ;scanf (“%d”,&n) ;scanf (“%f”,&num) ;
9、nmax=num ;for ( i=2;i nmax ) nmax=num;printf (“MAXf,MIN=%F n”, nmax ,xmin) ;下面程序的功能是输入至100之间每位数的乘积大于每位数的和的数,例如23,其各位数乘积为2*3=6 .各位数之和为 2+3=5,故23满足条件,请填空使程序完整.# include main ( ) int m ,n ,k=1 ,s=0 ;for(n=1;n,=100;n+)k=1;s=0;while()k*m10;s+m10;if(ks)printf (“%d ,%d, %dn”,n ,k ,s ); 下面的程序计算并输出方程X2+Y2+Z2
10、=1989的所有整数解,请填空# include void main ( ) for (i1= -45;i1=45;i1+)for ()for (i3= -56;i3=45;i3+)if ()printf (,i1 ,i2 ,i3);下列函数输出一行字符:先输出k个空格,再输出n个指定字符(由实参指定),请填空# include void print ( ) int i; for ( i=1;ik;i+) for ()printf (“%c”,zf);main ( ) int m=3 ,n=5 ; char ch=#; print ( m , n , ch);下面的程序是求出数组a的两条对角线
11、上的元素之和,请填空# include main ( )int a33=1,3,5,7,9,11,13,15,17;int i ,j ,sum1=0 ,sum2=0;for (i=0;i3;i+) for (j=0;j3;j+) if (i=j) ;for (i=0;i3;i+) for (;j-) if(i+j = =2) sum2=sum2+aij;printf (“sum1=%d,sum2=%d n”,sum1,sum2);下面的程序是输入10个数,输出其中与平均值之差的绝对值为最小的数,请填空# include void main ( ) float a10 , s, d, x;int
12、 i ;for (i=0;i10;i+) ;for (i=0;i10;i+) s+ =a i;s/=100;d=fabs(a0-s); ;for (i=1;i10;i+) if (fabs (ai-s)d) d=;x=ai; printf (“%f”, x ) ;下面的程序将十进制整数number转换成n进制,请填空# include main ( ) int i=0,number , n ,j , num20; scanf (“%d”,&number ); scanf (“%d”,&n);do numi =; base = ; i + +; while (number ! =0);for (
13、)printf (“%d”,numj ) ;下面程序的功能是输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数,请填空# include main ( ) int a10 ,max ,min ,i , j , k , t ; for (i=0;i10;i + +)scanf (“%d”,&ai);max =a0;min=a0;for ( i=0;i10;i + +) if (aimax ) max=ai;for (i=0;i10;i + +) printf (“%d”,ai);下面的程序将二维数组a的行和列元素呼唤后存到另一个二维数组b中,请填空# includ
14、e main ( ) int a23 = 1,2,3,4,5,6; int i ,j b32; printf (“arraya: n”);for (i=0;i2;i + + ) for ( j=0;j + +) printf (“%5d”,aij);printf (“n”);printf(“array b:n”);for (i =0;i + +) for (j=0;j=1;j + +) printf (“%5d”,aij )下面程序的功能是输入若干字符,分别统计数字字符个数,英文字母个数,输入换行符时输出统计结果,请填空# include void main ( )char ch; while
15、 ( ( )! = n ) if (ch=0& ch=a& ch=z) s2+ + ; 下面的程序是对键盘输入的两个字符串进行比较,然后输出其中第一个不同字符的ASCI I码之差,例如:若输入两个字符串分别为abcdefg和abceef,则第一个不同字符为d和e,输出为-,请填空# include main ( ) char strl 100,str2100,c;int i = 0 , s ; printf (“Enter String 1:”);gets ( str1); printf (“Enter String 2:”);gets ( str2); while ( (strli = =s
16、tr2i&(1) ) )i + +; s =; printf (“%d n”,s );下面程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束输入,请填空# include main ( )float x , amax ,amin ; scanf (“%f”,&x); amax =x ;amin = x; while () if (xamax ) amax=x; if () amin =x ; scanf (“%f”,&x);printf (“namax =%f namin=%f n”, amax ,amin );设数组a包括10个整型元素,下面程序的功能是
17、求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行个元素的形式输出,请填空# include main ( ) int a10, b10 ,i ; for (i=0;i10;i + +) scanf (“%d”,); for (i=1;i10;i + +) for (i=1;i10;i + +) printf (“%3d”,bi ); if (0)printf (“ n ”); 下面程序的功能是在三个字符串中找出最小的,请天空# include # include main ( ) char s20 , str320 ; int i ; for (i=0 ;i=3 ;i + +) ge
18、ts(stri ) ; strcpy(s , ) ; if (strcmp(str2 , s) 0) strcpy(s , str2 ) ; printf (“%s n”, ) ;下面程序的功能是在任意的字符串a中将与字符c相等的所有元素的下标值分别存放在整型数组b中,请填空# include # include main ( ) char a80;int i , b80, k=0;gets(a);for (i=0;ai!=0;i + +) if () bk = i;for (i=0;ik;i + +) printf (“%3d”,bi);输入一个字符串(不超过60),将串中连续的空格符保留1
19、个,例如若输入字符串为Happy new year!,则输出字符串为Happy new year!,请填空# include # include void main ( ) char b61;int i ;gets(b);for (i = 1;i + + ) if (bi-1 = =&bi = =) ( b+i-1 , b+i );i - - ; /提示:此处填入正确的函数名 下面的函数fun的功能是将形参x的值转换成二进制数,所得二进制数的每一位放在一维数组中返回,二进制的最低位放在下标为0的元素中,其他依次类推,请填空# include void fun ( int x , int b )
20、int k=0 , r , i ;do r= bk + + = r; while (x);for (i=k-1;i=0;i - -)printf (“%d”,bi);main ( )int a = 10 , b10;fun(a,b);函数expand( char s,char t )在将字符串s复制到字符串t时,将其中的换行符和制表符转换为可见的转义字符,即用”n”,表示换行符,用”t ”表示制表符,请填空expand (char s,char t ) int i , j;for (i = j =0;si!=0;i + +)switch ( si ) casen:(1) =;tj + +=n;
21、caset:t;tj + +=t;break;default:t = si;break ; tj =;下面的程序输出如下形式的二项式系数表要求表的行数在运行时输入,若小于1或大于10则重新输入,请填空1 1 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1# include void main ( ) int a10100,i ,j ,n; while (,n10); for (i=0;i2;i + +) ai0 = 1;for( i=2;in;i + +) ai0 = 1;for (j=1;j=i;j + +) aij=ai-1j +; for (i=0;in;i +
22、+) for (j=0;j=i;j + +) printf (“%4d”,aij); 折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试于中间点元素的值如果该该待查元素的值大于中间点元素,就缩小待查范围,只测试中间点之后的元素;反之,测试中间点之前的元素,测试方法同前函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回1,请填空binary ( int a10 , int m)int low = 0,high = 9,mid; while (low = high ) mid = (low +high)/2; if (
23、mamid ) else return (mid);return (-1);.下面的函数invert的功能是将一个字符串的内容颠倒过来,请填空。void invert (char str)int i,j,k;for( (1) ;ij;i+,j-)k=stri; (2) ;strj+k;下面程序的功能是计算函数 F(x,y,z) = (x+y)/(x-y) + (z+y)/(z-y)的值,请选择填空# include #include float f(float ,float );main ( )float x, y, z ,sum;scanf (“%f,%f,%f”,&x, &y, &z);
24、sum = f ()+(); printf(“sum = %f n”,sum);float f( float a, float b)float value ;value = a/b;return (value);(1) A. x-y , x+y (2) A. x-y , x+yB. x+y , x-y B. x+y , x-y C. z+y , z-y C. z+y , z-y D. z-y , z+y D. z-y , z+y 下面程序的功能是根据输入的“Y”(“y”)与“N”(“n”),在屏幕上分别显示出“This is Yes”与“This is NO”,请填空。#include voi
25、d YesNO(char ch) switch (ch) case y:case Y:printf (“ n This is Yes .n”);case n:case N: printf (“n This is No .n”);main ( ) char ch ; printf (“n Enter a char : y(Y)or n(N) ”); ch = ; printf (“ch : %c”,ch) ; YesNo (ch) ;下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的值,请填空/2=1+1/3+(1/3)*(2/5)+(1/3)*(2/5)*(3/7)+ (1
26、/3)*(2/5)*(3/7)*(4/9)+# include # include double pi (double ep) double s, t ; int n ; for (;tep;n + +) s + = tt = n*t /(2*n+1) ;return () ;main ( ) double x , y ; printf (“n Please enter a precision:”) ; scanf (“%f”,&x) ; y = pi(x) ; printf (“n ep = %f , ” =%f , x , pi(x) ) ;下面的程序是输入若干个正整数,判断每个数从高位到
27、低位各位数是否按值从小到大排列,请填空# include void main ( ) int n ; while (scanf (“%d”,&n) , n0 ) if (fun1(n) ) printf (“%d 中各位数字按从小到大排列 n ”,n); else printf (“%d 各位数字未按从小到大排列n”,n ) ;int fun1 () int k ; while (m)if (m/10%10k) return 0 ; else ;k = m%10 ; return 1 ;带参数的宏定义程序如下,请填空#define ABS(x) ( (x)0? (x): -(x) )#defi
28、ne MAX(x,y) ( (x)(y)? (x):(y) )void main ( )int a = -3 ;a = ABS(a + 4) ;printf (“max = %d n” , MAX(a,6) ) ;则预编器处理后的新源程序为void main ( ) int a = -3 ; a= ; printf (“max = %d n”,) ;下面程序的功能是:从键盘上输入一行字符存入一个字符数组串,然后输出该字符串,请填空# include main ( ) char str81, * pstr ;int i ;for (i=0 ; i80 ; i + +) stri = getcha
29、r ( ) ; if (stri = = n) break ; stri = ; pstr = str ; while (* pstr) putchar (* pstr ) ;下面程序的功能是将两字符串中奇数位上的数字组合输出,如该题应输出63 85 , 请填空# include main ( )char ch25 = “693” , “825”,* p2 ; int i , j ,s = 0 ; for ( i=0 ; i2 ; i + +) for (i=0 ; i= 0& pij= 9 ; j + =2)printf (“%d” , s ) ;下面程序的功能是调用find函数求实参数组中
30、最大值,再调用find函数求实参数组中最小值,请填空# include void main ( ) float s ,a7 = 3,13,24,46,15,36,27 ; float find (float * , int ,int ) ; s = find(a, 7,1) ; printf (“%f n ”,s) ;float find(float * p, int n , int flag ) int i ; float t , fh ; if (flag=0) fh = 1 ;else fh = -1 ; for (i = 1 ; i t*fh ) t = * (p+i) ;下面程序的功
31、能是对数组按值从大到小排序后输出,请填空# include main ( ) float a7 = 6,46,13,8,3,25,9 ; void sort (float * ,int ) ; for (int i = 0 ; i7 ; i + +) printf(“%f”, ai ) ; printf (“ n ”) ;void sort () int i , j , k ; float t ; for (i=0 ; in-1 ;i + + ) k = i ;for (j = i+1 ;jn ; j + + ) if() k = j ;* (p+i) = * (p+k) ; *(p+k)=t
32、 ;下面的程序是读入六个字符串,排序后输出,请填空# include void sort(char * a , int n ) int i , j , l ; char * temp ; for (i=0 ; in-1 ; i + + ) l=i ;for (j=i+1 ; jn ; j + + ) if(strcmp(aj , al ) 0 ) l=j ;if (l!=i) temp = ai ; ai = al ; al = temp ;void main ( )char * name 6 , ch630 ; int k ; for (k=0 ; k6 ; k + +) for (k=0
33、; k6 ; k + +) gets(name k ) ; for (k=0 ; k6 ; k + +) puts(name k ) ;下面程序的功能是对具有个元素的char类型数组,保持前四个元素中的内容不变,从下标为4 元素开始,全部设置为 * ,请填空# include # define M 10# define B 4void star( char * ,int ) ;main ( )int i ;char a10 ;for (i=0 ; i10 ; i + +) scanf (“%c” , &ai) ;star ()for (i=0 ; i10 ; i + +)printf (“%c
34、”,ai ) ;void star( char * a , int n) int i ; for (i=0 ; ;i + +).下列程序中,函数find-data在已从小到大排好序的数组中寻找指定数data,采用二分查找算法,找到则返回该元素地址,找不到返回NULL,请填空# include find-data (float * a ,int n , float data ) ;low = 0 ; high = n-1 ;while (low data ) high = mid 1 ;else if (amid data ) low = mid +1 ; else ; ;void main ( ) float b10 , * p , data ; int i ;for (i=0 ; i 10 ; i + + ) scanf (“%f”, b+i ) ;scanf(“%f”, &data )p=find-data(b , 10 , data) ;if (p) printf(“%f n” , * p) ;else printf (“查找不到%f n”, data ) ;下面程序的功能是:计算学生五门课的平均成绩,要求将五门课和平均成绩定义在一个结构体中,请填空# include struct stu float grade5 ;