C语言程序设计试卷及答案

C语言程序设计试卷及答案
C语言程序设计试卷及答案

C 语言程序设计 笔试试题

题号 一 二 三 四 五 六

笔试(70%)

合 (30%)

总分

分数

试卷说明:

1. 笔试卷面总分100分,取卷面成绩的70%计入总分;

2. 综合成绩为平时成绩(10%)和实验成绩(20%)之和,占总分的30%;

3. 答题时禁止拆开试卷钉,试卷背面即为草稿纸;

4. 答题时间120分钟。

一、单项选择题。将正确答案填入下面框中。

(本题16分,每小题1分)

题号 1 2 3 4 5 6 7 8 答案 题号 9 10 11 12 13 14 15 16 答案

1. 有以下程序 main() {int a=1,b=0; if(!a) b++;

else if(a==0) if(a) b+=2; else b+=3;

printf(“%d\n ”,b); }则程序输出( A )。 A) 0

B) 1

C) 2

D) 3

2. 有以下定义:int a; long b; double x,y;则下列正确的是( A )。

A) a%(int)(x-y) B) a=x!=y

C) (a*y)%b D) y=x+y=x

3. 若有定义 int (*p)[3];则下列说法正确的是( C )。

A) 定义了基类型为int 的三个指针变量

B) 定义了一个名为 *pt 、具有三个元素的整型数值

注意行为规范 遵守考试纪律

C) 定义了一个名为pt的指针变量,它可以指向每行有三个整数元素的二维数组D) 定义了基类型为int的具

有三个元素的整型数组

4. 有以下程序段

main()

{ int x=10;

while(x--);

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

则最后的输出结果是:( B)。

A) x=0 B) x= -1 C) x=1 D)while构成无限循环

5. 有以下程序:

int fun()

{static int x=1;

x *= 2;

return x;}

main( )

{ int i,s=1 ;

for(i=1 ;i<=2 ;i++) s=fun() ;

printf(“%d\n ”,s) ;}

执行后的输出结果为( D)。

A) 0 B) 1 C) 8 D) 4

6. void main( ){

int k=011;

printf("%d\n",k++); }

}程序输出结果是( D )

A)12 B) 11 C) 10 D) 9

7. 以下C语言标识符中,不合法的是( C)。

A) _2 B) a_b C) a--b D) AaBc

8. C语言允许函数类型默认定义,此时该函数值隐含的类型是( B)。

A) float B) int C) long D) double

9. 以下程序段运行结果是( B)。

enum weekday{aa,bb=2,cc,dd,ee}week=ee;

printf(“%d\n“,week);

A) 4 B) 5 C) ee D) 0

10. 以下对C语言函数的描述中,不正确的是( B )。

A) 不同函数中可以使用相同名字变量B) 函数可以嵌套定义

C) 函数可以没有返回值D) 程序由函数组成

11. 若有定义语句:double x[5]={1.0,2.0,3.0,4.0,5.0},*p=x;则错误引用x数组元素的是( D )。

A) *p B) *x C) *(p+1) D) x[5]

12. 以下程序段运行结果是( B )。

int a=6;

printf(“%d\n“,a>>1);

A) 12 B) 3 C) 6 D) 1

13. 若有定义语句:double x,y,*px,*py;执行了px=&x;py=&y;之后,正确的输入语句是( B )。

A) scanf(“%lf%lf”,x,y); B) scanf(“%lf,%lf”,px,py);

C) scanf(“%f%f”,&x,&y); D) scanf(“%f%f”,x,y);

14. 以下程序运行结果是( D )。

char str[ ]=“abc“;

printf(“%d, %d \n“,strlen(str),sizeof(str));

A)6,3 B) 3,3 C) 10,10 D) 3,10

15. 以下程序段运行结果是( A )。

#define f(x) x*x*x

main( )

{ int a=1,b,c;

b=f(a+1);c=f((a+1));

printf(“%d,%d\n“,b,c);}

A) 4,8 B) 8,4 C) 8,8 D) 4,4

16. 有以下程序:

main()

{FILE *f;

f=fopen(“fa.txt“,“w“);

fprintf(f,“day“);

fclose(f);}

若文本文件fa.txt中原有内容为:hello,则运行以上程序后,文件fa.txt中的内容为( A )。

A)day B) helloday C) daylo D)dayhello

二、填空题。请按序号把答案填入下面框中,

不允许出框线。(本题20分,每空2分)

题号答案题号答案

1 a[row][col] 6 k<=n

