文档库 最新最全的文档下载
当前位置:文档库 › 吉林大学C语言试题及答案

吉林大学C语言试题及答案

吉林大学农学部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 main( )

{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 main( )

{ 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 main(void)

{ 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;

for(i=0;i

for(j=i+1;j

if(a[i]

}

main()

{int aa[10]={1,2,3,4,5,6,7,8,9,10},i;

sort(&aa[3],5);

for(i=0;i<10;i++)printf("%d,",aa[i]);

printf("\n");

}

程序运行后的输出结果是。

A)1,2,3,4,5,6,7,8,9,10, B)10,9,8,7,6,5,4,3,2,1,

C)1,2,3,8,7,6,5,4,9,10, D)1,2,10,9,8,7,6,5,4,3,

30、以下程序的运行结果是。

#include "stdio.h"

main()

{struct date

{int year,month,day;}today;

printf("%d\n",sizeof(struct date));

}

A)6 B)8 C)10 D)12

31、若有语句int *point, a=4;和 point=&a;下面均代表地址的一组选项是。

A)a,point,*&a B)&*a,&a,*point C)*&point,*point,&a D)&a,&*point,point 32、已定义以下函数

fun(char *p2, char *p1)

{

while((*p2=*p1)!='\0'){p1++;p2++;}

}

函数的功能是。

A)将p1所指字符串复制到p2所指内存空间B)将p1所指字符串的地址赋给指针p2

C)对p1和p2两个指针所指字符串进行比较 D)检查p1和p2两个指针所指字符串中是否有'\0' 33、若执行下述程序时,若从键盘输入6和8时,结果为。

main()

{int a,b,s;

scanf("%d%d",&a,&b);

s=a

if(a

s=b;

s*=s;

printf("%d",s);

}

A)36 B)64 C)48 D)以上都不对

34、下列关于C语言数据文件的叙述中正确的是。

A)文件由ASCII码字符序列组成,C语言只能读写文本文件

B)文件由二进制数据序列组成,C语言只能读写二进制文件

C)文件由记录序列组成,可按数据的存放形式分为二进制文件和文本文件

D)文件由数据流形式组成,可按数据的存放形式分为二进制文件和文本文件

35、有以下程序

void ss(char *s,char t)

{while(*s)

{if(*s= =t)*s=t - 'a'+ 'A';

s++;

}

}

main()

{char str1[100]="abcddfefdbd",c='d';

ss(str1,c); printf("%s\n",str1);

}

程序运行后的输出结果是。

A)ABCDDEFEDBD B)abcDDfefDbD C)abcAAfefAbA D)Abcddfefdbd

二、填空题,答案不写入答题栏的一律不得分!(每空2分,共30分)

36、以下程序段的输出结果是。

main()

{int a=2,b=3,c=4;

a*=16+(b++)-(++c);

printf("%d",a);

}

37~38、若变量n中的值为24,则print()函数共输出行,最后一行有个数。

void print (int n,int aa[])

