上机填空题7376.docx
- 文档编号:28424362
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:14
- 大小:18.13KB
上机填空题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;i for(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;j printf("%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;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); } 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;i for(j=___1___;j if(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;j printf("%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;i if(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); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 上机 填空 7376