二级C语言填空题练习题及答案解析4.docx
《二级C语言填空题练习题及答案解析4.docx》由会员分享,可在线阅读,更多相关《二级C语言填空题练习题及答案解析4.docx(13页珍藏版)》请在冰豆网上搜索。
二级C语言填空题练习题及答案解析4
1.请补全main函数,该函数的功能是:
从键盘上输入3个整数,然后找出最大的数并输出。
main()
{inta,b,c,max;
clrscr();
printf("\nInputthreenumbers:
\n");
scanf("%d,%d,%d",&a,&b,&c);
printf("Thethreenumbersare:
%d,%d,%d\n",a,b,c);
if(a>b)
___1___;
els
___2___;
if(max
___3___;
printf("max=%d\n",max);
}
第一处:
max=a
第二处:
max=b
第三处:
max=c
解析:
若a>b则a较大,将其放入max中;否则将b存于max。
此时,max中存放的就是前两个数中较大的,再将max与c比较。
2.函数fun的功能是:
从三个形参a,b,c中找出中间的那个数,作为函数值返回。
intfun(inta,intb,intc)
{intt;
t=(a>b)?
(b>c?
b:
(a>c?
c:
___1___)):
((a>c)?
___2___:
((b>c)?
c:
___3___))
4.请补全main函数,该函数的功能是:
从键盘输入一组整数,使用条件表达式找出最大的整数,当输入的整数为0时结束。
main()
{intnum[N];
inti=-1;
intmax=0;
clrscr();
printf("\nInputintegernumber:
\n");
do
{i++;
printf("num[%d]=",i);
scanf("%d",___1___);
max=___2___num[i]:
max;
}while(___3___);
printf("max=%d\n",max);
}
第一处:
&num[i]
第二处:
max
第三处:
num[i]!
=0
解析:
掌握求最值的一般方法:
首先假定第一个数最大,从第二个开始与最大值进行比较,若比最大值还大,则替换;否则,保持不变。
此题:
掌握条件表达式的书写、含义。
Max=max
若vmax
i=-1i++循环条件,正确理解。
5.请补全fun函数,该函数的功能是:
求出数组的最大元素在数组中的下标并存放在k所指的存储单元中。
voidfun(int*s,intt,int___1___)
{
inti,max;
max=s[0];
for(i=0;i
if(___2___)
{
max=s[i];
*k=___3___;
}
}
第一处:
*k
第二处:
s[i]>max
第三处:
i
解析:
算法思想与第19题相同。
记住:
函数的参数有两种类型:
值参、变参。
值参相当于一个普通的局部变量。
要通过函数的参数返回值(或返回多个值),需要使用变参,即参数是指针类型。
return仅能返回一个值。
搞清指针、地址、指针所指向变量的值间的关系。
int*S相当于intS[]
1)voidfun(intaa[])
2){inti,j,t;
3)intmax=0,min=0;
4)for(i=0;i
5){
6)if(___1___)
7)max=i;
8)if(___2___)
9)min=i;
10)}
11)t=aa[max];
12)___3___;
13)aa[min]=t;
14)}
第一处:
aa[max]
第二处:
aa[min]>aa[i]
第三处:
aa[max]=aa[min]
解析:
算法思想与第19题相似。
算法思想:
假定最大、最小值是同一个元素(第一个);接下来将后面的元素依次开始比较,如果比最大值还大,则修改最大值;如果比最小值还小,则修改最小值。
此题保存的是最大最小值的下标。
最后,通过变量t,交换最大最小值。
第4行:
循环变量i的值可以从1开始。
7.给定程序中,函数fun的功能是:
将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。
#include
typedefstruct{
charName[4];
intage;
}STD;
STDfun(STDstd[],intn)
{STDmax;
inti;
max=___1___;
for(i=1;i
if(max.age<___2___)max=std[i];
returnmax;
}
main()
{STDstd[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15};
STDmax;
max=fun(std,5);
printf("\nTheresult:
\n");
printf("\nName:
%s,Age:
%d\n",___3___,max.age);
}
第一处:
*std
第二处:
std[i].age
第三处:
max.name
解析:
求最大值。
搞清结构体变量类型声明、变量声明、初始化、赋值、输入、输出的方法。
Max=*std也可以max=std[0]即结构体变量之间可相互赋值。
但不能整体输入输出。
仅能一个数据项、一个数据项地单独进行。
returnt;
}
第一处:
a
第二处:
a
第三处:
b
解析:
条件表达式的理解。
3.请补全fun函数,该函数的功能是把从键盘输入的3个整数按从小到大输出。
main()
{intx,y,z,t;
clrscr();
printf("Inputx,y,z\n");
scanf("%d%d%d",&x,&y,&z);
if(___1___)
{
t=x;
x=y;
y=t;
}/*交换x,y的值*/
if(___2___)
{
t=z;
z=x;
x=t;
}/*交换x,z的值*/
if(___3___)
{
t=y;
y=z;
z=t;
}/*交换z,y的值*/
第一处:
x>y
第二处:
x>z
第三处:
y>z
解析:
3个数排序,两两比较,小的放前,大者放后。
交换。
8.请补全main函数,该函数的功能是:
如果数组aa的前一个元素比后一个元素小,则把它保存在数组bb中并输出。
main()
{inti,n=0;
intaa[N]={45,55,62,42,35,52,78,95,66,73};
intbb[N];
clrscr();
for(i=0;i<___1___;i++)
if(aa[i]
___2___;
printf("\n***displaybb***\n");
for(i=0;i
printf("bb[%d]=-",___3___);
}
第一处:
N-1
第二处:
bb[n++]=aa[i]
第三处:
i,bb[i]
解析:
由于bb[]数组中实际元素个数未知,故需要边比较,边统计。
n作为bb[]数组元素的个数,开始n=0,比较aa[]中相邻两个元素,满足条件则将其放入bb[]中,且个数加1。
9.已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体中,给定程序的功能是找出成绩最低的学生记录,通过形参返回主函数。
typedefstructss
{charnum[10];ints;}STU;
fun(STUa[],STU*s)
{___1___h;
inti;
h=a[0];
for(i=1;i if(a[i].s *s=___3___;
}
第一处:
STU
第二处:
h
第三处:
h
解析:
记住:
要想通过函数的参数返回结果,该参数需要使用指针类型或者数组。
求最小值,算法思想同19题。
第三处:
也可以是s=&h指针赋值。
10.给定程序的功能是求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积。
#include
floatfun(float___1___)
{
return3.14159*___2___/2.0;
}
main()
{floatx;
printf("Enterx:
");
scanf("%f",___3___);
printf("s=%f\n",fun(x));
}
第一处:
r
第二处:
r*r
第三处:
&x
解析:
这题太简单了。
11.请补全main函数,该函数的功能是求方程ax2+bx+c=0的两个实数根。
方程的系数a,b,c从键盘输入,如果判别式(disc=b*b-4*a*c)小于0,则要求重新输入a,b,c的值。
#include
#include
main()
{floata,b,c,disc,x1,x2;
//clrscr();//clearscreen
do
{
printf("Inputa,b,c:
");
scanf("%f,%f,%f",&a,&b,&c);
disc=b*b-4*a*c;
if(disc<0)
printf("disc=%f\nInputagain!
\n",disc);
}while(___1___);
printf("*******theresult*******\n");
x1=___2___;
x2=___3___;
printf("\nx1=%6.2f\nx2=%6.2f\n",x1,x2);
}
第一处:
disc<0
第二处:
(-b+sqrt(disc))/(2*a)
第三处:
(-b-sqrt(disc))/(2*a)
解析:
搞清while循环与do……while的差别。
表达式的正确书写。
加上括号。
此题有一定的问题a=0?
12.请补全main函数,该函数的功能是:
输出方程A+B=52,A+2B=60的一组正整数解,
main()
{inti,j,k;
clrscr();
for(i=0;i<100;i++)
for(j=0;j<100;j++)
if(___1___)
printf("A=-,B=-",___2___);
}
第一处:
i+j==52&&i+2*j==60
第二处:
i,j
解析:
方程:
满足条件的组合就是方程的解。
枚举法。
当方程的个数少于未知数的个数时,一般使用枚举法(多重循环)
13.请补全fun函数,该函数的功能是,判断一个年是否为闰年。
intfun(intn)
{intflag=0;
if(n%4==0)
{
if(___1___)
flag=1;
}
if(___2___)
flag=1;
return___3___;
}
第一处:
n%100!
=0
第二处:
n%400==0
第三处:
flag
解析:
条件表达式的正确书写。
三个if可以缩成一个if
if((n%4==0&&n_0!
=0)||n@0==0)。
前面的括号不加也可以,最好还是加上吧。
flag起标记的作用。
if(flag)等价于if(flag!
=0)
if(!
flag)等价于if(flag==0)
0为假,非0即为真。
14.给定程序的功能是将n个人员的考试成绩进行分段统计,考试成绩放在a数组中,各分段的人数存到b数组中:
成绩为60到69的人数存到b[0]中,成绩70到79的人数存到b[1],成绩为80到89的人数存到b[2],成绩90到99的人数存到b[3],成绩为100的人数存到b[4],成绩为60分以下的人数存到[5]中。
voidfun(inta[],intb[],intn)
{inti;
for(i=0;i<6;i++)b[i]=0;
for(i=0;i<___1___;i++)
if(a[i]<60)b[5]++;
___2___b[(a[i]-60)/10]++;
}
main()
{inti,a[100]={93,85,77,68,59,43,94,75,98},b[6];
fun(___3___,9);
printf("theresultis:
");
for(i=0;i<6;i++)printf("%d",b[i]);
printf("\n");
}
第一处:
i<6
第二处:
else
第三处:
a,b
解析:
数组a实际有9个元素。
数组b实际有6个元素。
理解语句b[(a[i]-60)/10]++;的含义。
动手。