2007/08二学期C程序设计试卷
说明:考生应将所有答案填写在答卷上,否则无效。 一、填空题(每小题2分,共20分)
⑴ 判断变量a、b中必有且只有一个为0的逻辑表达式为 。
⑵ 若a=52、b=23、c=-19,表达式“((y=(a
⑸ 声明“char s1[20]=\张三56\”后,使字符串s1为\张三\的赋值表达式为 。 ⑹ 在一维float类型数组中查找并返回最大值与最小值的函数f原型是 。 ⑺ 动态分配n个double类型数据存储空间并将首地址返回指针变量p,写作 。 ⑻ x、y均为结构体类型变量,语句“x=y;”在 的条件下可以执行。 ⑼ 执行“n=-37; n^=25; m=n^25;后”,m的值为 。 ⑽ 执行“a=3; b=-7; c=a&b;”后,c的值为 。 二、程序阅读题(每小题8分,共24分)
阅读下列程序,将运行时的输出结果写在答卷纸相应题号下。 1. #include
{ float a[4][3]={{2.3,-1.5,2.6},{1.2,13.4,-3.2},{2.1,1.4,-2},{6.2,1.4,2}}; int i,j,i0=0,j0=0; float c; for(i=0;i<4;i++)
for(j=0;j<3;j++) if(a[i][j]>a[i0][j0]) { i0=i;j0=j;} for(j=0;j<3;j++){ c=a[0][j];a[0][j]=a[i0][j];a[i0][j]=c;} for(i=0;i<4;i++) {
for(j=0;j<3;j++) printf(\ } }
2. #include
printf(\ if(x/10) f(x/10); }
void main() {
f(1234); }
3. #include
int f(char *s)
{ int i; for(i=0;s[i]!='\\0';i++)
if(s[i]=='_') { strcpy(s+i,s+i+1);return 1;} return 0; }
void main()
{ char ss[40]=\ while(f(ss)) puts(ss); }
三、程序填空题(每空2分,共24分)
阅读下列程序说明和程序,将答案填写在答卷纸相应题号下。
1.【程序说明】输入正整数x,求k1、k2、k3、k4、k5使得x=50?k1+20?k2+10?k3+5?k4
+k5,且k1+k2+k3+k4+k5为最小。
⑴ void main()
{ int x,k1,k2,k3,k4,k5;
while(scanf(\⑵ ); k1=x/50; x=xP; k2=x/20; ⑶ ; k3=x/10; x=x; ⑷ ; k5=x%5;
printf(\ }
2
2.【函数说明】下列程序计算方程a?x+b?x+c=0的实根。 #include
root f(float a,float b,float c) { ⑵ ;
x.x1=(-b+sqrt(b*b-4*a*c))/2/a; x.x2=(-b-sqrt(b*b-4*a*c))/2/a; ⑶ ; }
void main() { float a,b,c; root y;
scanf(\ if(b*b-4*a*c<0)
printf(\方程无实根\\n\ else {
y=f(a,b,c); printf(\⑷ ); } }
3.【函数说明】head为stu类型节点组成链表的头指针,删除所有满足条件“cj<60”的节点,函数返回头指针或NULL。
类型标识符stu定义为 struct stu { char name[9]; int cj; stu *next; }; stu *del_stu(stu *head) { ⑴ ; while(1) {
if(head==NULL) return NULL;
if(head->cj<60) { p1=head; ⑵ ; free(p1);} else break; }
p1=head;
while(p1->next!= ⑶ ) { ⑷ ;
if(p2->cj<60) { p1->next=p2->next;free(p2); } }
return head; } 四、程序设计题(1、2小题各10分,第3小题12分,共32分)
1. 编程,输入若干个数x,输出函数x=sin(y)所对应的y值(角度值)。当输入的x之绝对值大于1时运行结束。
2. 编写通用函数,将double类型一维数组按值从小到大排序。
3. 文本文件e:\\c.txt 中,按统一格式存储若干行信息。每行12个字符分别为:学号(8位字符)、考试成绩(3位整数)、交作业次数(1位整数)。编程,更新该文件中的信息,将所有学生成绩再加交作业次数(相加后的成绩若大于100则按100写入)。