春季答案.docx
- 文档编号:12368587
- 上传时间:2023-04-18
- 格式:DOCX
- 页数:13
- 大小:35.57KB
春季答案.docx
《春季答案.docx》由会员分享,可在线阅读,更多相关《春季答案.docx(13页珍藏版)》请在冰豆网上搜索。
春季答案
哈工大2005年春季学期
C语言考试题
题号
一
二
三
四
五
六
七
八
九
十
总分
附加题
分数
说明:
考试成绩分为两部分:
实验占10%,卷面笔试占90%,满分为100分。
本试卷为卷面笔试部分,卷面满分为90分。
注意行为规范,遵守考试纪律!
参考答案
一、填空题(10分,第1小题4分,其余每空1分)
1.设有下列登记表,请采用最佳方式定义一种数据类型来表示这些数据的集合。
其中,配偶姓名用spouseName表示,子女人数用children表示。
参考答案:
structperson
{
charname[20];
charsex;
charprofession[20];
union
{
intsingleAge;
struct
{
charspouseName[20];
intchildren;
}married;
struct
{
intyear;
intmonth;
intdate;
}divorcedDay;
}marital;
intmarryFlag;
};
2.C语言中构造数据类型包括数组、结构体、共用体。
3.C语言中用_0__表示逻辑值“假”,用_非0_表示逻辑值“真”。
4.char*p[10];这条语句的含义是含有10个元素的指针数组p,它的每一个元素都是一个字符指针,可以指向一个字符串。
二、判断下列问题描述正确与否,正确的打“√”,错误的打“×”。
(4分,每题1分)
1.如果在程序中定义静态变量和全局变量时,未明确指明其初始值,那么它们可以在程序编译阶段自动被初始化为0值。
(√)
2.在C语言中,可以用typedef定义一种新的数据类型。
(× )
3.在C语言中,实参与其对应的形参各占独立的存储单元。
(√)
4.在C语言中,函数的定义可以嵌套。
(×)
三、选择题:
(10分,每题2分)
1.若用数组名作为函数调用时的实参,则实际上传递给形参的是(A)。
A.数组的首地址B.数组的第一个元素值
C.数组中全部元素的值D.数组元素的个数
2.判断两个字符串s1和s2相等,应当使用(C)。
A.if(s1==s2)B.if(s1=s2)
C.if(!
strcmp(s1,s2))D.if(strcmp(s1,s2))
3.在while(x)语句中的x与下面条件表达式等价的是:
A。
A.x!
=0B.x==1C.x!
=1D.x==0
4.二维数组a有m行n列,则在a[i][j]之前的元素个数为(B)。
A.j*n+iB.i*n+jC.i*n+j-1D.i*n+j+1
5.设有声明语句:
inta=1,b=0;则执行以下语句后输出为:
B。
switch(a)
{
case1:
switch(b)
{
case0:
printf("**0**");
break;
case1:
printf("**1**");
break;
}
case2:
printf("**2**");
break;
}
A)**0**B)**0****2**
C)**0****1****2**D)有语法错误
四、写出下列程序的运行结果。
(6分,每题3分)
1.#include
voidFun(int*y)
{
printf("*y=%d\n",*y);
*y=20;
printf("*y=%d\n",*y);
}
main()
{
intx=10;
printf("x=%d\n",x);
Fun(&x);
printf("x=%d\n",x);
}
运行结果是:
x=10
*y=10
*y=20
x=20
2.#include
intFun(intx)
{
staticinty=0;
y+=x;
returny;
}
main()
{
intx=10,y=0,k;
for(k=0;k<2;k++)
{
y=Fun(x);
printf("y=%d\n",y);
}
}
运行结果是:
y=10
y=20
3.#include
main()
{
chara[]="programming",b[]="language";
char*p1,*p2;
inti;
p1=a;
p2=b;
for(i=0;i<7;i++)
{
if(*(p1+i)==*(p2+i))
printf("%c",*(p1+i));
}
printf("\n");
}
运行结果是:
ga
五、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。
(10分,每空2分)
1.下面这个程序用于读入5个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。
读入5个数据后,程序结束运行。
#include
main()
{
inti,n;
for(i=1;i<=5;i++)
{
printf("Pleaseentern:
");
scanf("%d",&n);
if(n<=0)____continue___;
printf("n=%d\n",n);
}
printf("Programisover!
\n");
}
2.韩信点兵。
韩信有一队兵,他想知道有多少人,便让士兵排队报数:
按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。
下面程序的主要功能是计算韩信至少有多少兵。
#include
main()
{
intx=1;
intfind=0;
for(x=1;_!
flag__;x++)
{
if(x%5==1&&x%6==5&&x%7==4&&x%11==10)
{
printf("x=%d\n",x);
__flag=1___;
}
}
}
3.下面程序是计算字符串中实际字符的个数,即实现和字符串处理函数strlen相同的功能。
unsignedintMyStrlen(charstr[])
{
unsignedintlen=0,i;
for(i=0;str[i]!
='\0';i++)
{
len++;
}
returnlen;
}
注意行为规范,遵守考试纪律!
六、在下面这个程序中,要求其实现的功能是对用户输入的任意整数计算其阶乘,输入小于等于-1的数时退出程序。
下面给出的是一个有错误的程序,请找出其中的错误,并改正之。
(10分)
#include
#defineEND-1;//错误,改成:
#defineEND-1//(1分)
longFactorial(intx);
main()
{
intx;
while
(1);//错误,改成:
while
(1)//(1分)
{
printf("inputx:
);//错误,改成:
printf("inputx:
");//(1分)
scanf("%d",x);//错误,改成:
scanf("%d",&x);//(1分)
if(x<=END)
break//错误,改成:
break;//(1分)
else
printf("%d!
=%d\n",x,Factorial(x));//错误,改成:
printf("%d!
=%ld\n",x,Factorial(x));//(1分)
}
}
longFactorial(intx)
{
inti;
intresult;//错误,改成:
longresult=1;//(2分)
for(i=1,i<=x,i++)//错误,改成:
for(i=1;i<=x;i++)//(1分)
result*=i;
//错误,改成:
returnresult;//(1分)
}
七、编程(40分,第1和2小题各10分,第3小题20分)
1.编程计算1!
+2!
+3!
+……+10!
的值。
参考答案1:
#include
main()
{
longterm=1,sum=0;
inti;
for(i=1;i<=10;i++)
{
term=term*i;
sum=sum+term;
}
printf("1!
+2!
+...+10!
=%ld\n",sum);
}
参考答案2:
#include
main()
{
longterm,sum=0;
inti,j;
for(i=1;i<=10;i++)
{
term=1;
for(j=1;j<=i;j++)
{
term=term*j;
}
sum=sum+term;
}
printf("1!
+2!
+…+10!
=%ld\n",sum);
}
2.从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个数中找到x,则打印“Found!
”;如果找不到,则打印“Notfound!
”。
参考答案:
#include
main()
{
inti,a[10],flag=0;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
printf("inputx:
");
scanf("%d",&x);
for(i=0;i<10;i++)
{
if(a[i]==x)
flag=1;
}
if(flag)
printf("Found!
");
else
printf("Notfound!
");
}
3.从键盘任意输入某班20个学生的成绩,打印最高分,并统计不及格学生的人数。
参考答案1:
#include
main()
{
inti,score[20],max,count;
for(i=0;i<20;i++)
{
scanf("%d",&score[i]);
}
max=score[0];
for(i=0;i<20;i++)
{
if(score[i]>max)
max=score[i];
}
printf("max=%d\n",max);
count=0;
for(i=0;i<20;i++)
{
if(score[i]<60)
count++;
}
printf("count=%d\n",count);
}
参考答案2:
#include
main()
{
inti,score[20],max,count;
for(i=0;i<20;i++)
{
scanf("%d",&score[i]);
}
max=score[0];
count=0;
for(i=0;i<20;i++)
{
if(score[i]>max)
max=score[i];
if(score[i]<60)
count++;
}
printf("max=%d\n",max);
printf("count=%d\n",count);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 春季 答案