二级C语言选择题专项强化真题试卷36
选择题
1.有以下程序:
#include<stdio.h>
main()
{
int i;
char*a[]={\\(A)
A. aegi
B. dfhk
C. abed
D. abcdefghijk
解析:char*a[]定义了一个指向数组的指针。由题中初始化结果得:*a[0]=“abcd”,a[1]=“ef”,a[2]=“gh”,a[3]=“ijk”,但是在输出语句时要求输出的格式是%c,为一个字符,所以每个元素输出第一个字符,即aegi。
2.若有定义语句:
char s[10]=\\(B)
A. 9
B. 8
C. 7
D. 10
解析:strlen(s)长度的计算是从s[0]开始到\0结束,因此,一共有8个。所以strlen(s)=8.
3.有以下程序段,若变量已正确定义并赋值
if(a>b)printf(\\
A
解析:程序的逻辑是当a>b时,执行语句“printf(\\
4.若有以下程序:
#include<stdio.h>
main()
{
int a=—11,b=10;
a%=b%=4;
printf(\\(B)
A. 1 2
B. —1 2
C. —1 —2
D. 1 —2
解析:先计算b%=4,即b=b%4,结果为2,然后计算a%=2,结果为—1,最后输出a的值为—1,b的值为2,故B选项正确。
5.设有如下语句:
typedef struct Date{
int year;
int month;
int day;
}DATE;
则以下叙述中错误的是( )。(C)
A. DATE是用户说明的新结构体类型名
B. struct Date是用户定义的结构体类型
C. DATE是用户定义的结构体变量
D. struct是结构体类型的关键字
解析:该定义语句把结构体struct Date命名为一个新的类型名“DATE”,DATE相当于“struct Date”,是结构体类型名,选项C描述错误,答案选C。
6.某个工厂有若干个仓库,每个仓库存放有不同的零件,相同零件可能放在不同的仓库中,则实体仓库和零件间的联系是( )。(A)
A. 多对多
B. 一对多
C. 多对一
D. 一对一
解析:一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。每个仓库存放有不同的零件,相同零件可能放在不同的仓库中,故实体仓库和零件间的联系是多对多,故A选项正确。
7.设变量m为float类型,变量n为int类型,则以下能实现将m中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是( )。(B)
A. m=(m*100+0.5)/100.0
B. n=m*100+0.5,m=n/100.0
C. n=m/100+0.5,m=n*100.0
D. m=m*100+0.5/100.0
解析:n是整型数,将浮点数赋值给整型变量需要丢弃小数位,所以若要保留m的小数点后两位,需要将m乘以100。若要将m小数点后第三位四舍五人,则需要加上0.5,然后赋给整型变量,所以n=m*100+0.5,接下来需要将m还原成有两位小数的浮点数。若除号两边操作数有一个是浮点数时,则结果为浮点数,因此将n/100.0赋值给m时,得到的m值含两位小数,故答案为B选项。
8.若有以下语句:
typedef struet S
{int g;char h;}T;
以下叙述中正确的是( )。(B)
A. 可用S定义结构体变量
B. 可用T定义结构体变量
C. S是struet类型的变量
D. T是struer S类型的变量
解析:本题考查typedef重新声明一种结构体类型,那么T为结构体类型,而不是结构体变量,所以B选项正确。
9.设有定义:
int a;float b;
执行
scanf(\\(A)
A. 87和6.0
B. 876和543.0
C. 87和543.0
D. 76和543.0
解析:在格式字符前加入一个整数可以指定输入数据所占的宽度.所以赋值时会将87赋给int型变量a,把6.0赋给int型float型变量b。
10.若有定义:double x;,则表达式:x=0,x+10,x++的值是( )。(C)
A. 11.0
B. 10.0
C. 0.0
D. 1.0
解析:C语言中,逗号运算符可以把两个以上(包含两个)的表达式连接成一个表达式。逗号运算符的优先级是所有运算符中级别最低的,逗号运算符保证左边的子表达式运算结束后才进行右边的子表达式的运算。也就是说,逗号运算符是一个序列点,其左边所有副作用都结束后,才对其右边的子表达式进行运算,并以最右边表达式值作为整个逗号表达式的值。后置自增运算:k++表示先运算,后自加。前置自增运算:++k表示先自加,后运算。因此,表达式x=0,x+10,x++的计算过程为首先赋值x=0,然后将x加10,但是并不对x进行赋值,最后计算x++,并根据后置自增运算的计算结果,即为x=0.0。故答案为C选项。
11.有以下程序:
#nclude
main()
{ int y=9;
for(;y>0;y- -)
if(y%3= =0)printf(\\(A)
A. 852
B. 963
C. 741
D. 875421
解析:第一次for循环,y的值为9,y%3的值为0,满足条件打印–y,即先减一后打印,所以打印8;
第二次for循环,y的值为7,y%3的值为1,不执行打印语句;
第三次for循环,y的值为6,y%3的值为0,满足条件打印–y,即先减一后打印,所以打印5;
第四次for循环,y的值为4,不满足if条件,不执行打印语句;
第五次for循环,y的值为3,满足if条件,打印输出2;
第六次for循环,y的值为1,不满足条件,不执行打印语句。
12.在医院,每个医生只属于某一个诊疗科,医生同一天可为多位患者看病,而一名患者可在多个科室治疗。则;体医生和患者之间的联系是( )。(A)
A. 多对多
B. 多对一
C. 一对多
D. 一对一
解析:一般来说,实体集之间必须通过联系来建立联接关系,分为三类:一对一联系(1:1)、一对多联系(1:m)、多对多联系(m:n)。医生可为多位患者看病,患者也可以找多位医生看病,实体医生与患者联系是多对多,A选项正确。
13.有如下定义:
本文档预览:3600字符,共7527字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载