文档库 最新最全的文档下载
当前位置:文档库 › 上机填空题73-76

上机填空题73-76

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);

}

相关文档
相关文档 最新文档