北 京 交 通 大 学 海 滨 学 院 考 试 试 题 (A 卷)
课程名称:C语言程序设计 2010-2011学年 第二学期 出题教师:计算机教学组
专业: 班级: 姓名: 学号:
答题说明:本试卷共有六道大题,要求所有解答均写在答题卡上,否则无效。
上交试卷时按照发试卷时候的顺序整理试卷,平铺展开上交。
一、选择题(本题共30道题目,每题1分,共30分)
1. 以下叙述正确的是( )。 A)在C程序中,每行中只能写一条语句。B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数。C)在C程序中,无论是整数还是实数,都能被准确无误地表示 。D)在C程序中,%作为运算符时只能用于整数运算。
2. 以下说法错误的是( )。 A)高级语言都是用接近人们习惯的自然语言和数学语言作为语言的表达形式。 B)计算机只能处理由0和1的代码构成的二进制指令或数据。 C)C语言源程序经过C语言编译程序编译之后生成一个后缀为.EXE的二进制文件。 D)每一种高级语言都有它对应的编译程序。
3. 以下不是构成合法标识符的成分是( )。A)字母 B)数字 C)标点符号 D)下划线
4. C语言中运算对象必须是整型的运算符是( )。A)%= B)/ C)= D)<=
5. 若变量已正确定义并赋值,以下符合C语言语法的表达式是( )。A)a:=b+1 B)a=b=c+2 C)int 18.5%3 D)a=a+7=c+b
6. 设变量a是int型,f是float型,i是double型,则执行表达式10+′a′+i*f/a之后,变量a的数据类型为( )。A)int B)float C)double D)不确定
7. 不能进行++和- -运算的数据类型为( )。A)指针 B)整型 C)长整型 D)常量
8. 已知int a=4; 则执行a+=a-=a*a;语句后,a的值为( )。A)36 B)0 C)-24 D)-60
9. 若变量已正确说明为float型,要通过语句scanf("%f%f%f",&a,&b,&c); 如果使变量a的值为10.0,变量b的值为22.0,变量c的值为33.0,则下列不正确的输入形式是 ( )。A)10<回车>22<回车>33<回车> B)10.0,22.0,33.0<回车> C)10.0<回车>22.0 33.0<回车> D)10 22<回车>33<回车>
10. 设有int x=14;则表达式(x++*1/3)的值是( )。A)4 B)5 C)14 D)15
11. 设a为整型变量,不能确定表达数学关系10的为C语言表达式是( )。
A)10 B)a==11|| a==12|| a==13|| a==14
C)a>10&&a<15 D)!(a<=10)&&!(a>=15)
12. 为了避免嵌套的条件分支语句 if--else中的else总是与( )组成成对关系。
A)缩排位置相同的 B)在其之前未配对的if
C)在其之前未配对的最近的if D)在同一行上的if
13. 有以下程序段,执行后输出结果是( )。
int i=1,j=1,k=2;
if((j++||k++)&&i++) printf("%d,%d,%d",i,j,k);
A)1,1,2 B) 2,2,1 C) 2,2,2 D) 2,2,3
14. 请阅读以下程序段,则( )。
int a=0,b=0,c=0;
if(a=b+c)printf("***\n");
else printf("$$$\n");
A)有语法错不能通过编译 B)可以通过编译但不能通过连接
C)输出***<换行> D)输出$$$<换行>
15. 设变量已正确定义,则以下能正确计算f = n!的程序段是( )。
A) f=0; for(i=1;i<=n;i++) B) f=1; for(i=1;i>=2;i--) f*=i;
C) f=1; for(i=n;i>1;i++) D) f=1; for(i=n;i>=2;i--) f*=i;
16. 下面有关for循环的正确描述是( )。
A)for循环只能用于循环次数已经确定的情况
B)for循环是先执行循环体语句,后判断表达式
C)在for循环中,不能用break语句跳出循环体
D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来
17. 以下能正确定义且赋初值的语句是( )。 A)int n1=n2=10; B)char c=32; C)float f=f+1.1; D)double x=12.3E2.5;
18. 下列字符数组长度为5的是( )。(A)char a[]={‘h’, ‘a’, ‘b’, ‘c’, ‘d’}; (B)char b[]= {‘h’, ‘a’, ‘b’, ‘c’, ‘d’, ‘\0’}; (C)char c[10]= {‘h’, ‘a’, ‘b’, ‘c’, ‘d’}; (D)char d[6]= {‘h’, ‘a’, ‘b’, ‘c’, ‘\0’ }
19. 有以下程序段,程序运行后的输出结果是( )。 A)4 4 B)3 3 C)3 4 D)4 3 char p[]={'a', 'b', 'c'}, q[]="abc"; printf("%d %d", sizeof(p),sizeof(q));
20. 有以下程序段,执行后的输出结果是( )。 A)7 5 3 B) 3 5 7 C)3 6 9 D)7 5 1 int i,t[][3]={9,8,7,6,5,4,3,2,1}; for(i=0;i<3;i++) printf(“%d”,t[2-i][i]);
21. 已有定义 int k=2; int * ptr1,* ptr2; 且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是( )。A)k=*ptr1 + *ptr2; B)ptr2=k; C)ptr1=ptr2; D)k=*ptr1*(*ptr2);
22. 下面程序段的运行结果是( )。char *s="abcde"; s+=2; printf("%s",s);A)cde B)字符'c' C)字符'c'的地址 D)无确定的输出结果
23. 函数调用过程,如果函数funA调用了函数 funB,函数funB又调用了函数funB,则( )。A)称为函数的直接递归调用 B)称为函数的间接递归调用C)称为函数的循环调用 D)C语言中不允许这样的递归调用
24. 若有int a[10] , *p=a; 则p+5表示( )。A)元素a[5]的地址 B)元素a[5]的值 C)元素a[6]的地址 D)元素a[6]的值
25. 以下叙述中正确的是 ( )。A) 全局变量说明为static存储类,其作用域将被扩大B) 局部变量说明为static存储类,其生存期将得到延长C)任何存储类的变量在未赋初值时,其值都是不确定的D)形参可以使用的存储类说明符与局部变量完全相同
26. 以下能正确定义二维数组的是( )。(A)int a[][4]; (B)int a[][4]=2{2*3};(C)int a[][4]={}; (D)int a[4][4]={{1},{2},{3,4}};
27. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。 A) 地址传递 B) 单向值传递 C) 由实参传给形参,再由形参传回实参 D) 传递方式由用户指定
28. 以下程序的输出结果是( )。 #include
29. C语言结构体类型变量在程序执行期间( )。A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中C)部分成员驻留在内存中 D)没有成员驻留在内存中
30. 以下程序的输出结果是( )。 struc STU{ char name[10]; int num; }; void f1(struct STU c) { struct STU b={“LiSiGuo”,2043}; c=b; } main( ) { struct STU a={“YangSan”,2041}; f1(a); printf(“%s,%d”,a.name , a.num ); }执行后的输出结果是A)YangSan,2041 B)YangSan,2043 C)LiSiGuo,2041 D)LiSiGuo,2043
二、填空题(本题共10个空,每空1分,共10分)
1. 在内存中,存储字符’x’要占用1个字节,存储字符串″X″要占用 个字节。
2. C语言中, 语句的作用是继续程序中的下一个循环。
3. 字符串存储时,末尾被系统自动加上 字符。
4. 若有定义int a[3][3]={1,2,3,4,5};则a[2][1]的值为 。
5. 在C语言中,形参的缺省存储类是 。
6. C语言中,数组在内存中占一片 的区域,由 代表它的首地址。
7. 若有定义语句 int b[10] , *p=b ; 在程序中引用数据元素b[i]的四种形是: , , 和x[i](假设i已正确说明并赋值)。
三、判断题(本题共13个题,每题1分,共13分。对的画对号,错的画叉号)
1. 在C程序中,else的个数不能多于if的个数。( )
2. 变量的指针就是变量的地址。( )
3. 假设int x=10/3,则x的取值为3.333333333333。( )
4. 一个C程序可以有很多个函数。( )
5. 定义数组时,数组长度可以是变量。( )
6. 运行语句int a=0; while(++a) printf(“%d”,a); 可以输出变量a的值。( )
7. 指针变量不可以作为函数的参数。( )
8. 语句char ch =’\n’;是正确的定义初始化语句。( )
9. 运行语句static int a; printf(”%d”,a);无法输出结果,因为a没有赋值。()
10. break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。( )
11. 数据类型的转换分为两种:一种属自动转换,另一种是强制转换。( )
12. 数组名可以作函数的参数,传递的是数组的第一个元素的内存地址。( )
13. 任何算法都必须有至少一个输入数据。( )
四、写出程序的运行结果(本题共3道题目,每题3分,共9分)
1. 有以下程序段,运行后的输出结果是 。int k=5,n=0;while(k>0){ switch(k){ default : break; case 1 : n+=k; case 2 : case 3 : n+=k; } k--; }printf("%d",n);
2. 有以下程序,运行后的输出结果是 。#include
3. 有以下程序,运行后的输出结果是 。#include
{ int x[]={0,1,2,3,4,5,6,7,8,9};
int s=0,i,*p = &x[2];
for(i=1;i<6;i+=2) s += *(p+i);
printf("%d",s);
return 0;
}
五、程序填空。(本题共3道题目,每题4分,共12分)
1. 根据注释的内容,把代码补充完整。#include
int main( ){
int f1, f2;
;
//输入数据,运行时输入10,3<回车>,变量f1得到10,f2得到3。
f1 *= f2;
;//输出变量f1的值,要求数据宽度为6位,左对齐。
return 0; }
2. 以下程序用以删除字符串里所有的空格,请填空。
#include
int main( )
{ char s[100]="Our teacher teach C language!";
int i,j;
for(i=j=0;s[i]!='\0';i++)
if( ) { s[j]=s[i]; j++; }
s[j]= ;
printf("%s",s);
return 0; }
3. 下面程序的功能是对一个数组进行从小到大的排序,请填空。 #include
#define N 10
int main()
{ int num[N],i=0;
void sort(int a[],int n);
for(i=0;i
sort( num, N);
printf("\n排序之后:");
for(i=0;i
return 0;
}
//以下函数实现对数组进行从小到大排序。
void sort(int a[],int n)
{
int i,j,t;
for(i=1;i
{
for(j=0; ;j++)
if( )
{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }
}
}
六、编程题。(本题共3道题目,第1题8分,第2题8分,第3题10分,共26分)
1. 编程实现大小写字母的转换,要求如下:
a) 从键盘输入一个字符,要求使用getchar()函数读入字符。
b) 如果输入的是一个小写字母,转换为大写字母。
c) 如果输入的是一个大写字母,转换为小写字母。
d) 如果输入的是一个非字母字符,不变。
e) 输出转换过的字符,使用putchar()函数。
2. 编程实现如下要求:由键盘输入一个长度小于20的字符串保存到一个数组中,利用这个字符串生成一个回文字符串,并将得到的新字符串输出。例如:输入字符串为:abcd,则生成字符串为:abcdcba。
3. 请编写一个函数,它的功能是:求字符串的长度。主函数已给,请把子函数补充完整。
#include
int main()
{ char s1[100]; int len;
int LenString (char *p);
gets(s1);
len = LenString (s1);
printf("%d",len);
return 0; }
//此函数实现求字符串p的长度,并把长度作为函数值返回。
int LenString (char *p)
¥29.8
¥9.9
¥59.8