广西财经学院2022年C语言期末冲刺卷及答案_第1页
广西财经学院2022年C语言期末冲刺卷及答案_第2页
广西财经学院2022年C语言期末冲刺卷及答案_第3页
广西财经学院2022年C语言期末冲刺卷及答案_第4页
广西财经学院2022年C语言期末冲刺卷及答案_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2/2广西财经学院C语言期末冲刺卷总分:100分 考试时间:90分钟注意事项:主观题用黑色字迹的签字笔作答(切勿使用其它颜色的签字笔)。答题必须在标准答题卡上作答,凡答案写在试卷、答卷、草稿纸上一律无效。考试结束,不得将试卷、答题卡或草稿纸带出考场。一、理论基础(每小题1分,共10分)1、判断实数x属于闭区间[a,b]的表达式为▁▁▁▁▁设a为整型变量,不能正确表达数学关系10<a<15的c语言表达是________。 A、a>10&&a<15 B、a>10||a<15 C、!(a<=10||a>=15) D、!(a<=10)&&!(a>=15)【答案】B2、若整型变量a、b、c、d中的值依次为:1、4、3、2,则条件表达式a<ba:c<dc:d的值是________。 A、1 B、2 C、3 D、4【答案】A【解析】本题考查的是条件表达式的嵌套。因为条件运算符的结合方向为“自右至左”,所以表达式a<ba:c<dc:d相当于a<ba:(c<dc:d)。由于a=1,b=4,所以a<b的结果为“真”,整个表达式的值为a的值1。所以,4个选项中选项A)符合题意。3、以下叙述中正确的是________。 A、预处理命令行必须位于c源程序的起始位置 B、在c语言中,预处理命令行都以“#”开头 C、每个c程序必须在开头包含预处理命令行:#include D、C语言的预处理不能实现宏定义和条件编译的功能【答案】B4、在c语言中,存储一个字符型、整型、单精度实型变量所需的空间是________。型、单精度实型变量所需的空间是________。 A、1、2、4 B、1、1、4 C、1、2、8 D、2、2、8【答案】A5、各种运算符间的优先顺序从高到低是________。 A、比较运算符→算术运算符→逻辑运算符 B、比较运算符→逻辑运算符→算术运算符 C、算术运算符→比较运算符→逻辑运算符 D、算术运算符→逻辑运算符→比较运算符【答案】C【解析】对于多种运算的混合运算,一定要记住它们之间的优先级,否则就会得到不同的计算结果。6、c语言中运算对象必须是整型的运算符是________。 A、%= B、/ C、= D、〈=【答案】A7、程序必须在有限的步骤、有限的时间内执行完毕,指的是算法的()特点 A、确定性 B、有穷性 C、可行性 D、输入【答案】B8、若有以下定义和语句:doubler=99,*p=&r;*p=r;则以下正确的叙述是______。 A、以下两处的*p含义相同,都说明给指针变量p赋值 B、在"doubler=99,*p=&r;"中,把r的地址赋值给了p所指的存储单元 C、语句"*p=r;"把变量r的值赋给指针变量p D、语句"*p=r;"取变量r的值放回r中【答案】D9、下面程序段的功能是

#include<stdio.h>

main()

{

chars1;

s1=putc(getc(stdin),stdout);

} A、从键盘输入一个字符给字符变量s1 B、从键盘输入一个字符,然后再输出到屏幕 C、从键盘输入一个字符,然后在输出到屏幕的同时赋给变量s1 D、在屏幕上输出stdout的值【答案】C10、下列对整型常量定义的解释中正确的是________。 A、034代表八进制的数1C B、034代表十进制的数34 C、034代表十六进制的数28 D、34L代表值为34的64位长整数【答案】D【解析】034代表八进制的数34,即十进制数28,十六进制的1C。34L表示长整型的数34(十进制)。11、关于程序模块化,以下叙述错误的 A、程序模块化可以提高程序运行的效率 B、程序模块化可以提高程序编制的效率 C、程序模块化可以提高程序代码复用率 D、程序模块化可以提高调试程序的效率【答案】A12、设有定义:intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是________。 A、*p=*q; B、p=q; C、*p=&n1; D、p=*q;【答案】A13、有如下嵌套的if语句if(a<b)if(a<c)k=a;

