C试题.docx
《C试题.docx》由会员分享,可在线阅读,更多相关《C试题.docx(14页珍藏版)》请在冰豆网上搜索。
C试题
C语言测试题,时间90分钟
PostBy:
2009-12-310:
22:
56
一、选择题(1.5*20)
(1)下列数据结构中,按先进后出原则组织数据的是
A)线性链表 B)栈
C)循环链表 D)顺序表
(2)下列表达式中,结果为5的是
A)6*5%6
B)5*-2+15
C)5+75%10
D)6+-2/3
(3)关于C语言的主函数描述正确的是
A)C程序可以有多个main函数
B)C程序必有一个而且只能有一个main函数
C)C程序可以没有main函数
D)C程序的执行不一定在main函数开始执行
(4)已知x,y,z均为整型变量,且值均为1,则执行语句++x||++y&&++z;后,表达式x+y的值为
A)1
B)2
C)3
D)4
(5)若inti,j;,则for(i=j=0;i<10&&j<8;i++,j+=3)控制的循环体执行的次数是
A)9
B)8
C)3
D)2
(6)下列关于栈的描述正确的是
A)在栈中只能插入元素而不能删除元素
B)在栈中只能删除元素而不能插入元素
C)栈是特殊的线性表,只能在一端插入或删除元素
D)栈是特殊的线性表,只能在一端插入元素,而在另一端删除元素
(7)阅读下列程序,则执行结果是
#include"stdio.h"
main()
{
inta=0,b=0,c=0,i;
for(i=0;i<4;i++)
switch(i)
{
case0:
a=i++;
case1:
b=i++;
case2:
c=i++;
case3:
i++;
}
printf("%d,%d,%d,%d\n",a,b,c,i);
}
A)0,1,3,4
B)1,2,3,4
C)0,1,2,5
D)0,2,3,4
(8)以下描述错误的是
A)C程序中,函数可以直接或间接的调用自己
B)函数调用时,函数名必须与所调用的函数名字完全一致
C)函数说明语句中的类型必须与函数返回值的类型一致
D)实参数可以与形参个数不一致
(9)阅读下面程序,则执行后的结果为
#include"stdio.h"
intfun1()
{
intk=20;
returnk;
}
intfun2()
{
inta=15;
returna;
}
fun3(inta,intb)
{
intk;
k=(a-b)*(a+b);
printf("%d\n",k);
}
main()
{
fun3(fun1(),fun2());
}
A)0
B)184
C)175
D)编译不通过
(10)以下对一维数组c进行正确的定义初始化的语句是
A)intc[10]=0;
B)intc[10]={0}*10;
C)intc[1]={0,0,0,0,0,0,0};
D)intc[10]={0};
(11)阅读下列程序,则执行后输出的结果是
#include"stdio.h"
intk=1;
fun(intk)
{
k++;
k=k*6;
}
main()
{
fun(k);
printf("%d\n",k);
}
A)1
B)2
C)6
D)12
(12)现有如下程序段
#include"stdio.h"
voidfun(int*a,int*b,int*c)
{
*c=*a+*b;
}
main()
{
inta[2]={12,23},c;
fun(a,a+1,&c);
printf("%d\n",c);
}
则程序的输出结果为
A)23
B)12
C)0
D)35
(13)若有以下语句,则正确的描述是
chara[]="toyou";
charb[]={′t′,′o′,′y′,′o′,′u′};
A)a数组和b数组的长度相同
B)a数组长度小于b数组长度
C)a数组长度大于b数组长度
D)a数组等价于b数组
(14)已知:
chara[15],b[15]={"Ilovechina"};则在程序中能将字符串Ilovechina赋给数组a的正确语句是
A)a="Ilovechina";
B)strcpy(b,a);
C)a=b;
D)strcpy(a,b);
(15)阅读下面程序,则执行后的结果为
#include"stdio.h"
main()
{
char*str="abcdefghijklmnopq";
while(*str++!
=′e′);
printf("%c\n",*str);
}
A)f
B)a
C)e
D)q
(16)现有如下程序段
#include"stdio.h"
intfun(intk,int*m);
{
if(k%3)
*m=k*k;
else
*m=k/3;
}
main()
{
int(*p)(int,int*),m;
p=fun;
(*p)(78,&m);
printf("%d\n",m);
}
则程序段的输出结果为
A)24
B)25
C)26
D)27
(17)阅读下列程序,则执行后的输出结果为
#include"stdio.h"
fun(intx)
{
if(x/2>0)fun(x/2);
printf("%d",x%2);
}
main()
{
fun(20);
putchar(’\n′);
}
A)11100
B)10100
C)10101
D)10110
(18)阅读如下程序段,则执行后程序的输出结果是
#include
main()
{
structa
{
intx;
inty;
}num[2]={{20,5},{6,7}};
printf("%d\n",num[0].x/num[0].y*num[1].y);
}
A)0
B)28
C)20
D)5
(19)阅读下列程序段
#include"stdio.h"
typedefstructaa
{
inta;
structaa*next;
}M;
voidset(M*k,inti,int*b)
{
intj,d=0;
for(j=1;j
{
k[j-1].next=&k[j];
k[j-1].a=b[d++];
}
k[j].a=b[d];
}
main()
{
Mk[5],*p;
intd[5]={23,34,45,56,67};
set(k,5,d);
p=k+1;
printf("%d\n",table);
}
则下面的表达式在table处,能使程序执行后,打印输出数据45的是
A)p->next->a
B)++p->a
C)(*p).a++
D)p++->a
(20)阅读下面程序,程序实现的功能是(a123.txt在当前盘符下已经存在)
#include"stdio.h"
voidmain()
{
FILE*fp;
inta[10],*p=a;
fp=fopen("a123.txt","w");
while(strlen(gets(p))>0)
{
fputs(a,fp);
fputs("\n",fp);
}
fclose(fp);
}
A)从键盘输入若干行字符,按行号倒序写入文本文件a123.txt中
B)从键盘输入若干行字符,取前2行写入文本文件a123.txt中
C)从键盘输入若干行字符,第一行写入文本文件a123.txt中
D)从键盘输入若干行字符,依次写入文本文件a123.txt中
二、填空题(2×12分)
(1)阅读下面程序,则在执行时候的输出为_____________
#include"stdio.h"
main()
{
intx=1,y=2,z=0;
if(x=2)
z=x,x=y,y=z;
printf("%d,%d\n",x,y);
}
(2)语句printf("%d\n",′H′-′0′+64);的执行结果为___________
(3)阅读下面程序,则程序的执行结果为____________
#include"stdio.h"
fun(intx)
{
x=50;
}
main()
{
inta=10;
fun(a);
printf("%d\n",a);
}
(4)以下程序的输出结果是____________
intfun(intx,inty,int*p,int*q)
{
*p=x*y;
*q=x/y;
}
main()
{
inta,b,c,d;
a=4;
b=3;
fun(a,b,&c,&d);
printf("%d,%d\n",c,d);
}
(5)下面程序是求出数组arr的两条对角线上元素之和,请填空
#include"stdio.h"
main()
{
intarr[3][3]={2,3,4,8,3,2,7,9,8},a=0,b=0,i,j;
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(___________________ )
a=a+arr[i][j];
for(i=0;i<3;i++)
for(___________________ ;j>=0;j--)
if(___________________ )
b=b+arr[i][j];
printf("%d,%d\n",a,b);
}
(6)下面程序的功能是:
对字符串从小到大进行排序并输出,请填空
#include"string.h"
#include"stdio.h"
sort(char*a[],intn)
{
inti,j;
char*p;
for(j=1;j<=n-1;j++)
for(i=0;___________________;i++)
if(___________________>0)
{
p=a[i];
a[i]=a[i+1];
a[i+1]=p;
}
}
main()
{
inti;
char*book[]={"itisme","itisyou","howareyou","fine","goodnight","goodbye"};
sort(___________________ );
for(i=0;i<6;i++)
printf("%s\n",book[i]);
}
(7)下面的函数是完成1~n的累加,完成函数
a(intk)
{
if(k<=0)
printf("error\n");
if(k==1)
___________________;
else
___________________;
}
三、请填写BOOL,float,指针变量与“零值”比较的if语句
(6分)
提示:
这里“零值”可以是0,0.0,FALSE或者“空指针”
例如int变量n与“零值”比较的if语句为:
if(n==0)
if(n!
=0)
以此类推
请写出BOOL flag与“零值”比较的if语句:
请写出char *p与“零值”比较的if语句:
四、以下为WindowsNT下的32位C++程序,请计算sizeof的值(6分)
char str[]=“Hello”;
char *p=str;
int n=10;
请计算
sizeof(str)=
sizeof(p)=
sizeof(n)= voidFunc(charstr[100])
{
请计算
sizeof(str)=
}
void*p=malloc(100);
请计算
sizeof(p)=
五、简答题(9分)
1、头文件中的ifndef/define/endif干什么用?
2、#include 和 #include “filename.h”有什么区别?
3、const有什么用途?
(请至少说明两种)
六、有关内存的思考题(6分)
voidGetMemory(char*p)
{
p=(char*)malloc(100);
}
voidTest(void)
{
char*str=NULL;
GetMemory(str);
strcpy(str,"helloworld");
printf(str);
}
请问运行Test函数会有什么样的结果?
答:
VoidGetMemory2(char**p,intnum)
{
*p=(char*)malloc(num);
}
voidTest(void)
{
char*str=NULL;
GetMemory(&str,100);
strcpy(str,"hello");
printf(str);
}
请问运行Test函数会有什么样的结果?
答:
上机题:
七、编写strcpy函数,并验证;求字符串长度(9分)
已知strcpy函数的原型是
char*strcpy(char*strDest,constchar*strSrc);
其中strDest是目的字符串,strSrc是源字符串
(1)不调用C++/C的字符串库函数,请编写函数strcpy(6分)
(2)计算strDest字符串的长度(3分)
八、实现功能:
1、从键盘输入一行字符串,调用函数建立反序的链表,然后输出整个链表(5分)
2、求出链表的最大值(5分)
已知
structnode
{
chardata;
structnode*next;
}*head;