C语言模拟考试课程组测试 字符串存储数组单选题40题 含答案_第1页
C语言模拟考试课程组测试 字符串存储数组单选题40题 含答案_第2页
C语言模拟考试课程组测试 字符串存储数组单选题40题 含答案_第3页
C语言模拟考试课程组测试 字符串存储数组单选题40题 含答案_第4页
C语言模拟考试课程组测试 字符串存储数组单选题40题 含答案_第5页
已阅读5页,还剩14页未读, 继续免费阅读

下载本文档

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

文档简介

模拟考试-课程组测试(1)一、单选题(共40题,40分)1、chara[10];不能将字符串"abc"存储在数组中的是().A、strcpy(a,"abc");B、a[0]=0;strcat(a,"abc");C、a="abc";D、inti;for(i=0;i<3;i++)a[i]=i+97;a[i]=0;正确答案:C解析:A是将字符bai串拷贝到a中;B是在a字符串后du面追加字符串"abc",所以也zhi没有问题,a[0]=0;要加,而且要在dao前面加,首先保证a字符串是空的,定义完成a中的内容不定,后面的函数是两个字符串合并到第一个字符串上,所以不加不行;C把字符串"abc"的地址赋给了变量a,原来的定义丢失,造成内存泄露;D没有问题,最后a[i]=0,此时i=3,字符串最后写入字符串结束符。2、intb=0,x=1;执行如下语句if(x++)b=x+1;后,x,b的值依次为______.A、2,3B、2,2C、1,0D、2,0正确答案:A解析:3、下列程序的输出结果是structabc{inta,b,c;};main(){structabcs[2]={{1,2,3},{4,5,6}};intt;t=s[0].a+s[1].b;printf("%d\n",t);}A、5B、62/21C、7D、8正确答案:B解析:在main函数中定义了一个structabc类型的数组,同时分别利用{1,2,3}及(4,5,6}对数组中两个元素进行初始化。在该结构体,依次对其中的a,b,c三个变量进行初始化。故s[0].a=1,s[1].b=5,所以本题输出为6。4、若执行以下程序,则输出的结果是:#include<stdio.h>voidmain(){inta=0,b=1,c=2;if(++a>0||++b>0)++c;printf("%d,%d,%d",a,b,c);}A、1,1,2B、1,2,2C、1,2,3D、1,1,3正确答案:D解析:本题考查if语句。先判断if语句的条件是否成立,因为++a=1>0,所以条件成立,又因为是进行逻辑或运算,在已知其中一个运算对象为真的情况下,不必判断另外一个运算对象的真假,即不进行++b操作,就可以直接得出整个表达式的值为逻辑1,执行下面的++c。5、若有以下定义intk=7,x=12;则能使值为3的表达式是().A、x%=(k%=5)B、x%=(k一k%5)C、x%=11-k%5D、(x%=k)-(k%=4)正确答案:C解析:运算符“%”的两侧都应该是整型数。另外,本题需要掌握的知识点是x%=k等价于x=x%k。6、有以下程序main(){intaa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};inti,s=0;for(i=0;i<4;i++)s+=aa[i][1];printf("%d\n",s);}程序运行后的输出结果是()3/21A、11B、19C、13D、20正确答案:B解析:C语言规定,数组元素的下标是从零开始的.本题首先定义了一个二维数组aa并按行赋初值,定义了一个变量s用于求和。for循环执行4次分别把数组元素aa[0][1]、aa[1][1]、aa[2][1]和aa[3][1]的值(2,6,9,2)加到变量s中,s的值为19,所以最后输出的s的值为19.所以4个选项中B正确。(aa[0][1]相当于第一个集合里面第二个,因为数组从零开始。)7、有以下程序voidmain(){inta[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],*q=p+3;printf("%d\n",*p+*q);}程序运行后的输出结果是A、16B、10C、11D、6正确答案:C解析:最后打印输出的是"*p+*q"的值,即数组a的第四个元素a[3]=4及第七个元素7的和。8、C语言程序中,若对函数类型未加显式说明,则函数的隐含说明类型为().A、voidB、doubleC、intD、char正确答案:C解析:未加显式说明,则函数的隐含说明类型为int9、设有定义inta;floatb;执行scanf("%2d%f",&a,&b);语句时,若从键盘输入876543.0<回车>则a和b的值分别是A、76和543.04/21B、87和543.0C、876和543.0D、87和6.0正确答案:D解析:因为"%2d"限制了a读两位即87而后面的6被b读到,遇到空格结束了,后面的543.0未被读到!10、全局变量的定义应该在().A、函数内部B、函数外面C、文件外面D、最后一行正确答案:B解析:全局变量的定义应该在函数外面11、有以下程序#include<string.h>main(){charp[20]={'a','b','c','d'},q[]="abc",r[]="abcde";strcpy(p+strlen(q),r);strcat(p,q);printf("%d%d\n",sizeof(p),strlen(p));}程序运行后的输出结果是______.A、209B、99C、2011D、1111正确答案:C解析:12、以下描述中正确的是().A、由于do-while循环中循环体语句只能是一条可执行语句,所以循环体内不能使用复合语句能B、do-while循环由do开始,用while结束,在while(表达式)后面不能写分号能C、在do-while循环体中,一定要有能使while后面表达式的值变为零("假")的操作D、do-while循环中,根据情况可以省略while不可省略正确答案:C解析:5/2113、有以下程序#include<stdio.h>voidmain(){intm[][3]={1,4,7,2,5,8,3,6,9};147inti,k=1;258k=1-->第二行(排)for(i=0;i<3;i++)369{printf("%d",m[k][i]);}}执行后输出结果是______.A、456B、258C、369D、789正确答案:B解析:14、下列4个关于C语言的结论中错误的是().A、可以用dowhile语句实现的循环一定可以用while语句实现B、可以用for语句实现的循环一定可以用while语句实现C、可以用while语句实现的循环一定可以用for语句实现D、do-while语句与while语句的区别仅是关键字"while"出现的位置不同不止正确答案:D解析:do-while语句与while语句区别:1、形式上,一个条件在前,另一个条件条件在后;2、执行上,一个先看条件是否满足,如果不符合则直接跳过循环(有可能一次都没不执行循环体!);另一个不管条件如何,直接先运行一遍循环体,然后再判断条件是否符合,也就是它至少执行循一遍循环体!15、不能把字符串:Hello!赋给数组b的语句是______.A、charb[10]={'H','e','l','l','0','!','\0'};B、charb[10];b={'H','e','l','l','0','!'};C、charb[10];strcpy(b,"Hello!");D、charb[10]="Hello!";正确答案:B解析:b[10];b="Hello!";只能在定义的时候使用=来初始化,不能单独赋值16、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是______.A、地址传递B、单向值传递6/21C、由实参传给形,再由形参传回实参D、传递方式由用户指定正确答案:B解析:17、判断char型变量ch是否为小写字母的正确表达式为:()A、a'<=ch<='z'B、(ch>='a')&&(ch<='z')C、('a'>=ch)||('z'<=ch)D、('A'<=ch)&&('z'>=ch)正确答案:B解析:18、有以下说明和定义语句structstudent{intage;charnum[8];};structstudentstu[3]={{16,"200401"},{17,"200402"},{18,"200403"}};structstudent*p=stu;以下选项中引用结构体变量成员的表达式错误的是______.A、(p++)->numB、p.numC、(*p).numD、stu[0].age正确答案:B解析:结构体成员的引用可以用“结构体变量名.成员名”或者“结构体变量指针->成员名”两种方式来引用。19、有以下函数intbbb(char*u){char*t=u;while(*t++);t--;return(t-u);}以下关于bbb函数的功能叙述正确的是______.A、求字符串u的长度B、比较两个串的大小C、将串u复制到串tD、求字符串u所占字节数7/21正确答案:A解析:循环开始前,指针t和u都指向字符串的起始位置,然后通过while循环判断t指向的位置是否为空,同时让t向右移动一位。while循环结束时,t自减1,此时t指向的位置是字符串的结束标志“\0”处,故t-u的值是字符串的长度,并不包括结束标志。20、Whatistheoutputofthefollowingprogram?#include<stdio.h>intmain(){inty=8,x=7;printf("%d%d\n",++x,y++);return0;}A、7,8B、9,7C、8,8D、8,9正确答案:C解析:n++是先赋值再递增,++n是先递增再赋值,最终的副作用都是让n+121、以下程序运行的结果是:()inta=5,b=6;printf("%d",a/b);A、6B、5C、1D、0正确答案:D解析:类型均为整型22、Whatvaluestrcmp()functionreturnswhentwostringsarethesame?当两个字符串相同时,strcmp()函数返回什么值?A、0B、2C、1D、-1正确答案:A解析:当两个字符串相同时,strcmp()函数返回值为08/2123、有如下程序段int*p,a=10,b=1;p=&a;a=*p+b;执行该程序段后,a的值为______.A、12B、11C、10D、编译出错正确答案:B解析:p=&a表达式的含义是将变量a的地址赋给指针变量p;a=*p+b表达式的含义是指针变量p所存地址对应的值与b的和赋给a。24、设a=20,则输出结果是____printf("%d,%d",0<a<20,0<a&&a<20);√×---->×A、1,0B、0,0C、0,1D、1,1正确答案:A我觉得答案有错应该选B解析:25、以下正确的描述是().A、continue语句的作用是终止整个循环的执行.B、continue语句的作用是结束本次循环的执行.C、continue语句和break语句都可以在switch语句中使用.D、break语句的作用是结束本次循环的执行.正确答案:B解析:continue语句的作用是结束本次循环的执行.26、charw='a';intx=1;f1oaty=2.5;doublez=2.5;则表达式w*x+z-y值的数据类型为:_________.A、charB、intC、floatD、double9/21正确答案:D解析:c语言中两个不同类型的运算,要转化成同类型的,转换从低到高char-->float-->short-->int-->double27、若在定义语句inta,b,c,*p=&c;之后,接着执行下列选项中的语句,则能正确执行的语句是().A、scanf("%d",a,b,c);B、scanf("%d%d%d",a,b,c);C、scanf("%d",p);D、scanf("%d",&p);正确答案:C解析:scantf()函数要求,除了第1个参数为格式化字符串以外,其余参数均为相应变量的地址值。本题中,只有p是地址值,故应该选择C。28、执行下列程序段后,m的值是________.intw=2,x=3,y=4,z=5,m;m=(w<x)?w:x;(w<x)为真返回wA、4B、3C、5D、2正确答案:D解析:(x)?a:b在x是真时返回a,否则返回b29、C语言执行程序的开始执行点是().A、程序中第一条可以执行的语句B、程序中第一个函数C、程序中的main函数D、包含文件中的第一个函数正确答案:C解析:C语言执行程序的开始执行点是程序中的main函数30、在宏定义#defineA3.897678中,宏名A被一个()所代替。A、单精度数B、双精度数C、常量D、字符串正确答案:D解析:定义为:#define标识符字符串110/21宏定义是在预编译阶段,把给定的符号常量代替的字符串把源程序中的该符号进行字符串的替换也就是简单的文本替换,不检查语法错误31、设有定义:intn1=0,n2,*p=&n2,*q=&n1;,以下赋值语句中与n2=n1;语句等价的是______.A、*p=*q;B、p=q;C、*p=&n1;D、p=*q;正确答案:A解析:A*p=*q;//将指针q指向的地址里的值(即n1的值),赋给指针p指向的地址里(n2)Bp=q;//p和q分别存放n1、n2变量地址的,该地址是由系统分配的,不能赋值C*p=&n1;//*p是指针p指向的地址里的值,&n1是n1的地址,不能赋值Dp=*q;//p存放的是n2的地址,*q是指针q指向的地址里的值,不能赋值32、以下对一维整型数组a的正确说明是().A、inta(10);B、intn=10,a[n];C、intn;scanf("%d",&n);inta[n];D、#defineSIZE10inta[SIZE];正确答案:D解析:a[10]是方括号,不是小括号,所以A不对。方括号中必须是常量,所以BC都不对,其是变量。只有D是正确的。33、能够完成字符串拼接的函数是______A、strcpy()B、strlen()C、strcmp()D、strcat()正确答案:D解析:死记34、有如下定义structstudent{charname[9];intno;11/21};structstudents={"Rose",1};根据上述定义,能输出数据项name的语句是()A、printf("%c",);B、printf("%s",);C、printf("%d",);D、printf("%c",s.no);正确答案:B解析:35、设有以下定义和语句intM[3][3]={1,2,3,4,5,6,7,8,9},*p[3];p[0]=M[0];则*(p[0]+1)所代表的数组元素值是______A、2B、3C、4D、5正确答案:A解析:p[0]指向M[0],也就是&M[0][0],二维数组在内存中的存储方式和一维数组一样也是顺序存放的。所以p[0]+1就是a[0][0]的下一个元素a[0][1]。--->第一排第二个12345678936、下面有关宏替换的叙述不正确的是A、宏替换不占用运行时间B、宏名无类型C、宏替换只是字符替换D、宏名必须用大写字母表示正确答案:D解析:本题考查宏替换的规则。宏替换分为简单的字符替换和带参数的宏替换两类。使用宏时应注意以下几点:①定义仅仅是符号替换,不是赋值语句,因此不做语法检查;②为了区别程序中其他的标识符,宏名的定义通常用大写字母,但不是必须用大写;③双引号中出现的宏名不替换;④使用宏定义可以嵌套,即后定义的宏中可以使用先定义的宏。37、执行以下语句后的结果是________.voidmain(){floatf=5.75;12/21printf("%d,%f\n",(int)f,f);}A、5,5.750000B、5.000000,5.750000C、6,5.750000D、6.000000,5.750000正确答案:A解析:%f这是浮点默认输出格式,小数点保留6位38、设有如下定义:structsk{inta;floatb;}data;int*p;若要使p指向data中的数据,正确的赋值语句是______.A、p=a;B、p=data;C、p=&data.a;D、*p=data正确答案:C解析:要注意不能将结构体变量作为一个整体进行输入和输出,只能对结构体变量中的各个成员进行输入和输出。引用结构体变量中成员的方式有以下几种:结构体变量名.成员名;指针变量名->成员名;(*指针变量名).成员名。39、以下各选项企图说明一种新的类型名,其中正确的是______.A、typedefv1int;B、typedefv2=int;C、typedefintv3;D、typedefv4:int正确答案:C解析:本题可联想typedefstruct{...}XXX那种格式typedefAB是把后一个数据类型B视为A的数据类型的声明40、有以下程序main(){charch[]="uvwxyz",*pc;pc=ch;------>0printf("%c",*(pc+5));-------->pc+5=5-->第六个元素z}程序执行后的输出结果是______13/21A、zB、0C、元素ch[5]的地址D、字符y的地址正确答案:A解析:二、填空题(共6题,30分)1、/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:求广义菲玻那契级数的第n项。广义菲玻那契级数的前n项为:1,1,1,3,5,9,17,31,……项值通过函数值返回main()函数。例如:若n=15,则应输出:Thevalueis:2209。------------------------------------------------------*/#include<stdio.h>longfun(intn){longa=1,b=1,c=1,d=1,k;/**********FOUND**********/for(k=4;k<=n;k++){d=a+b+c;/**********FOUND**********/a=b;b=c;c=d;}/**********FOUND**********/returnk;d}voidmain(){intn=15;printf("Thevalueis:%ld\n",fun(n));}正确答案:第1空:14/21for(k=4;k<=n;k++);for(k=4;n>=k;k++)第2空:a=b;第3空:returnd;解析:2、/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:判断两个指针所指存储单元中的值的符号是否相同;若相同函数返回1,否则返回0。这两个存储单元中的值都不为0。------------------------------------------------------*/#include<stdio.h>/**********FOUND**********/fun(double*a,*b){/**********FOUND**********/if(a*b>0.0)return1;/**********FOUND**********/return0;}voidmain(){doublen,m;printf("Entern,m:");scanf("%lf%lf",&n,&m);printf("\nThevalueoffunctionis:%d\n",fun(&n,&m));}正确答案:第1空:fun(double*a,double*b)15/21第2空:if(*a**b>0.0);if((*a)*(*b)>0.0)第3空:elsereturn0;;elsereturn(0);解析:3、/*------------------------------------------------------【程序改错】--------------------------------------------------------功能:计算正整数num的各位上的数字之积。例如:输入252,则输出应该是20。------------------------------------------------------*/#include<stdio.h>intfun(longnum){/**********FOUND**********/intk;do{k*=num%10;/**********FOUND**********/num\=10;}while(num);returnk;}voidmain(){intn;printf("Pleaseenteranumber:\n");/**********FOUND**********/scanf("%d",n);/**********FOUND**********/printf("%ld\n",fun(longn));}正确答案:第1空:intk=1;第2空:num/=10;;num=num/10;第3空:scanf("%d",&n);第4空:printf("%ld\n",fun(n));解析:16/214、/*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:输入数组,最大的与最后一个元素交换,最小的与第一个元素交换,输出数组。-------------------------------------------------------*/#include<stdio.h>input(number)intnumber[10];{inti;/***********SPACE***********/for(i=0;【?】;i++)scanf("%d,",&number[i]);scanf("%d",&number[9]);}max_min(array)intarray[10];{int*max,*min,k,l;int*p,*arr_end;arr_end=array+10;max=min=array;for(p=array+1;p<arr_end;p++)if(*p>*max)max=p;elseif(*p<*min)/***********SPACE***********/【?】;k=*max;l=*min;*p=array[0];array[0]=l;/***********SPACE***********/【?】;*p=array[9];/***********SPACE***********/【?】;k=*p;}output(array)intarray[10];{int*p;for(p=array;p<array+9;p++)printf("%d,",*p);printf("%d\n",array[9]);}main(){intnumber[10];input(number);max_min(number);output(number);}正确答案:第1空:i<9;9>i17/21第2空:min=p第3空:l=*p第4空:array[9]=k解析:5、/*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:用冒泡法对数组a进行由小到大的排序。-------------------------------------------------------*/#include<stdio.h>voidfun(inta[],intn){inti,j,t;/***********SPACE***********/for(j=0;【?】;j++)/***********SPACE***********/for(i=0;【?】;i++)/***********SPACE***********/if(【?】){t=a[i];a[i]=a[i+1];a[i+1]=t;}}main(){inti,a[10]={3,7,5,1,2,8,6,4,10,9};/***********SPACE***********/【?】;for(i=0;i<10;i++)printf("%3d",a[i]);}正确答案:第1空:j<=n-1;n-1>=j;j<=-1+n;-1+n>=j;j<n;n>j;j<n-1第2空:i<n-j-1;n-j-1>i;i<n-1-j;n-1-j>i;i<=n-j-2;i<=n-2-j第3空:a[i]>a[i+1];a[i+1]<a[i]第4空:fun(a,10)解析:6、/*-------------------------------------------------------【程序填空】---------------------------------------------------------功能:建立一个如下的二维数组,并按以下格式输出。1000101010001000101010001-------------------------------------------------------*/#include<stdio.h>18/21voidmain(){inta[5][5]={0},*p[5],i

温馨提示

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

评论

0/150

提交评论