elsek=c;

elseif(b<c)k=b;

elsek=c;

以下选项中与上述if语句等价的语句是________。 A、k=(a<b)?a:b;k=(b<c)?b:c; B、k=(a<b)?((b<c)?a:b):((b<c)?b:c); C、k=(a<b)?((a<c)?a:c):((b<c)?b:c); D、k=(a<b)?a:b;k=(a<c)?a;c【答案】C14、在下列选项中,不正确的表达式是________。 A、a>b>c B、c--,++b,a+=1 C、a=c+b>n-m=k D、p++【答案】C15、已知i,j,k为int型变量,若从键盘输入:1,2,3<回车>,使i的值为1,j的值为2,k的值为3,以下选项中正确的输入语句是________。 A、scanf(“%2d%2d%2d”,&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);【答案】C16、下列变量中合法的是 A、XX.Tom B、3a6b C、_6a7b D、$ABC【答案】C17、设ch是char型变量,其值为a,且有下面的表达式ch=(ch>='a'&&ch<='z')?(ch+32):ch。上面表达式的值是______。 A、A B、a C、Z D、z【答案】B18、表达式"~0x11"的值是________。 A、0xFFEE B、0x71 C、0x0071 D、0xFFEl【答案】A19、设整型变量m,n,a,b,c,d均为1,执行(m=a>b)&&(n=c>d)后,m,n的值是________。 A、0,0 B、0,1 C、1,0 D、1,1【答案】B【解析】m=a>b结果为假,则m的值为0,n=c>d结果为假,n的值为0。20、下列字符序列中,可用作c标识符的一组字符序列是________。 A、S.b,sum,average,_above B、class,day,lotus_1,2day C、#md,&12x,month,student_n! D、D56,r_1_2,name,_st_1【答案】D二、控制结构(每小题1分,共10分)1、若inti=10;

执行下列程序后,变量i的正确结果是________。

switch(i)

{

case0:i+=1;

case10:i+=1;

case11:i+=1;

default:i+=1;

} A、10 B、11 C、12 D、13【答案】D2、当从键盘上输入字符"12134211"下面程序的输出结果是________。

main()

{

chars;

intv1=0,v2=0,v3=0,v4=0,k;

for(k=0;k<=7;k++)

{

scanf("%c",&s);

switch(s)

{

default:v4++;

case'1':v1++;

case'3':v3++;

case'2':v2++;

}

}

printf("v1=%d,v2=%d,v3=%d,v4=%d\n",v1,v2,v3,v4);

} A、v1=4,v2=2,v3=1,v4=1 B、v1=4,v2=9,v3=3,v4=1 C、v1=5,v2=8,v3=6,v4=1 D、v1=8,v2=8,v3=8,v4=8【答案】C3、设变量x和y均已正确定义并赋值。以下if语句中,在编译时将产生错误信息的是________。 A、if(x++); B、if(x>y&&y!=0); C、if(x>0)x-- D、if(y<0){;}【答案】C【解析】elsey++;elsex++;

本题考查的是if语句。if后表达式两侧的圆括号不可少,最后是一条语句或是用花括号括起来的一组语句。选项A和B是在表达式后跟了一条空语句,选项D是在表达式后跟了一组空语句,选项C中x--是表达式而不是语句,所以在编译时会出现错误信息。故本题答案选C。4、main()

{intx=1,a=0,b=0;

switch(x)

{case0:b++;

case1:a++;

case2:a++;b++;}

printf("a=%d,b=%d",a,b);}

该程序的输出结果是() A、2,1 B、1,1 C、1,0 D、2,2【答案】A5、有以下程序

#include<stdio.h>

main()

{

inta=5,b=4,c=3,d=2;

if(a>b>c)

printf("%d\n",d);

elseif((c-1>=d)==1)

printf("%d\n",d+1);

else

printf("%d\n",d+2);

}

执行后输出的结果是________。 A、2 B、3 C、4 D、编译时有错,无结果【答案】B【解析】第二个if语句中的表达式“c-1>=d”的值为逻辑值1,所以该条件成立。6、设变量a、b、c、d和y都已正确定义并赋值。若有以下if语句:if(a<b)if(c==d)y=0;elsey=1;该语句所表示的含义是________。 A、y=0,a

