文档库 最新最全的文档下载
当前位置:文档库 › C语言试卷2及答案

C语言试卷2及答案

C语言试卷2及答案
C语言试卷2及答案

扬州大学试题纸

系课程 C语言程序设计(A)卷2002—2003学年第2学期

班级_________学号________姓名__________得分___________

一、选择题(每题分,共30分):

1、已知:char a; int b; float c; double d;

则执行语句:c=a+b+c+d; 后,变量c的类型为。

A. char

B. int

C. float

D. double

2、已有定义int x; float y; 且执行scanf(“%2d%f”,&x,&y);语句时,

从第一列开始输入数据12345 67<回车>,则y的值是。

A. 无定值

B. 345.00000

C.

D.

3、设有以下程序段

int x=0; s=0;

while (!x!=0) s+=++x;

printf(“%d”,s);

则。

A. 运行程序段后输出0

B. 运行程序段后输出1

C. 程序段中的控制表达式是非法的

D. 程序段执行无限次

4、若i为整型变量,则以下循环执行次数是。

for(i=2; i==0;) printf(“%d”, i--);

A. 无限次

B. 2次

C. 1次次

5、假设char ch=’a’, *p=&c h; ,以下语句中,有语法错误的是 .

A. (*p)++;

B. ch+=—‘a’+’A’;

C. toupper(ch)=ch;

D. ch++;

6、若说明:char *language[ ]={“VFP”,”C”,”VB”,”VC”,”JAVA”};

则language[2]的值是。

A. 一个字符

B. 一个地址

C. 一个字符串

D. 一个不定值

7、C语言程序中,当调用函数时。

A. 实参和虚参可以共用存储单元

B. 实参和虚参各占一个独立的存储单元

C. 可以由用户指定是否共用存储单元

D. 由计算机系统自动确定是否共用存储单元

8、在程序中要使用语句:printf(“%s\n”, STRING);

输出提示信息:“OK! ”(包括双引号),则应使用宏定义语句。

A. #define STRING “OK!”

B. #define STRING “”OK!””

C. #define STRING \”OK!\”

D.以上三个答案都是错误的

9、数组和链表都可以用于存储一组数据,以下说法不正确的是_____________。

A. 数组占用连续的一块存储区域,链表可能占用若干不连续的存储区域

B. 数组和链表所占用的存储区域均不能在程序运行期间动态分配

C. 数组中的数据可以随机存取或顺序存取,链表中的数据只能顺序存取

D. 数组的长度是固定的,链表的长度是不固定的。

10、已知语句FIL E *fp; char ch= ‘c’;fp=fopen(“”,”w”);如果需要将ch的值保存到一个磁盘文件中,

则以下函数调用形式中,正确的是_____________。

A. fprintf(“%c”,ch);

B. fprintf(“%c”,ch, fp);

C. fprintf(fp,”%c”,ch);

D. fprintf(“”,”%c”,x);

11、以下标识符中,不能

..作为合法的C用户定义标识符的是。

A. For

B. printf

C. getchar

D. sizeof

12、设p为指向结构体变量的指针,num为该结构体中的一个整型成员,y为一整

型变量,则y=++p->num;与等价。

A. ++p;y=p->num;

B. y=(++p)->num;

C. ++(p->num); y=p->num;

D. y=p->num;++y;

13、若要对a进行++运算,则a应具有下面说明。

A. int a[3][2]

B. char *a[ ]={“12”,”ab”};

C. char (*a)( );

D. int b[10], *a=b;

14、以下程序段运行后,a,b的值是

int a,b,d=241;

a= d/100%9;

b=(-1)&&(-1);

A. 6,1

B. 2,1

C. 6,0

D. 2,0

15、以下正确的说明语句是。

A. int *b[ ]={1,2,3};

B. int a[3]={1,2,3},*b[3]={a[0],a[1],a[2]};

C. int a[3],*b[3]={&a[0],&a[1],&a[2]};

