计算机二级C语言程序设计题

6,099 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第21天,点击查看活动详情

计算机二级C语言程序设计题

题目:

结构体struct mpow两个成员的意义是:a为幂的底,t为幂的指数。请编写函数fun(),其功能是∶计算出x所指数组中n个幂数之和并返回。例如,当结构体数组用如此数据12,0.,9,2.23,1,7.2初始化时,程序的输出结果是:sum=154.000000.

#include <stdio.h>
#include <stdlib.h>
#define N 5
struct mpow
{
	double a;
	int t;
};
double fun(struct mpow *x, int n)
{
?
}
main()
{
	void NONO();
	struct mpow x[N]={12,0,9,2,23,1,7,2};
	double sum;
	sum=fun(x, 4);
	printf("sum=%lf\n", sum);
	NONO();
	printf("\n\n");
	system("pause");
}
void NONO()
	FILE *rf, *wf;
	struct mpow x[N];
	int i, j;
	double sum;
	rf=fopen("in.dat","r");
	wf=fopen("out.dat","w");
	for(i=0; i<8; i++)
	{
		for(j=0; j<4; j++) 
		{
			fscanf(rf, "%lf,%d,", &x[j].a, &x[j].t);
		}
		sum=fun(x, 4);
		fprintf(wf, "sum=%lf\n", sum);
	}
	fclose(rf);
	fclose(wf);
}

解题思路:

首先遍历数组x中的各个元素,对于当前元素x[i],需要通过循环变量j,求得x[i].a的x[i].t次幂,将求得的结果保存到 power中,然后将 power累加到sum中,最后通过返回值返回sum,需注意0次为1,即 power默认值为1.0.

参考答案:

double fun(struct mpow *x, int n)
{
	int i, j;
	double sum=0.0;
	for(i=0; i<n; i++)
	{
		double power=1.0;
		for(j=0; j<x[i].t; j++)
		{
			power*=x[i].a;
		}
		sum+=power;
	}
	return sum;
}

结果如下:

1.png

补充:

指针与数组的结合 : 数组名:数组名表示数组的首元素首地址,因此作右值可以直接赋值给指针。 如果有 int a[5]; 则 a和&a[0]都表示数组首元素a[0]的首地址。(指向首元素)而&a则表示数组的首地址。(指向整个数组)。