y=1,a≥b B、y=0,a

y=1,a≥b且c≠d C、y=0,a

y=1,a<B且C≠D D、y=0,a

y=1,c≠d【答案】C7、以下叙述中正确的是________。 A、在C语言中,逻辑真值和假值分别对应1和0 B、关系运算符两边的运算对象可以是语言中任意合法的表达式 C、对于浮点变量x和y,表达式:x==y是非法的,会出编译错误 D、分支结构是根据算术表达式的结果来判断流程走向的【答案】B【解析】A选项中,在C语言中,逻辑真值对应非0;C选项中,表达式:x==y是合法的;D选项中,分支结构的流程走向是根据表达式的值,并不仅仅是算数表达式的值。因此B选项正确。8、有以下定义语句:doublea,b;intw;longc;若各变量已正确赋值,则下列选项中正确的表达式是________。 A、a=a+b=b++ B、w%((int)a+b) C、(c+w)%(int)a D、w=a==b【答案】C【解析】选项A不是合法的赋值语句,将最右边的第一个赋值表达式加括号即为a=a+(b=b++)才正确,故选项A不正确。选项B中运算符%的对象必须是整型,而在选项B中(int)a+b为double型,故选项B不正确。a,b都为double型,应当避免使用a==b这样的关系表达式,因为通常存放在内存中的实型数据是有误差的,因此不可能精确相等,这将导致关系表达式a==b总为0。所以,4个选项中选项C符合题意。9、有以下程序

main()

{

inti=1,j=1,k=2;

if((j++‖k++)&&i++)

printf("%d,%d,%d\n",i,j,k);

}

执行后输出结果是________。 A、1,1,2 B、2,2,1 C、2,2,2 D、2,2,3【答案】C【解析】首先计算if语句后面的表达式值,先计算运算符&&前面括号里的“||”运算。在“||”运算中先计算j++,值为1(j的值为2),为真,后面的k++将不再计算,k的值依旧为2。计算&&后面的表达式i++,值为1(i的值变为2)。整个表达式的值为真,所以执行后面的输出语句,最后输出的i、j和k的值为2、2和2。10、switch语句不能用于下列哪种数据类型() A、double B、byte C、short D、char【答案】A【解析】swish语句中表达式expression只能返回这几种类型的值:int、byte、short和char。如果比较的数据类型是double型,则不能使用switch结构。三、循环结构(每小题1分,共10分)1、下列程序的运行结果是________。

voidmain()

{

ints=0,k;

for(k=7;k>1;k--)

{

switch(k)

{

case1:case4:case7:s++:break;

case2:case3:case6:break;

case0:case5:s+=2:break;

}

}

printf("s=%d",s);

} A、s=3 B、s=4 C、s=5 D、无输出结果【答案】B2、若变量已正确定义,有以下程序段

i=0;

doprintf("%d,"i);

while(i++);

printf("%d\n",i);

其输出结果是________。 A、0,0 B、0,1 C、1,1 D、程序进入无限循环【答案】B3、执行下面程序片段的结果是______。intx=23;

do

{

printf("%2d",x--);

}

while(!x); A、打印出321 B、打印出23 C、不打印任何内容 D、陷入死循环【答案】B4、c语言中下列叙述正确的是_______。 A、不能使用do...while语句构成的循环 B、do...while语句构成的循环,必须用break语句才能退出 C、do...while语句构成的循环,当while语句中的表达式值为非零时结束循环 D、do...while语句构成的循环,当while语句中的表达式值为零时结束循环【答案】D【解析】选项A是错误的,C语言支持do…while语句;选项B是错误的,do…while构成的循环,当while语句中的表达式值为零时结束循环,而不是非零;选项C也是错误的。5、下面程序的运行结果是________。

#include<stdio.h>

voidmain()

