73
题目:
请补充main函数,该函数的功能是:输出一个N*N矩阵,要求非对角线上的元素赋值0,对角线元素赋值1。
注意:部分源程序如blank.c给出。
仅在横线上填入所编写的若干表达式或语句,勿改动函数中的其它任何内容。
#include
#define N 10
main()
{
int bb[N][N];
int i,j,n;
clrscr();
printf(" \nInput n:\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***** the result ******* \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
typedef struct
{
char name[10];
int age;
}STD;
STD fun(STD std[], int n)
{
STD max;
int i;
max= ___1___;
for(i=1; i
if(max.age<___2___)
max=std[i];
return max;
}
main( )
{
STD std[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15 };
STD max;
max=fun(std,5);
printf("\nThe result: \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( )
{
int i,n;
long s=0,t=1;
clrscr();
printf("\nInput n:\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
#define N 80
void fun(char s[],int n)
{
int i,j;
char ch;
for(i=0;i
for(j=___1___;j
if(s[i]
{
ch=s[j];
___2___;
s[i]=ch;
}
}
main()
{
int i=0,strlen=0;
char str[N];
clrscr();
printf("\nInput a string:\n");
gets(str);
while(str[i]!='\0')
{
strlen++;
i++;
}
fun(str,strlen);
printf("\n********* display string *********\n");
puts(str);
}
最优质的服务,最合适的价位,最满意服务等着你,淘宝网!
解答
73
分析:
题目要求输出一个N*N矩阵,要求非对角线上的元素赋值0,对角线元素赋值1。此题关键的地方就是要正确表达对角线元素的下标。对角线存在正对角线和反对角线两个,例如以下矩阵,正对角线元素是:1、7、13、19、25。反对角线元素是:5、9、13、17、21。
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
正对角线元素下标的特征是行、列值相等,例如19的行列下标都是3,注意表示矩阵的二维数组行、列下标都是从0开始的。反对角线元素下标的特征是总行数-行下标-1就等于列数。例如17的行下标为3,列下标为1,即5-3-1=1。
程序注解如下:
#include
#define N 10
main()
{
int bb[N][N];
int i,j,n;
/* clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容 */
clrscr();
printf(" \nInput n:\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***** the result ******* \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
typedef struct
{
char name[10];
int age;
}STD;
STD fun(STD std[], int n)
{
STD max;
int i;
/* 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];
return max;
}
main( )
{
STD std[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15 };
STD max;
max=fun(std,5);
printf("\nThe result: \n");
printf("\nName : %s, Age : %d\n", https://www.wendangku.net/doc/aa8254124.html,,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( )
{
int i,n;
long s=0,t=1;
/* clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容 */
clrscr();
printf("\nInput n:\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
#define N 80
void fun(char s[],int n)
{
int i,j;
char ch;
/* 逐个确定每一段的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()
{
int i=0,strlen=0;
char str[N];
/* clrscr函数的作用是清屏,清除输出窗口中所有已经显示的内容 */
clrscr();
printf("\nInput a string:\n");
/* gets函数的作用是接收键盘输入的字符串,将其放入str参数中 */
gets(str);
/* 统计str字符串的长度,将其放入i变量中 */
while(str[i]!='\0')
{
strlen++;
i++;
}
fun(str,strlen);
printf("\n********* display
string *********\n");
/* puts函数的作用是输出str参数的内容 */
puts(str);
}