2006-2007学年第二学期考试试卷A卷考试科目C语言程序设计考试方式闭卷完成时限2小时拟题人审核人批准人2007年7 月 5 日机械、电气、信息、生化、轻工、经管、理学院2006年级各理工科专业说明:1.应将全部答案写在答卷纸对应的题号处;否则作无效处理;2.编程题应写明题号,若答卷纸不够,请写在背面,不要另添卷纸;3.考试完成后,必须将试卷与答卷同时交回。
一、判断题(10小题,每题1分,共10分;用√表示正确,用×表示错误)1.在循环体内使用break语句和continue语句的作用相同。
2.函数返回值的类型最终取决于函数定义时形参的类型。
3.else语句一定要与if语句配对使用,程序中else语句的个数一定小于或者等于if语句的个数。
4.从狭义角度讲,算法是解决一个问题采取的方法和步骤的描述。
5.1/2的结果是0,所以1.0/2的结果也是0。
6.a=b=c=5可以理解为a=(b=(c=5))。
7.假设有语句int a[10]={1,2,3},*p;p=a;则p++完全等价于a++。
8.for(;;)等价于while(1)语句。
9.假定int类型变量占用两个字节,若有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是6。
10.char *sp ={"welcome"};可以写成char *sp="welcome"; 。
二、单选题(16小题,每题1分,共16分)1.以下数组定义中错误的是:(A) int x[][3] ={0};(B) int x[2][3]={{1,2},{3,4},{5,6}};(C) int x[][3]={{1,2,3},{4,5,6}};(D) int x[2][3]={1,2,3,4,5,6};2.设fp为指向某二进制文件的指针,且已读到此文件末尾,则函数feof(fp)的返回值为:(A)EOF (B)NULL (C) 0 (D)非0值3.有以下程序:main(){int y=10;while(y--) ;printf(“y=%d\n”,y);}程序执行后的输出结果是:(A) y=0; (B)y=-1;(C) y=1 (D)while构成无限循环4. 若有以下宏定义:#define N 2#define Y(n) (N+1)*n则执行语句int z; z=2*N+Y(5);后的值是(A) 50 (B)34 (C)19 (D)无定值5.以下叙述中错误的是:(A)c程序必须由一个或者一个以上的函数组成。
(B)函数调用可以作为一个独立的语句存在。
(C)若函数有返回值,必须通过return 语句返回。
(D)函数形参的值也可以传回给对应的实参。
6.设有如下定义的变量union data{ int i;char ch;float f;}b;则变量b占用内存的字节数是(假设int类型占2个字节,char类型占1个字节,float类型占4个字节):(A) 4 (B)5 (C) 6 (D)77.以下叙述中错误的是:(A)c程序中的#include 和#define 行均不是c语句(B)除逗号运算符外,赋值运算符的优先级最低(C)c程序中, “j++;”是赋值语句(D)c程序经过编译、连接步骤之后,才能形成一个真正可执行的二进制机器指令文件。
8. 能正确表示a 和b 同时为正或同时为负的逻辑表达式是:(A) (a>=0||b>=0)&&(a<0||b<0)(B)(a>=0&&b>=0)&&(a<0&&b<0)(C) (a+b>0)&&(a+b<=0)(D) a*b>09.对于一个正常运行的c程序,以下叙述中正确的是:(A)程序的执行总是从main函数开始,在main函数结束。
(B)程序的执行总是从程序的第一个函数开始,在main函数结束。
(C)程序的执行总是从main函数开始,在程序的最后一个函数中结束。
(D)程序的执行总是从程序中的第一个函数开始,在程序的最后一个函数中结束。
10.设变量x和y均已经正确定义并赋值。
以下if语句中,在编译时将产生错误信息的是:(A)if(x++); (B)if(x>y &&y!=0)(C) if(x>0) x-- (D)if(y<0){;}else y++; else x++;11.设已有定义:float x; 则以下对指针变量p进行定义且赋初值的语句中正确的是:(A)float *p=1024; (B)int *p=(float)x;(C)float p=&x; (D)float *p=&x;12.有以下程序:main(){ int i,j;for(i=1;i<4;i++){ for(j=i;j<4;j++) printf(" %d*%d=%d ",i,j,i*j);printf("\n");}}程序运行后的输出结果是:(A)1*1=1 1*2=2 1*3=3 (B)1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 2*2=4 2*3=63*1=3 3*3=9(C)1*1=1 (D)1*1=11*2=2 2*2=4 2*1=2 2*2=41*3=3 2*3=6 3*3=9 3*1=3 3*2=6 3*3=913.按照c语言规定的用户标识符命名规则,不能出现在标识符中的是:(A)大写字母(B)连接符(C)数字字符(D)下划线14.设有定义:int k=0;以下选项的四个表达式中与其他三个表达式的值不相同的是:(A)k++ (B)k+=1 (C)++k (D)k+115.有以下程序main(){ char ch[]="uvwxyz",*pc;pc=ch;printf(" %c\n",*(pc+5));}程序运行后的输出结果是:(A)z (B)0(C)元素ch[5]的地址(D)字符y的地址16.有以下函数:int fun(char *s){ char * t=s;while(*t++);return (t-s);}该函数的功能是:(A)比较两个字符串的大小(B)计算s所指向字符串占用内存字节的个数(C)计算s所指字符串的长度(D)将s所指字符串复制倒字符串t中16.有以下函数:int fun(char *s){ char * t=s;while(*t++);return (t-s);}该函数的功能是:(A)比较两个字符串的大小(B)计算s所指向字符串占用内存字节的个数(C)计算s所指字符串的长度(D)将s所指字符串复制倒字符串t中三、基础填空题(14空,每空1分,共14分)1.以下程序的输出结果是。
#include <string.h>main(){ printf(“%d\n”,strlen("IBM\n012\n"));}2.执行以下程序后的输出结果是main(){ int a=10;a=(3*5,a+4);printf("a=%d\n",a);}3.排序是数据处理中最常见的问题,它是将一组数据按递增或者递减的次序排列。
排列的算法很多。
常用的算法有法和选择法。
4.设有定义“char web[20];”,要将字符串“”赋值给字符数组web的语句是。
5.一个函数用于接收一个字符和一个整数,并返回一个字符,函数名为love_c,则该函数的原型说明为。
6.c语言规定,简单变量作函数参数时,他和对应的形参之间的数据传递方式是。
7.判断字符变量x是小写英文字母字符的C语言表达式是。
8.程序中调用了库函数strcmp,必须包含头文件。
9.若x=13,y=25,z=-17,则表达式((p=(x<y)?x:y)<z?p:z)的值为。
10.下列程序段的的输出结果是。
char a=010,b=10;printf(" %d\n",a&b<<2);11.表达式中的类型转换分为两种:一种是隐式数据类型转换;另一种是数据类型转换。
12.数组是顺序存储结构,它的存储分配方式是“静态”的。
是一种动态的数据结构,它由若干个结点链接而成,与数组最大的不同是结点在内存中并不占据连续的存储空间。
13.有定义: int a[][3]={1,2,3,4,5,6,8,9,10};则printf("%d",*(*(a+1)+2));语句的输出结果为。
14.以下程序的输出结果是。
main(){ int a,b,c=240;a=c/100%9;b=(-1)&&(-1);printf("%d,%d\n",a,b);}四、程序填空题(10空,每空2分,共20分)1.下面程序运行后输入以-1结束的一批整数,输出其中的最大值。
例如:输入-3 -8 -10 -1后,输出:-3#include<stdio.h>void main(){ int max,x;scanf("%d",&x);if(x!=-1){___ (1) ___;while(__ (2) ____){if(max<x) max =x;___ (3) ____;}printf(" max=%d\n",max);}}(1)(A)x=max (B)max =x(C) x++ (D)max=0(2)(A)x!=-1 (B)max>=0(C)x==-1 (D)max!=-1(3)(A)max=max+1 (B) x=x+1(C)scanf(“%d”,&x); (D) else max =-12.下面程序通过字符指针实现,将s1指向的字符串“I have a dream!”反向拷贝到s2中。
#include<stdio.h>#include <stdlib.h>void main(){char *s1="I have a dream! ",*s2,*t;int len;len= ___ (4) ____;s2=(char *)calloc(len+1,sizeof(char));t=s2;while(*s1!=’\0’)s1++;do{s1--;len--;__ (5) ____;s2++;}while(len>0);*s2=’\0’;s2=t;puts(s2);}(4)(A) strcpy(s1) (B)st(C) *s1 (D) strlen(s1)(5)(A)*s1=*s2 (B)*s2=*s1(C)&s2=&s1 (D)&s1=&s23.建立一个链表,每个结点包括:学号、姓名、性别、年龄。