{

inty=10;

do

{

y--;

}

while(--y);

printf("%d\n",y--);

} A、-1 B、1 C、8 D、0【答案】A【解析】该题可以使用一个简单的做法,要想程序退出循环,则必--y的值为0,也就是退出循环是y的值为0。6、以下叙述中正确的是________。 A、do-while语句构成的循环不能用其他语句构成的循环来代替 B、do-while语句构成的循环只能用break语句退出 C、用do-while语句构成循环时,只有在while后的表达式为非零时结束循环 D、用do-while语句构成循环时,只有在while后的表达式为零时结束循环【答案】D7、定义如下变量:intn=10;

则下列循环的输出结果是________。

while(n>7)

{

n--;

printf(''%d'',n);

} A、1098 B、987 C、10987 D、9876【答案】A8、有以下程序

main()

{

inta=15,b=21,m=0;

switch(a%3)

{

case0:m++;

break;

case1:m++;

switch(b%2)

{

default:m++;

case0:m++;

break;

}

}

printf("%d\n",m);

}

程序运行后的输出结果是______。 A、1 B、2 C、3 D、4【答案】A9、程序段如下:则以下说法中正确的是:

intk=5;

do

{

k--;

}

while(k<=0); A、循环执行5次 B、循环是无限循环 C、循环体语句一次也不执行 D、循环体语句执行一次【答案】D10、结构化程序设计的3种结构是________。 A、顺序结构,分支结构,跳转结构 B、顺序结构,选择结构,循环结构 C、分支结构,选择结构,循环结构 D、分支结构,跳转结构,循环结构【答案】B【解析】程序设计语言仅仅使用顺序、选择和重复(循环)三种基本控制结构就足以表达出各种其他形式结构的程序设计方法。遵循程序结构化的设计原则,按结构化程序设计方法设计出的程序易于理解、使用和维护;可以提高编程工作的效率,降低软件的开发成本。四、数组/指针数组(每小题1分,共10分)1、设有数组定义:chararray[]="china";则数组array所占的空间为________。 A、6字节 B、5字节 C、4字节 D、7字节【答案】A【解析】在本题的定义方式中,系统会自动在数组最后加入一个'\0',表示字符数组的结束,因此数组的长度是6个字节。2、以下不能对二维数组a进行正确初始化的语句是________。 A、inta[2][3]={0}; B、inta[][3]={{1,2},{0}}; C、inta[2][3]={{1,2},{3,4},{5,6}}; D、inta[][3]={1,2,3,4,5,6}【答案】C3、在下面语句中,其含义为"p为指向含n个元素的一维数组的指针变量"的定义语句是________。 A、intp[n] B、int*p(); C、int*p(n); D、int(*p)[n]【答案】D4、设有如下定义:char*aa[2]="abcd","abcd",则以下说法中正确的是________。 A、aa数组中元素的值分别是"abcd","ABCD"; B、aa是指针变量,它指向含有两个数组元素的字符型一维数组 C、aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D、aa数组的两个元素中各自存放了字符‘a’和‘A’的地址【答案】C【解析】aa数组被定义为字符型指针数组,有两个元素,分别存放字符串"abcd"和"ABCD"的首地址。5、算法指的是________。 A、解决问题的方法、步骤和思路的一种描述 B、计算机程序 C、排序方法 D、数据处理【答案】A6、具有相同类型的指针变量p与数组a,不能进行的操作是________。 A、p=a; B、*p=a[0]; C、p=&a[0]; D、p=&a;【答案】D7、若有以下说明和语句:intc[4][5],(*p)[5];p=c;能够正确引用c数组元素的是________。 A、p+l B、*(p+3) C、*(p+1)+3 D、*(p[0]+2)【答案】D【解析】本题中定义了一个二维数组c和一个指针数组p,并初始化让p指向c。显然此时p中的各元素为地址,选项A中p+1,此时其中的1代表的长度是整个二维数组c的长度,故p+l将让p指向c数组后面的元素,不能引用c数组中的成员,故选项A错误;同理选项B和选项C都不正确,选项D中p[0]指的是指针数组中的第一个元素的地址即c的首地址,此时的1的长度代表的是数组C中一行的长度,故p[0]+2代表的是第3行的首地址,而*(p[0]+2)将代表第3行的第一个元素的地址,所以,4个选项中选项D符合题意。8、要定义一个字符串,下列选项中错误的是________。 A、chars[5]="hello"; B、chars[]="hello"; C、char*s="hello"; D、chars[]={"h","e","l","l","o"};【答案】D【解析】定义字符数组,字符元素要用单引号括起来。9、已知:chars[100];inti;则引用数组元素的错误的形式是________。 A、s[i+10] B、*(s+i) C、*(i+s) D、*((s++)+i)【答案】D10、若有以下语句,则正确的描述是chara[]="toyou";

