C语言试题二级C语言试题.docx
《C语言试题二级C语言试题.docx》由会员分享,可在线阅读,更多相关《C语言试题二级C语言试题.docx(15页珍藏版)》请在冰豆网上搜索。
C语言试题二级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)"\n"C)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)13
14、在下面的说明中,(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)argc
16、下列程序运行的结果是(B)。
#include
main()
{unsigneda,b,x;
a=0x255;
b=a<<4
x=(~b)&0xff
}
A)0x55B)0xafC)0x50D)0xda
17、下面程序中选择正确答案(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>0)
printf(“%s”,*++argv);
}
A)file1B)chinaC)chinacomputerD)language
9、下面(ACDE)是位段特性的正确描述。
A)位段空间的分配,不受机器的限制一律从左到右
B)可以定义位段数组C)位段的长度不能大于存储单元的长度
D)位段可以用整数格式输出E)位段的长度可以为0
10、函数返回值的正确描述是(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,请完善此程序填空。
#include
main()
{inttermcount=0;
floatsum,limit;
sum=0.0;
printf(“limit=?
”);
scanf(“%f”,&limit);
do
{termcount+=1;
sum+=1.0/termcount;
}while(_⑥_sumprintf(“n=%d\tsum=%f\n”,termcount,sum);
}
6、有已排好序(升序)的字符串a,下面的程序是将字符串s中的每个字符按升序的规律插入到a中。
请完善程序。
#include
#include
voidmain()
{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、下列程序执行后其输出结果是:
#include
fun3(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、下列程序执行后其输出结果是:
#include
unionee
{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、下列程序执行后其输出结果是:
#include
voidfun(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、写出下面程序执行的结果:
#include
main()
{charc;inti,k;
k=0;
for(i=0;i<4;i++)
{while
(1)
{c=getchar();
if(c>’0’&&c<=’9’)
break;
}
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("%5d",a[i]);
}
2、编写函数insert(f,str1,str2)其功能是按f指定的位置,在字符串str1中插入str2。
答:
#include"string.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);
}
(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持)