C语言考试试题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《C语言》考卷
一单选题(每题2分,共25题,共50分)
1.要把高级语言编写的源程序转换为目标程序,需要使用( )[2分][2分]
A.编辑程序
B.驱动程序
C.诊断程序
D.编译程序
参考答案:D
2.以下叙述中正确的是( )[2分][2分]
A.C语言程序将从源程序中第一个函数开始执行
B.可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行
C.C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束
D.main可作为用户标识符,用以命名任意一个函数作为主函数
参考答案:C
3.若变量a是int类型,并执行了语句:a=‘A'+1.6;,则正确的叙述是( )[2分][2分] int a int a=66 = 65 + 1.6 =66.6
A.a的值是字符B
B.a的值是浮点型
C.不允许字符型和浮点型相加
D.a的值是字符‘A’的ASCII值加上2
参考答案:A
int a = ‘A’;
char b = 65;
4.若变量已正确定义并赋值,以下符合C语言语法的表达式是( )[2分][2分]
A.a:=b+1
B.a=b=c+2
C.18.5%3
D.a=a+7=c+b
参考答案:B
5.下列可用于C语言用户标识符的一组是( )[2分][2分]
A.void, define, WORD
B.a3_b3, _123,car
C.For, -abc, IF Case
D.2a, DO, sizeof
参考答案:B
6.若在定义语句:int a,b,c,*p=&c;之后,接着执行以下选项中的语句,则能正确执行的语句是( )[2分][2分]
A.scanf("%d",a,b,c);
B.scanf("%d%d%d",a,b,c);
C.scanf("%d",p); //scanf(“%d”,&c);
D.scanf("%d",&p);
参考答案:C
7.以下关于long、int和short类型数据占用内存大小的叙述中正确的是( )[2分][2分]
A.均占4个字节
B.根据数据的大小来决定所占内存的字节数 // long a = 1 int b = 1000000
C.由用户自己定义
D.由C语言编译系统决定
参考答案:D
8.若变量已正确定义,有以下程序段
i=0;
do{
printf("%d,",i); //0
}while(i++); //while(0) i=1
printf("%d\n",i); //1
其输出结果是( )[2分][2分]
A.0,0
B.0,1
C.1,1
D.程序进入无限循环
参考答案:B
9.有以下计算公式
则不能够正确计算上述公式的程序段是( )(提示:库函数sqrt()用来求一个数的平方根)[2分][2分]
A.if(x>=0) y=sqrt(x); else y=sqrt(-x); //if/else配合使用
B.y=sqrt(x) if(x<0) y=sqrt(-x);
C.if(x>=0)y=sqrt(x); if(x<0)y=sqrt(-x); //if单独使用
D.y=sqrt(x>=0?x:-x);
参考答案:B
10.设有条件表达式:
EXP ? i++ : j--;
则以下表达式与之完全等价的是( )[2分][2分]
A.(EXP==0)? i++ : j--;
B.(EXP!=0)? i++ : j--;
C.(EXP==1)? i++ : j--;
D.(EXP!=1)? i++ : j--;
参考答案:B
11.有以下程序#include<stdio.h>
int main(void)
{
int y=9;
for( ; y>0; y--)
{
if(y%3 == 0)
printf("%d",--y);
}
}
程序的运行结果是( )[2分][2分]
A.741
B.963
C.852
D.875421
参考答案:C
12.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )[2分][2分]
A.函数的实参和其对应的形参共占同一存储单元
B.形参只是形式上的存在,不占用具体存储单元 //局部变量
C.同名的实参和形参占同一存储单元
D.函数的形参和实参分别占用不同的存储单元
参考答案:D
13.已知字符‘A’的ASCⅡ代码值是65,字符变量c1的值是‘A’,c2的值是‘D’。