charb[]={′t′,′o′,′y′,′o′,′u′}; A、a数组和b数组的长度相同 B、a数组长度小于b数组长度 C、a数组长度大于b数组长度 D、a数组等价于b数组【答案】C五、字符串/字符串指针(每小题1分,共10分)1、如果在一个运算表达式中包含有逻辑运算、关系运算和算术运算,并且其中未用圆括号规定这些运算的先后顺序,那么这样的综合型表达式的运算顺序是______。 A、逻辑→算术→关系 B、关系→逻辑→算术 C、算术→逻辑→关系 D、算术→关系→逻辑【答案】D【解析】在VisualFoxPro中,运算符类型主要有四种:算术运算符、字符串运算符、关系运算符和逻辑运算符,它们的运算优先级为:算术运算符→字符串运算符→关系运算符→逻辑运算符在进行表达式求值时,应注意按照它们的优先级进行计算。2、下面程序段的运行结果是char*s="abcde";s+=2;printf("%d",s); A、cde B、字符'c' C、字符'c'的地址 D、无确定的输出结果【答案】C【解析】对于字符串指针,其保留的是整个串的首地址,即第一个字符的起始地址;当该指针做算术运算时,就是该指针根据其类型向后移动相应的存储空间。3、下面选项中合法的字符常量是________。 A、"X" B、'X' C、'abc' D、'\'【答案】B【解析】字符常量是用单引号括起来的一个字符。A选项中,使用双引号,所以是错误的;C选项中,abc是字符串,字符常量只能是单个字符,不能是字符串;D选项中,以反斜线"开头的是转义字符。因此B选项正确。4、chara[]="Thisisaprogram.";输出前5个字符的语句是()。 A、printf("%.5s",a); B、puts(a); C、printf("%s",a); D、a[5*2]=0;puts(a);【答案】A5、请读程序片段(字符串内没有空格字符):printf("%d\n",strlen("ats\n012\1\\"));

上面程序片段的输出结果是______。 A、11 B、10 C、9 D、8【答案】C6、下面程序的功能是将字符串s中所有的字符'c'删除。

#include"stdio.h"

main()

{

chars[80];

inti,j;

gets(s);

for(i=j=0;s[i]!='\0';i++)if(s[i]!='c');

s[j]='\0';

puts(s);

} A、s[j++]=s[i] B、s[++j]=s[i] C、s[j]=s[i];j++ D、s[j]=s[i]【答案】A7、下列数据中为字符串常量的是________。 A、'A' B、"9" C、Howdoyoudo D、'$abd'【答案】B8、下面程序段输出两个字符串中对应相等的字符。请分析程序填空。

charx[]="programming";

chary[]="fortran";

inti=0;

while(x[i]!='\0'&&y[i]!='\0')

if(x[i]==y[i])printf("%c",_____);

elsei++; A、x[i++] B、y[++i] C、x[i] D、y[i]【答案】A9、设有以下语句,若0<k<4,下列选项中对字符串的非法引用是()。

charstr[4][2]={"aaa","bbb","ccc","ddd"},*strp[4];

intj;

for(j=0;j<4;j++)

strp[j]=str[j]; A、strp B、str[k] C、strp[k] D、*strp【答案】A10、字符串"\\\"abc\"\\"的长度是______。 A、11 B、7 C、5 D、3【答案】B六、函数/函数指针(每小题1分,共10分)1、以下程序运行后的输出结果是

#include<stdio.h>

voidfun(inta,intb){

intt;

t=a;

a=b;

b=t;

}

