C语言试题.docx
《C语言试题.docx》由会员分享,可在线阅读,更多相关《C语言试题.docx(12页珍藏版)》请在冰豆网上搜索。
C语言试题
二级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)。
#includemain()
{unsigneda,b,x;a=0x255;b=a<<4
x=(~b)&0xff}
A)0x55B)0xafC)0x50D)0xda17、下面程序中选择正确答案(C)
main(){intk=0;
while(printf(“*”)){k++;if(k<3)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)
fclose
6、C语言中要求所用到的变量作强制性定义,其目的是(ACE)
A)变量被指定类型后便于分配内存单元B)确定变量的数量
C)保证程序中正确地使用变量D)保证变量不同名
E)根据变量的类型便于确定运算的合法性
7、结构化程序是由(ADE)组成的。
A)顺序结构B)模块结构C)树型结构
D)选择结构E)循环结构
8、下列程序中,若输入的命令行为:
file1chinacomputer,则输出的结果为(B)。
#include
main(intargc,char*argv){while(--argc>0printf(“%s”,*++argv);}
A)file1B)chinaC)chinacomputerD)
language
9、下面(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;则表达式((a>b)&&c>a)||(c>b)的值为真。
(√)
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。
#include
structstud{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/n>limit所需调和级数的项数.其中limit是提出的要满足的要求,而所求的是项数n,请完善此程序填空。
#includemain()
{inttermcount=0;floatsum,limit;sum=0.0;
printf(“limit=?
”);scanf(“%f”,&limit);do
{termcount+=1;
sum+=1.0/termcount;
}while(_⑥_sum____);
printf(“n=%d\tsum=%f\n”,termcount,sum);}
6、有已排好序(升序)的字符串a,下面的程序是将字符串s中的每个字符按升序的规律插入到a中。
请完善程序。
#include#includevoidmain()
{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(n1>n2)
{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、下列程序执行后其输出结果是:
#includefun3(intx)
{staticinta=3;a+=x;
return(a);}
voidmain()
{intk=2,n;n=fun3(k);n+=fun3(k);
printf(%d\n,n);}
程序的运行结果为:
(5+7)=12
2、下列程序执行后其输出结果是:
#includeunionee{inta;intb;}*p,s[4];voidmain(){intn=1,i;
for(i=0;i<4;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,3
3、下列程序执行后其输出结果是:
#includevoidfun(intn,int*s){intf1,f2=1;if(n==1)*s=1;else
{fun(n-1,&f1);*s=f1+f2;}}
voidmain(){intx;fun(6,&x);
printf(%d\n,x);}
程序的运行结果为:
(递归调用)6
4、写出下面程序执行的结果:
int*fun(int*p){staticinta=0;returnp+a++;}
main()
{int*fun(int*p);
inta[10]={0,1,2,3,4,5,6,7,8},*p;p=fun(a+1);p=fun(p+2);
printf(“%d”,*p)}
程序的运行结果为:
4
5、写出下面程序执行的结果:
#includemain()
{charc;inti,k;k=0;
for(i=0;i<4;i++){while
(1)
{c=getchar();
if(c>'0'&&c<='9')brea}
k=k*10+c-‘0';}
printf(“k=%d\n”,k);}
程序的意思是:
从用户的输入字符串中提出前四个数字组成一个新串并输出。
输入:
1a2s3d4f输出:
1234六、编程序。
(每小题10分,共20分)
1、编程将一个数组中的值,按逆序重新存放,例如原来是8,6,5,4,1,要求改为1,4,5,6,8。
答:
main(){
inta[]={8,6,5,4,1},i,j,t;for(i=0;i<4;i++)for(j=i+1;j<5;j++)if(a[i]>a[j]){t=a[i];a[i]=a[j];a[j]=t;}
for(i=0;i<5;i++)
printf(],a[i]);}
2、编写函数insert(f,str1,str2)其功能是按f指定的位置,在字符串str1中插入str2。
答:
#includestring.h
voidinsert(intf,char*str1,char*str2){
charstr[50];
strcpy(str,str1+f);strcpy(str1+f,str2);strcat(str1,str);}
voidmain(){
charstr1[50]=abcdef;charstr2[50]=xyz;insert(2,str1,str2);puts(str1);}