则执行语句printf("%d,%d",c1,c2-2);后,输出结果是( )[2分][2分]
A.A,B
B.A,68 char c1 = ‘A’ char c1 = 65 char c2 = 68
C.65,66
D.65,68
参考答案:C
14.以下叙述中错误的是( )[2分][2分]
A.函数的形参存放在数据段中
B.函数可以返回地址值
C.可以给指针变量强制赋一个浮点数作为地址值
D.可以给指针变量赋NULL
参考答案:A
15.以下正确的字符串常量是( )[2分][2分]
A."\\\"
B.‘abc’
C.Olympic Games
D.""
参考答案:D
16.设有定义:char p[]={'a', 'b', 'c'},*q=p; ,以下不能计算出一个char型数据所占字节数的表达式是( )[2分][2分]
A.sizeof(p) = 3
B.sizeof(char)
C.sizeof(*q)
D.sizeof(p[0])
参考答案:A
17.有以下程序:
int func(char *s)
{
char *t=s;
while(*t++){;}
t--;
return(t-s);
}
int main(void)
{
char *s = "abcdefghijk";
int n = func(s);
printf("%d\n", n)
}
程序的执行结果是( )[2分][2分]
A.字符串s的长度 11
B.比较两个串的大小
C.将串s复制到串t
D.求字符串s所占字节数 12
参考答案:A
18.若有定义语句:int a[3][6]; ,按在内存中的存放顺序,a数组的第10个元素是( )[2分][2分]
A.a[0][4]
B.a[1][3]
C.a[0][3]
D.a[1][4]
参考答案:B
19.有以下程序
#include<stdio.h>
void fun(char * (*p) )
{
++p;
printf("%s\n",*p);
}
int main(void)
{
char *a[ ]={"Morning","Afternoon","Evening","Night"};
fun(a);
}
程序的运行结果是( )[2分][2分]
A.Afternoon
B.fternoon
C.Morning
D.orning
参考答案:A
20.若有定义语句:int a[2][3],*p[3]; ,则以下语句中正确的是( )[2分][2分]
A.p=a;
B.p[0]=a;
C.p[0]=&a[1][2];
D.p[1]=&a;
参考答案:C
21.有以下程序
#include<stdio.h>
int fun(char s[])
{
int n=0;
while(*s<=‘9’&& *s>=‘0’)
{
n = 10*n + *s -‘0’;
s++;
}
return(n);
}
int main(void)
{
char s[10]={’6’,’1’,’*’,’4’,’*’,’9’,’*’,’0’, '*'};
printf("%d\n",fun(s));
}
程序运行的结果是( )[2分][2分]
A.9
B.61490
C.61
D.5
参考答案:C
22.以下能正确定义一维数组的选项是( )[2分][2分]
A.int a[5]={0,1,2,3,4,5};
B.char a[ ]={0,1,2,3,4,5};
C.char a={’A’,’B’,’C’};
D.int a[5]="0123";
参考答案:B
23.以下叙述中正确的是( ) [2分][2分]
A.预处理命令行必须位于源文件的开头
B.在源文件的一行上可以有多条预处理命令
C.宏名必须用大写字母表示
D.宏替换不占用程序的运行时间
参考答案:D
24.若有以下说明和定义( )
union dt
{
int a;
char b;
double c;
}data;
data.a = 5;
以下叙述中错误的是[2分][2分]
A.data的每个成员起始地址都相同
B.变量data所占的内存字节数与成员c所占字节数相等
C.语句printf("%f\n",data.c)的输出结果为5.000000
D.data可以作为函数的实参
参考答案:C
25.以下语句或语句组中,能正确进行字符串赋值的是( ) [2分][2分]
A.char *sp; *sp="abcd";
B.char s[10]; s="right!";
C.char s[10]; *s="right!";
D.char *sp="right!";
参考答案:D
二填空题(每题4分,共10题,共40分)
26.以下代码试图找出a、b、c的最小值:
#include<stido.h>
int main(void)
{
int a,b,c,t1,t2;
scanf("%d%d%d",&a,&b,&c);
t1=a<b? a:b
t2=c<t1? c:t1
printf("%d\n",t2);
}[每空2分]
27.以下程序的输出结果是54321
#include <stdio.h>
int main(void)
{
int n=12345, d;
while(n!=0)
{
d=n%10;
printf("%d",d);
n/=10;
}
}
[每空4分]
28.已有定义如下:
struct node
{
int data;
struct node *next;
}*p;
以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间,请填写所需空间的大小
struct node *p = (struct node *)malloc( sizeof(struct node) );[每空4分]
29.表达式(int)((double)5/2+2.5)的值是: 5 [每空4分]
30.写出以下两段程序的执行结果。

如果程序无法编译,请指出出错部分并写明原因;如果程序陷入死循环,请回答“死循环”。

如果执行结果出现内存错误,请指出出错部分并写明原因。

int main(void)
{
char s[ ]="man";
int i;
for(i=0; s[i]; i++)
{
printf("\n%c%c%c%c",s[i], *(s+i), *(i+s), i[s]);
}
}
mmmm aaaa nnnn
int main(void)
{
char *cptr,c;
void *vptr,v;
c=10;
v=0;
}
不能定义void型普通变量[每空2分]
31.对下面程序段进行解释:
1 typedef void (*lpFunction)(void);
2 lpFunction lpReset = (lpFunction)0xF000FFF0;
3 lpReset();[4分]
参考答案:
1,为一种函数指针类型定义了一个别名,叫lpFunction
2,用这个类型定义了一个这种函数指针变量IpReset,并且将地址OxF000FFF0赋给该指针3,调用处于地址OxF000FFF0的代码
32.指出下面代码的不妥之处:
void get_memory(T_S8 *p, T_S16 nNum)
{
p = (T_S8 *)malloc(sizeof(T_S8) * nNum);
}
void Test(void)
{
T_S8 *str = NULL;
get_memory(str, 100);
strcpy(str, "hello");
}[4分]
参考答案:
值传递不能改变str的值,所以实参str的值仍然为NULL,不能执行strcpy(str, "hello") , 会发生段错误。

33.以下程序的运行结果如何?原因?
char *get_memory(void)
{
char p[] = "hello world";
return p;
}
int main(void)
{
char *str = NULL;
str = get_memory();
printf("%s", str);
}[4分]
参考答案:
结果不确定,函数调用结束,数组p的空间被释放,不用再次引用
34.以下程序的运行结果如何?原因?
void get_memory(char **p, int num)
{
*p = (char *)malloc(num);
}
int main(void)
{
char *str = NULL;
get_memory(&str, 100);
strcpy(str, "hello");
printf("%s", str);
}[4分]
参考答案:
正确输出hello
35.以下test函数的运行结果如何?原因?
void test(void)
{
char *str = (char *) malloc(100);
strcpy(str, “hello”);
free(str);
if(str != NULL)
{
strcpy(str, “world”);
printf("%s", str);
}
}[4分]
参考答案:
指针所指空间被free后不能再次被引用
三编程题(共1题,共10分)
36.请编写一个函数strip, 用来删除字符串中的所有空格。

例如, 输入apple tree, 则输出为 appletree。

[10分][10分]
参考答案:
#include #include #include void strip(char *s){int
i,j;for(i=0;s[i];i++){if(s[i]==' '){for(j=i;s[j];j++){s[j]=s[j+1];}i--;}}}int main (void){char s[200];bzero(s, 200);printf("input:");fgets(s, 200,
stdin);strip(s);printf("%s",s);}。

相关文档
最新文档