C程序设计试题及答案Word格式文档下载.docx
《C程序设计试题及答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C程序设计试题及答案Word格式文档下载.docx(11页珍藏版)》请在冰点文库上搜索。
![C程序设计试题及答案Word格式文档下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/076c2e47-cac1-4437-898e-a2d3d0d3ee5b/076c2e47-cac1-4437-898e-a2d3d0d3ee5b1.gif)
6.{floats;
7.s=2*PI*r;
8.returns;
9.}
10.voidMain()
11.{inta[5],b[5],i;
12.i=2;
13for(inti;
i<
5;
i++)
14.{printf(“\n输入半径r:
”);
15.scanf(“%f”,&
r);
16.b[i]=perimeter();
17.a[i]=r;
18.}
19.printf(“%f”,area(a[i])-area(a[i+1]));
20.}
21.floatarea(floatr)
22.{
23.returnPI*r*r;
24.}
(答题格式:
第x行说明的变量x是(全局/局部)变量,作用域为:
y1-y2,y3-y4,...。
其中y1、y2、y3、y4是语句行号)
3.举例说明给变量一个值的4类方法。
二、(20分)阅读下列程序,指出程序的输出。
1.下列程序计算数组c的各元素之值
#include<
intbelong(intx,int*p,intn);
voidmain()
{inta[10],b[10],c[10];
inti,k,n,m;
FILE*fp;
if(fp=fopen(“”,“rt”))
{printf(“\n不能打开此文件,按任意键退出!
getch();
exit
(1);
}
fscanf(fp,“%d”,&
n);
for(i=0;
n;
i++)fscanf(fp,“%d”,&
a[i]);
m);
m;
b[i]);
fclose(fp);
k=0;
if(belong(a[i],b,m))
{c[k]=a[i];
k++;
printf(“\n数组c的元素为:
\n”);
for(i=0,i<
k;
i++)printf(“%d\t”,c[i]);
intbelong(inte,int*p,intn)
{intj,flag=0;
for(j=0;
j<
j++)
if(e==*(p+j)){flag=1;
break;
returnflag;
文件data.txt的内容为:
6510481223
875234248912
2.下列程序产生并输出一个整数序列
voidfib(intn,int*p)
{
if(n==1){*p=1;
return;
if(n==2){*(p-1)=1;
*p=1;
fib(n-1,p-1);
*p=*(p-1)+*(p-2);
return;
{inta[12],n,i,temp,*p;
printf(“请输入序列中元素个数(至少1个,最多12个):
scanf(“%d”,&
printf(“\n”);
p=&
a[n-1];
fib(n,p);
for(i=0;
=n/2;
{temp=a[i];
a[i]=a[n-i-1];
a[n-i-1]=temp;
for(i=0;
printf(“%d”,a[i]);
运行时与用户的交互为:
请输入序列中元素个数(至少1个,最多12个):
5
三、(10分)下列程序递归求解阶乘函数n!
。
找出其中的错误,并改正之。
intmain()
printf("
=%ld"
fun(4));
longfun(intn)
{n=1;
longlRet;
if(n=0)
printf("
1"
);
lRet=1;
};
else
%d*"
n);
lRet=n*fun(n-1);
returnlRet;
四、(10分)用流程图或N-S图描述求解下列问题的算法:
输入n个整数,输出其中的最小者。
五、(30分)编程题
1.任输入三个浮点数,判断它们是否构成三角形的边。
若构成三角形的边,则输出三角形的面积,否则输出错误信息。
(三角形面积的计算机公式为
,其中a、b、c分别为三条边的长度,s=(a+b+c)/2)。
2.给定结构体类型说明语句如下:
structemployerInfo
{charnam[10];
charsex;
intage;
假设在main()中定义了结构体数组employer,并给它输入了值,其中name输入的是汉字:
structemployerInfoemployer[20];
1)编写一个函数,输出所有李姓雇员的信息。
要求该函数的原型为:
voidLi-employer(structemployerInfo*p);
即,函数的形参是结构体指针。
2)编写另一个函数,按照年龄(age)从大到小对employer数组排序。
voidsorted(structemployerInfop[]);
即,其形参是结构体数组。
答案
一、
1、将字符串s2连接到字符串s1后面,形成新的字符串s1。
2、
第3行中的r是局部变量,作用域是3
第4行中的r是全局变量,作用域是4-21(挖掉22-25)
第6行中的s是局部变量,作用域是6-9
第11行中的a,b数组是局部变量,作用域是11-21
第12行中的i是局部变量,作用域是12-21
第12行中的k是局部变量,作用域是12-13,20-21(挖掉14-19)
第14行中的k是局部变量,作用域是14-19
第22行中的r是局部变量,作用域是22-25
3、初始化。
如,intk=0;
赋值操作(包括赋值表达式、赋值语句、自增、自减)。
如,s=0;
输入语句。
如,scanf(“%d”,&
x);
形参和实参结合,intf(intx){returnx*x;
voidmain(){floaty=5.1234587;
printf(“%f”,f(y));
二、
1、
数组c的元素为:
5481223
53211
三、
(1)函数没有声明;
第一行后加longfun(intn);
(2)longfun(intn)函数中多了n=1;
语句,删除之;
(3)longfun(intn)函数中if(n=0)改为if(n==0);
(4)longfun(intn)函数中else前有分号,删除之;
(5)主函数没有返回值,加上语句return0;
四、(可根据此程序转换成图)
voidmain(void)
intn,i,d,k;
请输入一个整数n:
"
scanf("
%d"
&
请输入一个整数:
d);
k=d;
for(i=1;
i<
n;
{
if(k>
d)
最小的数是:
%d\n"
k);
五、
math.h>
floata,b,c;
doubles,area;
请输入三个实数:
%f%f%f"
a,&
b,&
c);
if((a+b>
c)&
&
(a+c>
b)&
(b+c>
a)&
a>
0&
b>
c>
0)
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
面积等于:
%lf\n"
area);
else{
您输入的三个实数不是三角形的边长!
\n"
exit(0);
(1)
(2)
voidLi_employer(structemployerInfo*p);
voidsorted(structemployerInfop[]);
structemployerInfoemployer[20],*p=employer;
inti;
for(i=0;
=19;
\n请输入一个员工的记录:
%s%c%d"
employer[i].nam,&
employer[i].sex,&
employer[i].age);
Li_employer(p);
sorted(p);
voidLi_employer(structemployerInfo*p)
charn[3]="
李"
;
i<
i++)
if((p+i)->
nam[0]==n[0]&
(p+i)->
nam[1]==n[1])
%s%c%d\n"
(p+i)->
nam,(p+i)->
sex,(p+i)->
age);
voidsorted(structemployerInfop[])
inti,j;
structemployerInfok;
=18;
for(j=i+1;
j<
if(p[i].age<
p[j].age)
{
k=p[i];
p[i]=p[j];
p[j]=k;
}
p[i].nam,p[i].sex,p[i].age);