1、 第七届全国信息技术应用水平大赛模拟题 C 语言程序设计 注:模拟题题量总计 88 道,其中单选题 60 道,每道题 1 分;多选题 20 道,每道题 2 分;程序填充题 6 道,每道题 5 分;编程操作题 2 道,每道题 10 分。试卷满分为 150 分,完成时间为 180 分钟。此模拟题仅供参考,具体题型、题量、分值分配与试题难度以实际预赛题为准。单选题(共 60 题,每题 1 分,共 60 分) 1. 下列符号串中,属于 C 语言合法标识符的个数为( )。_1_2_3,a-b-c,float,9cd,a3b4A:1B:2C:3D:42. 下列能为字符变量 a 赋值的是:char a= (
2、 )。A:abB:“a“C:0D:“0“3. 在下列字符序列中,合法的标识符是( )。A:P12.aB:stud_100C:$water.1D:88sum4. 下列用于 printf 函数的控制字符常量中,代表 tab 的字符常量是( )。A:bB:tC:rD:f5. 下列用于 printf 函数的控制字符常量中,代表退格的字符常量是( )。A:bB:tC:rD:n6. 如有以下程序:unsigned int a=6; int b=-20; char c; c=(a+b6);则 c 的值为( )。A:6B:-14C:1D:07. 关于 C 语言,以下不正确的叙述是( )。A:在 C 语言程序设
3、计中,逗号运算符的优先级最低B:在 C 语言程序设计中,var 和 VAR 是两个相同的变量C:C 语言也支持重载D:此处的两个语句 int a; a=-13.06;在程序编译中将会提示出错 8. 若有定义:int a=2,*p;float x=1, y=2; char e=w;则以下用法不正确的是( )。 A:printf(“%c“,e+a);B:p=C:a *=y+x;D:x=y=e;9. int x=20; printf(“%dn“,x);以上程序片段的输出是( )。A:235B:-21C:-20D:-1110. 在 C 语言中,要求运算数必须是整型的运算符是( )。A:/B:+C:!=
4、D:%11. 若有定义:int a=7;float x=2.5,y=4.7;则表达式 x+a%3*(int)(x+y)%2/4 的值是(结果保留两位小数)( )。A:2.50B:2.75C:3.50D:0.0012. 以下运算符中优先级最低的是( )。A:,则以下表达式中值为零的是( )。A:c1c2B:c1a=0x0a|3;b=0x0aprintf(“%d %dn“,a,b); ( )。A:2 11B:11 2C:7 13D:13 715. 如果 int i = 4, 则 printf(“%d“, -i- )的输出结果是( ),i 的值是( )。A:-4 3B:-3 3C:-3 4D:-4
5、416. 若 x=2,y=3 则 xprintf(“%dn“,(x=3*5,x*2,x+10);A:15B:25C:30D:4018. 若 x,i,j 和 k 都是 int 型变量,则计算下面表达式后,x 的值为( )。x=(i=4,j=16,k=32)A:4B:16C:32D:其他值19. 假设所有变量均为整型,则表达式(a=2,b=5,b+,a+b)的值是( )。A:7B:8C:6D:220. 以下程序运行后的输出结果是( )。main()int a,b;a=50;b=90;printf(“%dn“,(a,b);A:90B:50 90C:50D:其他21. 以下程序的运行结果是( )。vo
6、id main()int a=4; char ch=a;printf( “%dn“,(aA:0B:1C:2D:322. 以下程序的输出是( )。#include main( ) int i,j=4; for(i=j; i void fun(int *p)int a=10;p=+a;void main()int a=5;fun(printf(“%dn“,a); A:5B:6C:10D:1126. 以下关于函数的说法中正确的是 ( )。A:定义函数时,形参类型说明可放在函数体内B:return 语句后边的值不能为表达式C:如果函数类型与返回值类型不一致,以函数类型为准D:如果形参与实参的类型不一致
7、,以实参为准27. 已知有定义:int *p(); 则以下说法正确的是 ( )。A:指向 int 型的指针变量B:int 型的指针数组C:一个函数,该函数的返回值是指向 int 型的指针变量D:一个指向函数的指针变量,该函数的返回值为 int 型28. 若有如下程序:void s(char *m,int n)*m=*m+3;n=n+3;printf(“%c,%c,“,*m,n);void main()char p=b,q=B;s(printf(“%c,%cn“,p,q);则程序运行后的输出结果是 ( )。A:E,e,b,EB:e,E,b,FC:E,e,e,ED:e,E,b,E29. C 语言规
8、定函数返回值的类型由 ( )。A:在定义时所指定的函数类型所决定B:调用该函数时的主调函数类型所决定C:return 语句中的表达式类型所决定D:调用该函数时系统临时决定30. 要在 c 语言中求正弦 30 度的值,可以调用库函数,可用格式为 ( )。A:sin(30)B:sin(30.0)C:sin(double)30)D:sin(3.1415/6)31. 在 C 语言程序设计中,简单变量作为实参时,它和对应形参之间的数据的传递方式是 ( )。A:地址传递B:单向值传递C:由实参传给形参,再由形参传给实参D:由用户指定传递方式32. 以下程序的输出为( )。 int a=2;int f(in
9、t *a)return(*a)+;void main()int s=0;int a=5;s+=f(s+=f(printf(“%d %dn“,a,s);A:2 7B:2 10C:3 7D:3 1133. 以下程序输出结果是( )。#include int *fun()int a4,k;for(k=0;k#include void main()char p120=“abcd“,p220=“ABCD“;char str50=“xyz“;strcpy(str+2,strcat(p1+2,p2+1);printf(“%sn“,str);A:xyabcABB:abcABzC:AbabczD:xycdBCD
10、42. 以下程序执行后输出结果是( )。void main()char a=“movie“,b10=“movie“;printf(“%d %dn“,sizeof(a),sizeof(b);A:5 5B:6 6C:6 10D:10 1043. 以下程序的输出结果是( )。void main()char *p10=“abc“,“aabdfg“,“dcdbe“,“abbd“,“cd“;printf(“%dn“,strlen(p4);A:2B:3C:4D:编译出错44. 已知有以下的说明, int a=8,1,2,5,0,4,7,6,3,9; 那么 a*(a+a3)的值为 ( )。A:5B:0C:4D
11、:745. 以下程序输出结果是( )。#include main()int a22=1,2,3,4,(*p)2;p=a;p+; printf(“%dn“,*p ); A:2B:3C:4D:以上都不对46. 设 char ch,str4,*strp;,则正确的赋值语句是 ( )。A:ch=“CBA“;B:str=“CBA“;C:strp=“CBA“;D:*strp=“CBA“;47. 下面程序的运行结果是( )。#include #include fun(char *w,int n)char t,*s1,*s2;s1=w;s2=w+n-1;while(s1main()char a=“langua
12、ge“,*p;p=a;while(*p!=u) printf(“%c“,*p-u+U);p+;A:LANGUAGEB:languageC:LANGD:LANGuage49. struct s1 char a3;int num;t=a,b,x,4,*p;p=则输出为 x 的语句是( )。A:printf(“%cn”,p-t.a2);B:printf(“%cn”,(*p).a2)C:printf(“%cn”,p-a3);D:printf(“%cn”,(*p).t.a2);50. 以下程序的输出是( )。#include main()struct stint x;int y;cnum2=1,3,2,
13、7;printf(“%dn“,cnum0.y/cnum0.x*cnum1.x);A:0B:1C:3D:651. 以下对 age 的非法引用是( )。struct studentint age;int num;stu1,*p;p=A:stu1.ageB:student.ageC:p-ageD:(*p).age52. 以下程序的输出是( )。#include union myunstructint x,y,z;u;int k;a;void main()a.u.x=4;a.u.y=5;a.u.z=6;a.k=0;printf(“%dn“,a.u.y);A:4B:5C:6D:053. 若要用 fope
14、n 函数打开一个二进制文件,该文件要既能读也能写,当文件不存在时新建文件,则文件打开方式字符串应是( )。A:“ab+“B:“rb+“C:“wb+“D:“ab“54. 若执行 fopen 函数时发生错误,则函数的返回值是 ( )。A:地址值B:0C:1D:EOF55. 要打开文件 c:usertext.txt 用于追加数据,正确的语句是( )。A:fp=fopen(“c:turboc2abc.txt“,“r“);B:fp=fopen(“c:turboc2abc.txt“,“r“);C:fp=fopen(“c:turboc2abc.txt“,“a+“);D:fp=fopen(“c:turboc2
15、abc.txt“,“a+“);56. 在执行 fopen 函数时,ferror 函数的初值是 ( )。A:TRUEB:-1C:1D:057. #include main()char * s1=“Hello“,*s2=“Beijing“;FILE *pf=fopen(“abc.dat“,“wb+“);fwrite(s2,7,1,pf);fseek(pf,-1,SEEK_CUR);fwrite(s1,5,1,pf);fclose(pf);以上程序执行后,文件 abc.dat 中的内容为 ( )。A:HellongB:Beijing HelloC:BeijinHelloD:Hello58. 若 fp
16、 为文件指针,且文件已正确打开,i 为整型数据,以下语句的输出结果是( )。fseek(fp,0,SEEK_END);i=ftell(fp);printf(“i=%dn“,i);A:fp 所指的文件记录长度B:fp 所指的文件长度,以字节为单位C:fp 所指的文件长度,以比特为单位D:fp 所指的文件当前位置,以字节为单位59. 函数调用语句:fseek(fp,-20L,2);的含义是 ( )。A:将文件位置指针移到距离文件头 20 个字节处B:将文件位置指针从当前位置向后移动 20 个字节C:将文件位置指针从文件末尾处后退 20 个字节D:将文件位置指针移到离当前位置 20 个字节处60.
17、若将文件指针的读写位置指针移动到距离文件头 200 个字节的位置,对应正确的操作是 ( )。A:fseek ( fp, 200, SEEK_SET )B:fseek ( fp, 200, SEEK_CUR )C:fseek ( fp, 200, SEEK_END )D:ftell ( 200 )多选题(共 20 题,每题 2 分,共 40 分) 1. 关于以下运算,说法正确的有 ( )。A:设有宏定义“#define F(N) 2*N“,则表达式 F(2+3)的值是 10B:设 int x=4;则执行语句 x += x *= x + 1;后,x 的值为 40C:设 int a, b = 8;执
18、行 a = bvoid main()int m,n;printf(“Enter m,n“);scanf(“%d%d“,while(m!=n)while(mn)m-=n;while(nm)n-=m;printf(“m=%dn“,m);A:输入 mn 时,程序将输出 1B:输入 mn 时,程序输出值为 n 的值D:输入 m 或 n 为 0 时,程序将陷入死循环5. 已知有如下程序:void main() int a5=1,2,3,4,5,*b;b=(int*)malloc(sizeof(int);_;printf(“%dn“,*b);要使程序输出为 a2的值,则函数 fun 的定义和横线处对应的
19、fun 调用的正确有 ( )。A:void fun(int*s,int*d)*d=*(s+2);调用: fun(a,调用: fun(a,b)C:void fun(int*s,int 调用: fun(a,*b)D:void fun(int*s,int *d)*d=*(s+2);调用: fun(a,*p = *x; *x = *y; *y = *p;B:funb(int x, int y) int t;t = x; x = y; y = t;C:func(int *x, int *y) int p;p = *x; *x = *y; *y = p;D:fund(int *x, int *y) int
20、 *p;*x = *x + *y; *y = *x - *y; *x = *x - *y;7. 函数调用时,下列说法中正确的有 ( )。A:若用值传递方式,则形式参数不予分配内存B:实际参数和形式参数可以同名C:主调函数和被调用函数可以不在同一个文件中D:函数间传递数据可以使用全局变量8. 下面叙述正确的有( )。A:函数调用可以出现在表达式中B:函数调用可以作为一个函数的实参C:函数调用可以作为一个函数的形参D:函数可以直接调用其本身9. 下列说法中正确的有 ( )。A:递归函数的形参是自动变量B:有些递归函数是不能用非递归算法来实现的C:c 语言不允许这样的函数调用:函数 A 调用了函数
21、B,而函数 B 又调用了函数 AD:C 语言不允许函数的嵌套定义10. 下列关于指针与引用的说法,正确的有 ( )。A:引用只能在定义时被初始化一次,以后不能改变B:指针可以被重新赋值以指向另一个不同的对象C:引用和指针都可以指向空值D:引用和指针都可以用 const 修饰11. 若有如下定义:int s3;则下面表达式中,表示数组元素 s1的有 ( )。A:*则以下表达式可以得到 a 的值的有 ( )。A:*pB:p0C:* 则可以表示出字符t的表达是 ( )。A:*str2B:*str+2C:*(p+1)D:*+p14. 若有以下定义和语句,则对 w 数组元素的正确引用有int w23,
22、(*pw)3; pw=w; ( )。A:*(w0+2)B:pw00C:*pw2D:*(pw1+2)15. 设有以下语句struct stint n;struct st *next;static struct st a3=5,则以下表达式的值为 6 的有 ( )。A:p-n+B:+p-nC:(+p)-nD:p-next-n16. 以下关于结构类型变量的定义正确的有 ( )。A:struct dataint num;float price;B:struct dataint num;float price;book;book b;C:struct dataint num;float price;bo
23、ok;struct data D:typedef struct dataint num;float price;book;book b;17. 以下 scanf 函数调用语句中对结构体变量成员的正确引用有( )。struct pupil char name 20 ;int age;int sex; pup 5 ,*p;p=pup;A:scanf(“%s“,pup 0 .name);B:scanf(“%d“,C:scanf(“%d“,D:scanf(“%d“,page);18. 以下关于枚举类型的用法中,正确的有 ( )。A:enum a 1,2,3;B:enum a a,b,c;C:enum
24、a a,b,cd;D:enum a a,b,ca;19. 设有如下说明,则正确的说法有( )。union dataint i;char c;float f;a;A:a 所占的内存长度等于成员 f 的长度B:a 的地址和它的各成员地址都是同一地址C:a 可以作为函数参数D:不能直接对 a 赋值20. 设有结构类型:typedef struct strint no; char name20;STR;另有变量定义:STR a20, x;以下语句希望实现,向与文件指针变量 fp 关联的文件输出一个结构信息,正确的代码有( )。A:fwrite(a, sizeof(STR), 1, fp);B:fwri
25、te(C:fwrite(D:fwrite(x, sizeof(STR), 1, fp); 程序填充题(共 6 题,每题 5 分,共 30 分) 1. 下面程序的功能是统计用 0 至 9 之间的不同的数字组成的三位数的个数。main() int i,j,k,count=0;for(i=1;imain() char a20=“cehiknqtw“;char s=“fbla“;int i,k,j;for(k=0;sk!= 0;k+ ) j=0;while(sk=aj & aj!= 0 )j+;for( ) ;aj=sk;puts(a);3. 下面程序的功能是用辗转相除法求两个正整数 m 和 n 的最
26、大公约数。hcf(int m,int n) int r;if(mamax) amax=x; if( ) amin=x;scanf(“%f“,&x);printf(“namax=%fnamin=%fn“,amax,amin);5. 下面程序的功能是不用第三个变量,实现两个数的对调操作。#include main() int a,b;scanf(“%d%d“,&a,&b);printf(“a=%d,b=%dn“,a,b);a= ; b= ; a= ;printf(“a=%d,b=%dn“,a,b);6. 下面程序的功能是根据近似公式:2/6 1/12+1/22+1/32+ +1/n2,求 值。#include double pi(long n) double s=0.0;long i;for(i=1;i=n;i+)s=s+ ;return( );编程操作题(共 2 题,每题 10 分,共 20 分) 1. 将 1 到 9 这九个数字分成 3 个三位数 a,b,c,要求第 1 个三位数,正好是第 2 个三位数的两倍,是第 3 个三位数的三倍。用程序求解怎么分。 2. 输入两个字符串,要求将这两个字符串交叉连接。如串 1 为“ABCD“,串 2 为“123456“,则合并后的串为“A1B2C3D456“。