c语言例题7

2023-12-26 16:35:36
  1. 以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值。请填空。

? #define N 3
?? #define M 4
?? void LineMax(int x[N][M])
?? { int i,j,p;

for(i=0; i<N;i++)
????? { p=0;
?????? for(j=1; j<M;j++)
????????? if(x[i][p]<x[i][j]) 【1】 ;????????
?????? printf("The max value in line %d is %d\n", i, 【2】 );???
????? }?

}

?? main()
?? { int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1};
?? ??【3】? ?????
?? }

首先,这段代码定义了一个二维数组?x,并试图找出每一行中的最大值。

让我们逐一分析这段代码:

  1. #define N 3?和?#define M 4:定义了两个宏,N?为3,M?为4。

  2. void LineMax(int x[N][M]): 定义了一个函数?LineMax,该函数接受一个3x4的整数数组?x?作为参数。

  3. 在函数内部:

    • 一个双重循环被用于比较数组?x?的元素。
    • 外部循环 (for(i=0; i<N;i++)) 遍历数组的每一行。
    • 内部循环 (for(j=1; j<M;j++)) 遍历每一行中从第二个元素开始的所有元素(即跳过第一个元素)。这是因为在每次外部循环的开始,我们都将第一个元素的值设置为0,因此它不再是最大值的可能候选。
    • 如果当前元素大于第一个元素的值,那么我们就更新最大值的位置。
  4. 代码中的?【1】 ;?和?【2】?是需要填写的部分。

  5. 在?main()?函数中:

    • 定义了一个3x4的整数数组?x?并进行了初始化。
    • 但这里缺少了调用?LineMax?函数的语句。
  6. 【3】?是需要填写的部分,应该是调用?LineMax?函数的语句。

为了使代码完整和正确,你应该填写以下部分:

  1. 【1】:如果当前元素大于第一个元素的值,那么更新最大值的位置。你可以使用一个简单的赋值语句,例如:p = j;
  2. 【2】:在外部循环中,使用之前设置的?p?来打印当前行的最大值。例如:printf("The max value in line %d is %d\n", i, x[i][p]);
  3. 【3】:在?main()?函数中调用?LineMax?函数。例如:LineMax(x);
#include <stdio.h>  
  
#define N 3  
#define M 4  
  
void LineMax(int x[N][M]) {  
    int i, j, p;  
    for (i = 0; i < N; i++) {  
        p = 0;  
        for (j = 1; j < M; j++) {  
            if (x[i][p] < x[i][j]) {  
                p = j; // 【1】: 更新最大值的位置。
            }  
        }  
        printf("The max value in line %d is %d\n", i, x[i][p]); // 【2】: 打印当前行的最大值。
    }  
}  
  
int main() {  
    int x[N][M] = { {1, 5, 7, 4}, {2, 6, 4, 3}, {8, 2, 3, 1} }; // 【3】: 定义并初始化数组x。
    LineMax(x); // 【3】:使用数组x调用LineMax函数。 
    return 0;  
}

?2、以下函数的功能是计算s=1+1/2!+1/3!+……+1/n!,请填空。

double fun(int n)

{double s=0.0,fac;

int i;

?? 【4】?? ?;

for(i=1;i<=n;i++)

{?? fac= ?【5】? ;??

s=s+1/fac;? }

return ??【6】? ?;?

}

以下是填空后的完整代码:

#include <stdio.h>

double fun(int n)
{
    double s=0.0,fac;
    int i;
    //初始化阶乘为1;
    fac = 1;

    for(i=1;i<=n;i++)
    {
    //计算当前阶乘
    fac = fac * i;

    //计算并累加1/当前阶乘到s中
    s=s+1.0/fac;
    }
    return s; //返回s的值
}

int main(){

    int n;
    printf("请输入一个正整数:");
    scanf("%d",&n);
    printf("s=%f\n",fun(n));
    return 0;
}
 
 
 

解释:

  • fac = 1;:初始化阶乘为1,因为阶乘是从1开始的。
  • fac = fac * i;:在每次循环中,计算当前阶乘。
  • s = s + 1.0 / fac;:将1除以当前阶乘加到s上。注意这里使用1.0来确保进行浮点数除法,而不是整数除法。

3、以下程序的功能是从键盘输入10个整数,利用选择法对其进行排序(从小到大)并

输出结果,请填空。

#include "stdio.h"

main()

{ int i,j,k,p;

? static int s[10];

? int n = 10;

? for(i=0;i<10;i++)

?? scanf("%d",&s[i]);

? for(i=0;i<=n-2;i++)

??? {? 【7】? ;

???? for(j=i+1;j<n;j++)

????? if(s[j]<s[k])? ??【8】? ;

?if(? 【9】? ) { p=s[i];s[i]=s[k];s[k]=p;}

???? }

?? for(i=0;i<10;i++)

printf("%d",s[i]);

?}

为了实现这个程序,我们需要完成以下填空:

  1. #include "stdio.h":这是C语言的标准输入输出库的头文件。
  2. main():程序的主函数。
  3. static int s[10];:定义一个静态数组s,用于存储从键盘输入的10个整数。静态数组在程序运行期间只初始化一次,因此它保留了其上一次的值。
  4. for(i=0;i<10;i++) scanf("%d",&s[i]);:循环10次,每次从键盘读取一个整数并存储在数组s中。
  5. for(i=0;i<=n-2;i++):外层循环,用于遍历数组s中的元素。
  6. { p=s[i];s[i]=s[k];s[k]=p; }:内层循环用于比较数组中的元素。如果找到一个比当前元素小的元素,则交换它们的位置。
  7. for(i=0;i<10;i++) printf("%d",s[i]);:循环10次,每次打印数组s中的一个元素。

所以,完整的代码应该是:

#include <stdio.h>  

int main()
{
	int i, j, k, p;
	static int s[10];
	int n = 10;  // 定义数组的大小为10  
	for (i = 0; i < 10; i++)
		scanf("%d", &s[i]);
	for (i = 0; i <= n - 2; i++) {
		k = i;  // 将k设置为当前外层循环的索引  
		for (j = i + 1; j < n; j++) {
			if (s[j] < s[k]) {  // 如果找到一个更小的元素,则更新k的值  
				k = j;
			}
		}
		if (k != i) {  // 如果找到了一个更小的元素,则交换它们的位置  
			p = s[i];
			s[i] = s[k];
			s[k] = p;
		}
	}
	for (i = 0; i < 10; i++)
		printf("%d ", s[i]);  // 打印排序后的数组元素  
}

文章来源:https://blog.csdn.net/nanshenchao/article/details/135183210
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。