main(){

intc[10]=1,2,3,4,5,6,7,8,9,0,i;

for(i=0;i<10;i+=2)fun(c[i],c[i+1]);

for(i=0;i<10;i++)prinff("%d,",c[i]);

printf("\n");

} A、1,2,3,4,5,6,7,8,9,0 B、2,1,4,3,6,5,8,7,0,9 C、0,9,8,7,6,5,4,3,2,1 D、0,1,2,3,4,5,6,7,8,9【答案】A【解析】fun函数无值返回。

main函数调用时数组元素作实参,形参的改变不会影响实参。因此,循环调用结束后,C数组没有任何改变。2、以下叙述中错误的是________。 A、C程序必须由一个或一个以上的函数组成 B、函数调用可以作为一个独立的语句存在 C、若函数有返回值,必须通过咖语句返回 D、函数形参的值也可以传回给对应的实参【答案】D【解析】本题主要考查函数的概念。C语言规定,实参变量对形参变量的数据传递是“值传递”,即单向传递,只由实参传给形参,而不能由形参传回来给实参。由此可知选项D不正确,故应该选择D。3、若有定义:char*x="abcdefghi";以下选项中正确运用了strcpy函数的是______。 A、chary[10];strcpy(y,x[4]); B、chary[10];strcpy(++y,&x[1]); C、chary[10],*s;strcpy(s=y+5,x); D、chary[10],*s;strcpy(s=y+1,x+1);【答案】D【解析】字符串复制函数strcpy调用形式为:“strcpy(s1,s2)”,其功能为把s2所指字符串的内容复制到s1所指空间,函数返回s1的值,即目的串的首地址。为保证复制的合法性,s1必须指向一个足够容纳s2串的存储空间。4、每个c程序中都必须有且仅有一个________。 A、类 B、预处理命令 C、主函数 D、语句【答案】C【解析】每个C程序中都要有且仅有一个主函数,该函数是程序的入口,而语句、预处理命令和函数及类在程序中都可以有多个。5、以下关于程序中函数的定义、调用和声明的叙述中,正确的是______。 A、函数的定义必须放在该函数的调用之前 B、函数的声明必须放在该函数的调用之前 C、函数的定义必须放在该函数的声明之前 D、函数的声明必须放在该函数的定义之前【答案】B【解析】在程序中,函数定义是指对函数的完整定义,包括函数首部和I函数体,函数调用是指对所定义函数的使用,一个函数只有被调用才能得到执行。函数声明是指函数的定义在后面,而前面需要对它进行调用,这样就需要预先进行声明,以便编洋程序检查调用的合法性。一般来说,函数的声明只是函数首部加上分号即可。函数声明不是必需的,若函数调用在函数定义之后,则无须声明。6、若主调用函数类型为double,被调用函数定义中没有进行函数类型说明,而return语句中的表达式类型为float型,则被调函数返回值的类型是__________。 A、int型 B、float型 C、double型 D、由系统当时的情况而定【答案】A7、函数rewind的作用是()。 A、使位置指针重新返回文件的开头 B、将位置指针指向文件中所要求的特定位置 C、使位置指针指向文件的末尾 D、使位置指针自动移至下一个字符位置【答案】A8、以下关于return语句的叙述中不正确的是________。 A、一个自定义函数中必须有一条return语句 B、一个自定义函数中可以根据不同情况设置多条return语句 C、如果一个函数有多个return语句,那么不论运行到哪一个return语句,该函数将结束 D、没有return语句的自定义函数在执行完最后一条语句时返回到调用处【答案】A【解析】return语句主要用于返回函数的值。在一个自定义函数中,可以根据不同的情况设置多条return语句返回函数的值,也可以不包含return语句。9、若调用一个函数,且此函数中没有return语句,则正确的说法是________。 A、该函数没有返回值 B、该函数返回若干个系统默认值 C、能返回一个用户所希望的函数值 D、返回一个不确定的值【答案】D10、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是________。 A、函数调用可以作为独立的语句存在 B、函数调用可以作为一个函数的实参 C、函数调用可以出现在表达式中 D、函数调用可以作为一个函数的形参【答案】D七、指针(每小题1分,共10分)1、阅读以下程序

#include<stdio.h>

main()

{

intcase;

floatprintf;

printf("请输入2个数:");

scanf("%d%f",&case,&printf);

printf("%d%f\n",case,printf);

}

