开启掘金成长之旅!这是我参与「掘金日新计划 · 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;
}
结果如下:
补充:
指针与数组的结合 : 数组名:数组名表示数组的首元素首地址,因此作右值可以直接赋值给指针。 如果有 int a[5]; 则 a和&a[0]都表示数组首元素a[0]的首地址。(指向首元素)而&a则表示数组的首地址。(指向整个数组)。