例如: m=12, n=8时,运行结果为495.000000。
注意:部分源程序存在文件prog1.c中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
prog1.c:
#include float fun(int m, int n){}main()/* 主函数 */{ void NONO ();printf("P=%f\n", fun (12,8));NONO();getchar();}void NONO (){/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, m, n ; float s; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) {//有10组测试数据fscanf(fp, "%d,%d", &m, &n) ;//从文件指针fp指向的文件in.dat获取m,ns = fun(m, n) ;fprintf(wf, "%f\n", s) ;//结果输出到文件指针wf指向的文件out.dat } fclose(fp) ;//关闭 fclose(wf) ;}解题思路: 就是三个阶乘,可以用三个浮点型变量来存三个阶乘的结果,最后一除就可以了
答案:
1.自己想的:
#include float fun(int m, int n){float i=m-n,a=1,b=1,c=1;while(m>1||n>1){ if(i>1){c*=i;i--;}if(m>1){a*=m;m--;}if(n>1){b*=n;n--;}}return a/(b*c);}main()/* 主函数 */{ void NONO ();printf("P=%f\n", fun (11,4));NONO();getchar();}void NONO (){/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, m, n ; float s; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) {fscanf(fp, "%d,%d", &m, &n) ;s = fun(m, n) ;fprintf(wf, "%f\n", s) ; } fclose(fp) ; fclose(wf) ;}2.题库答案:
#include float fun(int m, int n){ int i; float s=1,f=1,h=1; float x; for (i=m;i>=1;i--) s=s*i; /*求出m的阶乘*/ for (i=n;i>=1;i--) f=f*i; /*求出n的阶乘*/ for (i=m-n;i>=1;i--) h=h*i;/*求出m-n的阶乘*/ x=s/(f*h); return (x); }main()/* 主函数 */{ void NONO ();printf("P=%f\n", fun (12,8));NONO();getchar();}void NONO (){/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i, m, n ; float s; fp = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) {fscanf(fp, "%d,%d", &m, &n) ;s = fun(m, n) ;fprintf(wf, "%f\n", s) ; } fclose(fp) ; fclose(wf) ;}我用while,他用的for,区别不大♪(´▽`)
测试:
main函数: in.dat: out.dat:
12.计算出x所指数组中n个幂数之和并返回结构体struct mpow两个成员的意义是: a为幂的底,t为幂的指数。
请编写函数fun,其功能是:计算出x所指数组中n个幂数之和并返回。
例如,当结构体数组用如此数据12, 0,9, 2, 23, 1, 7, 2初始化时,
程序的输出结果应该是:sum= 154.000000
注意:部分源程序存在文件PROG1. C中。
请勿更改主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。
PROG1. C:
#include #pragma warning (disable:4996)#define N 5struct mpow{double a;//a是底int t;//t是指数};double fun(struct mpow *x,int n){}void 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();}void NONO () //系统用于评分测试的函数{/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *in, *out ; struct mpow x[N]; int i,j ; double sum; in = fopen("in.dat","r") ; out = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) {//有10组测试数据for(j=0 ; j < 4; j++) fscanf(in, "%lf,%d,", &x[j].a,&x[j].t) ;//从文件指针in指向的文件in.dat获取结构体数组的元素sum=fun(x,4); fprintf(out, "sum=%lf\n",sum);//输出到文件指针out指向的文件out.dat中 } fclose(in) ;//关闭 fclose(out) ;}解题思路: 写两个循环,外循环遍历结构体数组,内循环得出每个幂数的结果,然后将其累加,注意啊,幂的底可是浮点数的
答案:
1.自己做的
#include #pragma warning (disable:4996)#define N 5struct mpow{double a;int t;};double fun(struct mpow *x,int n){double sum=0;for(int i=0;i