该程序在编译时产生错误,其出错原因是________。 A、定义语句出错,case是关键字,不能用作用户自定义标识符 B、定义语句出错,printF不能用作用户自定义标识符 C、定义语句无错,scanf不能作为输入函数使用 D、定义语句无措,printf不能输出case的值【答案】A2、考虑函数原型voidtest(inta,intb=7,charz='*'),下面的函数调用中,属于不合法调用的是________。 A、test(5); B、test(5,8); C、test(6,'#'); D、test(0,0,'*');【答案】C【解析】题中函数声明带有默认参数,那么在C选项的调用中,将会把字符型实参#赋值给整型形参b,这不符合参数传递规则。3、下面程序的运行结果是

#include<stdio.h>

main()

{

inta=28,b;

chars[10],*p;

p=s;

do

{

b=a%16;

if(b<10)*p=b+48;

else*p=b+55;

p++;

a=a/5;

}

while(a>0);

*p='\0';

puts(s);

} A、10 B、C2 C、C51 D、\0【答案】C【解析】考查用字符指针处理字符串的方法。[解题要点]语句“p=s;”是使指针P指向字符数组s。*p则引用了p所指位置的数组元素。[考点链接]通过指针来引用一维数组元素。4、对下述程序的判断中,正确的是________。

main()

{

char*p,s[256];

p=s;

while(strcmp(s,"theend"))

{

printf("inputthestring:");

gets(s);

while(*p)putchar(*p++);

}

} A、此程序循环接收字符串并输出,直到接收到字符串“theend”为止 B、此程序循环接收字符串,接收到字符串“theend”则输出,否则程序终止 C、此程序循环接收字符串并输出,直到接收字符串“theend”为止,但因为代码有错误,程序不能正常工作 D、此程序循环接收字符串并将其连接在一起,直到接收字符串“theend”为止,输出连接在一起的字符串【答案】C5、若在某函数内部有定义:inta[3][4];则数组a中各元素________。 A、可在程序的运行阶段得到初值0 B、可在程序的编译阶段得到初值0 C、不能得到确定的初值 D、可在程序的编译或运行阶段得到初值0【答案】C【解析】在函数内部定义的存储类型为auto的变量或数组,如果没有进行初始化,就不能得到确定值。6、下列选项中合法的数组定义是________。 A、inta[]="string"; B、inta[5]={

0,1,2,3,4,5}; C、chara="sting"; D、chara[]={

0,1,2,3,4}【答案】A7、下列关于函数参数的叙述中,正确的是________。 A、在函数原型中不必声明形参类型 B、函数的实参和形参共享内存空间 C、函数形参的生存期与整个程序的运行期相向 D、函数的形参在函数被调用时获得初始值【答案】D8、设有如下函数定义:intfun(intk)

{

if(k<1)return0;

elseif(k==l)returnl;

elsereturnfun(k-1)+1:

}

若执行调用语句:"n=fun(3);

",则函数fun总共被诃用的次数是________。 A、2 B、3 C、4 D、5【答案】B9、有如下定义:inta[5]={1,3,5,7,9},*p=a;下列表达式中不能得到数值5的是________。 A、a[2] B、a[3] C、*(p+2) D、*p+4【答案】B10、下面程序的运行结果是

#include<stdio.h>

main()

{

chara[]="morning",t;

inti,j=0;

for(i=1;i<7;i++){

if(a[j]<a[i]){

j=i;

t=a[j];

a[j]=a[7];

a[7]=a[j];

}

}

printf("%s",a);

} A、mrgninr B、m C、moring D、morning【答案】B【解析】本题考查了一维数组元素的引用方法。题中数组a为一字符串数组,通过数组首地址和下标可以引用数组中的每个元素。因为字符数组相当于字符串八、结构体(每小题1分,共10分)1、设有以下说明语句:

typedefstructstu

{

inta;

floatb;

}stutype;

则下面叙述中错误的是________。 A、struct是结构类型的关键字 B、structstu是用户定义的结构类型 C、a和b都是结构成员名 D、stutype是用户定义的结构体变量名【答案】C2、设有如下定义:

structsk

{

intn;

floatx;

}data,*p;