D. int a[3][2],(*b)[3];b[0]=&a[2][1];

16、下面语句,合法是。

A. scanf(“%7.2f”,&x);

B. b=getchar(a);

C. if((a=b;)>0) t=a;

D. printf(“%”,”CHINA”);

17、下述程序段中,无语法错误

.....的是。

A. int a=2,b=0;

B. char a=’A’,b=0;

switch(a) switch(a)

{ case b+1:a--;break; { case ‘A’:b++;break;

case b+3:a++;break; case -1 : b=3;

} }

C. int a=2,b=5;

D. #define N 10

switch(b) int a=2,b=0;

{ case b>0: a=1;break; switch(a)

case b= =0:a=0;break; { case N-9: b++;break;

} case 1: b=1;break; }

18、以下说法不正确的是。

A. 在不同函数中可以使用同名变量

B. 形式参数是局部变量

C. 在函数内定义的变量只在本函数范围内有效

D. 在函数内的复合语句中定义的变量只在本函数范围内有效

19、在程序的执行过程中,该程序的某一个函数f中说明的static型变量x有这样的特性

A. x存在于函数f被调用期间且仅能被函数f所用

B. x存在于整个程序执行过程中且仅能被函数f所用

C. x存在于函数f被调用期间且可被所有函数所用

D. x存在于整个程序执行过程中且可被所有函数所用

20、设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执

行的赋值语句是。

A. c=*p1+*p2;B. p2=c;

C. p1=p2;D. c=*p1*(*p2);

二、基本概念题(每题2分,共10分)

1、一个C语言的语句至少应包含一个。一个C源程序至少应包含一个

2、当程序读写数据文件时,需要有声明语句FILE *fp;在该声明语句之前必须包含头文件。

3、 char *p()说明的含义是。

4、只能在循环体中出现的语句是________________。

5、C语言可以处理的文件类型是________文件和________文件。

三、阅读程序写出程序结果(每空2分,共20分):

1、若有int a=1; printf(“%d\n”,a*=a/=-a);

则输出结果为。

2、下面程序的运行结果是。

main()

{ int i, j=1;

for(i=j==2; i<=2*j; i++)

switch (i/j+1)

{ case 0:

case 1: printf(“**”);break ;

case 2: printf("##");

}

}

3、设有以下的宏定义MAX,程序的运行结果为。

#define MAX(a,b) (a>ba+1:b)+1

main()

