(ITAT第七届全国信息技术应用水平大赛)C语言程序设计预.docx
第七届全国信息技术应用水平大赛预赛试题C语言程序设计一、单选题(60题,1分/题,共60分)1、下列选项中,叙述不正确的是( )。【答 案】B【分 数】1分【选 项】 A、用typedef可以定义各种类型名,但不能定义变量 B、typedef和#define都是在程序预编译时处理的 C、用typedef只是将已存在的类型用一个新的标识符来代表 D、使用typedef有利于程序的通用和移植2、若有如下定义:int a=2,*p;float x=1, y=2; char e=w;则以下用法不正确的是( )。【答 案】B【分 数】1分【选 项】 A、printf("%c",e+a); B、p=&x; C、a*=y+x; D、x=y=e;3、下列5个符号串中,属于C语言合法标识符的共计( )个。_1_2_3 a-b-cfloat 9cd a3b4【答 案】B【分 数】1分【选 项】 A、1 B、2 C、3 D、44、int x=20; printf("%dn",x); 以上程序段运行后的输出结果是( )。【答 案】B【分 数】1分【选 项】 A、235 B、-21 C、-20 D、-115、若有定义:int a=7;float x=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值(结果保留两位小数)是( )。【答 案】A【分 数】1分【选 项】 A、2.50 B、2.75 C、3.50 D、0.006、若有如下程序: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(&q,p); printf("%c,%cn",p,q);则程序运行后的输出结果是( )。【答 案】A【分 数】1分【选 项】 A、E,e,b,E B、e,E,b,F C、E,e,e,E D、e,E,b,E7、桌上有a、b、c、d、e五个黑白球,a=0表示白球,a=1表示黑球,其他球同样定义。则以下能表示a是黑球,其余至少有三个白球的表达式是( )。【答 案】C【分 数】1分【选 项】 A、a&&(b+c+d+e)=1 B、a&&(b+c+d+e)>2 C、a&&(b+c+d+e)<=1 D、!a&&(b+c+d+e)=38、C语言中运算对象必须是整型的运算符是( )。【答 案】C【分 数】1分【选 项】 A、/ B、+ C、% D、!=9、以下程序的输出结果是( )。#include <stdio.h>main() int i,j=4; for(i=j; i<=2*j; i+)switch (i/j) case 0: case 1: printf("*"); break; case 2: printf("#"); break; 【答 案】D【分 数】1分【选 项】 A、*# B、*# C、*# D、*#10、以下程序的输出结果是( )。main( ) int w=4,x=3,y=2,z=1; if(x>y&&!(z=w) printf("%dn",(w<x?w:z<y?z:x); else printf("%dn", (w>x?w:z>y?z:x); 【答 案】A【分 数】1分【选 项】 A、1 B、2 C、3 D、411、关于C语言形参与实参,以下说法正确的是( )。【答 案】A【分 数】1分【选 项】 A、实参和与其对应的形参各占用独立的存储单元 B、实参和与其对应的形参共占用同一个存储单元 C、只有当实参和与其对应的形参同名时才共占用同一个存储单元 D、形参是虚拟的,从不占用存储单元12、以下宏定义中,不会引起二义性的共计( )个。(1)#define POWER(x) x*x(2) #define POWER(x) (x)*(x)(3) #define POWER(x) (x*x)(4) #define POWER(x) (x)*(x)【答 案】A【分 数】1分【选 项】 A、1 B、2 C、3 D、413、以下程序的输出结果是( )。main() int i,j,x=0; for (i=0;i<2;i+) x+; for(j=0;j<3;j+) if (j%2) continue;x+; x+; printf("x=%dn",x);【答 案】C【分 数】1分【选 项】 A、x=4 B、x=6 C、x=8 D、x=1214、已知有以下说明: int a=8,1,2,5,0,4,7,6,3,9; 那么a*(a+a3)的值为( )。【答 案】A【分 数】1分【选 项】 A、0 B、4 C、5 D、715、有定义如下: struct pupil char name20; int age; int sex; pup5,*p;p=pup;以下scanf函数调用语句中,对结构体变量成员的引用不正确的是( )。【答 案】D【分 数】1分【选 项】A、scanf("%s",pup0.name);B、scanf("%d",&pup0.age);C、scanf("%d",&(p->sex);D、scanf("%d",p->age);16、以下程序运行后的输出结果是( )。 #include <stdio.h>struct NODE int num; struct NODE *next; ; main() struct NODE *p,*q,*r; p=(struct NODE*)malloc(sizeof(struct NODE); q=(struct NODE*)malloc(sizeof(struct NODE); r=(struct NODE*)malloc(sizeof(struct NODE); p->num=10; q->num=20; r->num=30; p->next=q; q->next=r; printf("%dn ",p->num+q->next->num); 【答 案】D【分 数】1分【选 项】 A、10 B、20 C、30 D、4017、当a=2,b=3,c=4,d=5时,执行下面一段程序后x的值为( )。if(a<b) if(c>d)x=1 ; else if(a>c) if(b<d)x=2 ; else x=3 ; else x=4 ;else x=5 ;【答 案】C【分 数】1分【选 项】 A、2 B、3 C、4 D、518、设有程序段unsigned char k;while (k>0) k+; printf("%dn",k);则该程序段的输出结果为( )。【答 案】D【分 数】1分【选 项】 A、-1 B、-127 C、-128 D、019、若有以下定义:int x43=1,2,3,4,5,6,7,8,9,10,11,12;int(*p)3=x;则能够正确表示数组元素x21的表达式是( )。【答 案】C【分 数】1分【选 项】 A、*(*p+2)1) B、(*p+2)+1 C、*(*p+7) D、*(*p+2)+120、以下程序运行后的输出结果是( )。#include<stdio.h> void fun(int *p) int a=10;p=&a;+a;void main()int a=5;fun(&a);printf("%dn",a); 【答 案】A【分 数】1分【选 项】 A、5 B、6 C、10 D、1121、以下程序运行后的输出结果是( )。#include"stdio.h"int sub(int *t,int n) int *p1,*p2; for(p1=t,p2=t;p1-t<n;p1+) if(*p1<*p2)p2=p1; return(*p2); void main() int a9=9,36,19,39,26,5,6,33,15; printf("%dn",sub(a,9); 【答 案】A【分 数】1分【选 项】A、5B、9C、15D、39 22、下面程序的运行结果是( )。#include<stdio.h>#include<string.h>fun(char *w,int n)char t;ints1,s2;s1=0;s2=n-1;while(s1<s2)t=ws1+;ws1=ws2-;ws2=t;main()charp="1234567"fun(p,strlen(p);puts(p);【答 案】C【分 数】1分【选 项】 A、7654321 B、1714171 C、1711717 D、717717123、C语言规定函数返回值的类型由( )。【答 案】A【分 数】1分【选 项】 A、在定义时所指定的函数类型所决定 B、调用该函数时的主调函数类型所决定 C、return语句中的表达式类型所决定 D、调用该函数时系统临时决定24、有以下程序段:#include <stdio.h>main() int i=1,sum=0,n; scanf("%d",&n); do i+=2; sum+=i ; while(i!=n); printf("%d",sum);若使程序的输出值为15,则应该从键盘输入的n的值是 ( )。【答 案】D【分 数】1分【选 项】 A、1 B、3 C、5 D、725、以下程序的运行结果是( )。void main() char a="movie",b10="movie" printf("%d %dn",sizeof(a),sizeof(b);【答 案】C【分 数】1分【选 项】 A、5 5 B、6 6 C、6 10 D、6 1226、以下程序的输出结果是( )。#include <stdio.h>void main() unsigned char a,b; a=0x0a|3; b=0x0a&3; printf("%d %dn",a,b);【答 案】B【分 数】1分【选 项】 A、2 11 B、11 2 C、7 13 D、13 727、以下选项中,能定义s为合法的结构体变量的是( )。【答 案】C【分 数】1分【选 项】 A、typedef struct abc double a; char b10; s; B、struct ABC double a; char b10; ABC s;C、struct abc double a; char b10; s; D、typedef ABC double a; char b10; ABC s;28、以下程序的输出结果是( )。main() int a=0,j; for(j=0;j<4;j+) switch(j) case 0: case 3:a+=2; case 1: case 2:a+=3; default:a+=5; printf("%dn",a);【答 案】D【分 数】1分【选 项】 A、10 B、13 C、20 D、3629、以下程序功能为输入1个正整数n,计算并输出表达式s的前n项的和:s=1/2-2/3+3/4-4/5+ (-1)n/(n+1)。其中下划线处应填入的正确语句为( )。#include "stdio.h"void main() int k, flag=1, n; float s=0; scanf("%d", &n); for (k=1; k<=n; k+) s=s+_; flag=-flag; printf("sum=%fn", s);【答 案】A【分 数】1分【选 项】 A、1.0*k/(k+1)* flag B、flag*n/(n+1) C、-k/(k+1) D、1.0*k/(k+1)30、有以下函数:char *fun(char *p)return p;,该函数的返回值为( )。【答 案】B【分 数】1分【选 项】 A、不确定值 B、参数p中存放的地址值 C、一个临时存储单元的地址值 D、形参p自身的地址值31、以下程序运行后的输出结果是( )。main() int a,b; a=50;b=90; printf("%dn",(a,b);【答 案】A【分 数】1分【选 项】 A、90 B、50 90 C、50 D、10032、int x=-20; printf("%dn",x);以上程序段的输出结果是( )。【答 案】A【分 数】1分【选 项】 A、19 B、20 C、21 D、-133、若以下程序所生成的可执行文件名为file1.exe,当输入命令行:FILE1 CHINA BEIJING SHANGHAI,执行该程序时,程序的输出结果是( )。 main(int argc,char * argv ) while(argc->1) +argv;printf("%s",*argv);【答 案】A【分 数】1分【选 项】 A、CHINA BEIJING SHANGHAI B、FILE1 CHINA BEIJING C、C B S D、F C B34、下列程序运行后的输出结果是( )。 fun(int a, int b) if(a>b) return(b); else return(a);main() int x=3, y=8, z=6, r; r=fun(fun(x,y), 2*z); printf("%dn", r);【答 案】A【分 数】1分【选 项】 A、3 B、6 C、8 D、1235、有如下程序: long f(int n) if(n>2) return(f(n-2)+f(n-3); else if(n=2) return(2); else return(1); main() printf("%dn",f(6); 该程序的输出结果是( )。【答 案】C【分 数】1分【选 项】 A、3 B、4 C、5 D、636、在C程序中有如下语句:char *func(int x,int y); 下列说法正确的是( )。【答 案】C【分 数】1分【选 项】 A、该语句表示对函数func的定义 B、该语句表示对函数func的调用 C、该语句表示对函数func的原型说明 D、该语句是不合法的37、以下程序的输出结果是( )。#include <stdio.h>main() int w4=8,20,*p; p= w; p+; printf("%dn",*(+p);【答 案】A【分 数】1分【选 项】 A、0 B、8 C、20 D、不定38、以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是( )。【答 案】C【分 数】1分【选 项】A、char s10="abcdefg" B、char t="abcdefg",*s=t;C、char s10;s="abcdefg" D、char s10;strcpy(s,"abcdefg");39、以下程序将输出的字符是( )。#include "stdio.h"main() char c; char (*p)3; char s23 =a,b,c,d,e,f; p=&s0; c=*(p1+1); printf("%c",c);【答 案】C【分 数】1分【选 项】 A、b B、d C、e D、f40、以下程序的输出结果是( )。#include <stdio.h>main() struct st int x;int y; cnum2=1,3,2,7; printf("%dn",cnum0.y/cnum0.x*cnum1.x);【答 案】D【分 数】1分【选 项】A、0B、1 C、3 D、641、若a是整型变量,则表达式(aa)等价于( )。【答 案】B【分 数】1分【选 项】 A、a B、0 C、1 D、242、在C语言中,有关隐含存储类别的说法,正确的是( )。【答 案】C【分 数】1分【选 项】 A、函数的隐含存储类别是auto B、函数的隐含存储类别是static C、函数的隐含存储类别是extern D、函数没有隐含存储类别43、以下函数fun( )是求两个正整数的最大公约数,其中下划线处应填入的正确语句是( )。int fun(m,n)int m,n; int r; if(m<n) r=m;m=n;n=r; if(n= =0) return(m); do r=m%n; if (r!=0) m=n;n=r; while (_); return(n);【答 案】A【分 数】1分【选 项】 A、r!=0 B、r=0 C、n!=0 D、n=044、若调用fputc函数输出字符成功,则其返回值是( )。【答 案】D【分 数】1分【选 项】A、EOFB、0C、1D、输出的字符45、在32位PC机上使用C语言时,若有以下定义:union data int I;char ch;double f;b;则共用体变量b占用内存的字节数是( )。【答 案】C【分 数】1分【选 项】 A、2 B、4 C、8 D、12 46、语句printf(“%dn”,strlen(“xyztxab3x67”);的输出结果是( )。【答 案】B【分 数】1分【选 项】 A、7 B、8 C、9 D、1147、下列用于printf函数的控制字符常量中,代表退格的是( )。【答 案】A【分 数】1分【选 项】 A、'b' B、't' C、'r' D、'n'48、以下是关于枚举的程序,其运行结果是( )。#include "stdio.h" main() enum weekday sun,mon,tue=5,wed,thu,fri,sat a,b,c,d; a=sun; b=mon; c=tue; d=wed; printf("%d %d %d %dn",a,b,c,d);【答 案】C【分 数】1分【选 项】 A、0 0 5 0 B、1 2 5 4 C、0 1 5 6 D、0 1 5 349、以下是关于文件读写操作的程序,其屏幕输出是( )。#include <stdio.h>void main() FILE*fp;int i,a4=1,2,3,4,b; fp=fopen("data.dat","wb"); for(i=0;i<4;i+)fwrite(&ai,sizeof(int),1,fp); fclose(fp); fp=fopen("data.dat","rb"); fseek(fp,-2L*sizeof(int),SEEK_END); fread(&b,sizeof(int),1,fp); fclose(fp); printf("%dn",b);【答 案】C【分 数】1分【选 项】 A、1 B、2 C、3 D、450、以下程序运行后向文件输出的结果是( )。#include "stdio.h"void main() FILE *fp; fp=fopen("test.txt","wb"); fprintf(fp,"%d%.1f,%c%c",5,238.41,B,h); fclose(fp);【答 案】B【分 数】1分【选 项】 A、5 238.41 B h B、5238.4,Bh C、5,238.4,B,h D、5238.41Bh51、以下程序中,if (i>j)语句执行的次数共计( )次。main() int i=0,j=14,k=2,s=0; for(;) i+= k ; if(i>j) printf("%d",s); break ; s+=i ; 【答 案】C【分 数】1分【选 项】 A、6 B、7 C、8 D、952、若执行fopen函数时发生错误,则函数的返回值是( )。【答 案】D【分 数】1分【选 项】 A、地址值 B、0 C、1 D、EOF53、有以下程序:main() char str 8= "Hello","Beijing",*p=str; printf("%sn",p+4);该程序运行后的输出结果是( )。【答 案】C【分 数】1分【选 项】 A、Hello B、Beijing C、o D、oBeijing54、下列函数调用语句中含有( )个参数。func(f1,f2),(f2,f3),(f5,f6,f7),f8)【答 案】A【分 数】1分【选 项】 A、3 B、5 C、6 D、755、下列程序中函数sort的功能是对a数组中的数据进行由大到小的排序:void sort(int a ,int n) int i,j,t; for(i=0;i<n-1;i+) for(j=i+1;j<n;j+) if(ai<aj)t=ai;ai=aj;aj=t;main() int aa10=1,2,3,4,5,6,7,8,9,10 ,i; sort(&aa2,5); for(i=0;i<10;i+)printf("%d,",aai); printf(“n”); 该程序运行后的输出结果是( )。【答 案】B【分 数】1分【选 项】 A、1,2,3,4,5,6,7,8,9,10, B、1,2,7,6,5,4,3,8,9,10, C、1,2,10,9,8,7,6,5,4,3, D、10,9,8,7,6,5,4,3,2,1,56、下列程序的运行结果是( )。main() char arr24; strcpy(arr, "hello");strcpy(arr1, "ABC"); printf("%sn",arr);【答 案】C【分 数】1分【选 项】 A、helloABC B、hell C、hellABC D、attr57、程序中对fun函数有如下说明: int *fun();下面说法正确的是( )。【答 案】D【分 数】1分【选 项】A、fun函数是整型函数B、指针fun指向一个函数,该函数返回整型数据C、fun函数的返回值是整型数据D、fun函数的返回值是指向整型数据的指针类型58、下列程序的输出结果是( )。main()int k=4,m=5,n=7;int *pk=&k,*pm=&m,*p;*(p=&n)=+*pk*(*pm+);printf("%dn",n);【答 案】C【分 数】1分【选 项】 A、20 B、21 C、25 D、3059、以下函数的输出结果是( )。#define P 3#define F(x) (P*x*x)main() printf("%dn",F(3+5); 【答 案】B【分 数】1分【选 项】 A、192 B、29 C、25 D、编译出错60、下列程序的输出结果是( )。#include <stdio.h>#include <string.h>void main()char p120="abcd",p220="ABCD"char str50="xyz"strcpy(str+2,strcat(p1+2,p2+1);printf("%sn",str);【答 案】D【分 数】1分【选 项】 A、xyabcAB B、abcABz C、Ababcz D、xycdBCD二、多选题(20题,2分/题,共40分)1、若有以下定义和语句:int w23, (*pw)3; pw=w; 则对w数组元素的正确引用有( )。【答 案】ABD【分 数】2分【选 项】 A、*(w0+2) B、pw00 C、*pw2 D、*(pw1+2)2、设有如下定义: char *s2= "abcd","ABCD" char *p=s;则下列说法正确的有( )。【答 案】ACD【分 数】2分【选 项】 A、s数组元素的值分别是"abcd"和"ABCD"两个字符串的首地址 B、s数组的两个元素分别存放的是含有四个字符的一维字符数组中的元素 C、p是指向指针数据的指针变量 D、p中存放的是数组s的首地址3、设有说明int k=7,x=12; 则以下语句执行后,x值为0的有( )。【答 案】AC【分 数】2分【选 项】 A、x%=(k%5); B、x%=(k-k%5); C、x%=k-k/5; D、x=(x%=k)-(k%=5);4、已知有定义static int b5, a23=1,2,3,4,5,6;则以下说法正确的有( )。【答 案】AD【分 数】2分【选 项】 A、b中元素值为0 B、b中元素没有定义,值不确定 C、a11=4 D、a11=55、函数调用时,下列说法中正确的有( )。【答 案】BCD【分 数】2分【选 项】 A、若用值传递方式,则形式参数不予分配内存 B、实际参数和形式参数可以同名 C、主调函数和被调用函数可以不在同一个文件中 D、函数间传递数据可以使用全局变量6、下列说法中正确的有( )。【答 案】AD【分 数】2分【选 项】 A、递归函数的形参是自动变量 B、有些递归函数是不能用非递归算法来实现的 C、C语言不允许这样的函数调用:函数A调用了函数B,而函数B又调用了函数A D、C语言不允许函数的嵌套定义7、设有如下代码:struct str int no; char *name;node;char buf100;以下代码能为node变量输入值的有( )。【答 案】CD【分 数】2分【选 项】 A、scanf("%d%s", node.no, node.name); B、scanf("%d%s", &node.no, &node.name); C、scanf("%d%s", &node.no, buf); node.name = new char(strlen(buf)+1); strcpy(node.name, buf); D、scanf("%d%s", &node.no, buf); node.name = (char *)malloc(strlen(buf)+1); strcpy(node.name, buf);8、以下关于枚举类型的用法中,正确的有( )。【答 案】BC【分 数】2分【选 项】 A、enum a 1,2,3; B、enum a a,b,c; C、enum a a,b,cd; D、enum a a,b,ca;9、已知有定义:struct int no; char name20;a,b,*c;则以下语句合法的有( )。【答 案】ACD【分 数】2分【选 项】 A、a=b; B、a=&b; C、c=&b; D、*c=b10、以下关于结构类型变量的定义正确的有( )。【答 案】CD【分 数】2分【选 项】 A、struct data int num; float price; &book; B、struct data int num; float price; book; book b; C、struct data int num; float price; book; struct data &d=book; D、typedef struct data int num; float price; book; book b;11、设有结构类型:typedef struct str int no; char name20;STR;另有变量定义:STR a20, x;以下语句希望实现“向与文件指针变量fp关联的文件输出一个结构信息”,正确的有( )。【答 案】ABC【分 数】2分【选 项】 A、fwrite(a, sizeof(STR), 1, fp); B、fwrite(&a2, sizeof(STR), 1, fp); C、fwrite(&x, sizeof(STR), 1, fp); D、fwrite(x, sizeof(STR), 1, fp);12、以下对C语言中共用体类型数据的叙述正确的有( )。【答 案】BC【分 数】2分【选 项】 A、可以对共用体变量名直接赋值 B、不能在定义共用体类型变量时对它初始化 C、一个共用体变量中不能同时存放其所有成员 D、共用体类型定义中不能出现结构体类型的成员13、关于以下运算,说法正确的有( )。【答 案】BD【分 数】2分【选 项】 A、设有宏定义"#define F(N) 2*N",则表达式F(2+3)的值是10 B、设int x=4;则执行语句x+=x*= x+1;后,x的值为40 C、设int a, b=8;执行a=b<<2 + 1;后,a的值是33 D、设int a3