哈工大C语言秋试题xueyr.docx
《哈工大C语言秋试题xueyr.docx》由会员分享,可在线阅读,更多相关《哈工大C语言秋试题xueyr.docx(9页珍藏版)》请在冰豆网上搜索。
![哈工大C语言秋试题xueyr.docx](https://file1.bdocx.com/fileroot1/2023-2/4/1dd88fe4-31ab-4651-8391-a60a8694dc31/1dd88fe4-31ab-4651-8391-a60a8694dc311.gif)
哈工大C语言秋试题xueyr
本次考试为开卷考试,卷面100分,折合为50分计入期末成绩。
如此卷为补考试卷,则按卷面分数记入补考成绩。
如无特殊说明,所有题目都针对标准C,并假设运行环境是32位的x86计算机,WindowsXP操作系统。
一、单项选择题(共10分,每小题2分)
(1)下列不是C语言的关键字的是:
()
A.sizeofB.freeC.signedD.auto
(2)下列说法中不属于数据类型定义的作用的是:
()
A.决定数据存储内存的大小B.决定如何解释内存中的位
C.决定数据可以执行的运算D.决定以何种方式输出数据
(3)与if(x=0)等价的语句是:
()
A.if(0)B.if(x==0)C.if(x!
=1)D.if(x)
(4)关于函数的下列说法正确的是:
()
A.函数内部可以改变实参的值B.函数可以有多个返回值
C.函数调用时将实参的值赋给形参D.函数可以返回其内部变量的地址
(5)已知:
structNode
{
intdata;
structNode*next;
}a,b;
则下列赋值语句正确的为:
()
A.a.next=bB.a->next=bC.a->next=&bD.a.next=&b
二、写出程序的执行结果(共40分,每小题4分)
(1)写出下面程序的执行结果。
#include
main()
{
printf("%d",(1-(10+8/6)*7%4*4)/3);
}
(2)假设输入为“Goodboy,goon!
”,写出下面程序的执行结果。
#include
main()
{
charch;
scanf("%c",&ch);
for(ch='$';ch!
='g';scanf("%c",&ch))
putchar(ch);
}
(3)写出下面程序的执行结果。
#include
main()
{
intk;
for(k=1,printf("%d:
Hi!
\n",k);
printf("k=%d\n",k),k*k<18;
k+=2,printf("Nowkis%d\n",k))
printf("kis%dintheloop\n",k);
}
(4)写出下面程序的执行结果。
#include
#defineMAX(A,B)(A>B)?
A:
B
main()
{
printf("%d\n",MAX(12+3,3*4)+5);
}
(5)写出下面程序的执行结果。
#include
main()
{
inti=20;
while(i++<=65)
{
if(i%20==0)
printf("%ddiv20\n",i);
if(i=65)
printf("%d,end\n",i);
}
}
(6)写出下面程序的执行结果。
#include
main()
{
inta=3,b=2,c=1;
if(a>b)
if(a>c)
printf("%d\n",a);
else
printf("%d\n",b);
else
printf("%d\n",c);
}
(7)写出下面程序的执行结果。
#include
inta[100];
voidfunc(intb[100])
{
printf("%d\n",sizeof(a));
}
main()
{
printf("%d\n",sizeof(a));
func(a);
}
(8)写出下面程序的执行结果。
#include
#include
main()
{
charfood[]="Bread";
char*p;
p=food+strlen(food);
while(--p>=food)
puts(p);
}
(9)写出下面程序的执行结果。
#include
structtree
{
intx;
inty;
}t;
voidfunc(structtreet)
{
t.x=10;
t.y=20;
}
main()
{
t.x=1;
t.y=2;
func(t);
printf("%d%d\n",t.x,t.y);
}
(10)写出下面程序的执行结果。
#include
voidprint(char*str)
{
char*p;
for(p=str;*p!
='\0';p++)
{
if(*p=='a'||*p=='e')
putchar(*p);
else
putchar((*p)--);
}
putchar('\n');
}
main()
{
charstr[]="gameover";
print(str);
print(str);
}
三、改错题(10分)
下面程序统计文件中英文字母个数,文件名通过命令行输入。
请找到并改正其中的任意五行错误或不当的代码,不改正不得分(可以在题目上直接改)。
#include
#include
intmain(intargc,char**argv)
{
charfilename[20];
filename=argv[0];
int*fp=fopen(filename,'wb');
intch;
intcount;
while(ch=fgetc(fp)!
=EOF);
{
if('A'<=ch>='z')
count++;
}
printf("%dletters\n",count);
fclose(filename);
return0;
}
四、程序设计(40分,每小题10分,注意代码风格)。
(1)编写一个程序,读取一系列整数,直到输入0。
输入终止后,程序打印输入的非素数的个数以及这些数的平均值;
(2)生成含有n个随机整数的数组a,其中n为用户输入的大于0的整数,每个元素a[i]满足1然后使用qsort函数对数组a根据每个元素十位上的大小进行由大到小的排序,并将结果输出,如果十位上的数相同,则顺序任意。
(3)打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。
例如:
153是一个“水仙花数”,因为153=13+33+53。
(4)
双(向)链表中有两条方向不同的链,即每个结点中除next域存放后继结点地址外,还增加一个指向其直接前趋的指针域prior,其结构定义如下:
typedefstructDNode
{
intdata;
structDNode*prior,*next;
}DListNode;
实现函数voidDInsertBefore(DListNode*P,intX),在结点P前面插入数据为X的结点S(如图所示)。