C语言
库
一、选择题
1.下列叙述中错误的是( )
A.算法正确的程序最终一定会结束。
B.算法正确的程序可以有零个输出。
C.算法正确的程序可以有零个输入。
D.算法正确的程序对于相同的输入一定有相同的结果。
~B
2.下列叙述中错误的是( )
A.C程序必须由一个或一个以上的
组成。
B.函数调用可以作为一个独立的语句存在。
C.若函数有返回值,必须通过return语句返回。
D.函数形参的值也可以传回给对应的实参。
~D
3.C语言源程序名的后缀是( )
A.exe
B.c
C.obj
D.cp
~B
4.下列叙述中错误的是( )
A.用户定义的标示符允许使用关键字。
B.用户定义的标示符应做到“见名知意”。
C.用户定义的标示符必须以字母或下划线开头。
D.用户定义的标示符中大、小写字母代表不同标示。
~A
5.下列关于函数的叙述正确的是( )
A.每个函数都可以被其他的函数调用(包含main函数)。
B.每个函数都可以被单独编译。
C.每个函数都可以单独运行。
D.在一个函数内部可以定义另一个函数。
~B
6.下列不合法的用户标示符是( )
A.j2_key
B._int
C.4d
D._8_
~C
7.下列定义变量的语句中错误的是( )
A.int _int;
B.double int_;
C.char for;
D.float us$;
~D
8.按照C语言规定的用户标示符命名规则,不能出现在标示符中的是( )
A.大写字母
B.连字符
C.数字字符
D.下划线
~B
9.对于一个正常运行的C程序,下列叙述正确的是( )
A.程序的执行总是起止于main函数。
B.程序的执行总是从第一个函数开始,结束于main函数
C.程序的执行总是从main函数开始,在最后一个函数结束
D.程序的执行总是从第一个函数开始,在最后一个函数结束
~A
10.下列叙述正确的是( )
A.C语言程序从源程序中第一个函数开始执行
B.可以在程序中由用户指定一个函数作为主函数,程序将从此开始执行
C.C语言规定必须用main作为主函数名,程序从此开始执行,在次结束
D.main可作为用户标示符,可以命名任意一个函数作为主函数
~C
11.下列叙述正确的是( )
A.C程序中的注释只能出现在程序的开始位置
B.C程序
写格式严格,
一行只能写一个语句
C.C程序书写格式自由,一行可以写多条语句
D.用C语言编写的程序只能放在一个程序文件中
~C
12.下列不合法的数值常量是( )
A.011
B.1e1
C.8.0e0.5
D.0xabc
~C
13.可在C程序中用作用户标识符的一组是( )
A.and _2007
B.date y-m-d
C.hi dr.tom
D.case big1
~A
14.下列关于long、int和short类型数据占用内存大小的叙述正确的是( )
A.均占4个字节
B.根据数据的大小来决定所占内存的字节数
C.由用户自己定义
D.由C语言编译系统决定
~D
15.设变量已正确定义并赋值,以下正确的表达式是( )
A.x=y*5=x+z
B.int(15.8%3)
C.x=y+z+3,++y
D.x=25%5.0
~C
16.设有定义:int k=1;float f=7;则下列选项中错误的表达式是( )
A.k=k>=k
B.-k++
C.k%int(f)
D.k>=f>=m
~C
17.表达式3.6-5/2+1.2+5%2的值是( )
A.4.3
B.4.8
C.3.3
D.3.8
~D
18.下列叙述中错误的是( )
A.C程序中的#include和#define行均不是C语句
B.除逗号运算符外,赋值运算符的优先级最低
C.C程序中,j++;是赋值语句
D.C程序中,+、-、*、%是算术运算符,可用于整型数和实型数的运算
~D
19.下列选项中,当x为大于1的奇数时,值为0的表达式是( )
A.x%2==1
B.x/2
C.x%2!=0
D.x%2==0
~D
20.下列叙述中错误的是( )
A.C语句必须以分号结束
B.复合语句在语法上被看作一条语句
C.空语句出现在任何位置都不会影响程序运行
D.赋值表达式加上分号就构成赋值语句
~C
21.下列正确定义且赋初值的语句是( )
A.int n1=n2=10;
B.char c=32;
C.float f=f+1.1;
D.double x=12.3E2.5
~B
22.若变量已正确定义并赋值,下列合法的语句是( )
A.x=y==5
B.x=n%2.5
C.x+n=i
D.x=5=1+4
~A
23.以下定义正确的是( )
A.int a=b=0;
B.char A=65+1,b='b';
C.float a=1,"b=&a,"c=&b;
D.double a=0.0;b=1.1;
~B
24.有下列程序:
*main()
*{char a1='M',a2='m';
*printf("%c\n",(a1,a2));
*}
下列叙述正确的是( )
A.程序输出M
B.程序输出m
C.格式说明符不足,编译出错
D.程序运行时产生出错信息
~B
25.有下列程序:
*main()
*{int x,y,z;
*x=y=1;
*z=x++,y++,++y;
*printf("%d,%d,%d\n",x,y,z);
*}
*程序运行的结果是( )
A.2,3,3
B.2,3,2
C.2,3,1
D.2,2,1
~C
26.设有定义:int k=0;下列选项的4个表达式中与其他3个表达式的值不同的是( )
A.k++
B.k=k+1
C.++k
8.k+1
~A
27.在C语言中,以下说法不正确的是( )
A.在C程序中,整数和实数都能被准确无误的表示出来
B.在C程序中,任何一个变量名都代表存储器的一个位置
C.静态变量的生存周期与整个程序的运行期相同
D.C语言中,任何变量都必须先声明才能进行引用
~A
28.若有以下定义和语句:
*int a=010,b=0x10,c=10;
*printf("%d,%d,%d\n",a,b,c);
*则输出结果是( )
A.8,10,10
B.10,10,10
C.8,8,10
D.8,16,10
~D
29.设C语言中,float类型数据占4个字节,则double类型数据占( )个字节
A.1
B.2
C.8
D.4
~C
30.以下正确的实型常量( )
A.E3.4
B.-12345
C.2.2e0.8
D.4
~B
31.设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围是( )
A.0~255
B.0~65535
C.-32768~32767
D.-256~255
~B
32.设a和b均为int型变量,且a=6,b=11,则能使值为3的表达式是( )
A.b%(a%4)
B.b%(a-a%5)
C.b%a-a%5
D.(b%a)-(a%4)
~D
33.已定义变量a为整型,则不能正确表示9
9&&a<14
D.!(a<=9)&&!(a>=14)
~A
34.以下程序运行的结果是( )
*#include
*main()
*{int a=3,b=4,c=8,d=4,m=1,n=3;
*printf("%d\n",(m=a>b)&&(n=c>d))
*}
A.0
B.1
C.2
D.3
~A
35.能正确表示“当x的取值范围在[1,10]和[100,110]范围内为真,否则为假”的表达式是( )
A.(x>=1)&&(x<=10)&&(x>=100)&&(x<=110)
B.(x>=1)||(x<=10)||(x>=100)||(x<=110)
C.(x>=1)&&(x<=10)||(x>=100)&&(x<=110)
D.(x>=1)||(x<=10)&&(x>=100)||(x<=110)
~C
36.若有定义:int a=4,b=5;float x=3.4,y=2.1;则下面表达式的值为( )
*(float)(a+b)/2+(int)x%(int)y
A.5.5
B.55
C.5.500000
D.55.00000
~C
37.若a为int型变量,则执行以下语句后,a的值为( )
*a=5;a+=a-=a*a;
A.25
B.-40
C.40
D.-14
~B
38.若已定义x和y为整型变量,且x=7,则表达式y=2.3+x/2的值是( )
A.6
B.5
C.5.0
D.6.0
~B
39.有以下程序:
*main()
*{int y=1,x=2,z=3;
*printf("%d,%d\n",(++x,y++),z+2);
*}
*执行后的输出结果是( )
A.3,5
B.2,5
C.3,3
D.1,5
~D
40.以下程序的输出结果是( )
*main()
*{int a=1,b=2;
*printf("%d,%d\n",--a,++b);
*}
A.1,2
B.1,3
C.0,2
D.0,3
~D
41.C语言程序的执行是( )
A.从程序的主函数开始,到程序的主函数结束
B.从程序的主函数开始,到程序的最后一个函数结束
C.从程序的第一个函数开始,到程序的最后一个函数结束
D.从程序的第一个函数开始,到程序的主函数结束
~A
42.下面说法正确的是( )
A.一个C程序可以有多个函数
B.一个C语言的函数中只允许有一对花括号
C.C语言一个语句可以写在一行内,也可以写在多行内
D.在对C程序进行编译时,可以发现注释行中的拼写错误
~C
43.以下说法正确的是( )
A.C程序是以函数为基本单位的,整个程序由函数组成
B.C语言程序的一条语句可以写在不同的行上
C.C程序的注释行对程序运行不起作用,所以注释应该尽可能少写
D.C程序的每个语句都以分号结束
~C
44.以下标示符不是关键字的是( )
A.break
B.char
C.Switch
D.return
~C
45.若要求定义具有10个int型元素的一维数组a,则下列定义语句中错误的是( )
A.#define N 10
*int a[N]
B.#define n 5
*int a[2*n]
C.int a[5+5]
D.int n=10,a[n]
~D
46.下设有如下程序段
*char s[20]="Beijing",*p;
*p=s;
*则执行p=s;语句后,以下叙述正确的是( )
A.可以用*p表示s[0]
B.s数组中元素的个数和p所指字符串长度相等
C.s和p都是指针变量
D.数组s中的内容和指针变量p中的内容相同
~A
47.下列数组定义中错误的是( )
A.int x[][3]={0};
B.int x[2][3]={{1,2},{3,4},{5,6}};
C.int x[][3]={{1,2,3},{4,5,6}};
D.int x[2][3]={1,2,3,4,5,6};
~B
48.有以下程序:
*main()
*{int i,t[][3]={9,8,7,6,5,4,3,2,1};
*for(i=0;i<3;i++) printf("%d",t[2-i][i]);
*}
*程序执行后的输出结果是( )
A.7 5 3
B.3 5 7
C.3 6 9
D.7 5 1
~B
49.若有定义语句:int a[3][6];,按内存中的存放顺序,a数组的第10元素是( )
A.a[0][4]
B.a[1][3]
C.a[0][3]
D.a[1][4]
~B
50.以下错误的定义语句是( )
A.int x[][3]={{0},{1},{1,2,3}};
B.int x[4][3]={{1,2,3},{1,2,3},{1,2,3}};
C.int x[4][]={{1,2,3},{1,2,3},{1,2,3}};
D.int x[][3]={1,2,3,4};
~C
51.以下不正确的定义语句是( )
A.double x[5]={1.0,2.0,3.0,4.0,5.0};
B.int y[5]={0,1,2,3,4,5}};
C.char c[]={'1','2','3','4','5'};
D.char c2[]={'a','b','c'};
~B
52.若有以下定义,则正确引用数组元素的是( )
*int a[5],*p=a;
A. *&a[5]
B. *a+2
C. *(p+5)
D. *(a+2)
~D
53.若有说明:int a[][3]={0,0};则不正确的叙述是( )
A.数组a的每个元素的初值都是0
B.数组a的第一维大小为1
C.数组a的行数为1
D.只有元素a[0][0]和a[0][1]初值为0,其余元素得不到初值0
~D
54.下列二维数组初始化语句中,不正确的是( )
A.int b[][2]={1,2,3,4,5,6,7};
B.int b[3][5]={0,0,0};
C.int b[][4]={{1,2},{3,4,5},{6}};
D,int b[3][2]={(1,2),(3,4),(5,6)};
~D
55.有以下程序:
*main()
*{int aa[5][5]={{1,2,3,4},{5,6,1,8},{5,9,10,2},{1,2,5,6}};
*int s=0,i;
*for(i=0;i<4;i++)
*s+=aa[i][2];
printf("%d",s);
*}
*程序运行后的输出结果是( )
A.26
B.19
C.10
D.20
~B
56.设已有定义:float x;,则下列对指针变量p进行定义且赋初值的语句中正确的是( )
A.float *p=1024;
B.int *p=(float)x;
C.float p=&x;
D.float *p=&x;
~D
57.设有定义语句int (*f)(int);,则以下叙述正确的是( )
A.f是基类型为int的指针变量
B.f是指向函数的指针变量,该函数具有一个int类型的形参
C.f是指向int类型一维数组的指针变量
D.f是函数名,该函数的返回值是其类型为int类型的地址
~B
58.设有定义:int n1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是( )
A.*p=*q
B.p=q
C.*p=&n1;
D.p=*q
~A
59.在16位编译系统上,若有定义int a[]={10,20,30},*p=&a;,当执行p++;后,下列说法错误的是( )
A.p向高地址移了一个字节
B.p向高地址移了一个存储单元
C.p向高地址移了两个字节
D.p与n+1等价
~A
60.若有定义语句:int k[2][3],*pk[3];,则下列语句中正确的是( )
A.pk=k;
B.pk[0]=&k[1][2];
C.pk=k[0];
D.pk[1]=k;
~B
61.若有定义:char(*p)[6];则标识符p( )
A.是一个指向字符型变量的指针
B.是一个指针数组名
C.是一个指针变量,它指向一个含有6个字符型元素的一维数组
D.定义不合法
~C
62.下面程序段的运行结果是( )
#include
void main()
{ char str[]="abc",*p=str;
printf("%d\n",*(p+3));
}
A.67
B.0
C.字符'C'的地址
D.字符'C'
~B
63.若有以下定义,则对a数组元素的正确引用是( )
int a[5],*p=a;
A.*&a[5]
B.*a+1
C.*(p+5)
D.*(a+2)
~D
64.数字字符0的ASC||值为48,运行下列程序的输出结果是( )
main()
{ char a='1',b='2';
printf("%c,",b++);
printf("%d\n",b-a);
}
A.3,2
B.50,2
C.2,2
D.2,50
~C
65.下列不合法的字符常量是( )。
A.'\018'
B.'\"'
C.'\\'
D.'\xcc'
~A
66.下列能正确定义字符串的语句是( )
A.char str[]={'\064'};
B.char str="kx43";
C.char str='';
D.char str[]="\0";
~D
67.下列合法的字符型常量是( )
A.'\x13'
B.'\081'
C.'65'
D."\n"
~A
68.已知大写字母A的ASC||码是65,小写字母a的ASC||码是97。下列不能将变量c中的大字字母转换为对应小写字母的语句是( )
A.c=(c-'A')%26+'a'
B.c=c+32
C.c=c-'A'+'a'
D.c=('A'+C)%26-'a'
~D
69.已知字符'A'的ASC||码值是65,字符变量c1的值是'A',c2的值是'D'。执行语句printf("%d,%d",c1,c2-2);后,输出结果是( )
A.A,B
B.A,68
C.65,66
D.65,68
~C
70.下列正确的字符串常量是( )
A."\\\"
B.'abc'
C.Olympic Games
D.""
~D
71.要求通过while循环不断读入字符,当读入字母N时结束循环。若变量已正确定义,下列正确的程序段是( )
A.while((ch=getchar())!='N') printf("%c",ch);
B.while(ch=getchar()!='N') printf("%c",ch);
C.while(ch=getchar()=='N') printf("%c",ch);
D.while((ch=getchar())=='N') printf("%c",ch);
~A
72.有以下程序段
char ch;int k;
ch='a';k=12;
printf("%c,%d,",ch,ch,k);
printf("k=%d\n",k);
已知字符a的ASC||十进制代码为97,则执行上述程序段后输出结果是( )
A.因变量类型与格式描述符的类型不匹配输出无定值
B.输出项与格式描述符个数不符,输出为零值或不定值
C.a,97,12k=12
D.a,97,k=12
~D
73.有定义语句:int b;char c[10];,则正确的输入语句是( )
A.scanf("%d%s",&b,&c);
B.scanf("%d%s",&b,c);
C.scanf("%d%s",b,c);
D.scanf("%d%s",b,&c);
~B
74.设有定义:int a; float b;,执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0,a和b的值分别是( )
A.876和543.000000
B.87和6.000000
C.87和543.000000
D.76和543.000000
~B
75.设变量均已正确定义,若要通过scanf("%d%c%d%c",&a1,&c1,&a2,&c2);语句为变量a1和a2赋数值10和20,为变量c1和c2赋字符X和Y。下面的输入形式中正确的是( )(注:□代表空格字符)。
A.10□X□20□Y
B.10□X20□Y
C.10□X20Y
D.10X20□Y
~A
76.有下列程序段:
int j; float y;char name[50];
scanf("%2d%f%s",&j,&y,name);
当执行上述程序段,从键盘上输入55566 7777abc后,y的值为( )
A.55566.0
B.566.0
C.7777.0
D.566777.0
~B
77.以下选项中不是字符常量的是( )
A.'\v'
B.'\x2a'
C.'a'
D."\0"
~D
78.以下选项中非法的字符常量是( )
A.'\\'
B.'\020"
C.'\xAA'
D.'0'
~B
79.在执行完下面的C语句段之后,则B的值是( )
char a='A';
int b;
B=((34&&56)&&(a<'b'));
A.0
B.1
C.TRUE
D.FALSE
~B
80.若变量已正确定义,以下正确的程序段是( )
A.while(ch=getchar()=='\N') putchar(ch);
B.while((ch=getchar())=='\n')putchar(ch);
C.while((ch=getchar())!='\N')putchar(ch);
D.while((ch=getchar())!='\n')putchar(ch);
~D
81.若变量已正确定义,下面程序段的输出结果是( )
#include
main()
{float x=1.236547;
printf("%f\n",(int)(x*1000+0.5)/(float)1000);
}
A.1.237000
B.输出格式说明与输出项不匹配,输出无定值
C.1.236000
D.1.24
~A
82.设已定义x为double类型变量:
#include
main()
{ float x=323.82631;
printf("%.2e\n",x);
}
则以上语句( )
A.输出格式描述符的域宽不够,不能输出
B.输出为32.38e+01
C.输出为3.24e+002
D.输出为3.24e2
~C
83.若有以下定义和语句:
int u=011,v=0x11,w=11;
printf("%o,%x,%d\n",u,v,w);
则输出结果是( )
A.9,17,11
B.9,11,11
C.11,11,11
D.11,17,11
~C
84.语句"printf("a\bhow\'are\'y\\\bou\n");"的输出结果是( )
A.a\bhow\'are\'y\\bou
B.a\bhow\'are\'y\bou
C.how'are'you
D.ahow'are'y\bou
~C
85.若变量已正确定义,要求通过scanf("%c%d%c%d",&c1,&a,&c2,&b)语句给变量a和b赋数值32和45,给变量c1和c2赋字符A和B;以下选项中数据从第1列开始输入,正确的输入形式是( )
A.A32<回车>B45<回车>
B.A45<回车>B32<回车>
C.A32B45<回车>
D.A 32 B 45<回车>
~D
86.若有"double a;",则正确的输入语句是( )
A.scanf("%lf",a);
B.scanf("%f",&a);
C.scanf("%lf",&a);
D.scanf("%le",&a);
~D
87.已知i、j、k为int型变量,若要从键盘输入2,3,4<回车>,使i、j、k的值分别为2、3、4,以下正确的输入语句是( )
A.scanf("%3d,%3d,%3d",&i,&j,&k);
B.scanf("%d,%d,%d",&i,&j,&k);
C.scanf("%d%d%d",&i,&j,&k);
D.scanf("i=%d,j=%d,k=%d",&i,&j,&k);
~B
88.下列运算符中优先级最高的运算符是( )
A.!
B.%
C.-=
D.&&
~A
89.下列运算符中优先级最低的运算符是( )
A.||
B.!=
C.<=
D.+
~A
90.为表示关系x≥y≥z,应使用的C语言表达式是( )
A.(x>=y)&&(y>=z)
B.(x>=y)AND(y>=z)
C.(x>=y>=z)
D.(x>=y)&(y>=z)
~A
91.设a、b和c都是int型变量,且a=3,b=4,c=5;则以下的表达式中,值为0的表达式是( )
A.a&&b
B.a<=b
C.a||b+c&&b-c
D.!(a
main()
{ char p[]={'a','b','c'},q[10]={'a','b','c'};
printf("%d%d\n",strlen(p),strlen(q));
}
下列叙述中正确的是( )
A.在给p和q数组赋初值时,系统会自动添加字符串结束符,故输出的长度都为3
B.由于p数组中没有字符串结束符,长度不能确定,但q数组中字符串长度为3
C.由于q数组中没有字符串结束符,长度不能确定,但p数组中字符串长度为3
D.由于p和q数组中都没有字符串结束符,故长度都不能确定
~A
133.若要求从键盘读入含有空格字符的字符串,应使用函数( )
A.getc()
B.gets()
C.getchar()
D.scanf()
~B
134.当用户要求输入的字符串中含有空格时,应使用的输入函数是( )
A.scanf()
B.getchar()
C.gets()
D.getc()
~C
135.当有定义语句:char s[10];,若要从终端给s输入5个字符,错误的输入语句是( )
gets(&s[0]);
scanf("%s",s+1);
gets(s);
scanf("%s",s[1]);
~D
当以下叙述中错误的是( )
A.gets函数用于从终端读入字符串
B.getchar函数用于从磁盘文件读入字符
C.fputs函数用于把字符串输出到文件
D.fwrite函数用于以二进制形式输出数据到文件
~B
136.下列关于字符串的叙述中正确的是( )
A.C语言中有字符串类型的常量和变量
B.两个字符串中的字符个数相同时才能进行字符串大小的比较
C.可以用关系运算符对字符串的大小进行比较
D.空串一定比空格打头的字符串小
~D
137.下面能正确进行字符串赋值的是( )
A.char s[5]={"ABCDE"};
B.char s[5]={'A','B','C','D','E'};
C.char*s; s="ABCDE";
D.char*s;printf("%s",s);
~C
138.字符串"\\\"ABCDEF\"\\"的长度是( )
A.15
B.10
C.7
D.8
~B
139.下面各语句行中,能正确进行赋值字符串操作的是( )
A.char s[5]={'a','b','c','d','e'};
B.char *s;gets(s);
C.char *s;*s="ABCDEF";
D.char s[5];scanf("%s",&s);
~B
140.设已执行预编译命令#include,以下程序段的输出结果是( )
char s[]="abcdefg";
printf("%d\n",strlen(s));
A.7
B.8
C.9
D.10
~A
141.若已包括头文件且已有定义char s1[18],s2={"ABCDE"}和int i,现要将字符串"ABCDE"赋给s1,下述语句错误的是( )
A.strcpy(s1,s2);
B.strcpy(s1,"ABCDE");
C.s1="ABCDE";
D.for(i=0;i<6;i++)
s1[i]=s2[i];
~C
142.在下列给出的表达式中,与while(E)中的(E)不等价的表达式是( )
A.(!E==0)
B.(E>0||E<0)
C.(E==0)
D.(E!=0)
~B
143.已知字母A的ASCII值为65,若变量kk为char型,以下不能正确判断出kk的值为大写字母的表达式是( )
A.kk>='A'&&kk<='Z'
B.!(kk>='A'||kk<='Z')
C.(kk+32)>='a'&&(kk+32)<='z'
D.isalpha(kk)&&(kk<91)
~B
144.设有定义:int a=2,b=3,c=4;,则下列选项中值为0的表达式是( )
A.(!a==1)&&(!b==0)
B.(a=2&&c<=6)||(c!=3)||(c!=5)
C.(c>=2&&c<=6)&&!(c%2)
D.(c>=2&&c<=6)&&(c%2!=1)
~C
147.在嵌套使用if语句时,C语言规定else总是( )
A.和之前与其具有相同缩进位置的if配对
B.和之前与其最近的if配对
C.和之前与其最近的且不带else的if配对
D.和之前的第一个if配对
~C
148.设变量x和y均已正确定义并赋值。下列if语句中,在编译时将产生错误信息的是( )
A.if(x++) ;
B.if(x>y&&y!=0)
C.if (x>0) x-- else y++
D.if (y<0){;} else x++;
~C
149.若变量已正确定义,有以下程序段:
*int a=3,b=5,c=7;
*if(a>b) a=b;c=a;
*if(c!=a) c=b;
*printf("%d,%d,%d\n",a,b,c);
*其输出结果是( )
A.程序段有语法错误
B.3,5,3
C.3,5,5
D.3,5,7
~B
150.下列叙述中正确的是( )
A.break只能用于 switch语句
B.switch语句中必须使用default
C.break必须与switch语句中的case配对使用
D.在switch中,不一定使用break
~D
151.若变量已正确定义,以下表达式错误的是( )
A.a/b+c
B.a%(5.0)
C.a=1/3*(x=y=10,x*2)
D.a=b=c
~B
152.下列程序运行后的输出结果是( )
*main()
*{int a=4,b=3,c=2,d=1;
*printf("%d",a=8) break;
*if(a%2==1)
*{a+=5;continue;}
*a=3;
*}
*printf("%d\n",b);}
A.3
B.4
C.5
D.6
~B
161.下列叙述中正确的是( )
A.break语句只能用于switch语句中
B.continue的作用是使程序的执行流程跳出包含它的所有循环
C.break语句只能用于循环体内和switch语句中
D.在循环体内使用break语句和continue语句的作用相同
~C
162.设有程序段:
*int k=12;
*while (k=1)k=k-1;
*则下面描述中正确的是( )
A.while循环执行10次
B.循环是无限循环
C.循环体语句一次也不执行
D.循环体语句执行一次
~C
163.下列程序段的运行结果是( )
*x=y=0;
*while(x<25)
*{y++;
*x+=++y;
*}
*printf("%d,%d",y,x);
A.30,9
B.9,30
C.3,1
D.10,30
~D
164.while和 do while循环的主要区别是( )
A.do while循环的循环体不能是复合语句
B.do while循环允许从循环体外转到循环体内
C.while循环的循环体至少被执行一次
D.do while循环的循环体至少被执行一次
~D
165.下面的for语句的循环次数是( )
*for(x=1,y=0;(y!=19&&(x<6);x++);
A.无限循环
B.循环次数不定
C.最多执行6次
D.最多执行5次
~D
166.下面结论中错误的是( )
A.可以用do while语句实现的循环一定可以用while语句实现
B.可以用for语句实现的循环一定可以用while语句实现
C.可以用while语句实现的循环一定可以用for语句实现
D.do while语句和while语句的区别仅是while出现的位置不同
~D
167.若i,j已定义成int型,则以下程序段中内循环体的总执行次数是( )
*for(i=6;i>0;i--)
*for(j=0;j<4;j++){...}
A.20
B.24
C.25
D.30
~B
168.以下循环体的执行次数是( )
*main()
*{int i,j;
*for(i=0,j=1;i
*main()
*{ int a=3,b=4,c=8,d=4,m=1,n=3;
* printf("%d\n",(m=a>b)&&(n=c>d));
*}
A.0
B.1
C.2
D.3
~A
173.有定义语句:int b;char c[10];,则正确的输入语句是( )
A.scanf("%d%s",&b,&c);
B.scanf("%d%s",&b,c);
C.scanf("%d%s",b,c);
D.scanf("%d%s",b,&c);
~B
174.有下列程序:
*main()
*{ int m,n,p;
* scanf("m=%dn=%dp=%d",&m,&n,&p);
* printf("%d%d%d",m,n,p);
*}
*若想从键盘上输入数据,使变量m的值为123,n的值为456,p的值为789,则正确的输入是( )
A.m=123 n=456 p=789
B.m=123 n=456 p=789
C.m=123,n=456,p=789
D.123 456 789
~A
175.要求当A的值为奇数时,表达式的值为“假”,A的值为偶数时,表达式的值为“真”。则以下能满足要求的是( )
A.A%2==1
B.!(A%2==0)
C.!(A%2)
D.A%2
~C
176.当把四个表达式用作if语句的控制表达式时,有一个选项与其他三个选项含义不同,这个选项是( )
A.k%2
B.k%2==1
C.(k%2)!=0
D.!k%2==1
~A
177.下列不能正确计算代数式(1/3)sin2(1/2)值的C语言表达式是( )
A.1/3*sin(1/2)*sin(1/2)
B.sin(0.5)*sin(0.5)/3
C.pow(sin(0.5),2)/3
D.1/3.0*pow(sin(1.0/2),2)
~A
178.在printf的格式字符中,e格式字符的作用是( )
A.以十六进制无符号形式输出整数
B.以带符号的十进制形式输出整数
C.以指数形式输出实数
D.以字符形式输出,且只输出一个字符
~C
179.若要从键盘读入含有空格字符的字符串,应使用函数( )
A.getc()
B.gets()
C.getchar()
D.scanf()
~B
180.当a=4,b=5,c=7,d=6时,执行下面一段程序:
*if(a=5或a<=0”的C语言表达式是( )
A.a>=5 or a<=0
B.a>=0 || a<=5
C.a>=5 && a<=0
D.a>=5 || a<=0
~D
190.以下能正确表示x在-5到5(含-5和5)内,值为“真”的表达式是( )
A.(x>=-5)&&(x<=5)
B.!(x>=-5||x<=5)
C.x<5 && x>-5
D.(x<-5)||(x<5)
~A
191.以下关于运算符优先顺序描述中正确的是( )
A.算术运算符<关系运算符<赋值运算符<逻辑运算符
B.赋值运算符<逻辑运算符<关系运算符<算术运算符
C.逻辑运算符<关系运算符<算术运算符<赋值运算符
D.关系运算符<算术运算符<赋值运算符<逻辑运算符
~B
192.以下合法的C语言赋值语句是( )
A.a=b=1
B.a=int a+b
C.a=2,b=3
D.i++;
~D
193.若i、j已定义成int型,则以下程序段中内循环体的总执行次数是( )
*for(i=6;i>0;i--)
*for(j=0;j<4;j++){...}
A.20
B.24
C.25
D.30
~B
194.以下选项中非法的字符常量是( )
A.'\\'
B.'\0201'
C.'\xAA'
D.'0'
~B
195.如果在一个函数的复合语句中定义了一个变量,则该变量( )
A.在该复合语句中有效,在该复合语句外无效
B.在该函数内都有效
C.在本程序的原文件范围内均有效
D.此定义方法错误,其变量为非法变量
~A
196.以下不正确的定义语句是( )
A.double x[5]={1.0,2.0,3.0,4.0,5.0};
B.int y[5]={0,1,2,3,4,5};
C.char c1[]={'1','2','3','4','5'};
D.char c2[]={'a','b','c'};
~B
197.C语言中,凡未指定存储类别的局部变量的隐含存储类别是( )
A.自动(auto)
B.静态(static)
C.外部(extern)
D.寄存器(register)
~A
198.如果要打开一个已经存在的非空文件“FILE”并进行修改,正确的语句是( )
A.fp=fopen("FILE","r");
B.fp=fopen("FILE","a+");
C.fp=fopen("FILE","w+");
D.fp=fopen("FILE","r+");
~D
199.下列程序的功能时:给r输入数据后计算半径为r的圆面积s。程序在编译时出错。
main()
{ int r; float s;
scanf("%d",&r);
s=pi*r*r;
printf("s=%f\n",s);
}
出错的原因是( )
A.注释语句书写位置错误
B.存放圆半径的变量r不应该定义为整型
C.输出语句中格式描述符号非法
D.计算圆面积的赋值语句中使用了非法变量
~D
200.以下叙述错误的是( )
A.在程序中凡是以“#”开始的语句行都是预处理命令行
B.预处理命令行的最后不能以分号表示结束
C.#define MAX是合法的宏定义命令行
D.C程序对预处理命令行的处理是在程序执行的过程中进行的
~C
201.下列叙述中正确的是( )
A.预处理命令行必须位于源文件的开头
B.在源文件的一行上可以有多条预处理命令
C.宏名必须用大写字母表示
D.宏替换不占用程序的运行空间
~D
202.若程序中有宏定义行:#define N 100,则下列叙述中正确的是( )
A.宏定义中定义了标识符N的值为整数100
B.在编译程序对C源程序进行预处理时用100替换标识符N
C.对C源程序进行编译时用100替换标识符N
D.在运行时用100替换标识符N
~B
203.程序
#include
#define M 5
#define N M+M
main()
{ int k;
k=N*N*5;
printf("%d\n",k);
}
的输出结果是( )
A.100
B.50
C.55
D.45
~C
204.下列叙述中正确的是( )
A.预处理命令行必须位于C源程序的起始位置
B.在C语言中,预处理命令行都以#开头
C.每个C程序必须在开头包含预处理命令行:#include
D.C语言的预处理不能实现宏定义和条件编译的功能
~B
205.C语言的编译系统对宏命令的处理是( )
A.在系统对源程序进行编译前
B.和其他语句的编译同时进行
C.在程序连接时进行
D.在程序运行时进行
~A
206.以下叙述中不正确的是( )
A.预处理命令行都必须以“#”号开始,结尾不加分号
B.在程序中凡是以“#”开始的语句行都是预处理命令行
C.C程序在执行过程中对预处理命令进行处理
D.预处理命令可以放在程序的任何位置
~C
207.下面叙述中正确的是( )
A.C语言中预处理是指完成宏替换和文件包含指定的文件的调用
B.预处理命令只能位于C源程序文件的首部
C.预处理命令可以放在程序中的任何位置
D.预处理命令结尾需要加分号
~C
208.以下有关宏替换的叙述不正确的是( )
A.使用宏定义可以嵌套
B.宏定义仅仅是符号替换
C.双引号中出现的宏名不替换
D.宏名必须用大写字母表示
~D
209.在“文件包含”预处理语句的使用形式中,当#include后面的文件名用尖括号(<>)括起时,寻找被包含文件的方式是( )
A.仅仅搜索当前目录
B.仅仅搜索源程序所在目录
C.在标准目录下查找指定文件
D.先在源程序所在目录搜索,如没找到,再按系统指定的标准目录查找
~C
210.下列对结构体类型变量td的定义中,错误的是( )
A. typedef struct aa B. struct aa
{ int n; { int n;
float m; float m;
}AA; }td;
AA td;
C. struct D. struct
{int n; { int n;
float m; float m;
}aa; }td;
struct aa td;
~C
211.下列叙述错误的是( )
A.可以通过typedef增加新的类型
B.可以用typedef将已存在的类型用一个新的名字来代表
C.用typedef定义新的类型名后,原有的类型名仍有效
D.用typedef可以为各种类型起别名,但不能为变量起别名
~A
212.设有以下语句:
typedef struct TT
{char c;int a[4];}CIN;
则下列叙述中正确的是( )
A.可以用TT定义结构体变量
B.TT是 struct类型的变量
C.可以用CIN定义结构体变量
D.CIN是struct TT类型的变量
~C
213.下列关于typedef的叙述错误的是( )
A.用typedef可以增加新的类型
B.typedef只是将已存在的类型用一个新的名字来代表
C.用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名
D.用typedef为类型说明一个新名,通常可以增加程序的可读性
~A
214.有以下结构体类型说明和变量定义中正确的是( )
A. typedef struct B. struct REC
{ int n;char c;}REC; { int n;char c;};
REC t1,t2; REC t1,t2;
C. typedef struct REC; D. struct
{ int n=0;char c='A';}t1,t2; { int n;char c;}REC;
REC t1,t2;
~A
215.定义以下结构体数组:
struct st
{ char name[15];
int age;
}a[10]={"ZHAO",14,"WANG",15,"LIU",16,"ZHANG",17};
执行语句printf("%d,%c"a[2].age,*(a[3].name+2)))的输出结果为( )
A.15,A
B.16,H
C.16,A
D.17,H
~C
216.设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为( )
A.EOF
B.非0值
C.0
D.NULL
~B
217.读取二进制文件的函数调用形式为:fread(buffer,size,count,fp);,其中buffer代表的是( )
A.一个文件指针,指向待读取的文件
B.一个整型变量,代表待读取的数据的字节数
C.一个内存块的首地址,代表读入数据存放的地址
D.一个内存块的字节数
~C
218.如果需要打开一个已经存在的非空文件“FILE"并进行修改,正确的语句是( )
A.fp=fopen("FILE","r");
B.fp=fopen("FILE","a+");
C.fp=fopen("FILE","w+");
D.fp=fopen("FILE","r+");
~D
219.若以"a+"方式打开一个已存在的文件,则以下叙述正确的是( )
A.文件打开时,原有文件内容不被删除,位置指针移到文件末尾,可作添加或读操作
B.文件打开时,原有文件内容不被删除,只能进行读操作
C.文件打开时,原有文件内容被删除,只能进行写操作
D.以上各种说法都不正确
~A
220.使用fgets(str,n,p)函数从文件中读入一个字符串,以下叙述错误的是( )
A.字符串读入后会自动加入'\0'
B.fp是指向该文件的文件型指针
C.fgets函数将从文件中最多读入n-1个字符
D.fgets函数将从文件中最多读入n个字符
~D
二.填空题
1.该变量已正确定义为整型,则表达式n=i=2,++i,i++ [<3>]。
2.已知字母A的ASCII值为65,下列程序运行后的输出结果是[<67 g>]
main()
{char a,b;
a='A'+'5'-'3';b=a+'6'-'2';
printf("%d%c",a,b);
}
3.下列isprime函数的功能是判断形参a是否为素数,是素数,函数返回1,否则返回0。请填空。
int isprime(int a)
{int i;
for(i=2;i<=a/2;i++)
if(a%i==0)[];
[];
}
4.设有定义:float x=123.4567;,则执行下列语句后的输出结果是[<123.460000>]
printf("%f\n",(int)(x*100+0.5)/100.0);
5.若有定义:int a=4,b=5,c=6;接着顺序执行下列语句后,变量b中的值是[<1>]。
c=(a-=(b-5));
c=(a%3)+(b=1);
6.若a的值为1,则表达式!a||++a的值是[<1>]。
7.下列程序的功能是:求出数组x中各相临两个元素的和依次存放到数组a中,然后输出。请填空。
main()
{int x[10],a[9],i;
for(i=0;i<10;i++)
scanf("%d",&x[i]);
for([];i<10;i++)
a[i-1]=x[i]+[];
for(i=0;i<9;i++)
printf("%d",a[i]);
printf("\n");
}
8.设有定义语句:int a[][3]={{0},{1},{3}},则数组元素a[1][2]是[<0>]
9.下列程序中的数组a包括10个整数元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行4个输出,请填空。
main()
{int a[10],b[10],i;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=1;i<10;i++)
[];
for(i=1;i<10;i++)
{printf("%d",b[i-1]);
if(i%4==0) printf("\n");
}
}
10.下面程序将二维数组a的行和列互换后存放到一个二维数组b中,请填空。
main()
{int a[2][3]={{1,2,3},{4,5}},b[3][2],i,j;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
[]
}
}
}
11.下列程序运行后的输出结果是[<10 20 0>]。
main()
{int a,b,c;
a=10;b=20;c=(a%b<1)||(a/b>1);
printf("%d %d %d\n",a,b,c);
}
12.下列程序用于判断a、b、c能否构成三角形,若能输出YES,否则输出NO。请填空。
main()
{float a,b,c;
scanf("&f&f&f",&a,&b,&c);
if([<(a+b>c)&&(a+c>b)&&(b+c>a)>]) printf("YES\n");
else printf("NO");
}
13.已有定义:char c='';int a=1,b;执行b!=c&&a;后b的值为[<0>]。
14.下列程序的输出结果是[<1>]。
main()
{int a=1,b=2,c=3;
if(c=a) printf("%d\n",c);
else printf("%d\n",b);
}
}
15.下列程序的输出结果是[<1>]。
main()
{int x,a=1,b=2,c=3,d=4;
x=(ax)?x:d;
printf("%d\n",x);
}
16.下列程序的输出结果是[<0235>]
main()
{int k=5,n=0;
do
{switch(k)
{case 1: case 3:n+=1;k--;break;
default:n=0;k--;
case 2: case 4:n+=2;k--;break;
}
printf("%d",n);
}while(k>0&&n<5);
}
17.下列程序的输出结果是[<25>]
main()
{int i;
for(i=1;i<=10;i++)
{ if((i*i>=20)&&(i*i<=100))
break;
}
printf("%d\n",i*i);
}
18.下列程序的输出结果是[<2,2,0>]
main()
{int a=-5,b=1,c=1;
int x=0,y=2,z=0;
if(c>0) x=x+y;
if (a<=0)
{ if(b>0)
if(c<=0) y=x-y;
}
else if (c>0) y=x-y;
else z=y;
printf("%d,&d,&d\n",x,y,z);
}
19.有下列程序段,且变量已正确定义和赋值:
for(s=1.0,k=1;k<=n;k++)s=s+1.0/(k*(k+1));
printf("s=%f\n\n",s);
请填空,使下列程序段的功能与之完全相同。
s=1.0;k=1;
while([]) {s=s+1.0/(k*(k+1));[];}
printf("s=%f\n\n",s);
20.下列程序的功能是:将输入的正整数按逆序输出。例如,如输入135则输出531,请填空。
main()
{int n,s;
scanf("%d",&n);
do
{s=n%10;printf("%d",s);[];}
while (n!=0);
}
21.下列程序的功能是计算:s=1+12+123+1234+12345.请填空。
main()
{int t=0,s=0,i;
for(i=1;i<=5;i++)
{t=i+[];s=s+t;}
printf("%d\n",s);
}
22.下列程序的运行结果是[<32>]。
main()
{int i=0,a=0;
while(i<20)
{for(;;)
{if(i%10==0)break;
else i--;
}
i+=11;
a+=i;
}
printf("%d\n",a);
}
23.下列程序中,fun()函数的功能是计算x^2-2x+6,主函数中将调用fun() 函数计算:
y1=(x+8)^2-2(x+8)+6
y2=sin^2(x)-2sin(x)+6
请填空。
#include "math.h"
double fun(double x) {return(x*x-2*x+6);}
main()
{ double x,y1,y2;
printf("Enter x:");
scanf("%lf",&x);
y1=fun([]);
y2=fun([]);
printf("y1=%lf,y2=%lf\n",y1,y2);
}
24.有下列程序:
int sub(int n) {return (n/10+n%10);}
main()
{ int x,y;
scanf("%d",&x);
y=sub(sub(sub(x)));
printf("%d\n",y);
}
若运行时输入:1234,程序的输出结果是[<10>]。
25.以下程序的输出结果是[<4>]。
#include
main()
{
int a[5]={2,4,6,8,10},*p;
p=a;p++;
printf("%d",*p);
}
26.以下程序的输出结果是[<3 5>]。
#include
void swap(int a,int b)
{
int t ;
t=a;a=b;b=t;
}
main()
{
int i=3,j=5,p=&i,q=&j;
swap(p,q);printf("%d %d",p,q);
}
27.下面程序段的运行结果是[<68>]。
char str[]="ABCD",*p=str;
*printf("%d\n",*(p+3));
28.若变量a和b已定义为int类型并赋值21和55,要求用printf函数以a=21,b=55的形式输出,请写出完整的输出语句[]。
~~~2
29.执行下列程序时,输入1234567,则输出结果是[<12 34>]。
#include
main()
{ int a=1,b;
scanf("%2d%2d",&a,&b);printf("%d%d\n",a,b);
}
30.若已知:a=1,b=2,则表达式:!(a]。
31.若s是int型变量,且s=8,则s%3+(s+1)%3表达式的值为[<2>]。
32.若x和n均是int型变量,且x=12,n=5,则执行y=x%=(n%=2)表达式后y的值为[<0>]。
- 23 -