{int i;

for (i=1; i

{printf ("%6d", aa[i]);

if(!(i%5)) printf ("\n");

}

printf ("\n");

39、调用C语标准库函数时要求用命令。

40、stract函数的作用是。

41、C语言程序的注释可以出现在程序中的任何地方,一个注释以作为开始和结束。

42、设二进制数A是00101101,若想通过异或运算A^B使A的高4位取反,低4位不变,则二进制数B应是。

43、若已知a=10,b=20,则表达式!a

44、设i,j,k均为int型变量,则执行完下面的for语句后,k的值为。

for(i=0, j=10; i<=j; i++, j--)k=i+j;

45~46、下面函数的功能是:找出一维数组元素中最大的值和它所在的下标,最大的值和它所在的下标通过形参传回。数组元素中的值已在主函数中赋予。主函数中x是数组名,n是x中的数据个数,max存放最大值,index存放最大值所在元素的下标。randomize()是初始化随机数生成器函数,rand()返回一个随机数函数。请填空。

#include

#include

void fun(int a[],int n, int *max, int *d)

{ int i;

*max=a[0];

*d=0;

for(i=0; ;i++)

if(*max< )

{*max=a[i];*d=i;}

}

main()

{ int i, x[20], max, index, n=10;

randomize();

for(i=0;i

{

x[i]=rand()%50; printf("%4d",x[i]);

}

printf("\n");

fun(x,n,&max,&index);

printf("Max=%5d,Index=%4d\n", max, index);

}

47、以下程序的输出结果是。

void fun()

{ static int a=0;

a+=2; printf("%d",a);

}

main()

{ int cc;

for(cc=1;cc<4;cc++)fun();

printf("\n");

得分

}

48、以下程序的输出结果是。

#define MAX(x,y)(x)>(y)?(x):(y)

main()

{ int a=5,b=2,c=3,d=3,t;

t=MAX(a+b,c+d)*10;

printf("%d\n",t);

}

49、下列y的值是。

int y; y=sizeof(2.25*4);

50、mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回。请填空。

int mystrlen(char *str)

{ int i;

for(i=0; != ′\0′;i++);

return(i);

}

三、程序设计题。要求程序结构清晰,没有逻辑错误,书写工整,无需写出运行结果。请写在

背面并标明题号(第51题7.5分、第52题10分,共17.5分,按关键步骤评分)

51、输入一个3╳3的整数矩阵,求其对角线元素之和。

52、有10个学生,每个学生的数据包括学号(stu_num,6个字符,如s00101)、姓名(name,8个字符)、三门课程的成绩(score[3],实型)及其平均分(avr,实型,初始时不赋值,)。首

先输入这10个学生的数据,然后再计算每个学生3门课程的平均分,存回avr中,并输出第6号学生的所有

信息。

《C语言程序设计》考试试卷(B卷)答案及评分标准

一、选择题(每题1.5分共52.5分)1.D 2.C 3.B 4.B 5.B 6.B 7.B 8.A

9.C 10.C11.B 12.D 13.B 14.B 15.D16.D 17.B 18.C 19.A 20.D21.C 22.C 23.A 24.C 25.A26.A 27.A 28.D 29.C 30.A31.D 32.A 33.B 34.D 35.B

9`二、填空题(每题2分共30分)

36. 28 37. 5 38. 4 39. Include 40. 连接两个字符数组中的字符串

41. /* */ 42. 1111 0000 43. 1 44. 10 45. i

48. 7 49. 8 50. *(str+i)或者写成str[i]

三、程序设计题。要求程序结构清晰,没有逻辑错误,书写工整,无需写出运行结果。(第51

题7.5分、第52题10分,共17.5分,按关键步骤评分)

51.

#include

void main()

{

int a[3][3],minus;

int i,j;printf("enter data:\n");

for (i=0;i<3;i++)

for (j=0;j<3;j++)

scanf("%d",&a[i][j]);

minus=a[0][0];

for (i=1;i<3;i++)

minus=minus+a[i][i];

printf("minus=%6d\n",minus); }

52.

#include

#define N 10

struct student

{

char stu_num[6];

char name[8];

float score[3];

float avr;

}stu[N];

void main()

{

float sum;

int i,j;

for (i=0;i

{printf("enter information of student %d:\n",i+1);

printf("stu_num:");

scanf("%s",stu[i].stu_num);

printf("name:");

scanf("%s",stu[i].name);

for (j=0;j<3;j++)

{printf("score %d:",j+1);

scanf("%f",&stu[i].score[j]);/*此处的&运算符是指取结构体数组中元素的地址*/

}

}

for (i=0;i

{sum=0;

for (j=0;j<3;j++)

sum+=stu[i].score[j];

stu[i].avr=sum/3.0;

}

printf("stu_num name score1 score2 score3 average_score\n");

printf("%6s%10s",stu[5].stu_num,stu[i].name);

for (j=0;j<3;j++)

printf("%9.2f",stu[5].score[j]);

得分

printf("%8.2f",stu[5].avr); }

相关文档
相关文档 最新文档