扬州大学试题纸
系课程 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')