2 x%10或x%100%10 7 k++

3 23hE45a8 m%i==0&&n%i==0

4 fun() 9 p=p->next

5 m++ 10 s[i]或’\0’

1. 以下fun函数功能是在N行M列的整型二维数组中,选出一个最大值作为函数值返回。

int fun(int a[N][M])

{ int i,j,row=0,col=0;

for(i=0;i

for(j=0;j

if(a[i][j]>a[row][col]){row=i;col=j;}

return( 【1】);}

2. 以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位,百位的顺序拆分输出。main()

{ int x=123;

printf(“%d-%d-%d\n”, 【2】,x/10%10,x/100);}

3. 下列程序运行时,若输入23he45a<回车>,输出结果是【3】

#include

main()

{ char a=0;ch;

while((ch=getchar())!=’\n’)

{if(a%2!=0&&(ch>=’a’&&ch<=’z’)) ch=ch-‘a’+’A’;

a++;putchar(ch);}

printf(“\n”);}

4. 以下程序的功能是,通过函数fun输入字符并统计输入字符个数。用字符$作为输入结束标志。

#include

long 【4】;/*函数声明语句*/

main()

{ long n;

n=fun(); printf(“n=%ld\n”,n);}

long fun()

{long m;

for(m=0;getchar()!='$'; 【5】);

return m;}

5. 有以下程序段,且变量已正确定义和赋值

for(s=1.0,k=1;k<=n;k++)s=s+1.0/(k*(k+1));

printf("s=%f\n\n",s);

请填空,是下面程序段的功能与之完全相同

s=1.0;k=1;

while( 【6】){s=s+1.0/(k*(k+1)); 【7】;}

printf("s=%f\n\n",s);

6. 以下函数的功能是求两个整数的最大公约数。

fun(int m,int n) { int i=1,t;

for(;i<=m&&i<=n;i++) if( 【8】 )t=i; return(t);}

7. 以下程序将三个struct node 型变量链接成一个链表,并在while 循环中输出链表节点数据域中的数据。 struct node

{int data;struct node *next;} main()

{ struct node a,b,c,*p,*q;

a.data=10;

b.data=20;

c.data=30;p=&a; a.next=&b;b.next=&c;c.next=NULL;q=p; while(p){printf(“%d,”,p->data); 【9】 ;} printf(“\n ”);}

8. 以下程序的功能是:删除字符串中所有的空格。 main()

{ char s[20]=”how are you!”; int i,j;

for(i=j=0;s[i]!=’\0’;i++) if(s[i]!=’ ’){ s[j]=s[i]; j++; } s[j]= 【10】 ;}

三、请把下列程序运行结果填入答案框中,不允

许出框线,用“↙”表示回车。(本题24分,每小题3分) 1. main() { int

i,j,a[ ][2]={1,2,3,4};

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

for(j=i;j<2;j++) printf(“%d ”,a[i][j]); printf(“\n ”);}

题号 1 2

3 4 5 6 7 8 答案

124

43 6

4

121

55555

30

4

2.main()

{char ch[ ]=”453cd34”;

int i,s=0;

for(i=0;ch[i]>’0’&& ch[i]<’9’;i+=2)

s=10*s+ ch[i]-’0’;

printf(“%d\n”,s);}

3. long fib(int n)

{if(n>2) return(fib(n-1)+fib(n-2));

else return(2);}

void main()

{printf(“%d\n”,fib(4));}

4. main( )

{ union example{

struct

{ int x;

int y;

}in;

int a;

int b;

}e;

e.a=2;e.b=1;

e.in.x=e.a+e.b

e.in.y=e.a*e.b;

printf(“%d\n”,e.in.y);}

5. struct NODE

{int k;

struct NODE *link;};

void main()

{ struct NODE m[3],*p=m,*q=m+2;

int i=0;

while(p!=q){

p->k=++i;p++;

q->k=i++;q--; }

b6

q->k=i;

for(i=0;i<3;i++)printf(“%d”,m[i].k);

printf(“\n”);}

6. main()

{ int j,a[]={1,3,5,7,9},*p=a+3;

for(j=3;j;j--)

{ switch(j)

{case 1:

case 2:printf("%d",*(p++));

case 3:printf("%d",*(--p));

}}}

7.main()

{int x;

for(x=1;x<=50;x++)

if(x%2==0)

if(x%3==0)

if(x%5==0)

printf("%d",x);}

8.main(){

int a,b;

for(a=1,b=1;a<=50;a++)

{ if(b>8)break;

if(b%3==1){b+=3;continue;}

b-=5; }

printf("%d\n",a);}

四、根据功能描述改正程序中的错误。

不得增行或删行,不得更改程序结构。(本题10分)

1.下列给定程序中,函数fun的功能是:实现两个整数的交换。例如给a和b分

别输入60和65,输出为:a=65b=60。(本小题6分)

#include

#include

void fun(int a,b)

{

int t;

b7

t=b;b=a;a=t;

}

main()

{

int a,b;

printf("Enter a,b:");

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

fun(&a,&b);

printf("a=%d b=%dn",a,b);

}

答案:

scanf("%d%d",a, b); 改为:scanf("%d%d",&a,&b);------2分

fun(int a,b) 改为:fun(int*a,int *b) ------2分

t=b; b=a; a=t; 改为:t=*b;*b=*a;*a=t; ------2分

2.下述代码定义了一个结构体STRU,用其声明指针变量*s,并完成对这个指针变量的赋值、输出的任务。请指出下列程序的错误,并予以更正(本小题4分)struct STRU

{ int num;

char name[20];

float score;

struct STRU *p1;

};

main()

{

STRU *s=(struct STRU *)malloc(sizeof(struct STRU));

s.num=123;

s->name=”zhang”;

s->score=61.5;

printf(“num=%d,name=%s,score=%f”,s->num,s->name, s->score);

}

答案:

s.num=123; 改为:s->num或(*s).sum------2分

s->name=”zhang”;改为:strcpy(s->name,”zhang”)------2分

b8

b 9

五、请用标准程序流程图描述下列问题的算法

(本题10分)

依次从键盘输入30个学生的《计算机实用基础》成绩,请分别统计不及格的人数和优秀(成绩不小于90)的人数,并打印输出统计结果。 答案:

六、编程题(本题20分)

(考查课做前两道,考试课做后两道)

1. 某个公司采用公用电话传递数据,数据是四位的整数,在

传递过程中是加密的,加密规则如下:每位数字都加上

5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。 (本小题10分)

开始

定义循环变量i 、成绩fScore 、不及格nuPass 和优秀计数器nGood 并初始化i>30i<60输入成绩

nuPass++

nGood++

i>=90

输出统计结果

结束

是否是

1分

1分

1分

1分

1分

i++

1分

1分

1分1分

答案:

main()

{ int a,i,aa[4],t;

scanf("%d",&a);

aa[0]=a%10;

aa[1]=a%100/10;

aa[2]=a%1000/100;

aa[3]=a/1000;

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

{ aa[i]+=5;

aa[i]%=10;

}

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

{

t=aa[i];

aa[i]=aa[3-i];

aa[3-i]=t;

}

for(i=3;i>=0;i--)

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

}

2. 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字

符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。(本小题10分)

例如:若字符串中的内容为****A*BC*DEF*G*******

删除后,字符串内容应该是:ABCDEFG

void fun( char *a)

{

}

main()

{ int s[81];

gets(s);

fun(s);

b10

puts(s);

}

参考答案:

fun( char *a)

{ int i=0; char *p=a;

while(*p!='\0')

{ if(*p!='*')

{ a[i]=*p; i++; }

p++;

}

a[i]='\0';

}

3. 60名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:找出学生的最低分,由函数值返回。(本小题10分)

#include

#include

#define N 60

struct slist

{ double s;

struct slist *next;

};

typedef struct slist STREC;

double fun(STREC *h)

{

}

STREC * creat (double *s)

b11

{ STREC *h,*p,*q;

int i=0;

h=p=(STREC*)malloc(sizeof(STREC));

p->s=0;

while(i

{

q=(STREC*) malloc(sizeof(STREC));

p->s=s[i]; i++; p->next=q; p=q;

}

p->next=NULL;

return h;

}

outlist(STREC *h)

{ STREC *p;

p=h->next;

printf("head");

do

{

printf("->%2.0f ",p->s);

p=p->next;

}while(p!=0);

printf("->NULL\n\n ");

}

main()

{double s[N]={56,89,76,95,91,68,75,85}, max;

b12

STREC *h;

h=creat(s);

outlist(h);

max=fun(h);

printf("min=%6.1f\n ",max);

}

参考答案:

double fun(STREC *h)

{ double max=h->s;

while(h!=NULL)

{

if (maxs)

max=h->s;

h=h->next;

}

return max;

}

饱食终日,无所用心,难矣哉。——《论语?阳货》

b13

相关主题
相关文档
最新文档