若要使p指向data中的n域,正确的赋值语句是________。 A、p=&datn; B、*p=datn; C、p=(structsk*)&datn; D、p=(structsk*)datn;【答案】C【解析】本题主要考查了结构体变量引用成员数据的方法,主要有以下几种:结构体变量名,成员名或结构体指针->,成员名的方法来引用结构体成员。3、enuma

{

sum=9,mon=-1,tue

}

;

定义了________。 A、枚举变量 B、3个标识符 C、枚举数据类型 D、整数9和-1【答案】C4、设有如下定义:

structsk

{

inta;

floatb;

}

data,*p;

若有p=&data;

,则对data中的a域的正确引用是______。 A、(*p).data.a B、(*p).a C、p->data.a D、p.data.a【答案】B5、若有定义:

structkeyword

{

charkey[20];

intid;

}

kw[]={"void",1,"char",2,"int",3,"float",4,"double",5};

则printf("%c,%d\n",kw[3].key[0],kw[3].id);

语句的输出结果为________。 A、i3 B、n3 C、f4 D、l4【答案】C【解析】kw[3].Key[0]是第4个元素中key数组的第1个字符即f;

kw[3].ID是第4个元素中成员ID值;6、当定义一个结构体变量时,系统为它分配的内存空间是________。 A、结构中一个成员所需的内存容量 B、结构中第一个成员所需的内存容量 C、结构体中占内存容量最大者所需的容量 D、结构中各成员所需内存容量之和【答案】D7、设有以下语句:

typedefstructtt{charc;inta[4];}cin;则下面叙述中正确的是________。 A、可以用TT定义结构体变量 B、TT是struct类型的变量 C、可以用CIN定义结构体变量 D、CIN是structTT类型的变量【答案】C【解析】将题目中的定义语句去掉前面的typedef和后面的CIN(分号保留),就是一条完整的结构体定义语句,其中struct是说明符,TT是结构体名,大括号里面的是结构体成员的定义。此时要声明该结构体变量时需要使用struct加结构体名一起来声明,structTT一起构成一个结构体类型,就好像字符类型char。若只去掉前面的typedef,就是一条结构体定义同时声明个结构体变量CIN的语句,因为CIN的前面部分是structTT的完整写法,可以看作是structTT。C语言允许用typedef说明一种新类型名,其语法格式为:

typedef类型名标识符;

以后就可以用该标识符来代替被说明的类型名了。因此,当前面存在typedef时,该语句就变成了给structTT的定义一个新的名称CIN。所以,此时的CIN是一个结构体类型,它相当于structTT,即可以和char一样单独用来声明该结构体变量,而TT只是一个结构体名,不能单独用来声明变量。所以,4个选项中C符合题意。8、下面关于主程序的说法,错误的是________。 A、a.next=q; B、p.next=&b; C、p->next=&b; D、(*p).next=q;【答案】B【解析】要把结点b连接到结点a之后,必须把b的地址给a的next指针,选项A)中,指针变量q保存的就是变量b的地址,选项B)中的p是指针变量,应该是p->next=&b;在选项D)中,用*运算符取出结构体变量,并且保存的就是b的地址,所以正确。9、c语言结构体类型变量在程序执行期间,________。 A、所有成员一直驻留在内存中 B、没有成员驻留在内存中 C、部分成员驻留在内存中 D、只有一个成员驻留在内存中【答案】A10、有以下程序

structstu

{

charnum[10];

floatscore[3];

};

main()

{

structstus[3]={{"20021",90,95,85},{"20022",95,80,75},{"20023",100,95,90}},*p;

inti;

floatsum=0;

p=s+2;

for(i=0;i<3;i++)sum=sum+p->score[i];

printf("%6.2f\n",sum);

}

程序运行后的输出结果是________。 A、250.00 B、250 C、285.00 D、285【答案】C九、程序题(每小题1分,共10分)1、有以下程序

main()

{

inta[3][3],*p,i;

p=&a[0][0];

for(i=0;i<9;i++)p[i]=i+1;

printf("%d\n",a[1][2]);

}

程序运行后的输出结果是________。 A、3 B、6 C、9 D、2【答案】B2、有以下程序:

#include

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论