资源描述
第六届全国信息技术应用水平大赛
窗体顶端
第六届C语言程序设计 -- 预赛
一、单项选择题 【共60题,每小题1分,共60分。下列每题给出的多个选项中,只有一项是最符合试题要求的。请选择相应的正确答案。】
1.以下关于枚举的程序,其运行结果是( )。
#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 %d\n",a,b,c,d);
}
A) 0 0 5 0
B) 1 2 5 4
C) 0 1 5 6
D) 0 1 5 3
2.以下程序的运行结果是( )。
#include "stdio.h"
main()
{
int a[]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p=a+5,*q=NULL;
q=p+5;
printf("%d %d\n",*p,*q);
}
A)运行后报错
B)6 11
C)6 12
D)5 5
3.语句printf(“%d\n”,strlen(“xyz\t\xab\3\\”));的输出结果是( )。
A)9
B)11
C)7
D)8
4.有如下程序:
#define f(x)x*x
main()
{ int i ;
i=f(2+2)/(1+1);
printf(“%d\n”,i);}
该程序执行后的输出结果是( )。
A)21
B)7
C)8
D)4
5.下列程序运行后的输出结果是( )。
fun(int a, int b)
{ if(a>b) return(a);
else return(b);
}
main()
{ int x=3, y=8, z=6, r;
r=fun(fun(x,y), 2*z);
printf("%d\n", r);
}
A)3
B)6
C)8
D)12
6.以下是求两个正整数的最大公约数的函数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)r!=0
B)r==0
C)n!=0
D)n==0
7.下列叙述不正确的是( )。
A)用typedef可以定义各种类型名,但不能用来定义变量
B)typedef和#define都是在预编译时处理的
C)用typedef只是将已存在的类型用一个新的标识符来代表
D)使用typedef有利于程序的通用和移植
8.以下程序的运行结果是( )。
void fun(int *n)
{
static int m=2;
*n*=m-1; m+=2;
}
void main()
{
static int m=1;
int i;
for(i=1;i<4;i++)
fun(&m);
printf("%d\n",m);
}
A)8
B)10
C)11
D)15
9.若要用fopen函数打开一个二进制文件,该文件要既能读也能写,当文件不存在时新建文件,则文件打开方式应是( )。
A)"ab+"
B)"rb+"
C)"wb+"
D)"ab"
10.假设所有变量均为整型,则执行运算x=(a=2,b=5,b++,a+b)后, x的值是( )。
A)7
B)8
C)6
D)2
11.字符串"a\x44\\\nbcd\102a"的长度是( )。
A)12
B)17
C)9
D)11
12.下列程序的运行结果是( )。
main()
{ char arr[2][4];
strcpy(arr,“abc”);strcpy(arr[1],“ABC”);
printf(“%s\n”,arr);}
A)abc ABC
B)abc
C)ABC
D)arr
13.以下程序功能为输入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=%f\n", s);
}
A)1.0*k/(k+1)* flag
B)flag*n/(n+1)
C)-k/(k+1)
D)1.0*k/(k+1)
14.下列程序片段的输出结果是( )。
printf("%d\n",strlen("ATS\n0l2\2\\"));
A)l1
B)10
C)9
D)8
15.在下述程序中,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 ;
}
}
A)6
B)9
C)7
D)12
16.函数调用语句:fseek(fp,-20L,2);的含义是( )。
A)将文件位置指针移到距离文件头20个字节处
B)将文件位置指针从当前位置向后移动20个字节
C)将文件位置指针从文件末尾处后退20个字节
D)将文件位置指针移到距离当前位置20个字节处
17.以下程序的输出结果是( )。
main( )
{ char ch[2][5]={ "6937","8254"},*p[2];
int i,j,s=0;
for(i=0;i<2;i++) p[i]=ch[i];
for(i=0;i<2;i++)
for(j=0;p[i][j]> ’\0’;j+=2)
s=10*s+p[i][j]- ’0’;
printf("%d\n",s);
}
A)69825
B)63825
C)6385
D)693825
18.下列程序中函数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(a[i]<a[j]){t=a[i];a[i]=a[j];a[j]=t;}
}
main()
{ int aa[10]={1,2,3,4,5,6,7,8,9,10 },i;
sort(&aa[2],5);
for(i=0;i<10;i++)printf(“%d,”,aa[i]);
printf(“\n”);
}
该程序运行后的输出结果是( )。
A)1,2,3,4,5,6,7,8,9,10,
B)10,9,8,7,6,5,4,3,2,1,
C)1,2,7,6,5,4,3,8,9,10,
D)1,2,10,9,8,7,6,5,4,3,
19.设char ch,str[4],*strp;,则下列赋值语句正确的是( )。
A)ch="CBA";
B)str="CBA";
C)strp="CBA";
D)*strp="CBA";
20.若有定义:const int i=10,j=20;int* const pi=(int*)&i;,则下列操作正确的为( )。
A)*pi=0;
B)pi=&j;
C)i=10;pi=&j;
D)j=*pi;
21.程序中对fun函数有如下说明:
int *fun();
下面说法正确的是( )。
A)fun函数是整型函数
B)fun函数的返回值是整型数据
C)fun函数的返回值是指向整型数据的指针类型
D)指针fun指向一个函数,该函数返回整型数据
22.有以下函数:char *fun(char *p){return p;},该函数的返回值为( )。
A)不确定值
B)参数p中存放的地址值
C)一个临时存储单元的地址值
D)形参p自身的地址值
23.在PC16位机环境下,以下程序的运行结果是( )。
main()
{ unsigned int a ;
int b=-2;
a=b;
printf(“%u”,a);}
A)-2
B)65534
C)32768
D)-32768
24.以下选项中,能定义s为合法的结构体变量的是( )。
A)typedef struct abc
{ double a;
char b[10];
}s;
B)struct abc
{ double a;
char b[10];
}s;
C)struct ABC
{ double a;
char b[10];
}
ABC s;
D)typedef ABC
{ double a;
char b[10];
}
ABC s;
25.当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 ;
A)2
B)3
C)4
D)5
26.若有定义:int a,b;char x,y;并有以下输入数据: 12 13 AaBb(回车)
则能给a赋整数12,给b赋整数13,给x赋字符a,给y赋字符b的正确程序段是( )。
A)scanf(“%d”,&a);
scanf(“%d”,&b);
x=getchar();y=getchar();
B)scanf(“%d%d %c %c”, &a, &b,&x,&y);
C)scanf(“%d %d %c %c”, &a,&b,&x,&x,&y,&y);
D)scanf(“%d %d %c%c%c%c”,&a,&b,&x,&x,&y,&y);
27.以下程序运行后的输出结果是( )。
#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("%d\n ",p->num+q->next->num);
}
A)10
B)20
C)30
D)40
28.有以下程序段:
int a=0,b;
do { scanf(“%d”,&a);b++;} while(a!= 10 || b<3);
此处do-while循环的结束条件是( )。
A)a的值等于10并且b的值大于3
B)a的值等于10并且b的值大于等于3
C)a的值不等于10或者b的值小于3
D)a的值不等于10并且b的值大于等于3
29.在C语言中,函数的隐含存储类别是( )。
A)auto
B)static
C)extern
D)无存储类别
30.以下程序的输出结果是( )。
main( )
{ int n;
(n=6*4,n+6),n*2;
printf("n=%d\n",n);
}
A)30
B)24
C)60
D)48
31.下列选项中属于不正确的赋值语句的是( )。
A)t--;
B)k=i==j;
C)t1=t2=t3=3;
D)t1=1,t2=2;
32.在下列字符序列中,属于C语言合法标识符的是( )。
A)P12.a
B)stud_100
C)$water.1
D)88sum
33.若a是整型变量,表达式~(a^~a)等价于( )。
A)~a
B)1
C)0
D)2
34.下列程序的输出结果是( )。
main()
{
int k=4,m=5,n=7;
int *pk=&k,*pm=&m,*p;
*(p=&n)=*pk*(*pm);
printf(“%d\n”,n);
}
A)5
B)7
C)20
D)21
35.若x是int型变量,且有下面的程序片段:
for(x=5;x<8;x++)
printf((x/2)?(“**%d”):(“##%d”),x);
该程序片段的输出结果是( )。
A)**5**6**7
B)##5**6##7**8
C)**5##6**7
D)**5##6**7##8
36.设有数组定义:char array[ ]=“123456789”;则数组array所占的空间为( )。
A)7个字节
B)8个字节
C)9个字节
D)10个字节
37.以下程序的输出结果是( )。
main( )
{ int w=4,x=3,y=2,z=1;
if(x>y&&!(z==w)) printf("%d\n",(w<x?w:z<y?z:x));
else printf("%d\n", (w>x?w:z>y?z:x));
}
A)1
B)2
C)3
D)4
38.下列函数调用语句中含有( )个参数。
func((f1,f2),(f2,f3),(f5,f6,f7))
A)3
B)5
C)6
D)7
39.在下列语句选项中,只有一个在功能上与其他三个语句不等价(其中s1和s2表示某个C语句),这个不等价的语句是( )。
A)if (a) s1; else s2;
B)if (!a) s2; else s1;
C)if (a!=0) s1; else s2;
D)if (a==0) s1; else s2;
40.设有定义:#define STR "12345";,则以下叙述正确的是( )。
A)宏名STR代替的是数值常量12345
B)宏定义以分号结束,编译时会产生错误信息
C)宏名STR代替的是字符串"12345"
D)宏名STR代替的是字符串常量"12345"
41.若二维数组定义为a[m][n],则在a[i][j]之前的元素个数为( )。
A)j*m+i
B)i*m+j
C)i*m+j-1
D)j*m+i-1
42.语句:printf(“%d”,!0);的输出结果是( )。
A)1
B)0
C)有语法错误 ,不能执行
D)!0
43.以下程序将输出的字符是( )。
#include "stdio.h"
main()
{
char c;
char (*p)[3];
char s[2][3] ={’a’,’b’,’c’,’d’,’e’,’f’};
p=&s[0];
c=*(p[1]+1);
printf("%c",c);
}
A)b
B)d
C)e
D)f
44.以下程序的输出结果是( )。
main()
{int a=1,b=0;
switch(a)
{case 1: switch (b)
{case 0:printf("**0**");break;
case 1:printf("**1**");break;
}
case 2:printf("**2**");break;
}
}
A)**0**
B)**0****2**
C)**0****1****2**
D)有语法错误
45.若以下程序所生成的可执行文件名为filel.exe ,当输入命令行:FILE1 CHINA BEIJING SHANGHAI ,执行该程序时,程序的输出结果是( )。
main(int argc,char * argv [])
{ while(argc-->1)
{++argv;printf("%s ",*argv);}
}
A)CHINA BEIJING SHANGHAI
B)FILE1 CHINA BEIJING
C)C B S
D)F C B
46.有以下程序:
main()
{ char str[ ][8]={“Hello”,“Beijing”},*p=str;
printf(“%s\n”,p+8);}
该程序运行后的输出结果是( )。
A)Hello
B)Beijing
C)jing
D)ijing
47.在C程序中有如下语句:char *func(int x,int y); 它是( )。
A)对函数func的定义
B)对函数func的调用
C)对函数func的原型说明
D)不合法的
48.有如下定义:
struct s1
{
char a[3];
int num;
}t={’a’,’b’,’x’,4},*p;
p=&t;
则下列语句输出结果为x的是( )。
A)printf("%c\n",p->t.a[2]);
B)printf("%c\n",(*p).a[2]);
C)printf("%c\n",p->a[3]);
D)printf("%c\n",(*p).t.a[2]);
49.下列程序的输出结果是( )。
struct st
{ int x;int *y;}*p;
int dt[4]={10,20,30,40};
struct st aa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};
main()
{ p=aa;
printf(“%d ”,++(*p->y));
printf(“%d ”,(++p)->x);
printf(“%d ”,++p->x);
A)20 20 10
B)21 60 50
C)11 60 61
D)31 70 60
50.设有程序段 char k;while (k>0) k++; printf("%d\n",k);则程序输出结果为( )。
A)-127
B)256
C)-128
D)128
51.下列程序的输出结果是( )。
struct student
{ int a, b, c; };
main()
{ struct student stu[2]={{2,3,4},{5,6,7}}; int t;
t=stu[0].a+stu[1].b%stu[0].c;
printf("%d \n",t); }
A)0
B)1
C)4
D)5
52.若变量定义时未初始化,则其值不确定的是( )。
A)静态全局变量
B)静态局部变量
C)局部变量
D)全局变量
53.以下程序的输出结果是( )。
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("%d\n",a);
}
A)20
B)13
C)10
D)36
54.以下程序关于sizeof()的运行结果是( )。
void main()
{
char a[]="movie",b[10]="movie";
printf("%d %d\n",sizeof(a),sizeof(b));
}
A)5 5
B)6 6
C)6 10
D)其他输出
55.以下程序的输出结果为( )。
int a=2;
int f(int *a)
{
return(*a)++;
}
void main()
{
int s=0;
{int a=5;
s+=f(&a);
}
s+=f(&a);
printf("%d %d\n",a,s);
}
A)2 7
B)2 10
C)3 7
D)3 11
56.有如下程序,该程序的输出结果是( )。
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("%d\n",f(5)); }
A)2
B)3
C)4
D)5
57.以下程序的输出结果是( )。
#include <stdio.h>
int main()
{
char str[100]="ABCDEFG", *p=str;
int i;
for(i = 0; *p != ’\0’; p++,i++);
printf("%d\n",i);
return 0;
}
A)7
B)8
C)99
D)100
58.以下程序输出的字符序列是( )。
#include "stdio.h"
main(){
char a[]="language",*p;
p=a;
while(*p!=’u’){ printf("%c",*p-’u’+’U’);p++;}
}
A)LANGUAGE
B)language
C)LANG
D)LANGuage
59.C语言中运算对象必须是整型的运算符是( )。
A)/
B)++
C)%
D)!=
60.以下程序的输出结果是( )。
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=%d\n",x); }
A)x=4
B)x=8
C)x=6
D)x=12
二、多项选择题 【共20题,每小题2分,共40分。下列每题给出的多个选项中,有一项或多项是符合试题要求的。请选择相应的正确答案。多选、少选或错选均不得分。】
1.关于以下运算,说法正确的有( )。
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 a[3][4], *p = a[1]; 该指针变量p指向的元素是a[1][0]
2.有以下程序段:
#include "stdio.h"
#include "string.h"
main( )
{ char ss[10]="1,2,3,4,5";
gets(ss);
___________
printf("%s\n",ss); }
执行程序时如果输入ABC则输出结果为ABC6789,则下划线处的语句可以是( )。
A)strcat(ss,"6789");
B)strcpy(ss[3], "6789" );
C)strcpy(ss, "ABC6789" );
D)strcpy(&ss[3], "6789" );
3.break语句的正确用法包括( )。
A)无论在任何情况下,都中断程序的执行,终止整个循环
B)在多重循环中,只能退出最靠近的那一层循环语句
C)对于go语句和if语句构成的循环,不能使用break退出
D)可用于循环语句、switch语句和其他语句
4.设有说明int k=7,x=12;,则以下语句执行后,x值为0的有( )。
A)x %=(k%5);
B)x %=(k-k%5);
C)x %=k-k/5;
D)x =(x%=k)-(k%=5);
5.以下说法正确的有( )。
A)C语言程序总是从main函数开始执行
B)在C语言程序中,要调用函数必须在main()函数中定义
C)C语言程序由函数组成,且必须包含main函数
D)C语言程序中的main()函数必须放在程序的开始部分
6.以下有关字符串赋值、赋初值的语句正确的有( )。
A)char sz[2][40];sz[1]=“string1”;
B)char *sz[2];sz[1]=“string2”;
C)char sz[][40]=“string3”;
D)char *sz[2]={“string1”,“string2”};
7.以下叙述正确的有( )。
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,A和a是两个不同的变量
C)若a和b类型相同,在执行了赋值a=b后,b中的值不变
D)当键盘输入数据时,对于整型变量也可以能输入整型数值、实型数值和字符型数据等
8.若x,y均定义为int型,z定义为double型,以下scanf函数调用语句合法的有( )。
A)scanf("%d%lx,%le",&x,&y,&z);
B)scanf("%2d*%d%lf",&x,&y,&z);
C)scanf("%x%*d%o",&x,&y);
D)scanf("%x%o%6.2f",&x,&y,&z);
9.设有如下定义:
char *s[2]={“abcd”,“ABCD”};
char **p=s;
则下列说法正确的有( )。
A)s数组元素的值分别是“abcd”和“ABCD”两个字符串的首地址
B)s数组的两个元素分别存放的是含有四个字符的一维字符数组中的元素
C)p是指向指针数据的指针变量
D)p中存放的是数组s的首地址
10.下列判断不正确的有( )。
A)char *a=“china”;等价于 char *a;*a=“china”;
B)char str[6]={“china”};等价于char str[ ]= {“china”};
C)char s=“china”;等价于char s;s=“china”;
D)char c[4]=“abc”,d[4]=“abc”;等价于char c[4]=d[4]=“abc”;
11.已知:int a=1,*p=&a;,则以下表达式值为1的有( )。
A)*p
B)p[0]
C)*&a
D)*&p
12.若已建立如图所示的单向链表:
则下列选项中能将s所指的结点插入到链表尾部,构成新的单项链表的语句组有( )。
A)a=a->link;s->link=a->link;a->link=s->link;
B)a=(*a).link;(*s).link=(*a).link;(*a).link=s;
C)s->link=NULL;a=(*a).link;(*a).link =s;
D)s->link=a->link->link;a->link->link=s;
13.已知有如下程序:
void main()
{
int a[5]={1,2,3,4,5},*b;
b=(int*)malloc(sizeof(int));
____;
printf("%d\n",*b);
}
要使程序输出为a[2]的值,则下列有关函数fun的定义和下划线处对应的fun调用语句正确的有( )。
A)void fun(int*s,int*d)
{*d=*(s+2);}
调用: fun(a,&b)
B)void fun(int*s,int&d)
{d=*(s+2);}
调用: fun(a,b)
C)void fun(int*s,int &d)
{d=*(s+2);}
调用: fun(a,*b)
D)void fun(int*s,int **d)
{**d=*(s+2);}
调用: fun(a,&b)
14.下列符号串中,不属于C语言合法标识符的有( )。
A)_1_2_3
B)1-2-3
C)float
D)12ab
15.函数欲实现交换x和y的值,且通过正确调用返回交换结果,下列选项中不能实现这一功能的有( )。
A)funa(int *x, int *y)
{
int *p;
*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 *p;
*x = *x + *y; *y = *x - *y; *x = *x - *y;
}
16.关于下列程序的输入与输出,下列说法正确的有( )。
#include <stdio.h>
void main()
{
int m,n;
printf("Enter m,n∶");
scanf("%d%d",&m,&n);
while(m!=n)
{while(m>n)m-=n;
while(n>m)n-=m;
}
printf("m=%d\n",m);
}
A)输入m>n时,程序将输出1
B)输入m<n时,程序将输出1
C)输入m,n满足m%n等于0,且m>n时,程序输出n的值
D)输入m或n为0时,程序将陷入死循环
17.已知有定义static int b[5], a[2][3]={1,2,3,4,5,6};,则以下说法正确的有( )。
A)b中元素值为0
B)b中元素没有定义,值不确定
C)a[1][1]=4
D)a[1][1]=5
18.下面程序把数组元素中的最大值放入a[0]中,则在if语句中条件表达式可以是( )。
main()
{ int a[10]={5,2,9,6,7,1,12,8,23,0},*p=a,i;
for(i=0;i<10;i++,p++)
if( ) *a=*p ;
printf(“%d”,*a);
}
A)p>a
B)*p>a[0]
C)*p>*a[0]
D)*p:>*a
19.若已定义的函数有返回值,则以下关于该函数调用的叙述正确的有( )。
A)函数调用可以作为独立的语句存在
B)函数调用可以作为一个函数的实参
C)函数调用可以出现在表达式中
D)函数可以直接调用函数本身
20.已知int b=2,下列表达式值为1的有( )。
A)~b&b
B)~b||b
C)b>>1
D)(b|1)&1
窗体底端
展开阅读全文