二级C语言程序设计模拟试题(一)一、单项选择题。(每小题1分,共20分)1、一个C语言程序是由(B)组成。A)一个函数B)一个或若干个函数C)一个过程D)一个过程或若干个过程知识点:C语言程序的结构2、C语言用(D)表示逻辑真值。A)trueB)TC)整型值0D)非0整型值知识点:数据类型3、如果程序中有#include文件名则意味着(A)。A)将文件名所指的那个文件的全部内容,在此命令行出现的这一点上,插入源程序B)指定标准输入输出C)宏定义一个函数D)条件编译说明知识点:编译预处理4、为一个结构体变量分配存储空间时,其所占容量为(B)。A)结构体中第一个成员所占容量B)结构体中所有成员所占容量C)结构体中所有成员中所占容量最大者D)结构体中最后一个成员所占容量知识点:结构体5、如果int*px,*py;则可用{temp=*px;*px=*py;*py=temp}实现*px和*py的交换。其中temp应该说明为(A)。A)inttempB)int&tempC)int**tempD)int*temp知识点:指针6、于合法的c语言长整型常量是(A)。A)12LB)6887273C)5E12D)(long)6887273知识点:数据类型7、下列程序输出正确的是(A)。main(){inta=-1,b=1,c;c=(a++=0)&&!((b--=0));printf(“%d,%d,%d”,a,b,c);}A)0,0,1B)-1,1,1C)0,0,0D)0,1,0知识点:逻辑运算符8、已知E的ASCII码是69,则执行printf(“%c”,’D’-‘8’+’5’);的结果是(B)。A)66B)AC)BD)E知识点:数据类型与自动转换9、段名访问的方式是(A)A)结构名.位段名B)位段名C)结构名D)*&位段名知识点:位段10、有字符数组a,则正确的输入语句是(C)。A)gets('a');B)scanf(%c,a);C)scanf(%s,a);D)gets(a);知识点:字符数组11、如果程序中有staticcharc;则编译时会对其自动设置初始值为(C)A)'\n'B)\nC)0D)'\0'知识点:存储类型与静态变量12、如果程序中有语句FILEfp;fp=fopen(abc.txt,w);则程序准备做(C)。A)对文件读写操作B)对文件读操作C)对文件写操作D)对文件不操作13、如果有#definef(x,y)x+y及inta=2,b=3;则执行printf(%d,f(a,b)*f(a,b))后的值为(C)。A)36B)25C)11D)1314、在下面的说明中,(D)是指向函数的指针。A)int*p[];B)int(*p)[];C)*p();D)(*p)();15、如果在C程序中有main(intargc,char*argv[]),那么(D)是指命令行中的参数个数。A)argvB)argv[]C)argc,argv[]D)argc16、下列程序运行的结果是(B)。#includestdio.hmain(){unsigneda,b,x;a=0x255;b=a4x=(~b)&0xff}A)0x55B)0xafC)0x50D)0xda17、下面程序中选择正确答案(C)main(){intk=0;while(printf(“*”)){k++;if(k3)break;}}A)其中循环控制表达式与’0’等价B)其中循环控制表达式与0等价C)其中循环控制表达式与1等价D)其中循环控制表达式不合法18、用文件包含形式的预处理时,当#include后面的文件名用尖括号括起,寻找被包含文件的方式为(B)A)先在源程序所在目录搜索,再按系统设定的标准方式搜索B)直接按系统设定的标准方式搜索C)仅仅搜索当前目录D)仅仅搜索源程序所在目录19、设有如下函数定义intf(char*s){char*p=s;while(*p)p++;return(p-s);}如果用printf(“%d”,f(“abcdef”));调用该函数,则输出结果为(B)。A)0B)6C)7D)奇怪字符20、程序段(C)intx=-1;do{x=x*x;}(!x);A)是死循环B)循环执行2次C)循环执行1次D)不合法二、不定项选择题。(每小题1分,共10分,错选、漏选均不得分)1、存储类型为static的静态变量的正确描述有(ABE)。A)静态变量有外部静态变量和内部静态变量之分。B)静态变量的数据类型如果是整型,则其缺省初值由编译系统赋为0。C)内部静态变量不能赋初值。D)所谓全局变量就是指静态变量。E)外部静态变量只在本文件中可见。2、下列哪些运算符的优先级相同且运算次序从左到右(AC)。A)()[]-B)++--C)=D)&&||E)&|3、在C语言中,下面哪些描述是正确的(BDE)。A)在switch(c)语句中,c可以是任意表达式。B)elseif语句可以转化为switch语句。C)大小写没有区别。D)goto语句必须与“转向标号”配合使用。E)C语言提供函数的递归调用机制。4、如有说明struct{intday;intmonth;intyear;}d,*pd;则下列哪些引用是正确的(ABC)。A)pd-yearB)(*pd).yearC)d.yearD)*pd.yearE)*(pd-year)5、在C语言中,系统指定的标准设备文件有(BCD)。A)fopenB)stdinC)stdoutD)stderrE)fclose6、C语言中要求所用到的变量作强制性定义,其目的是(ACE)A)变量被指定类型后便于分配内存单元B)确定变量的数量C)保证程序中正确地使用变量D)保证变量不同名E)根据变量的类型便于确定运算的合法性7、结构化程序是由(ADE)组成的。A)顺序结构B)模块结构C)树型结构D)选择结构E)循环结构8、下列程序中,若输入的命令行为:file1chinacomputer,则输出的结果为(B)。#includestdio.hmain(intargc,char*argv){while(--argc0)printf(“%s”,*++argv);}A)file1B)chinaC)chinacomputerD)language9、下面(ACDE)是位段特性的正确描述。A)位段空间的分配,不受机器的限制一律从左到右B)可以定义位段数组C)位段的长度不能大于存储单元的长度D)位段可以用整数格式输出E)位段的长度可以为010、函数返回值的正确描述是(ACE)。A)函数的返回值是通过函数中的return语句获得B)有多少个return语句就有多少个返回值C)在定义函数时,对函数值的说明类型与return语句表达式的类型应一致D)如果函数值的类型与return中表达式的类型不一致时,以表达式(应该以函数类型为准)为准E)当函数中没有return语句时,返回的是一个不确定的值三、判断分析题(如正确选√;如错误选Х。每小题1分,共10分)1、使用typedef可以自定义一种新的数据类型。(X)2、结构(struct)和联合(uion)类型实质上是相同的。(X)3、可以用顺序、分支、循环三种结构构造任何算法。(√)4、如有inta=2,b=4,c=8;则表达式((ab)&&ca)||(cb)的值为真。(√)5、求n!既可以用递归的方式,也可以用递推的方式。(√)6、在C语言中,程序main(){intptr;*ptr=100;printf(%d,*ptr);}是正确的。(X)7、C语言的编译系统对宏命令的处理是在源程序编译阶段进行的。(X)8、C语言中的输入输出操作是通过专门的输入输出语句实现的。(X)9、C语言可以处理的文件类型是文本文件和二进制文件。(√)10、若定义int**p;则程序中调用*p时,它代表p的地址。(X)四、填空题。(每空2分,共20分)1、构成递归的两个组成部分是递归方式和①递归结束条件。2、ANSIC提供了一个测试文件是否在结尾的状态函数feof(pf),当文件结束时feof函数的值为②非零整数。3、下面是输出链表head的函数print。#includestdio.hstructstud{longnum;floatscore;structstud*next;};voidprint(structstud*head){structstud*p;p=head;if(head!=NULL)do{printf(%ld%5.1f\n,p-num,p-score);___________③p=p-next________;}while(p!=NULL);}4、下面函数能找出字串s所包含的子串sub第1次出现的位置,请完善此程序填空。search(s,sub)_④char*s,*sub;_____{inti,j,k;for(i=0;s[i]!=’\0’;i++){for(j=i,k=0;_⑤s[j]!='\0'&&sub[k]!='\0'_&&s[j]==sub[k];j++,k++);if(sub[k]==’\0’)return(i);}return(-1);}5、算满足不等式1+1/2+1/3+1/4+…..+1/nlimit所需调和级数的项数.其中limit是提出的要满足的要求,而所求的是项数n,请完善此程序填空。#includestdio.hmain(){inttermcount=0;floatsum,limit;sum=0.0;printf(“limit=?”);scanf(“%f”,&limit);do{termcount+=1;sum+=1.0/termcount;}while(_⑥_sumlimit____);printf(“n=%d\tsum=%f\n”,termcount,sum);}6、有已排好序(升序)的字符串a,下面的程序是将字符串s中的每个字符按升序的规律插入到a中。请完善程序。#includestdio.h#includestring.hvoidmain(){chara[20]=abcdefwxy;chars[]=english;inti,j,k;for(k=0;s[k]!='\0';k++){j=0;while(s[k]=a[j]&&a[j]!='\0')j++;for(i=strlen(a);i=j;i--)_⑦_a[i]=a[i-1]________;a[j]=s[k];}puts(a);}7、函数fac的作用是用来求整数n1和整数n2的最大公约数,并返回该值,请完善程序。intfac(intn1,intn2){intt,x,y;if(n1n2){t=n1;n1=n2;n2=t;}x=n1;y=n2;while(_⑧_y____){t=x%y;x=y;y=t;}return(x);}8、以下函数的功能是删除字符串s中的所有数字字符。请填空。vioddele(char*s){intn=0,i;for(i=0;s[i];i++)if(⑨s[i]=’0’&&s[i]=’9’)s[n++]=s[i];s[n]=⑩‘\0’;}五、阅读程序,写出运行结果。(每小题4分,共20分)1、下列程序执行后其输出结果是:#includestdio.hfun3(intx){staticinta=3;a+=x;return(a);}voidmain(){intk=2,n;n=fun3(k);n+=fun3(k);printf(%d\n,n);}程序的运行结果为:(5+7)=122、下列程序执行后其输出结果是:#includestdio.hunionee{inta;intb;}*p,s[4];voidmain(){intn=1,i;for(i=0;i4;i++){s[i].a=n;s[i].b=s[i].a+1;n+=2;}p=&s[0];printf(%d,,p-a);printf(%d,++p-a);}程序的运行结果为:(共用体)2,33、下列程序执行后其输出结果是: