c语言例题7
- 以下程序中,主函数调用了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
,并试图找出每一行中的最大值。让我们逐一分析这段代码:
#define N 3
和#define M 4
:定义了两个宏,N
为3,M
为4。
void LineMax(int x[N][M])
: 定义了一个函数LineMax
,该函数接受一个3x4的整数数组x
作为参数。在函数内部:
- 一个双重循环被用于比较数组
x
的元素。- 外部循环 (
for(i=0; i<N;i++)
) 遍历数组的每一行。- 内部循环 (
for(j=1; j<M;j++)
) 遍历每一行中从第二个元素开始的所有元素(即跳过第一个元素)。这是因为在每次外部循环的开始,我们都将第一个元素的值设置为0,因此它不再是最大值的可能候选。- 如果当前元素大于第一个元素的值,那么我们就更新最大值的位置。
代码中的
【1】 ;
和【2】
是需要填写的部分。在
main()
函数中:
- 定义了一个3x4的整数数组
x
并进行了初始化。- 但这里缺少了调用
LineMax
函数的语句。
【3】
是需要填写的部分,应该是调用LineMax
函数的语句。为了使代码完整和正确,你应该填写以下部分:
【1】
:如果当前元素大于第一个元素的值,那么更新最大值的位置。你可以使用一个简单的赋值语句,例如:p = j;
【2】
:在外部循环中,使用之前设置的p
来打印当前行的最大值。例如:printf("The max value in line %d is %d\n", i, x[i][p]);
【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]);
}
为了实现这个程序,我们需要完成以下填空:
#include "stdio.h"
:这是C语言的标准输入输出库的头文件。main()
:程序的主函数。static int s[10];
:定义一个静态数组s,用于存储从键盘输入的10个整数。静态数组在程序运行期间只初始化一次,因此它保留了其上一次的值。for(i=0;i<10;i++) scanf("%d",&s[i]);
:循环10次,每次从键盘读取一个整数并存储在数组s中。for(i=0;i<=n-2;i++)
:外层循环,用于遍历数组s中的元素。{ p=s[i];s[i]=s[k];s[k]=p; }
:内层循环用于比较数组中的元素。如果找到一个比当前元素小的元素,则交换它们的位置。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]); // 打印排序后的数组元素 }