吉林大学农学部2008-2009学年第一学期《C 语言程序设计》考试试卷(A 卷)
(考试时间:120分钟,本卷共4页,共印820份
一、选择题(本题共有15道小题,每道小题2分,满分30分) 1.C 语言中,int 类型数据占2个字节,则long 类型数据占( )
A 、1个字节
B 、2 个字节
C 、3个字节
D 、4个字节
2.以下说法中正确的是( )
A 、C 语言程序总是从第一个定义的函数开始执行
B 、在
C 语言程序中,要调用的函数必须在main( )函数中定义 C 、C 语言程序总是从main( )函数开始执行
D 、C 语言程序中的main( )函数必须放在程序的开始部分
3.下面的程序会( )
main( )
{ int x=3,y=0,z=0;
if(x=y+z) printf(“****”); else printf(“####”);
}A 、有语法错误不能通过编译 B 、输出****C 、可以通过编译,但不能通过连接,因而不能运行 D 、输出####
4.以下程序的输出结果是( ) void func (int *a,int b [])
{ b [0]=*a+6; }
main ()
{int a,b [5]; a=0; b [0]=3;
func (&a,b ); printf ("%d \n",b [0]); } A )6 B )7 C )8
D )9
5.以下程序的输出结果是( )
main( )
{ int x=10,y=10,i; for(i=0;x>8;y=++i)
printf(“%d %d ”,x--,y); }
A 、 10 1 9 2
B 、 9 8 7 6
C 、10 9 9 0
D 、10 10 9 1
6.有如下程序
main( )
{static int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0; for(i=1;i<3;i++)
for(j=0;j<=i;j++) s+=a[i][j]; printf(“%d”,s); }
该程序的输出结果是( )
A 、18
B 、19
C 、20
D 、21
7.执行下列程序时输入123<空格>456<空格>789<回车>,输出结果是( )。
#include
{char s [100]; int c, i;
scanf("%c",&c); scanf("%d",&i); scanf("%s",s); printf("%c,%d,%s\n",c,i,s); }
A 、123,456,789
B 、1,456,789
C 、1,23,456,789
D 、1,23,456
8.以下对C 语言函数的描述中,正确的是( )。
A 、C 程序由一个或一个以上的函数组成
B 、
C 函数既可以嵌套定义又可以递归调用
C 、函数必须有返回值,否则不能使用函数
D 、C 程序中调用关系的所有函数必须放在同一个程序文件中
9.以下函数值的类型是( )。
fun ( float x ) {float y; y= 3*x-4; return y; }
A 、int
B 、不确定
C 、void
D 、float
10.一个C 程序由函数A( ),B( ),C( )和函数P( )构成,在函数A( )中分别调用了函数B( )和函数C( ),在函数
……………………………装…………………………订…………………………线……………………………
院系 年级专业 姓名 学号
B( )中调用了函数A(),且在函数P( )中也调用了函数A( ),则可以说( )。
A、函数B( )中调用的函数A( )是函数A( )的间接递归调用
B、函数A( )被函数B( )调用是直接递归调用
C、函数P( )直接递归调用了函数A( )
D、函数P( )中调用的函数A( )是函数P( )的嵌套
11.对于int *pa[5];的描述,()是正确的
A、pa是一个指向数组的指针,所指向的数组是5个int 型元素
B、pa是一个指向某数组中第5个元素的指针,该指针是int 型变量
C、pa[5]表示某个数组的第5个元素的值
D、pa是一个具有5个元素的指针数组,每一个元素是一个int 型指针
12.执行以下程序后,y的值是()
main( )
{ int a[]={2,4,6,8,10};
int y=1,x,*p;
p=&a[1];
for(x=0;x<3;x++)
y+=*(p+x);
printf(“%d\n”,y);
}
A、17
B、18
C、19
D、20
13.有以下程序段
char arr[]=”ABCDE”;
char *ptr;
for(ptr=arr;ptr 输出结果是() A、ABCDE B、A C、E D、ABCDE B D BCDE C C CDE D B DE E A E 14.以下程序的输出结果是( ) main() { union { char i[2]; int k; } r; r.i[0]=2; r.i[1]=0; printf(“%d\n”,r.k); } A、 2 B、 1 C、 0 D、不确定 15.在C程序中,可以把整型数以二进制形式存放到文件中的函数是() A、fprintf函数 B、fread函数 C、fwrite函数 D、fputc函数 9二、填空题(本题共有5道小题,每道小题2分,满分10分) 1.在C语言中使用到的变量,都应先(定义),后(使用)。 2.若有定义:char c=′\010′;则变量c中包含的字符个数为__1个____。 3.函数的返回值是通过函数中的(return )语句获得的。 4.下面函数用来求出两个整数之和,并通过形参传回两数相加之和,请填空。 int add(int x,int y,( int)z) { ( * )=x+y;} 5.设有以下结构类型说明和变量定义,则变量a在内存所占字节数是___22个___。 struct stud {char num[6]; int s[4]; double ave; }a; `三、分析程序结果(本题共有4道小题,每道小题5分,满分20分) 1.main( ) { int x=1,y=2,z=3; x+=y+=z; printf("%d",(x }5 2.main( ) { int a=24,b=16,r; while (b) 得分 { r=a%b; a=b; b=r; } printf("%d",a); }8 3. #include int p(int k,int a[]) {int m,i,c=0; for(m=2;m<=k;m++){ for(i=2;i<=m;i++) if(!(m%i)) break; if(i==m) a[c++]=m; } return c; } #define MAXN 20 main( ) { int i,m,s[MAXN]; m=p(13,s); for(i=0;i printf(“%4d\t”,s[i]); printf(“\n”); } 程序输出结果为( 2 3 5 7 11 );函数int p(int k,int a[])的功能为(求k以内(含k)质数,并依次存入数组a中,返回质数个数) 4.int f(int b[ ],int n) { int i, s=0; for(i=0; i<=n; i+=2) s+=b[i]; return s; } main( ) { int x,a[ ]={2, 3, 4, 5, 6, 7, 8, 9}; x=f (a, 5); printf(“%d”,x ); }12 `#### 四、程序填空题(本题共有4道小题,每道小题5分,满分20分) 1.程序打印如下形式的图形 * * * * * * * * * * main( ) { for(int i=1;i<=4;i++) { for(int j=1; ①;j++) j<=i printf( ②); "*" printf( ③); " \n" } } 2.以下函数返回数组s中最大元素的下标,数组中元素的个数由t传入。 Findmax(int s[],int t) { int m,n; for(n=0,m=n;n if(s[n]>s[m]) ( m=n ); return ( m ); } 3.函数strcpy( )将字符串from复制到字符串to。 void strcpy( char *to ) { while( char *from ); } 4.下面的程序的功能是:利用指针统计一个字符串中,字母、空格、数字、 及其它字符的个数,请填空。 #include { int alpha,space,digit,other; char *p,s[80]; alpha=space=digit=other=0; printf(“input string:\n”); gets(s); for(p=s;*p!=’\0’;p++) if( )alpha++; else if( )space++; else if( )digit++; else other++; printf(“alpha:%d space:%d digit:%d other:%d \n”,alpha,space,digit,other); } `#### 五、编程题(本题共有2道小题,第一题5分,第二题15分,满分20分) 1. 编写一个递归函数,计算1+2+3+......+n 的和。 2. 编程序,实现如下功能: (1)从键盘上输入20个整型数据(注:程序要提示输入方式); (2)输出此20个数据; (3)对此20个数据按从小到大顺序进行排序; (4)输出排序结果。 《C 语言程序设计》考试试卷(A 卷)答案及评分标准 一、选择题(每题2分 共30分) 1.D 2.C 3.D 4.A 5.D 6.A 7.D 8.A 9.A 10.A11.D 12.C 13.D 14.A 15.C 9`二、填空题(每题2分 共10分)1.定义 使用 2.1个 3. return 4.int * 5.22 三、分析程序结果(每题5分 共20分)1.5 2.8 3. 2 3 5 7 11 求k 以内(含k ) 质数,并依次存入数组a 中,返回质数个数。4.12 四、程序填空(每题5分 共20分)1.① j<=i ② "*" ③ "\n" 2.m=n 、m 3.char *to, char *from 或char *from,char *to *to++=*from++4. ( *p>=’A’&& *p<=’Z’) || ( *p>=’a’&& *p<=’z’))、( *p==’ ‘|| *p==’\t’)、 ( *p>=’0’ && *p <=’9’) 五、编程题(每题10分 共20分) 1.int sum(int n) { int s; if (n==0) s=0; else s=sum(n-1)+n; return(s); } 2. #include { int i, index, k, n, temp; int a[20]; /* 定义1个数组a ,它有20个整型元素*/ printf(“Please enter integers: "); for(i = 0; i < 20; i++) scanf("%d", &a[i]); printf("Before sorted: "); for(i = 0; i < 20; i++) /* 输出排序前20个数组元素的值 */ printf("%d ", a[i]); for(k = 0; k < 19; k++){ /* 对20个数排序 */ index = k; for(i = k + 1; i < 20; i++) if(a[i] < a[index]) index = i; temp = a[index]; a[index] = a[k]; a[k] = temp; } printf("After sorted: "); for(i = 0; i < 20; i++) /* 输出排序后20个数组元素的值 */ printf("%d ", a[i]); return 0; 吉林大学农学部2008-2009学年第一学期《C 语言程序设计》考试试卷(B 卷) (一、单项选择题,答案不写入答题栏的一律不得分!(每题1.5分,共52.5分) 1、结构化程序设计的3种结构是 。 A )顺序结构、选择结构、转移结构 B )分支结构、等价结构、循环结构 C )多分支结构、赋值结构、等价结构 D )顺序结构、选择结构、循环结构 2、以下叙述中正确的是 。 A )C 语言比其他语言高级 B ) C 语言可以不用编译就能被计算机识别执行 C )C 语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D )C 语言出现的最晚,具有其他语言的一切优点 3、C 语言中最简单的数据类型包括 。 A )整型、实型、逻辑型 B )整型、实型、字符型 C )整型、字符型、逻辑型 D )字符型、实型、逻辑型 4、若变量已正确定义并赋值,以下符合C 语言语法的表达式是 。 A )a:=b+1 B )a=b=c+2 C )int 18.5%3 D )a=a+7=c+b 5、若变量a,i 已正确定义,且i 已正确赋值,合法的语句是 。A )a= =1 B )++i; C )a=a++=5; D )a=int (i ); 6、已知: int t=0; while (t=1){...} 则以下叙述正确的是 。 A )循环控制表达式的值为0 B )循环控制表达式的值为1 C )循环控制表达式不合法 D )以上说法都不对 7、若变量已正确说明为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.033.0<回车> D )10 22<回车>33<回车> 8、有如下程序: main () { int x=1,a=0,b=0; switch (x ) { case 0: b++; case 1: a++; case 2: a++;b++; } printf ("a=%d,b=%d \n",a,b );} 该程序的输出结果是 A )a=2,b=1 B )a=1,b=1 C )a=1,b=0 D )a=2,b=2 9、有以下程序 main () {int i=1,j=1,k=2; if ((j++||k++)&&i++) printf ("%d,%d,%d \n",i,j,k ); } 执行后输出结果是 。 A )1,1,2 B )2,2,1 C )2,2,2 D )2,2,3 10、有如下程序 main () {float x=2.0,y; if (x<0.0)y=0.0; else if (x<10.0)y=1.0/x; else y=1.0; printf ("%f \n",y );} 该程序的输出结果是 。 A )0.000000 B )0.250000 C )0.500000 D )1.000000 11、有如下程序: main () {int n=9; while (n>6){n--; printf ("%d",n );} } 该程序的输出结果是 。 A )987 B )876 C )8765 D )9876 12、在下列选项中,没有构成死循环的是 。 A )int i=100; while (1) {i=i%100+1; if (i>100)break; } B )for (;;); C )int k=10000; do{k++;}while (k>10000); D )int s=36; while (s )- -s; 13、设int x=1,y=1;表达式(!x||y--)的值是 。 A )0 B )1 C )2 D )-1 14、有以下程序 float fun (int x,int y ) {return (x+y );} main () {int a=2,b=5,c=8; printf ("%3.0f \n",fun ((int )fun (a+c,b ),a-c )); } 程序运行后的输出结果是 。A )编译出错 B )9 C )21 D )9.0 15、若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 。 A )函数调用可以作为独立的语句存在 B )函数调用可以作为一个函数的实参 C )函数调用可以出现在表达式中 D )函数调用可以作为一个函数的形参 16、若有以下调用语句,则不正确的fun 函数的首部是 。 main () { … ……装…………………………订…………………………线…………………………… 年级专业 姓名 学号 int a[50],n; … fun(n, &a[9]); … } A)void fun(int m, int x[])B)void fun(int s, int h[41]) C)void fun(int p, int *s)D)void fun(int n, int a) 17、fseek函数的正确调用形式是。 A)fseek(文件指针,起始点,位移量) B)fseek(文件指针,位移量,起始点)C)fseek(位移量,起始点,文件指针)D)fseek(起始点,位移量,文件指针) 18、若fp是指向某文件的指针,且已读到文件末尾,则函数feof(fp)的返回值是。 A)EOF B)-1 C)1 D)NULL 19、若有说明语句:char c='\72'; 则变量c 。 A)包含1个字符B)包含2个字符C)包含3个字符 D)说明不合法,c的值不确定20、若有说明 int a[3][4];则a数组元素的非法引用是。 A)a[0][2*1]B)a[1][3]C)a[4-2][0]D)a[0][4] 21、设有以下说明语句 struct stu {int a; float b; } stutype; 则下面的叙述不正确的是。 A)struct是结构体类型的关键字B)struct stu是用户定义的结构体类型 C)stutype是用户定义的结构体类型名D)a和b都是结构体成员名 22、在C语言中,引用数组元素时,其数组下标的数据类型允许是。 A)整型常量B)整型表达式 C)整型常量或整型表达式 D)任何类型的表达式 23、若运行时给变量x输入12,则以下程序的运行结果是。 main() {int x,y; scanf("%d",&x); y=x>12?x+10:x-12; printf("%d\n",y); } A)0 B)22 C)12 D)10 24、以下说法正确的是。 A)C语言程序总是从第一个的函数开始执行 B)在C语言程序中,要调用函数必须在main()函数中定义 C)C语言程序总是从main()函数开始执行 D)C语言程序中的main()函数必须放在程序的开始部分 25、表达式0x13^0x17的值是。 A)0x04 B)0x13 C)0xE8 D)0x17 26、有以下程序 #define F(X,Y)(X)*(Y) main() {int a=3, b=4; printf("%d\n", F(a++, b++)); } 程序运行后的输出结果是。 A)12 B)15 C)16 D)20 27、下列程序执行后的输出结果是。 void func(int *a,int b[]) { b[0]=*a+6; } main() {int a,b[5]; a=0; b[0]=3; func(&a,b); printf("%d\n",b[0]); } A)6 B)7 C)8 D)9 28、若有下面的程序段: char s[]="china";char *p; p=s; 则下列叙述正确的是。 A)s和p完全相同B)数组s中的内容和指针变量p中的内容相等 C)s数组长度和p所指向的字符串长度相等D)*p与s[0]相等 29、有以下程序 void sort(int a[],int n) {int i,j,t;