上机填空题7376.docx
《上机填空题7376.docx》由会员分享,可在线阅读,更多相关《上机填空题7376.docx(14页珍藏版)》请在冰豆网上搜索。
上机填空题7376
73
题目:
请补充main函数,该函数的功能是:
输出一个N*N矩阵,要求非对角线上的元素赋值0,对角线元素赋值1。
注意:
部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其它任何内容。
#include
#defineN10
main()
{
intbb[N][N];
inti,j,n;
clrscr();
printf("\nInputn:
\n");
scanf("%d",&n);
for(i=0;ifor(j=0;j{
___1___;
if(i==j)
bb[i][j]=___2___;
if(___3___)
bb[i][j]=1;
}
printf("\n*****theresult*******\n");
for(i=0;i{
printf("\n\n");
for(j=0;jprintf("%4d",bb[i][j]);
}
printf("\n");
}
74
题目:
给定程序中,函数fun的功能是:
将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
typedefstruct
{
charname[10];
intage;
}STD;
STDfun(STDstd[],intn)
{
STDmax;
inti;
max=___1___;
for(i=1;iif(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);
}
75
题目:
请补充main函数,该函数的功能是:
求1+2!
+3!
+…+N!
的和。
例如,1+2!
+3!
+…+5!
的和为153。
注意:
部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其它任何内容。
#include
main()
{
inti,n;
longs=0,t=1;
clrscr();
printf("\nInputn:
\n");
scanf("%d",___1___);
for(i=1;i<=n;i++)
{
t=___2___;
s=___3___;
}
printf("1!
+2!
+3!
...+%d!
=%ld\n",n,s);
}
76
题目:
请补充fun函数,该函数的功能是:
把字符串str中的字符按字符的ASCII码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。
例如,如果输入"abcde",则输出"edcba"。
注意:
部分源程序如blank.c给出。
请勿改动主函数main和其他函数中的任何内容,仅在fun函数的横线上填入所编写的若干表达式或语句。
#include
#defineN80
voidfun(chars[],intn)
{
inti,j;
charch;
for(i=0;ifor(j=___1___;jif(s[i]
{
ch=s[j];
___2___;
s[i]=ch;
}
}
main()
{
inti=0,strlen=0;
charstr[N];
clrscr();
printf("\nInputastring:
\n");
gets(str);
while(str[i]!
='\0')
{
strlen++;
i++;
}
fun(str,strlen);
printf("\n*********displaystring*********\n");
puts(str);
}
最优质的服务,最合适的价位,最满意服务等着你,淘宝网!
解答
73
分析:
题目要求输出一个N*N矩阵,要求非对角线上的元素赋值0,对角线元素赋值1。
此题关键的地方就是要正确表达对角线元素的下标。
对角线存在正对角线和反对角线两个,例如以下矩阵,正对角线元素是:
1、7、13、19、25。
反对角线元素是:
5、9、13、17、21。
12345
678910
1112131415
1617181920
2122232425
正对角线元素下标的特征是行、列值相等,例如19的行列下标都是3,注意表示矩阵的二维数组行、列下标都是从0开始的。
反对角线元素下标的特征是总行数-行下标-1就等于列数。
例如17的行下标为3,列下标为1,即5-3-1=1。
程序注解如下:
#include
#defineN10
main()
{
intbb[N][N];
inti,j,n;
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
clrscr();
printf("\nInputn:
\n");
scanf("%d",&n);
/*逐个处理每一行*/
for(i=0;i/*处理第i行的所有列*/
for(j=0;j{
/*先将元素统统先作为非对角线元素设置为0*/
bb[i][j]=0;
/*正对角线元素设置为1*/
if(i==j)
bb[i][j]=1;
/*反对角线元素设置为1*/
if(j==n-1-i)
bb[i][j]=1;
}
printf("\n*****theresult*******\n");
/*输出处理之后的矩阵*/
for(i=0;i{
printf("\n\n");
for(j=0;jprintf("%4d",bb[i][j]);
}
printf("\n");
}
74
分析:
题目要求在fun函数中将形参std所指结构体数组中年龄最大者的数据作为函数值返回。
为了实现以上要求,程序约定max变量存放数组中年龄最大者的数据,然后先将std数组的第一个元素std[0],也就是*std先放入max变量。
然后使用for循环将std数组中每一个元素的age成员与max变量的age成员进行比较大小,如果比max变量的age成员更加大,则将这个更大的数组元素覆盖max变量中的原有值。
当循环结束的时候,max变量中就保存了题目要求寻找的std所指结构体数组中年龄最大者的数据。
最后将max返回即可。
程序注解如下:
#include
typedefstruct
{
charname[10];
intage;
}STD;
STDfun(STDstd[],intn)
{
STDmax;
inti;
/*max=*std语句将std第一个元素放入max*/
/*因为std是数组名,数组名在C语言中就是指针名*/
/*通过取指针内容的运算符(*)可以取得std[0]的值,所以*std就是std[0]*/
max=*std;
/*逐个检查std数组中每一个元素的age成员与max中age成员的大小*/
for(i=1;iif(max.age/*将更大的值保存在max中,确保max保存了年龄最大值*/
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",max.name,max.age);
}
75
分析:
题目要求在fun函数中求1+2!
+3!
+…+N!
的和。
为了实现题目要求,我们必须知道n!
即n的阶乘的计算公式,即n!
的计算公式是n!
=n*(n-1)*(n-2)*(n-3)*……*3*2*1。
程序首先设置t初始值为1,将t作为每一项阶乘的乘积。
设置s初始值为0,将s作为整个1+2!
+3!
+…+N!
的总和。
然后计算t=t*i=1*1=1,然后计算s=s+t=0+1=1,这样就将1+2!
+3!
+…+N!
中的第一项1计算完成。
然后计算t=t*i=1*2=2,然后计算s=s+t=1+2=3,这样就将1+2!
+3!
+…+N!
中的第二项2!
计算完成。
然后计算t=t*i=2*3=6,然后计算s=s+t=3+6=9,这样就将1+2!
+3!
+…+N!
中的第二项3!
计算完成。
反复进行以上计算过程。
最终s的值就是1+2!
+3!
+…+N!
的总和。
程序注解如下:
#include
main()
{
inti,n;
longs=0,t=1;
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
clrscr();
printf("\nInputn:
\n");
/*输入n变量的值*/
scanf("%d",&n);
/*从1至n进行计算每一项阶乘t和合计值s*/
for(i=1;i<=n;i++)
{
/*计算阶乘i!
的值,将其存入t变量*/
t=t*i;
/*计算1+2!
+3!
+…+i!
总和,将其存入s变量*/
s=s+t;
}
printf("1!
+2!
+3!
...+%d!
=%ld\n",n,s);
}
76
分析:
题目要求在fun函数中把参数字符串s中的字符按字符的ASCII码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。
要实现字符串s中的字符按字符的ASCII码降序排列,需要将字符的ASCII码进行比较大小,而如何实现比较字符的ASCII码呢?
根据C语言的语法,两个char类型的变量进行比较大小就是比较两者的ASCII码。
例如'd'>'b'表达式比较的是'd'和'b'两个字符的ASCII码,由于'd'和'b'的ASCII码分别是100和98,所以'd'的ASCII码大于'b'的ASCII码,所以'd'>'b'表达式成立。
为了实现题目要求,程序使用了以下思路:
假设s数组中存在内容"baedc",首先寻找"baedc"中ASCII码最大的字符放入第一个字符位置。
方法是使用循环将"b"字符即s[0]作为最大值分别与后面其余字符比较大小,如果发现ASCII码比s[0]更大的字符则交换该字符和s[0]的位置。
当循环结束的时候,s[0]存放的位置必然是s数组所有字符中ASCII码最大的字符。
这一次循环结束的时候,s数组中的内容为:
"eabdc"。
然后从s[1]开始重复以上过程,将s[1]作为ASCII码最大的字符。
然后使用循环将s[1]分别与后面其余字符比较大小,如果发现ASCII码比s[1]更大的字符则交换该字符和s[1]的位置。
当循环结束的时候,s[1]存放的位置必然是s数组除了s[0]以外所有字符中ASCII码最大的字符。
这一次循环结束的时候,s数组中的内容为:
"edabc"。
重复以上过程直至整个字符串数组s都按降序排列。
程序注解如下:
#include
#defineN80
voidfun(chars[],intn)
{
inti,j;
charch;
/*逐个确定每一段的ASCII码最大的字符*/
for(i=0;i/*找出第i个字符至最后一个字符之间ASCII码最大的字符放入s[i]*/
for(j=i;j/*如果发现比作为最大值的s[i]更大的字符则交换两者*/
/*确保s[i]存放s[i]至最后一个字符之间ASCII码最大的字符*/
if(s[i]
{
/*以下三句作用是交换s[j]与s[i]*/
/*将s[j]预先保存在ch中,防止丢失数据*/
ch=s[j];
/*将s[i]移动到s[j]中进行保存*/
s[j]=s[i];
/*将预先保存在ch中的原来s[j]的值移动到s[i]进行保存*/
s[i]=ch;
}
}
main()
{
inti=0,strlen=0;
charstr[N];
/*clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容*/
clrscr();
printf("\nInputastring:
\n");
/*gets函数的作用是接收键盘输入的字符串,将其放入str参数中*/
gets(str);
/*统计str字符串的长度,将其放入i变量中*/
while(str[i]!
='\0')
{
strlen++;
i++;
}
fun(str,strlen);
printf("\n*********displaystring*********\n");
/*puts函数的作用是输出str参数的内容*/
puts(str);
}