{ int i=16,j=8,k;

printf("%d\n”,MAX(i,j));

}

4、以下程序输出结果是__________。

enum week{SUN=7,MON=1,WED,TUS,THS,FRI,SAT};

main()

{ printf(“%d”,hour(FRI,SUN)); }

hour(int x,int y)

{ if (y>x) return 24*(y-x);

else return –1;

}

5、程序执行输出的第一行结果是,第四行是。

#include<>

char b[ ]=”program”, *a=”PROGRAM”;

main()

{ int i=0;

printf(“%c%s\n”,*a, b+1);

while(putchar(*(a+i)))i++;

printf(“\ni=%d\n”,i);

while(--i) putchar(*(b+i));

}

6、执行以下程序,输出结果是。

void f1(int x, int y, int *sum )

{ *sum=x+y;

x++; y++;

}

main()

{ void (*f)(); int a=10,b=20, c=100;

f=f1; f(a, b, &c);

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

}

7、程序:

struct s{

long int num; char *name; int *n;

}*p,*q;

int d[5]={100,200,300,400,500};

struct s arr[5]={85001, "wang",&d[0],81005,"wu",&d[1],99003,\

"zhang",&d[2],96004,"tang",&d[3],99001,"meng",&d[4]};

main()

{ p=q=arr;

printf("%ld\n",++p->num); p++;

q+=3;

printf("%d\n",*q->n);

}

程序输出结果的第一行是;第二行是。

8、程序:

long f(long x)

{ if(x<100) return x%100;

else return f(x/100)*10+x%10; }

main()

{ printf(“The result is :%d\n”,f(987654));}

四、完善程序题(每空2分,共30分):

1、假设a数组中的数据已按由小到大的顺序存放,以下程序可把a数组中相同的数据删得只剩下一个,然后输出a 数组。

#define M 10

main()

{ int a[M], i, j, n;

for( i=0; i

scanf(“%d”,&a[i]);

n=i=M-1;

while( i>=0)

{ if(a[i]==a[i-1])

{ for( j= __(1)____ ; j<=n; j++)

a[j-1]=___(2)_____;

n--; }

i--;

}

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

printf( “%4d”, ___(3)______);

}

2、下面的程序利用公式fx(x)=1-x2/2!+x4/4!-x6/6!+……+(-1)n x2n/(2n)!

计算fx(x)的值。精度要求:当通项的绝对值小于等于10-6为止。

#include<>

_______(4)_______

main()

{ int n=1;

float x,sum=0,term=;

scanf(“%f”,&x);

while(___(5)______>=1e-6 )

{ sum+=term;

term*=__(6)____/(n*(n+1));

_____(7)______;

}

printf(“fx(%f)=%6.2f\n”,x,sum);

}

3、输入一个字符串,判断输入的字符串是否为回文。回文是相对中心左右对称的字符串。如:字符串“abcba”是回文,而字符串“abcAb”不是回文。

#include<>

main()

{ char s[100],*s1,*s2;

gets(s);

s1=s2=s;

while(*s2)s2++;

_____(8)________;

while(_____(9)_______)

if(____(10)______)

{printf(“Not rev!”); (11) }

else

{ s1++;s2--;}

if(s1>=s2)printf(“Yes!”);

}

4、设结点的数据结构定义如下:

typedef struct p{

int x,y;

struct p *next;}PNODE;

函数padd功能:由pa,pb分别指向的两个已经存在的链表,生成一个pc指向的新链表并返回该新链表第一个结点的地址。两个已存在的链表均是按结点的y值升序排列的有序表,新生成链表的结点仍按y的值升序排列。新链表生成规则:当在pa 和pb链表中发现y值相同的结点时,则在pc链表中增加一个新结点,新结点的x取值为pa链表中对应结点的x值,新结点的y取值为pa或pb链表中对应结点的y值。

[程序]

(12) padd(PNODE *pa,PNODE *pb)

{PNODE *pcr,*pt,*pc;

pc=NULL;

while (pa!=NULL&&pb!=NULL)

{ if(pa->y==pb->y)

{ pt=(_____(13)_____)malloc(sizeof(PNODE));

pt->x=pa->x;pt->y=pa->y;pt->next=NULL;

if (pc==NULL) pc=pcr=pt;

else

{pcr->next=pt;______(14)______;}

pa=pa->next;pb=pb->next;

}

else if (_____(15)________) pb=pb->next;

else pa=pa->next;

}

return pc;

}

五、改错题(10分)

要求:1、改错时,可以修改语句中的一部分,增加少量的变量说明或编译预处理命令,

但不能增加其它语句,也不能删去整条语句。

2、在答题纸,写出行号及改正后的答案。

3、程序功能为:输入一行字符(最多80个),从第loc个位置开始,截取num个字

符并将其输出。如果loc的值超过输入字符串的长度,则不做截取操作;若从loc

位置起,其后的字符个数不足num个,则截取到字符串结束字符为止。截取操作

由函数cut实现,其形式参数表示:字符串的存放处、截取位置、截取字符个数。

1 #include ""

2 char sub [80];

3 void main()

4 { char *sp,str[80];

5 int loc=0,num=0;

6 scanf("%s%d%d",&str,&loc,&num);

7 sp=cut(str,loc,num);

8 printf("%s\n",sp);

9 }

10 char *cut(char *str,int loc,num)

11 { int k;

12 if(strlen(str)

13 for(k=0;k

14 if(str[loc++]!='\0')

相关文档