单项选择题
1.有char c=’1’,下面说法中正确的是( )。
A. 语句putc+2);的输出结果为51
B. 语句put“%d”,c+2);的输出结果为3
C. 语句put“%c”,c+2);的输出结果为51
D. 语句put“%c”,c+2);的输出结果为3
2.设c1,c2均是char型变量,则下面不正确的函数调用为( )。
A. scanf(”c1=2=%c”,&c1,&c2);
B. get);
C. putc2);
D. putc1,c2);
3.为了表示关系x>=y>=z,下面C语言表达式中正确的是( )。
A. (x>=y)&&(y>=z)
B. (x>=y)and(y>=z)
C. (x>=y>=z)
D. (x>=y)&(y>=z)
4.设x,y,z,t为int型变量,则执行以下语句后,t的值为( )。
x=y=z=1;
t=++x||++y&&++z;
A. 不定值
B. 2
C. 1
D. 0
5.对if语句中表达式的类型,下面正确的说法是( )。
A. 必须是关系表达式
B. 必须是关系表达式或逻辑表达式
C. 可以是任意表达式
D. 必须是关系表达式或算术表达式
6.对for(表达式1;;表达式3)可以理解为( )。
A. for(表达式1;0;表达式3)
B. for(表达式1;表达式1;表达式3)
C. for(表达式1;1;表达式3)
D. for(表达式1;表达式3;表达式3)
7.执行语句for(i=1;i++<4;);之后,变量i的值为( )。
A. 3
B. 4
C. 5
D. 不确定
8.若二维数组a有m列,则在a[i][j]前的元素个数为( )。
A. j*m+i
B. i*m+j
C. i*m+j-i
D. i*m+j+1
9.下面说法中正确的是( )。
A. 在C语言中,可以使用动态内存分配技术,定义元素个数可变的数组
B. 在C语言中,数组元素的个数可以不确定,允许随即变动
C. 在C语言中,数组元素的数据类型可以不一致
D. 在C语言中,定义数组后,就确定了它能容纳的相同数据类型元素的个数
10.不能把字符串:“good!”赋给数组b的语句是( )。
A. char b[10]={’g’,’o’,’o’,’d’,’!’};
B. char b[10];b=“good!”;
C. char b[10];strcpy(b, “good!”) ;
D. char b[10]=“good!”;
11.执行下面程序段,给x,y赋值时,不能作为数据分隔符的是( )。
int x,y;
scanf(”%d%d”,&x&y);
A. 回车
B. Tab键
C. 回车
D. 逗号
12.已知ch是字符型变量,下面不正确的赋值语句为( )。
A. ch=’a+b’;
B. ch=’’;
C. ch=’7’+’9’;
D. ch=5+9;
13.下面程序段的输出结果是( )。
char c1=’6’,c2=’0’;
printf(”%c,%c,%d,%d ”,c1,c2,c1-c2,c1+c2);
A. 因输出格式不合法,输出出错信息
B. 6,0,6,102
C. 6,0,7,6
D. 6,0,5,7
14.在C语言的循环语句for, while,do while中,用于直接中断最内层循环的语句是( )。
A. switch
B. continue
C. break
D. if
15.下面的循环结构中,不是无限循环的是( )。
A. for( i=1;;i++) printf(“%d”,i--);
B. i=1;while(i--) {printf(”%d”,i++);}
C. i=1;do{printf(”%d”,i); i++;} while(--i);
D. for(i=0;i;i++) printf(”%d”,i);
16.下面程序段的运行结果是( )。
char c[]=” will ”;
printf(“%d“,strlen(c));
A. 14
B. 3
C. 9
D. 字符串中有非法字符,输出值不确定
17.下面说法中正确的是:在C语言程序中( )。
A. 函数的定义可以嵌套,但函数的调用不可以嵌套
B. 函数的定义不可以嵌套,但函数的调用可以嵌套
C. 函数的定义和调用均不可以嵌套
D. 函数的定义和 调用均可以嵌套
18.若用数据名作为函数调用的实参,传递给形参的是( )。
A. 数据的首地址
B. 数组第一个元素的值
C. 数组中全部元素的值
D. 数组元素的个数
19.以下叙述中不正确的是( )。
A. 在不同的函数中可以使用相同名字的变量
B. 函数中的形式参数是局部变量
C. 在一个函数内定义的变量只在本函数范围内有效
D. 在一个结函数内的符合语句中定义的变量在本函数范围内有效
20.一个变量的指针是指( )。
A. 该变量的值
B. 该变量的地址
C. 该变量的变量名
D. 该变量的标志
21.若有定义:int a[10],*p=a;,则p+5表示( )。
A. 元素a[5]的地址
B. 元素a[5]的值
C. 元素a[6]的地址
D. 元素a[6]的值
22. C语言规定,在一个源程序中,main函数的位置( )。
A. 必须在最开始
B. 必须在系统调用的库函数的后面
C. 可以任意
D. 必须在最后
23. 一个C语言程序是由( )。
A. 一个主程序或若干个子程序组成
B. 函数组成
C. 若干过程组成
D. 若干个子程序组成
24. 下面哪项是构成C语言的基本单位( )。
A. 函数
B. 过程
C. 子程序
D. 子例程
25. 以下正确的说法是( )。
A. 定义函数时,形参的类型说明可以放在函数体内
B. return后边的值不能为表达式
C. 如果函数值的类型和返回值类型不一致,以函数值类型为准
D. 如果形参与实参的类型不一致,以函数值类型为准
26.对于基类型相同的两个指针变量之间,不能进行的运算是( )。
A. <
B. =
C. +
D. –
27.变量的指针,其含义是指该变量的( )。
A. 值
B. 地址
C. 名
D. 一个标志
28.下面程序运行的结果是( )。
void ss(char *s,char t)
{ while(*s)
{ if(*s= =t) *s=t-‘a’+’A’;
s++;
void main()
{ char str1[100]=”abcddfefdbd”,c=’d’;
ss(str1,c);
printf(“%s ”,str1);
A. ABCDDFEFDBD
B. abcDDfefDbD
C. abcAAfefAbA
D. Abcddfefdbd
29.下列说法中正确的.是( )。
A. 结构体变量可以作为一个整体进行其值得输入和输出
B. 结构体成员项不可以是结构体
C. 结构体成员项可以是结构体或其他任何C语言的数据类型
D. 结构体变量和结构体是相同的概念
30.下面说法中不正确的是( )。
A. 一个C源程序可有一个或多个函数组成
B. 一个C源程序必须包含一个main函数
C. C程序的基本组成是函数
D. 在C程序中,注释语句只能位于一条语句的后面
31.若执行下面的程序段,则下面描述中正确的是( )。
int k=5;
while(k=1) k--;
A. while循环执行四次
B. 循环体执行一次
C. 循环体一次也不执行
D. 死循环
32.下面关于for循环的正确描述是( )。
A. for循环只能用于循环次数已经确定的情况
B. for循环中是先执行循环体语句,后判断表达式
C. 在for循环中,不能用break语句跳出循环
D. for循环的循环体可以包含多条语句,但必须用花括号括起来
33.不正确的定义语句是( )。
A. double x[5]={2.0,4.0,6.0,8.0,10.0};
B. int y[5]={0,1,3,5,7,9};
C. char c1[]={’1’,’2’,’3’,’4’,’5’};
D. char c2[]={’x10’,’x0a’,’x08’};
34.下面是对s的初始化,其中不正确的是( )。
A. char s[5]={“abc”};
B. char s[5]={‘a’,’b’,’c’};
C. char s[5]=””;
D. char s[5]=”abced”;
35.下面程序段的运行结果是( )。
char c[5]={‘a’,’b’,’’,’c’,’’};
printf(“%s”,c);
A. ‘a’’b’
B. ab
C. ab c
D. abc
36.以下说法中正确的是( )。
A. C语言程序总是从第一个定义的函数开始执行
B. 在C语言程序中,要调用的函数必须在main函数中定义
C. C语言程序总是从main函数开始执行
D. C语言程序中的main函数必须放在程序的开始部分
37.下列常量中,合法的C常量是( )。
A. “x-y”
B. ‘105’
C. ‘Be’
D. 07ff
38.下面程序的输出结果是( )。
void main
int i=011,j=11;
printf(“%d,%d ”,++i,j--);
A. 10,11
B. 12,10
C. 11,11
D. 10,9
39.下面程序的执行结果为( )。
void main()
{int x=20,y;
y=++x; y+=x;
printf(”%d,”y);
y=x--; y+=x;
printf(”%d,”y);
A. 42,41
B. 42,42
C. 40,41
D. 42,40
40.下面程序的输出结果是( )。
void main()
{ int i=010,j=10;
printf(“%d,%d”,i++,++j);
A. 10,11
B. 11,11
C. 8,11
D. 8,10
41.能正确表示a和b同时为正或同时为负的表达式是( )。
A. (a>=0||b>=0)&&(a<0||b<0)
B. (a>=0||b>=0)&&(a<0&&b<0)
C. (a+b>0)&& (a+|b<0)
D. a*b>0
42.以下关于运算符优先顺序的描述中正确的是( )。
A. 关系运算符<算术运算符<赋值运算符<逻辑运算符
B. 逻辑运算符<关系运算符<算术运算符<赋值运算符
C. 赋值运算符<逻辑运算符<关系运算符<算术运算符
D. 算术运算符<关系运算符<赋值运算符<逻辑运算符
43.下面程序的运行结果是( )。
void main()
{ int a,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf(“%d,%d”,a,b);
A. 6,1
B. 2,1
C. 6,0
D. 2,0
44.若有条件表达式(exp)?a++:b--,则以下表达式中完全等价于表达式(exp)的是( )。
A. (exp= =0)
B. (exp!=0)
C. (exp= =1)
D. (exp!=1)
45.程序段如下,则正确的执行结果是( )。
int k=0;
while(k++<=2);
printf(“%d ”,k);
A. 2
B. 3
C. 4
D. 无结果
46.下面说法中正确的是( )。
A. 在C语言函数中,必须有形参
B. 在C语言函数中,形参必须是变量名
C. 在C语言函数中,可以有也可以没有形参
D. 在C语言函数中,数组名不能做形参
47.下面说法正确的是,在C语言中( )。
A. 实参和与其对应的形参各占用独立的存储单元
B. 实参和与其对应的形参共占用一个存储单元
C. 只有当实参和与其对应的形参同名时才共占用存储单元
D. 形参是虚拟的,不占用存储单元
48.下面不正确的说法是:C语言规定( )。
A. 实参可以是常量、变量或表达式
B. 形参可以是常量、变量或表达式
C. 实参传递给形参时,要求实参必须有确定的值
D. 形参应与其对应的实参类型可以不一致
49.C语言允许函数值类型缺省定义,此时函数值隐含的类型是( )。
A. float型
B. int型
C. long型
D. double型
50.若有以下定义:char s[10]=“include“,*p=s;,则不能代表字符‘u’的表达式为( )。
A. s[4]
B. s+4
C. *(p+4)
D. p+=4,*p;
51. C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是( )。
A. 地址传递
B. 单向值传递
C. 由实参传给形参,再由形参传给实参
D. 由用户指定传递方式
52. C语言规定,函数返回值的类型是由( )。
A. return语句中的表达式类型所决定
B. 调用该函数时的主调函数类型所决定
C. 调用该函数时系统临时决定
D. 在定义该函数时所指定的函数类型所决定
53. 若有int *p,a[10];p=a; ,则下列写法不正确的是( )。
A. p=a+2
B. a++
C. *(a+1)
D. p++
54. 若用数组名作为函数调用的实参,传递给形参的是( )。
A. 数组的首地址
B. 数组第一个元素的值
C. 数组中全部元素的值
D. 数组元素的个数
55. 若使用以为数组名作函数实参,则下面说法中正确的是( )。
A. 在被调函数中,与该实参相对应的形参必须是同类型的数组名或指针变量
B. 实参数组类型与形参数组类型可以不匹配
C. 在被调函数中,不需要考虑形参数组的大小
D. 实参数组名与形参数组名必须一致
56. 设p1、p2是指向同一个字符串的指针变量,c为字符变量,则不能正确执行的赋值语句为 ( )。
A. c=*p1+*p2;
B. p2=c;
C. p1=p2;
D. c=(*p1)*(*p2);
57. 若有一下结构体定义,则正确的引用和定义是( )。
struct example { int x; int y;} v1;
A. example.x=10
B. example v2; v2.x=10;
C. struct v2; v2.x=10;
D. struct example v2={10,5};
58. 说明一个结构体变量时,系统分配给它的内存是( )。
A. 各成员所需内存量的总和
B. 结构体中第一个成员所需内存量
C. 成员中占内存量最大者所需的容量
D. 结构体中最后一成员所需内存量
59. 在C语言中,文件由下面拿个组成( )。
A. 记录
B. 数据行
C. 数据块
D. 字符(字节)序列
60. 下面程序段的运行结果是( )。
char c[]=” will ”;
printf(“%d“,strlen(c));
A. 14
B. 3
C. 9
D. 字符串中有非法字符,输出值不确定
61.以下叙述中不正确的是( )。
A. 在不同的函数中可以使用相同名字的变量
B. 函数中的形式参数是局部变量
C. 在一个函数内定义的变量只在本函数范围内有效
D. 在一个结函数内的符合语句中定义的变量在本函数范围内有效
62.一个变量的指针是指( )。
A. 该变量的值
B. 该变量的地址
C. 该变量的变量名
D. 该变量的标志
计算机二级考试是全国计算机等级考试(National Computer Rank Examination,简称NCRE)四个等级中的一个等级,考核计算机基础知识和使用一种高级计算机语言编写程序以及上机调试的基本技能。计算机二级考试采用全国统一命题、统一考试的形式。那么计算机二级c语言会怎么考?以下仅供参考!
1.(A )是构成C语言程序的基本单位。
A、函数
B、过程
C、子程序
D、子例程
2.C语言程序从 C 开始执行。
A、 程序中第一条可执行语句
B、 程序中第一个函数
C、 程序中的main函数
D、包含文件中的第一个函数
3、以下说法中正确的是( C )。
A、C语言程序总是从第一个定义的函数开始执行
B、在C语言程序中,要调用的函数必须在main( )函数中定义
C、C语言程序总是从main( )函数开始执行
D、C语言程序中的main( )函数必须放在程序的开始部分
4.下列关于C语言的说法错误的是( B ) 。
A、 C程序的工作过程是编辑、编译、连接、运行
B、 C语言不区分大小写。
C、 C程序的三种基本结构是顺序、选择、循环
D、C程序从main函数开始执行
5.下列正确的标识符是(C )。
A、-a1
B、a[i]
C、a2_i
D、int t
5~8题为相同类型题
考点:标识符的命名规则
只能由字母、数字、下划线构成
数字不能作为标识符的开头
关键字不能作为标识符
选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3)
6.下列C语言用户标识符中合法的是(B )。
A、3ax
B、x
C、case
D、-e2 E)union
选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1);
7.下列四组选项中,正确的C语言标识符是( C )。
A、 %x
B、a+b
C、a123
D、123
选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2)
8、下列四组字符串中都可以用作C语言程序中的标识符的是( A)。
A、print _3d db8 aBc
B、Iam one_half start$it 3pai
C、str_1 Cpp pow while
D、Pxq My->book line# His.age
选项B中的“”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键字,不满足(3)
9.C语言中的简单数据类型包括(D )。
A、整型、实型、逻辑型
B、整型、实型、逻辑型、字符型
C、整型、字符型、逻辑型
D、整型、实型、字符型
10.在C语言程序中,表达式5%2的结果是 C 。
A、2.5
B、2
C、1
D、3
%为求余运算符,该运算符只能对整型数据进行运算。且符号与被模数相同。5%2=1; 5%(-2)=1;(-5)%2=-1;(-5)%(-2)=-1;
/为求商运算符,该运算符能够对整型、字符、浮点等类型的数据进行运算,5/2=2
11.如果int a=3,b=4;则条件表达式"aA、 3
B、 4
C、 0
D、1
详见教材P97.
表达式1?表达式2:表达式3
先计算表达式1,
若表达式1成立, 则选择计算表达式2,并表达式2的值作为整个大表达式的值;
若表达式1不成立,则选择计算表达式3,并将表达式3的值作为整个大表达式的值
此题中的aa为3,b为4。a12.若int x=2,y=3,z=4 则表达式x
A、4
B、3
C、2
D、0
E)1
13.C语言中,关系表达式和逻辑表达式的值是( B ) 。
A、0
B、 0或1
C、 1
D、‘T’或’F’
14. 下面( D )表达式的值为4.
A、 11/3
B、 11.0/3
C、 (float)11/3
D、 (int)(11.0/3+0.5)
14~16题为同一类型
详见教材P54~56.
(1)相同数据类型的元素进行数学运算(+、-、*、/)得到结果还保持原数据类型。
(2)不同数据类型的元素进行数学运算,先要统一数据类型,统一的标准是低精度类型转换为高精度的数据类型。
选项A,11与3为两个整数,11/3结果的数据类型也应为整数,因此将3.666666的小数部分全部舍掉,仅保留整数,因此11/3=3.
选项B,11.0为实数,3为整数,因此首先要统一数据类型,将整型数据3转换为3.0,转换后数据类型统一为实型数据,选项B变为11.0/3.0,结果的数据类型也应为实型数据,因此选项B 11.0/3=3.666666
选项C,先将整数11强制类型转换,转换为实型11.0,因此选项C变为11.0/3,其后计算过程、结果与选项B同
选项D,首先计算11.0/3,其计算过程、结果与选项B同,得到3.666666;再计算3.666666+0.5=4.166666,最后将4.166666强制类型转换为整型,即将其小数部分全部舍掉,结果为4
15.设整型变量 a=2,则执行下列语句后,浮点型变量b的值不为0.5的是( B )
A、b=1.0/a
B、b=(float)(1/A、
C、b=1/(float)a
D、b=1/(a*1.0)
16. 若“int n; float f=13.8;”,则执行“n=(int)f%3”后,n的值是(A)
A、1
B、4
C、4.333333
D、4.6
“(int)f“表示将f中的值强制类型转换为整型,即将13.8的小数部分舍掉,转换为13;然后计算13%3,结果为1,再将结果赋给变量n,因此n的值为1
17. 以下对一维数组a的正确说明是: D
A、char a(10);
B、 int a[];
C、int k=5,a[k];
D、char a[3]={‘a’,’b’,’c’};
详见教材P143~144,一维数组的定义、初始化
类型符 数组名 [常量表达式]
类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;常量表达式是指数组的长度(数组中包含元素的个数),其值只能是整数,不可以是变量,而且从1开始计数。
选项A,常量表达式只能放在中括号 [ ]中
选项B,只有在对数组初始化(即赋值)的时候才可以省略数组的长度,B中并未对a进行初始化。
选项C,常量表达式不能为变量。
18.以下能对一维数组a进行初始化的语句是:( C )
A、int a[5]=(0,1,2,3,4,)
B、 inta(5)={}
C、 int a[3]={0,1,2}
D、 int a{5}={10*1}
详见教材P145,一维数组的定义、初始化
选项B,D,常量表达式只能放在中括号 [ ]中
选项A,数组可以看做是若干个相同数据类型元素的有序集合,因此以集合的形式对其初始化,使用{ }对其初始化,选项A用了().
19.在C语言中对一维整型数组的正确定义为 D 。
A、int a(10);
B、int n=10,a[n];
C、int n;a[n];
D、#define N 10
int a[N];
20、已知:int a[10]; 则对a数组元素的正确引用是( D )。
A、a[10]
B、a[3.5]
C、a(5)
D、a[0]
详见教材P144,数组元素的引用
数组名[下标]
引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数
int a[10]表示定义了一个包含10个整型数据的数组a,数组元素的逻辑地址下标范围为0~9,即a[0] 表示组中第1个元素; a[1] 表示组中第2个元素; a[2] 表示组中第3个元素; ......;a[9] 表示组中第10个元素.
选项A,超过了数组a的'逻辑地址下标范围;
选项B,逻辑地址下标只能为整数
选项C,逻辑地址下标只能放在[ ]中
21.若有以下数组说明,则i=10;a[a[i]]元素数值是(C )。
int a[12]={1,4,7,10,2,5,8,11,3,6,9,12};
A、10
B、9
C、6
D、5
先算a[a[i]]内层的a[i],由于i=10,因此a[i]即a[10].
a[10]对应下面数组中的元素为9. 因此a[a[i]]即为a[9]
a[9]对应下面数组中的元素为6. 因此a[9]即为6
22.若有说明:int a[][3]={{1,2,3},{4,5},{6,7}}; 则数组a的第一维的大小为: ( B )
A、2
B、3
C、4
D、无确定值
5 7
D、3 6 9
二维数组的一维大小,即指二维数组的行数,在本题中,按行对二维数组赋值,因此内层有几个大括号,数组就有几行
23.对二维数组的正确定义是(C )
详见教材P149~152,二维数组的定义、初始化
类型符 数组名 [常量表达式][常量表达式]
二维数组可以看做是矩阵
类型符是指数组中数组元素的类型;数组名要符合标识符命名规则;第一个常量表达式是指数组的行数;第二个常量表达式是指数组的列数;常量表达式的值只能是整数,不可以是变量,而且从1开始计数。
一维数组初始化时可以省略数组长度
二维数组初始化时可以省略行数,但不能省略列数
选项A,B,都省略了列数
选项D,不符合二维数组定义的一般形式,行、列常量表达式应该放在不同的[]中
A、int a[ ][ ]={1,2,3,4,5,6};
B、int a[2] []={1,2,3,4,5,6};
C、int a[ ] [3]={1,2,3,4,5,6};
D、int a[2,3]={1,2,3,4,5,6};
24.已知int a[3][4];则对数组元素引用正确的是__C___
A、a[2][4]
B、a[1,3]
C、a[2][0]
D、a(2)(1)
详见教材P150,数组元素的引用
数组名[下标] [下标]
引用数组元素时,[ ]中的下标为逻辑地址下标,只能为整数,可以为变量,且从0开始计数
第一个[下标]表示行逻辑地址下标,第二个[下标]表示列逻辑地址下标。
本题图示详见P149图6.7
因此a的行逻辑地址范围0~2;a的列逻辑地址范围0~3;
选项A,列逻辑地址下标超过范围
选项B,D,的引用形式不正确。
25.C语言中函数返回值的类型是由 A 决定的.
A、函数定义时指定的类型
B、 return语句中的表达式类型
C、 调用该函数时的实参的数据类型
D、形参的数据类型
26. 在C语言中,函数的数据类型是指(A )
A、 函数返回值的数据类型
B、 函数形参的数据类型
C、 调用该函数时的实参的数据类型
D、任意指定的数据类型
27.在函数调用时,以下说法正确的是( B )
A、函数调用后必须带回返回值
B、实际参数和形式参数可以同名
C、函数间的数据传递不可以使用全局变量
D、主调函数和被调函数总是在同一个文件里
28. 在C语言中,表示静态存储类别的关键字是: ( C )
A、 auto
B、 register
C、static
D、extern
29.未指定存储类别的变量,其隐含的存储类别为(A )。
A、auto
B、static
C、extern
D、register
30. 若有以下说明语句:
struct student
{ int num;
char name[ ];
float score;
}stu;
则下面的叙述不正确的是: (D )
A、 struct是结构体类型的关键字
B、 struct student 是用户定义的结构体类型
C、 num, score都是结构体成员名
D、 stu是用户定义的结构体类型名
31.若有以下说明语句:
struct date
{ int year;
int month;
int day;
}brithday;
则下面的叙述不正确的是__C___.
A、 struct是声明结构体类型时用的关键字
B、 struct date 是用户定义的结构体类型名
C、 brithday是用户定义的结构体类型名
D、year,day 都是结构体成员名
32. 以下对结构变量stul中成员age的非法引用是 B
struct student
{ int age;
int num;
}stu1,*p;
p=&stu1;
A、 stu1.age
B、 student.age
C、 p->age
D、(*p).age
33.设有如下定义:
struck sk
{ int a;
float b;
}data;
int *p;
若要使P指向data中的a域,正确的赋值语句是 C
A、 p=&a;
B、 p=datA、a;
C、p=&datA、a;
D、*p=datA、a;
34.设有以下说明语句:
typedef struct stu
{ int a;
float b;
} stutype;
则下面叙述中错误的是( D )。
A、struct是结构类型的关键字
B、struct stu是用户定义的结构类型
C、a和b都是结构成员名
D、stutype是用户定义的结构体变量名
35.语句int *p;说明了 C 。
A、p是指向一维数组的指针
B、p是指向函数的指针,该函数返回一int型数据
C、p是指向int型数据的指针 // 指针的定义教材P223
D、p是函数名,该函数返回一指向int型数据的指针
36.下列不正确的定义是( A )。
A、int *p=&i,i;
B、int *p,i;
C.int i,*p=&i;
D、int i,*p;
选项A先定义一个整型指针变量p,然后将变量i的地址赋给p。然而此时还未定义变量i因此编译器无法获得变量i的地址。(A与C对比,选项C先定义变量i,则在内存中为i分配空间,因此i在内存空间的地址就可以确定了;然后再定义p,此时可以为p赋i的地址,C正确)
37. 若有说明:int n=2,*p=&n,*q=p,则以下非法的赋值语句是: ( D )
A、p=q
B、*p=*q
C、n=*q
D、p=n
p,q同为整型指针变量,二者里面仅能存放整型变量的地址。
选项A,q中为地址,因此可将此地址赋给p
选项B,*p表示p所指向对象n的内容,即一个整数;*q表示q所指向对象的内容,由于在定义q时为其初始化,将p中n的地址给q,因此p中存放n的地址,*q表示q所指向对象n的内容.因此*p=*q 相当于 n=n;
选项C,n=*q 等价于n=n;
选项D,p中只能存放地址,不能将n中的整数值赋给p
38.有语句:int a[10],;则 B 是对指针变量p的正确定义和初始化。
A、int p=*a;
B、int *p=a;
C、int p=&a;
D、int *p=&a;
选项A,a是数组名,不是指针变量名,因此不可用*标注数组名a
选项C,a是数组名,数组名就是地址,无需再用地址符号。而且在定义指针变量p时,应在变量名前加*,标明p是指针变量
选项D,a是数组名,数组名就是地址,无需再用地址符号。
39.若有说明语句“int a[5],*p=a;”,则对数组元素的正确引用是( C )。
A、a[p]
B、p[a]
C、*(p+2)
D、p+2
首先定义一个整型数组a,a的长度为5,然后定义一个指针变量p,并同时对p进行初始化,将数组a的地址赋给p。因此此时p中存放的数组a的首地址,即数组中第一个元素a[0]的地址。
对于数组元素下标的引用(详见p144), 一般形式 数组名[下标] 其中下标为逻辑地址下标,从0开始计数,方括号中的下标可以是变量,可以是表达式,但结果一定要是整数。
选项A,p中存放的是地址,不是整数,不能做数组元素的下标
选项B,a是数组名,数组名就是地址,不是整数,不能做数组元素的下标
选项C,(重点!!!详见p231~234) p+2表示指向同一数组中的下两个元素的地址,当前p指向a[0],则p+2表示a[2]的地址,因此*(p+2)表示a[2]的内容
40. 有如下程序
int a[10]={1,2,3,4,5,6,7,8,9,10},*P=a;
则数值为9的表达式是 B
A、 *P+9
B、 *(P+8)
C、 *P+=9
D、P+8
(重点!!!详见p231~234)
首先定义一个整型数组a,a的长度为5,然后定义一个指针变量P,并同时对P进行初始化,将数组a的地址赋给P。因此此时P中存放的数组a的首地址,即数组中第一个元素a[0]的地址。
数组中9对应的是a[8], 选项B,P+8表示数组中后8个元素的地址,即a[8]的地址。*(P+8)则表示该地址内所存放的内容,即a[8]的值。
选项A,*P表示P所指向对象的内容,此时P指向a[0], *P即a[0]的值1. *P+9=1+9=10
选项C,*P表示P所指向对象的内容,此时P指向a[0], *P即a[0]的值。因此*P+=9 即*P =*P+9, 等价于a[0]=a[0]+9.
选项D,P+8表示数组中后8个元素的地址,即a[8]的地址,而非a[8]中的值。
do语句能够改写为语句篇一:C++程序设计
单选题
1.C++源程序文件的缺省扩展名为()。
2.由C++源程序文件编译而成的目标文件的缺省扩展名为()。
3.由C++目标文件连接而成的可执行文件的缺省扩展名为()。
4.编写C++程序一般需经过的几个步骤依次是()。
A.编译、编辑、连接、调试
B.编辑、编译、连接、调试
C.编译、调试、编辑、连接
D.编辑、调试、编辑、连接
5.以下标识符中不全是保留字的是()。
6.能作为C++程序的基本单位是()。
A.字符B.语句C.函数D.源程序文件
7.程序中主函数的名字为()。
A.mainB.MAINC.MainD.任意标识符
8.C++程序的基本模块为()。
A.表达式B.标识符C.语句D.函数
9.可用作C++语言用户标识符的一组标识符是()。
A.voiddefine+WORD
B.a3_b3_123YN
C.for-abcCase
10.存储以下数据,占用存储字节最多的是()。
A.0B.‘0’C.“0”D.0.0
11.程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用()符号作为分隔符。
A.空格或逗号B.逗号或回车C.逗号或分号D.空格或回车
12.设”inta=12;”,则执行完语句”a+=a*a;”后,a的值是()。
假设在程序中a、b、c均被定义成整型,所赋的值都大于1,则下列能正确表示代数式1的表达式是()。abc
A.1.0/a*b*cB.1/(a*b*c)C.1/a/b/(float)cD.1.0/a/b/c
14.设”inta=15,b=26;”,则”cout<<(a,b);”的输出结果是()。
A.15B.26,15C.15,26D.26
15.设x是一个bool型的逻辑量,y的值为10,则表达式x&&y的值为()。
A.1B.0C.与x值相同D.与x值相反
16.x>0&&x<=10的相反表达式为()。
A.x<=0||x>10B.x<=0&&x>10
C.x<=0||x<=10d.x>0&&x>10
17.x>0||y==5的相反表达式为()。
A.x<=0||y!=5B.x<=0&&y!=5
C.x>0||y!=5D.x>0&&y==5
18.设x和y均为bool量,则x&&y为真的条件是()。
A.它们均为真B.其中一个为真
C.它们均为假D.其中一个为假
19.设x和y均为bool量,则x||y为假的条件是()。
A.它们均为真B.其中一个为真
C.它们均为假D.其中一个为假
20.字符串”a+b=12 ”的长度为()。
21.假定下列x和y均为int型变量,则不正确的赋值为()。
A.x+=y++B.x++=y++C.x=++yD.++x=++y
22.下列的符号常量定义中,错误的定义是()。
A.constM=10;B.constintM=20;
C.constcharch;D.constboolmark=true;
23.循环语句“for(inti=0;i ()。 A.1B.n-1C.nD.n+1 24.在下面循环语句中循环体执行的次数为()。 for(inti=0;i if(i>n/2)break; A.n/2B.n/2+1C.n/2-1D.n-1 25.在下面循环语句中内层循环体S语句的执行总次数为(D)。 for(inti=0;i for(intj=i;j 2A.nB.(n+1)/2C.n(n-1)/2D.n(n+1)/2 26.在下面循环语句中循环体执行的次数为()。 inti=0,s=0;while(s<20){i++;s+=i;} 27.在下面循环语句中循环体执行的次数为(A)。 inti=0;doi++;while(i*i<10); 28.当处理特定问题时的循环次数已知时,通常采用()来解决。 A.for循环B.while循环C.do循环D.switch语句 29.循环体至少被执行一次的语句为()。 A.for循环B.while循环C.do循环D.任一种循环 30.switch语句能够改写为()语句。 31.do语句能够改写为()语句。 A.复合B.ifC.switchD.while 32.在下面的`一维数组定义中,哪一个有语法错误。() A.inta[]={1,2,3};B.inta[10]={0}; C.inta[];D.inta[5]; 33.在下面的字符数组定义中,哪一个有语法错误。()。 A.chara[20]=”abcdefg”;B.chara[]=”x+y=55.”; C.chara[15];D.chara[10]=’5’; 34.在下面的二维数组定义中,正确的是()。 A.inta[5][];B.inta[][5]; C.inta[][3]={{1,3,5},{2}};D.inta[](10); 35.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为()。 36.假定一个二维数组的定义语句为“inta[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为()。 37.若定义了函数double*function(),则函数function的返回值为()。 A.实数型B.实数的地址C.指向函数的指针D.函数的地址 38.以下说法中正确的是()。 A.C++程序总是从第一个定义的函数开始执行 B.C++程序总是从main函数开始执行 C.C++函数必须有返回值,否则不能使用函数 D.C++程序中有调用关系的所有函数必须放在同一个程序文件中 39.以下叙述中不正确的是()。 A.在一个函数中,可以有多条return语句 B.函数的定义不能嵌套,但函数的调用可以嵌套 C.函数必须有返回值 D.不同的函数中可以使用相同名字的变量 40.函数重载是指()。 A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同 B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同 C.两个以上的函数名字不同,但形参的个数或类型相同 D.两个以上的函数取相同的函数名,并且函数的返回类型相同 41.以下关于函数模板叙述正确的是()。 A.函数模板也是一个具体类型的函数 B.函数模板的类型参数与函数的参数是同一个概念 C.通过使用不同的类型参数,函数模板可以生成不同类型的函数 D.用函数模板定义的函数没有类型 42.下列()的调用方式是引用调用。 A.形参和实参都是变量B.形参是指针,实参是地址值 C.形参是引用,实参是变量D.形参是变量,实参是地址值 43.为了提高程序的运行速度,可将不太复杂的功能用函数实现,此函数应选择()。 A.内联函数B.重载函数C.递归函数D.函数模板 44.函数原型语句正确的是()。 A.intFunction(voida);B.voidFunction(int); C.intFunction(a);D.voidint(doublea); 45.C++中函数返回值的类型是由()决定的。 A.return语句中表达式的类型B.该函数定义时的类型 C.调用函数时的调用语句D.系统根据结果 46.以下函数的返回结果是()。 intfunction(char*x){ char*p=x;while(*p++);return(p-x-1); A.求字符串的长度B.将字符串x连接到字符串p后面 C.将字符串 x复制到字符串p中D.将字符串x反向存放 47.函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为()个。 48.设有如下函数定义 intf(char*s){ char*p=s; while(*p!=’’)p++; return(p-s); 在主函数中用cout< 49.以下正确的函数原型语句是()。 A.doublefun(intx,inty) B.doublefun(intx;inty) C.doublefun(int,int); D.doublefun(intx,y); 50.以下正确的说法是()。 A.用户调用标准库函数前,必须重新定义 B.用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C.系统不允许用户重新定义标准库函数 D.用户调用标准库函数前,不必使用预编译命令将该函数所在文件包括到用户源文件中 51.函数调用不可以()。 A.出现在一个表达式中 B.出现在执行语句中 C.作为一个函数的实参 D.作为一个函数的形参 52.以下正确的描述是()。 A.函数的定义可以嵌套,函数的调用不可以嵌套 B.函数的定义不可以嵌套,函数的调用可以嵌套 C.函数的定义和函数的调用均可以嵌套 D.函数的定义和函数的调用均不可以嵌套 53.若用数组名作为函数调用的实参,传递给形参的是()。 A.数组的首地址B.数组中第一个元素的值 C.数组全部元素的值D.数组元素的个数 54.以下错误的描述是()。 A.被调用函数中可以不用return语句 B.被调用函数中可以用多个return语句 C.被调用函数中,如果有返回值,就一定要有return语句 D.被调用函数中,一个return语句可返回多个值给调用函数 55.以下正确的描述是()。 A.不允许设置参数的默认值 B.设置参数的默认值只能在定义函数时设置 C.设置参数的默认值时,应该设置右边的参数 D.设置参数的默认值时,应该全部参数都设置 56.采用重载函数的目的是()。 A.实现共享B.减少空间 C.提高速度D.使用方便,提高可读性 57.将两个字符串连接起来组成一个字符串时,选用()函数。 A.strlen()B.strcap()C.strcat()D.strcmp() 58.以下叙述中正确的是()。 A.使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值 B.使用const定义的常量名有类型之分,其值在程序运行时是不可改变的 C.在程序中使用内联函数使程序的可读性变差 D.在定义函数时可以在形参表的任何位置给出缺省形参值 59.下面的标识符中,()是文件级作用域。 A.函数形参B.语句标号C.外部静态类标识符D.自动类标识符 60.以下叙述不正确的是()。 A.宏替换不占用运行时间B.宏名无类型 C.宏替换只是字符替换D.宏名必须用大写字母表示 61.C++语言的编译系统对宏命令的处理是()。 A.在程序运行时进行 B.在程序连接时进行 C.和C++程序的其它语句同时进行编译 D.在对源程序中其它成分正式编译之前进行 62.当#include后面的文件名用双引号括起来时,寻找被包含文件的方式是()。 A.直接按系统设定的标准方式搜索目录 B.先在源程序所在目录搜索,再按系统设定的标准方式搜索目录 C.仅仅搜索源程序所在目录 D.搜索当前逻辑盘上的所有目录 63.当#include后面的文件名用尖括号括起来时,寻找被包含文件的方式是()。 A.直接按系统设定的标准方式搜索目录 B.先在源程序所在目录搜索,再按系统设定的标准方式搜索目录 C.仅仅搜索源程序所在目录 D.搜索当前逻辑盘上的所有目录 64.在下面存储类中,()对象的可见性与生存期不一致。 A.外部类B.自动类C.内部静态类D.寄存器类 65.在下面存储类中,()的对象不是局部变量。 A.外部静态类B.自动类C.函数形参D.寄存器类 do语句能够改写为语句篇二:C++程序设计 1.以下正确的说法是()。 A.用户调用标准库函数前,必须重新定义 B.用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C.系统不允许用户重新定义标准库函数 D.用户调用标准库函数前,不必使用预编译命令将该函数所在文件包括到用户源文件中答案:B 2.do语句能够改写为()语句。 A.复合 答案:D 3.循环语句“for(inti=0;i<n;i++)cout<<i*i<<’’;”中循环体执行的次数为()。 B.n-1 D.n+1 答案:C 4.在下面循环语句中循环体执行的次数为()。for(inti=0;i<n;i++)if(i>n/2)break; A.n/2 B.n/2+1 C.n/2-1 D.n-1 答案:B 5.下列适宜采用inline定义函数情况是()。 A.函数体含有循环语句 B.函数体含有递归语句 C.函数代码少、频繁调用 D.函数代码多、不常调用 答案:C 6.定义p并使p指向动态空间中的包含30个整数的数组所使用的定义语句为()。 A.int*p=newint[30]; B.int*p=newint(30); C.int*p=new[30]; D.*p=newint[30]; 答案:A 7.将两个字符串连接起来组成一个字符串时,选用()函数。 A.strlen() B.strcap() C.strcat() D.strcmp() 答案:C 8.switch语句能够改写为()语句。 答案:B 9.关于void指针,下列说法正确的是()。 A.void指针就是不能指向任何数据的指针 B.void指针就是已定义而未初始化的指针 C.指向任何类型数据的指针可直接赋值给一个void指针 D.void指针值可直接赋给一个非void指针 答案:C 10.循环while(inti=0)i--;执行次数是()。 答案:A 11.预处理命令在程序中都是以()符号开头的。 A.* B.# C.& D.@ 答案:B 12.以下能正确地定义整型变量a,b和c,并为其赋初值5的语句是()。 A.inta=b=c=5; B.inta,b,c=5; C.a=5,b=5,c=5; D.a=b=c=5; 答案:A 13.若有说明语句:charc='72'则变量c()。 A.包含1个字符 B.包含2个字符 C.包含3个字符 D.说明不合法,c的值不确定 答案:A 14.可用作C++语言用户标识符的一组标识符是()。 A.voiddefine+WORD B.a3_b3_123YN C.for-abcCase 答案:B 15.以下标识符中不全是保留字的是()。 答案:B 16.下列变量名中,()是合法的。 B.byte-size D.A+a 答案:A 17.函数调用func((exp1,exp2),(exp3,exp4,exp5))中所含实参的个数为()个。 答案:B 18.this指针存在的目的是()。 A.保证基类私有成员在子类中可以被访问 B.保证基类保护成员在子类中可以被访问 C.保证每个对象拥有自己的数据成员,但共享处理这些数据成员的代码 D.保证基类公有成员在子类中可以被访问 答案:C 19.定义类的动态对象数组时,系统只能够自动调用该类的()对其进行初始化。 A.友员 B.析构函数 C.无参构造函数 D.类成员 答案:C 20.对两个数组a和b进行如下初始化:chara[]="ABCDEF";charb[]={‘A’,‘B’,‘C’,‘D’ A.a和b数组完全相同 B.a和b中都存放字符串 C.sizeof(a)比sizeof(b)大 D.sizeof(a)与sizeof(b)相同 答案:C 21.对长度为N的线性表进行顺序查找,在最坏情况下所需要的比较次数为()。 A.N+1 C.(N+1)/2 D.N/2 答案:B 22.二维数组在内存中的存放顺序是()。 A.按行存放 B.按列存放 C.由用户自己定义 D.由编译器决定 答案:A 23.假如指针p已经指向某个整型变量x,则(*p)++相当于()。 A.x++ B.p++ C.*(p++) D.&x++ 答案:A 24.如有数组intnum[5]={12,13,14,15,16};则num[0]的值为()。 答案:A 25.若p1、p2都是指向整型的指针,p1已经指向变量x,要使p2也指向x,正确的是()。 A.p2=p1; B.p2=**p1; C.p2=&p1; D.p2=*p1; 答案:A 26.有语句inta[10]={10,9,8,7,6,5,4,3,2,1},*p=a;则数值为2的表达式是()。 A.a[9] B.*p[8] C.*(a+8) D.p+8 答案:C 27.在C++中,访问一个指针所指向的对象的成员所用的指向运算符是()。 A.* B.<< C.-> D.= 答案:C 28.在面向对象的程序设计中,将一组对象的共同特性抽象出来形成()。 A.对象 B.实例 C.类 D.数组 答案:C 29.在用C++进行程序设计时,最好用()代替malloc。 C.指针 D.循环 答案:A 30.不同对象可以调用相同名称的函数,但执行完全不同行为的现象称为()。 A.继承 B.访问控制 C.派生 D.多态性 答案:D 31.若定义了函数double*function(),则函数function的返回值为()。 A.实数型 B.实数的地址 C.指向函数的指针 D.函数的地址 答案:B 32.所谓数据封装就是将一组数据和与这组数据有关操作组装在一起,形成一个实体,这实体也就 A.类 B.对象