logonew chat icon top
  • icon-chaticon-chat-active搜题/提问
    new chat icon
    新建会话
  • icon-calculatoricon-calculator-active计算器
  • icon-subjecticon-subject-active学科题目
  • icon-pluginicon-plugin-active浏览器插件
  • icon-uploadicon-upload-active上传题库
  • icon-appicon-app-active手机APP
recent chat icon
历史记录
首页
/
计算机
题目

第8章 函数参考答案[知识要点]C语言的基本组成单位函数。C是由一个且仅有一个主函数( main)和若干个子函数组成.子函数可有可无。一个C语言源程序[1]执行,从主函数开始,以主函数结束。C语言称为函数式语言[2],即用户可根据解决问题的算法编成一个相对独立的函数模块,然后采用调用的方法来使用函数[3]。采用了函数模块式的结构的特点:程序的层次结构清晰,便于程序的编写、阅读和调试[4]。C语言提供了极为丰富的库函数,使用这些库函数时,在源程序的头部使用文件包含命令。如:数学函数 #include 字符函数 #include 字符串函数 #include 输入输出函数 #include 动态存储分配[5]函数 #include #include 清屏函数 #include 日期和时间函数 #include 函数可以嵌套调用,而不可嵌套定义。函数的值: 函数的值的数据类型[6]由函数定义时所决定的。调用函数时可有返回值和无返回值两种。有返回值的函数在函数体内必有一条或多条 return 语句,无返回值的函数定义为void类型,且在函数体无return 语句。函数调用[7]时参数的传递:主调函数和被调函数之间数据传递有两种,数值传递和地址传递。[习题参考答案]8.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。[解析]用碾转相除法求最大公约数。最小公倍数=两个整数之积/最大公约数。#include int gcf(int x,int y) /*求两整数的最大公约数*/(int t,r;if (x{t=x;x=y;y=t;)while ((r=x%y)!=0)( x=y;y=r;)return y;}int lcm(int x,int y,int h) /*求两整数的最小公倍数*/(return(x*y/h);)void main ( )( int a,b,df,sc; /* df:所求的最大公约数,sc:所求的最小公倍数*/printf("Input a,bn");scanf(“%d%d”,&a,&b);df=gcf(a,b);printf(“G.C.F=%dn”,df);sc=lcm(a,b,df);printf(“L.C.M=%dn”,sc);)8.2 求方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0,等于0和小于0时的根,并输出结果。从主函数输入a,b,c的值。# include void real_root(float a,float b,float disc) /*求方程的两个不相同的实根*/(float x1,x2;x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("x1=%5.2ftx2=%5.2fn",x1,x2);)void equal_root(float a,float b) /*求方程的两个相同的实根*/( float x1,x2;x1=x2=(-b)/(2*a);printf("x1=%5.2ftx2=%5.2fn",x1,x2);)void imaginary_root(float a,float b,float disc) /*求方程的两个不相同的虚根*/( float p,q;p=-b/(2*a);q=sqrt(disc)/(2*a);printf("x1=%5.2f+%5.2fitx2=%5.2f-%5.2fin",p,q,p,q);)void main ( )(float a,b,c,disc;printf("nInput a,b,c:n");scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c;if (disc>0)real_root(a,b,disc);else if (disc==0)equal_root(a,b);elseimaginary_root(a,b,disc);)8.3写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。[解析]:素数(质数):只能被1和该整数本身整除的数为素数。换句话说,只有两个正因数(1和自己)的自然数即为素数。#include int prime(int n)(int flag=1,i; /*flag:标识变量*/for (i=2;i<=n/2 && flag==1;i++)if (n%i==0)flag=0;return flag ;)void main ( )(int n;printf("nInput an integer:");scanf("%d",&n);if (prime(n))printf("n %d is a prime.",n);elseprintf("n %d is not a prime.",n);)[扩展]求100以内的所有的素数。#include int prime(int n)(int flag=1,i; /*flag:标识变量*/for (i=2;i<=n/2 && flag==1;i++)if (n%i==0)flag=0;return flag ;)void main ( )(int a[100],i,j=0;for(i=2;i<=100;i++)a[i]=i;for(i=2;i<=100;i++)if (prime(a[i])){ if(j++%5==0) printf("n"); /*控制每行输出的个数,每行按5个输出*/printf("%5d",a[i]);)}8.4写一函数,使给定的一个二维数组(3×3)转置,即行列互换。# define N 3#define M 3#include void fun (int a[N][M],int b[M][N])( int i,j,t;for (i=0;ifor (j=0;jb[j][i]=a[i][j];)void main ( )( int i,j,a[N][M],b[M][N];printf("Input %d * %d array:n",N,M);for (i=0;ifor (j=0;jscanf("%d",&a[i][j]);printf("Original array : n");for (i=0;i{for (j=0;jprintf("%4d",a[i][j]);printf("n");)fun(a,b);printf("Convert array:n");for (i=0;i(for (j=0;jprintf("%4d",b[i][j]);printf("n");)}[解析]字符串处理方法,一是字符数组,二是指针,编写函数时,采用地址传递。#include #include void inverse (char str[ ])(char t;int i,j;for (i=0,j=strlen(str)-1;i{ t=str[i];str[i]=str[j];str[j]=t;)}void main ( )(char str[80];void inverse (char str[ ]);printf(“Input string:”);gets(str);inverse(str);puts(str);)8.6写一函数,将两个字符串连接。[解析]:将串2连接在串1 的后面,形成一新串。新串末尾须加字符串结束标志。#include #include char connect(char str1[ ],char str2[ ])(int i,j;for (j=strlen(str1),i=0;str2[i]!='0';i++)str1[i+j]=str2[i];str1[i+j]='0'; /*新串末尾须加字符串结束标志0*/)void main ( )( char s1[80],s2[80];printf("nInput string1:");gets(s1);printf("nInput string2:");gets(s2);connect(s1,s2);puts(s1);) ng is %sn”,s);}8.7 写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出。#include #include void string_copy(char str[])( int i,j=0;for(i=0;str[i]!='0';i++)if(str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'||str[i]=='u')str[j++]=str[i];str[j]='0';puts(str);)void main ( )( char str[80];int n;gets(str);string_copy(str);)8.8写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字之间有一个空格。如输入1990,应输出”1 9 9 0”。#include #include void change(int n,char str[]) /* 该函数的功能将数值转换为数字字符*/( int i;for(i=3;i>=0;i--){ str[i]=n%10+'0';n/=10;)str[4]='0';}void insert(char str[]) /* 该函数的功能插入空格并输出该数字字符*/( int i;for (i=strlen(str);i>0;i--){ str[2*i]=str[i];str[2*i-1]=' ';scanf("%d,%d",&a,&n);printf("a=%d n=%d n",a,n);while(count<=n){tn=tn+a;sn=sn+tn;a=a*10;++count;)printf("a+aa+aaa+…=%dn",sn);}6.4 求 (即1+2!+3!+4!+…+20!)void main()(float n,s=0,t=1;for(n=1;n<=20;n++){t=t*n;s=s+t;)printf("1!+2!+…+20!=%en",s);}阶乘利用递归,再求和:#includeusing namespace std;long Func(int n)(if(1==n)return n;if(n>1)return n*Func(n-1);)main()(long s=0;int i=1;while (i<=6){s=s+Func(i);i++;)cout<}6.5 求 。void main()(int k,N1=100,N2=50,N3=10;float s1=0.0,s2=0.0,s3=0.0;for(k=1;k<=N1;k++)/*计算1到100的和*/{s1=s1+k;)for(k=1;k<=N2;k++)/*计算1到50各数平方和*/(s2=s2+k*k;)for(k=1;k<=N3;k++) /*计算1到10各数倒数之和*/(s3=s3+1.0/k;)printf("总和=%8.2fn",s1+s2+s3);}已通过int main()(int k=1,i=11,j=51;float s=0.0;while(k<=10){s=s+k+k*k+1.0/k;while(k==10 && i<=50){s=s+i+i*i;)puts(str);}void main ( )( char str[80];int n;printf("nInput number :");do /* 该循环控制输入的数为四位整数*/scanf("%d",&n);while(n<999||n>10000);change(n,str);insert(str);)8.9编写一函数,有实参[8]传来一个字符串,统计此字符串中字母,数字,空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。#include #include #include int letter,digit,space,others; /* 说明定义为全局变量[9],全局变量不赋值时自动赋0值 */int count(char str[ ])(int i;for (i=0;str[i]!='0';i++)if (isalpha(str[i]))letter++;else if (isdigit(str[i]))digit++;else if (str[i]==' ')space++;elseothers++;)void main ( )(char str[80];printf("nInput string:n");gets(str);printf("string:");puts(str);count(str);printf("letter:%d,digit:%d,space:%d,others:%dn",letter,digit,space,others);)8.10写一函数,输入一行字符,将此字符串中最长的单词输出。[解析]先确定单词是如何组成的。假若以空格、数字或其它字符作为单词的分隔。#include #include #include char string_long(char str[])(int i,j,k=1,flag=1,max=0,si=0,sj;for(i=0;str[i]!='0';i++){ if(isalpha(str[i]))if(flag){ j=i;flag=0;)elsek++;else(if(max{ max=k;si=j; /* si :记长串的起始位置*/sj=si+k; /* sj :记长串的结束位置*/)flag=1;k=1;}}str[sj]='0';puts(&str[si]);}void main ( )( int i;char string[80];printf("Input one line character:n");gets (string);printf("nThe longest word is :");string_long(string);)8.11写一函数,用“起泡法”对输入的10个字符按由小到大的顺序排列。#define N 10#include #include void sort(char str[])( int i,j;char t;for (j=0;jfor (i=0;iif (str[i]>str[i+1]){t=str[i];str[i]=str[i+1];str[i+1]=t;)}void main ( )(char ch[N];int i,flag;for(i=0;i<10;i++)scanf("%c",&ch[i]);sort(ch);printf("string sorted:n");for (i=0;iprintf("%c",ch[i]);)8.12用牛顿迭代法求根。方程为 ,系数 的值依次为1,2,3,4。求x在1附近的一个实根。求出根后由主函数输出。[解析]牛顿迭代[10]公式:#include #include double f(float a,float b,float c,float d,double x)(return a*x*x*x+b*x*x+c*x+d;)double f1(float a,float b,float c,double x)(return 3*a*x*x+2*b*x+c;)double root(float a,float b,float c,float d,double x)(double x0;do{ x0=x;x=x0-f(a,b,c,d,x0)/f1(a,b,c,x0);)while(fabs(x-x0)>1e-5);return x;}void main()(float a, b, c, d;double x;a=1;b=2;c=3;d=4;x=1;x=root(a,b,c,d,x);printf (" root:%lfn",x);)8.13用递归方法求n阶勒让德多项式的值,递归公式为:#include "stdio.h"double P(double x, int n)( if(n==0) return 1;if(n==1) return x;if(n>1) return ((2*n-1)*x-P(x,n-1)-(n-1)*P(x,n-2))/n;)void main()( double x; int n;double P(double x, int n);scanf("%lf%d",&x, &n);printf("%lf", P(x, n)) ;)8.14输入10个学生5门课的成绩,分别用函数实现下列功能:(1)计算每个学生的平均分;(2)计算每门课的平均分;(3)找出所有50个分数中的最高的分数所对应的学生和课程;(4)求出平均分方差;其中, 为某一学生的平均分。

第8章 函数参考答案[知识要点]C语言的基本组成单位函数。C是由一个且仅有一个主函数( main)和若干个子函数组成.子函数可有可无。一个C语言源程序[1]执行,从主函数开始,以主函数结束。C语言称为函数式语言[2],即用户可根据解决问题的算法编成一个相对独立的函数模块,然后采用调用的方法来使用函数[3]。采用了函数模块式的结构的特点:程序的层次结构清晰,便于程序的编写、阅读和调试[4]。C语言提供了极为丰富的库函数,使用这些库函数时,在源程序的头部使用文件包含命令。如:数学函数 #include 字符函数 #include 字符串函数 #include 输入输出函数 #include 动态存储分配[5]函数 #include #include 清屏函数 #include 日期和时间函数 #include 函数可以嵌套调用,而不可嵌套定义。函数的值: 函数的值的数据类型[6]由函数定义时所决定的。调用函数时可有返回值和无返回值两种。有返回值的函数在函数体内必有一条或多条 return 语句,无返回值的函数定义为void类型,且在函数体无return 语句。函数调用[7]时参数的传递:主调函数和被调函数之间数据传递有两种,数值传递和地址传递。[习题参考答案]8.1写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个整数由键盘输入。[解析]用碾转相除法求最大公约数。最小公倍数=两个整数之积/最大公约数。#include int gcf(int x,int y) /*求两整数的最大公约数*/{int t,r;if (x{t=x;x=y;y=t;}while ((r=x%y)!=0){ x=y;y=r;}return y;}int lcm(int x,int y,int h) /*求两整数的最小公倍数*/{return(x*y/h);}void main ( ){ int a,b,df,sc; /* df:所求的最大公约数,sc:所求的最小公倍数*/printf("Input a,b\n");scanf(“%d%d”,&a,&b);df=gcf(a,b);printf(“G.C.F=%d\n”,df);sc=lcm(a,b,df);printf(“L.C.M=%d\n”,sc);}8.2 求方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0,等于0和小于0时的根,并输出结果。从主函数输入a,b,c的值。# include void real_root(float a,float b,float disc) /*求方程的两个不相同的实根*/{float x1,x2;x1=(-b+sqrt(disc))/(2*a);x2=(-b-sqrt(disc))/(2*a);printf("x1=%5.2f\tx2=%5.2f\n",x1,x2);}void equal_root(float a,float b) /*求方程的两个相同的实根*/{ float x1,x2;x1=x2=(-b)/(2*a);printf("x1=%5.2f\tx2=%5.2f\n",x1,x2);}void imaginary_root(float a,float b,float disc) /*求方程的两个不相同的虚根*/{ float p,q;p=-b/(2*a);q=sqrt(disc)/(2*a);printf("x1=%5.2f+%5.2fi\tx2=%5.2f-%5.2fi\n",p,q,p,q);}void main ( ){float a,b,c,disc;printf("\nInput a,b,c:\n");scanf("%f%f%f",&a,&b,&c);disc=b*b-4*a*c;if (disc>0)real_root(a,b,disc);else if (disc==0)equal_root(a,b);elseimaginary_root(a,b,disc);}8.3写一个判素数的函数,在主函数输入一个整数,输出是否素数的信息。[解析]:素数(质数):只能被1和该整数本身整除的数为素数。换句话说,只有两个正因数(1和自己)的自然数即为素数。#include int prime(int n){int flag=1,i; /*flag:标识变量*/for (i=2;i<=n/2 && flag==1;i++)if (n%i==0)flag=0;return flag ;}void main ( ){int n;printf("\nInput an integer:");scanf("%d",&n);if (prime(n))printf("\n %d is a prime.",n);elseprintf("\n %d is not a prime.",n);}[扩展]求100以内的所有的素数。#include int prime(int n){int flag=1,i; /*flag:标识变量*/for (i=2;i<=n/2 && flag==1;i++)if (n%i==0)flag=0;return flag ;}void main ( ){int a[100],i,j=0;for(i=2;i<=100;i++)a[i]=i;for(i=2;i<=100;i++)if (prime(a[i])){ if(j++%5==0) printf("\n"); /*控制每行输出的个数,每行按5个输出*/printf("%5d",a[i]);}}8.4写一函数,使给定的一个二维数组(3×3)转置,即行列互换。# define N 3#define M 3#include void fun (int a[N][M],int b[M][N]){ int i,j,t;for (i=0;ifor (j=0;jb[j][i]=a[i][j];}void main ( ){ int i,j,a[N][M],b[M][N];printf("Input %d * %d array:\n",N,M);for (i=0;ifor (j=0;jscanf("%d",&a[i][j]);printf("\Original array : \n");for (i=0;i{for (j=0;jprintf("%4d",a[i][j]);printf("\n");}fun(a,b);printf("Convert array:\n");for (i=0;i{for (j=0;jprintf("%4d",b[i][j]);printf("\n");}}[解析]字符串处理方法,一是字符数组,二是指针,编写函数时,采用地址传递。#include #include void inverse (char str[ ]){char t;int i,j;for (i=0,j=strlen(str)-1;i{ t=str[i];str[i]=str[j];str[j]=t;}}void main ( ){char str[80];void inverse (char str[ ]);printf(“Input string:”);gets(str);inverse(str);puts(str);}8.6写一函数,将两个字符串连接。[解析]:将串2连接在串1 的后面,形成一新串。新串末尾须加字符串结束标志。#include #include char connect(char str1[ ],char str2[ ]){int i,j;for (j=strlen(str1),i=0;str2[i]!='\0';i++)str1[i+j]=str2[i];str1[i+j]='\0'; /*新串末尾须加字符串结束标志\0*/}void main ( ){ char s1[80],s2[80];printf("\nInput string1:");gets(s1);printf("\nInput string2:");gets(s2);connect(s1,s2);puts(s1);} ng is %s\n”,s);}8.7 写一个函数,将一个字符串中的元音字母复制到另一个字符串,然后输出。#include #include void string_copy(char str[]){ int i,j=0;for(i=0;str[i]!='\0';i++)if(str[i]=='a'||str[i]=='e'||str[i]=='i'||str[i]=='o'||str[i]=='u')str[j++]=str[i];str[j]='\0';puts(str);}void main ( ){ char str[80];int n;gets(str);string_copy(str);}8.8写一函数,输入一个4位数字,要求输出这4个数字字符,但每两个数字之间有一个空格。如输入1990,应输出”1 9 9 0”。#include #include void change(int n,char str[]) /* 该函数的功能将数值转换为数字字符*/{ int i;for(i=3;i>=0;i--){ str[i]=n%10+'0';n/=10;}str[4]='\0';}void insert(char str[]) /* 该函数的功能插入空格并输出该数字字符*/{ int i;for (i=strlen(str);i>0;i--){ str[2*i]=str[i];str[2*i-1]=' ';scanf("%d,%d",&a,&n);printf("a=%d n=%d \n",a,n);while(count<=n){tn=tn+a;sn=sn+tn;a=a*10;++count;}printf("a+aa+aaa+…=%d\n",sn);}6.4 求 (即1+2!+3!+4!+…+20!)void main(){float n,s=0,t=1;for(n=1;n<=20;n++){t=t*n;s=s+t;}printf("1!+2!+…+20!=%e\n",s);}阶乘利用递归,再求和:#includeusing namespace std;long Func(int n){if(1==n)return n;if(n>1)return n*Func(n-1);}main(){long s=0;int i=1;while (i<=6){s=s+Func(i);i++;}cout<}6.5 求 。void main(){int k,N1=100,N2=50,N3=10;float s1=0.0,s2=0.0,s3=0.0;for(k=1;k<=N1;k++)/*计算1到100的和*/{s1=s1+k;}for(k=1;k<=N2;k++)/*计算1到50各数平方和*/{s2=s2+k*k;}for(k=1;k<=N3;k++) /*计算1到10各数倒数之和*/{s3=s3+1.0/k;}printf("总和=%8.2f\n",s1+s2+s3);}已通过int main(){int k=1,i=11,j=51;float s=0.0;while(k<=10){s=s+k+k*k+1.0/k;while(k==10 && i<=50){s=s+i+i*i;}puts(str);}void main ( ){ char str[80];int n;printf("\nInput number :");do /* 该循环控制输入的数为四位整数*/scanf("%d",&n);while(n<999||n>10000);change(n,str);insert(str);}8.9编写一函数,有实参[8]传来一个字符串,统计此字符串中字母,数字,空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。#include #include #include int letter,digit,space,others; /* 说明定义为全局变量[9],全局变量不赋值时自动赋0值 */int count(char str[ ]){int i;for (i=0;str[i]!='\0';i++)if (isalpha(str[i]))letter++;else if (isdigit(str[i]))digit++;else if (str[i]==' ')space++;elseothers++;}void main ( ){char str[80];printf("\nInput string:\n");gets(str);printf("string:");puts(str);count(str);printf("letter:%d,digit:%d,space:%d,others:%d\n",letter,digit,space,others);}8.10写一函数,输入一行字符,将此字符串中最长的单词输出。[解析]先确定单词是如何组成的。假若以空格、数字或其它字符作为单词的分隔。#include #include #include char string_long(char str[]){int i,j,k=1,flag=1,max=0,si=0,sj;for(i=0;str[i]!='\0';i++){ if(isalpha(str[i]))if(flag){ j=i;flag=0;}elsek++;else{if(max{ max=k;si=j; /* si :记长串的起始位置*/sj=si+k; /* sj :记长串的结束位置*/}flag=1;k=1;}}str[sj]='\0';puts(&str[si]);}void main ( ){ int i;char string[80];printf("Input one line character:\n");gets (string);printf("\nThe longest word is :");string_long(string);}8.11写一函数,用“起泡法”对输入的10个字符按由小到大的顺序排列。#define N 10#include #include void sort(char str[]){ int i,j;char t;for (j=0;jfor (i=0;iif (str[i]>str[i+1]){t=str[i];str[i]=str[i+1];str[i+1]=t;}}void main ( ){char ch[N];int i,flag;for(i=0;i<10;i++)scanf("%c",&ch[i]);sort(ch);printf("string sorted:\n");for (i=0;iprintf("%c",ch[i]);}8.12用牛顿迭代法求根。方程为 ,系数 的值依次为1,2,3,4。求x在1附近的一个实根。求出根后由主函数输出。[解析]牛顿迭代[10]公式:#include #include double f(float a,float b,float c,float d,double x){return a*x*x*x+b*x*x+c*x+d;}double f1(float a,float b,float c,double x){return 3*a*x*x+2*b*x+c;}double root(float a,float b,float c,float d,double x){double x0;do{ x0=x;x=x0-f(a,b,c,d,x0)/f1(a,b,c,x0);}while(fabs(x-x0)>1e-5);return x;}void main(){float a, b, c, d;double x;a=1;b=2;c=3;d=4;x=1;x=root(a,b,c,d,x);printf (" root:%lf\n",x);}8.13用递归方法求n阶勒让德多项式的值,递归公式为:#include "stdio.h"double P(double x, int n){ if(n==0) return 1;if(n==1) return x;if(n>1) return ((2*n-1)*x-P(x,n-1)-(n-1)*P(x,n-2))/n;}void main(){ double x; int n;double P(double x, int n);scanf("%lf%d",&x, &n);printf("%lf", P(x, n)) ;}8.14输入10个学生5门课的成绩,分别用函数实现下列功能:(1)计算每个学生的平均分;(2)计算每门课的平均分;(3)找出所有50个分数中的最高的分数所对应的学生和课程;(4)求出平均分方差;其中, 为某一学生的平均分。

题目解答

答案

解:函数input_stu的执行结果是给全程变量学生成绩数组score各元素输入初值。函数aver_stu的作用是计算每个学生的平均分,并将结果赋给全程变量数组a_stu中各元素。函数aver_cour的作用是计算每门课的平均成绩,计算结果存入全程变量数组a_cour。函数highest的返回值是最高分,r,c是两个全局变量,分别代表最高分所在的行,列号。函数s_var的返回值是平均分的方差。程序如下:[程序一]#include #include # define N 10# define M 5float s_var(float a_stu[N]);void highest(int score[N][M]); /* 函数原型声明 */void input_stu(int score[N][M]); /* 函数原型声明 */void aver_stu(int score[N][M],float a_stu[N]); /* 函数原型声明 */void aver_cour(int score[N][M],float a_cour[M]); /* 函数原型声明 */void main(){int score [N][M];float a_stu [N],a_cour[M]; /*各个学生平均分,各门课程平均分*/int i,j;input_stu(score ); /* 函数调用,输入10个学生成绩 */aver_stu(score,a_stu); /* 函数调用,计算10个学生平均成绩 */aver_cour(score,a_cour); /* 函数调用,计算5门课平均成绩 */printf("\n NO. cour1 cour2 cour3 cour4 cour5 aver");for (i=0;i{printf("\n NO.%2d ",i+1); /* 输出学生序号 */for (j=0;jprintf("%8d",score[i][j]);printf("%8.2f",a_stu[i]); /* 输出某个学生的平均成绩 */}printf("\nAverage:");for (j=0;jprintf("%8.2f",a_cour[j]);highest(score); /* 调用函数,求最高分和它属于哪个学生,哪门课 */printf("\nVariance:%8.2f\n",s_var(a_stu)); /* 调用函数,计算和输出方差 */}void input_stu(int score[N][M]) /* 输入10个学生成绩的函数 */{int i,j;for (i=0;i{printf("\nInput score of student%2d:\n",i+1); /* 学生号从1开始 */for (j=0;jscanf("%d",&score[i][j]);}}void aver_stu(int score[N][M],float a_stu[N]) /* 计算各个学生平均成绩的函数 */{int i,j;float s;for (i=0;i{s=0;for (j=0;js+=score[i][j];a_stu[i]=s/M;}}void aver_cour(int score[N][M],float a_cour[M]) /* 计算各门课的平均成绩的函数 */{int i,j;float s;for (j=0;j{s=0;for (i=0;is+=score[i][j];a_cour[j]=s/N;}}void highest(int score[N][M]) /* 求最高分和它属于哪个学生,哪门课的函数 */{int high;int i,j,row,column;high=score[0][0];for (i=0;ifor (j=0;jif (score[i][j]>high){high=score[i][j];row=i+1; /* 数组行号i从0开始,学生号r从1开始,故row=i+1 */column=j+1; /*数组列号j从0开始,学生号c从1开始,故column=j+1 */}printf("\nHighest score is:%3d,NO.%2d student,course %2d\n",high,row,column);}float s_var(float a_stu[N]) /* 求方差的函数 */{int i,j;float sumx,sumxn;sumx=0.0;sumxn=0.0;for (i=0;i{sumx+=a_stu[i]*a_stu[i];sumxn+=a_stu[i];}return (sumx/N-(sumxn/N)*(sumxn/N));}[程序二]#include #include # define N 10 /*学生人数*/# define M 5 /*课程数*/void input_stu(int score[N+1][M+1]) /* 该函数的功能输入10个学生成绩 */{int i,j;for (i=0;i{/*printf("\nInput score of student%2d:\n",i+1); */for (j=0;jscanf("%d",&score[i][j]);}}void aver_stu(int score[N+1][M+1],int a_stu[N]) /* 该函数的功能:计算每个学生的平均成绩 */{int i,j;for (i=0;i{score[i][M]=0;for (j=0;jscore[i][M]+=score[i][j];score[i][M]=score[i][M]/M;a_stu[i]= score[i][M];}}void aver_cour(int score[N+1][M+1]) /* 该函数的功能:计算每门课的平均成绩 */{int i,j;for (j=0;j{score[N][j]=0;for (i=0;iscore[N][j]+=score[i][j];score[N][j]=score[N][j]/N;}}void highest(int score[N+1][M+1]) /* 求最高分和它属于哪个学生,哪门课的函数 */{int max;int i,j,row,col;max=score[0][0];for (i=0;ifor (j=0;jif (score[i][j]>max){max=score[i][j];row=i+1;col=j+1;}printf("\nHighest score is:%3d,NO.%2d student,course %2d\n",max,row,col);}float s_var(int a_stu[N]) /* 求方差的函数 */{int i,j;float sumx,sumxn;sumx=0.0;sumxn=0.0;for (i=0;i{sumx+=a_stu[i]*a_stu[i];sumxn+=a_stu[i];}return (sumx/N-(sumxn/N)*(sumxn/N));}void output_stu(int score[N+1][M+1]){int i,j;printf("\t Students Reprot\n " ); /* 输出结果*/for(i=0;i<33;i++)printf("=");printf("\n");for(i=0;i<=N;i++){ for(j=0;j<=M;j++)if(iprintf("%6d",score[i][j]);printf("\n");}}void main(){int score[N+1][M+1],a_stu[N];input_stu(score);aver_stu(score,a_stu);aver_cour(score);output_stu(score);highest(score);printf("\nVariance:%8.2f\n",s_var(a_stu));}8.15写几个函数:(1)输入10个职工的姓名和职工号;(2)按职工号由小到大排序,姓名顺序也随之调整;(3)要求输入一个职工号,用折半查找法找出该职工的姓名。从主函数输入要查找的职工号,输出该职工姓名。# include # define N 10void input (int num[ ],char name[N][8]){ int i;for (i=0;i{ printf("\n Input NO & name:");scanf("%d",&num[i]);getchar ( ); /*接收数与字符间的空格*/gets (name[i]);}}void output(int num[ N],char name[N][8]){ int i;printf("\n result: \n");for (i=0;iprintf("\n %5d%10s",num[i],name[i]);}void sort (int num[ N],char name[N][8]) /*选择法排序*/{ int i,j,min,t;char temp[8];for (i=0;i{ min=i;for (j=i+1;jif (num[min]>num[j]) min=j;if(min!=i){t=num[i];num[i]=num[min];num[min]=t;strcpy(temp,name[i]);strcpy (name[i],name[min]);strcpy(name[min],temp);}}}void search(int n,int num[ ],char name[N][8]) /* 该函数的功能:用折半查找法查找 */{ int top=0,bott=N-1,mid,flag=1;while (flag && top<=bott)while(i=50 && j<=100){s=s+j;j++;}i++;}k++;}}6.6所谓“水仙开数”是指一个3位数,其个位数字立方和等于该数本身。#includevoid main(){int i,j,k,n;printf(" 水仙花数是:\n");for(n=100;n<1000;n++){i=n/100;j=n/10-i*10;k=n%10;if(i*100+j*10+k==i*i*i+j*j*j+k*k*k){printf("%d\n",n);}}printf("\n");}编译已通过153 370 371 4076.7一个数如果恰好等于它的因子之和,这个数就称为“完数”。编程序找出1000之内的所有完数,并按下面格式输出其因子。#include #define M 1000 /*定义寻找范围*/void main(){int k0,k1,k2,k3,k4,k5,k6,k7,k8,k9;int i,j,n,s;for(j=2;j<=M;j++){n=0; s=j;for(i=1;i{if((j%i)= =0){n++;s=s-i;switch(n)/*将每个因子赋给k0,k1…k9*/{case 1: k0=i; break;case 2: k1=i; break;case 3: k2=i; break;case 4: k3=i; break;case 5: k4=i; break;case 6: k5=i; break;case 7: k6=i; break;case 8: k7=i; break;case 9: k8=i; break;case 10: k9=i; break;} } }if(s==0){printf("%d是一个完数,它的因子是",j);{mid=(bott+top)/2;if (n==num[mid]){ printf("NO. %d , His name is %s.\n",n,name[mid]);flag=0;}else if (nbott=mid-1;elsetop=mid+1;}if (flag)printf("Can't find %d. \n",n);}void main ( ){ int num[N],number,c,n;char name[N][8];input(num,name);sort(num,name);output(num,name);do{ printf("\n Input number to look for:");scanf("%d",&number);search(number,num,name);printf("Continue or not(Y/N)?");getchar ( );c=getchar ( );}while(c=='y' || c=='Y');}8.16写一函数,输入一个十六进制[11]数,输出相应的十进制[12]数。[解析]十六进制数中包含字母,所以存储十六进制采用字符数组存储。# include# define MAX 100void input(char hex[]){ char c;int flag=1,i=0;printf("\nInput a hex number:");while ((c=getchar( ))!='\n' && iif (c>='0'&& c<='9'|| c>='a' && c<='f'|| c>='A'&&c<='F')hex[i++]=c;else flag =0;hex[i]='\0';}long Hec_D (char s[ ]){ int i;long n=0;for (i=0;s[i]!='\0';i++){ if (s[i]>='0' && s[i]<='9')n=n*16+s[i]-'0';if (s[i]>='a' && s[i]<='f')n=n*16+s[i]-'a'+10;if (s[i]>='A' && s[i]<='F')n=n*16+s[i]-'A'+10;}return (n);}void main ( ){ char hex[MAX];input(hex);puts(hex);printf("decimal number %ld:\n",Hec_D(hex));}8.17 用递归法将一个整数n转换成字符串。例如,输入 483,应输出字符串“483”。n的位数不确定,可以是任意位数的整数。# includevoid reverse(long num){int i=0;if(num!=0){ reverse(num/10);putchar(num%10+'0');}}void main ( ){ long num;int n;printf("input number\n");scanf("%ld",&num);reverse(num);}8.18给出年,月,日,计算该日是该年的第几天。# includeint sum_day(int month,int day){ int i;int day_tab[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; /*每个月的天数*/for (i=1;iday+=day_tab[i];return (day);}int leap (int year) /* 该函数的功能:判断是否为闰年 */{int leap;leap=year%4==0&&year%100!=0 || year%400==0;return (leap);}void main ( ){ int year,month,day,days;printf("\nInput date: year,month,day\n");scanf("%d,%d,%d",&year,&month,&day);days=sum_day(month,day);if (leap (year) && month>=3)days=days+1;printf("is the %dth day in this year. \n",days);}

相关问题

  • 下列哪个方法属于知识图谱推理方法()A. 广度优先搜索B. 深度学习推断C. 路径排序算法D. 归纳逻辑程序设计

  • 网络安全包括物理安全[1]、逻辑安全、操作系统安全及联网安全,其中逻辑安全包括访问控制[2]、加密、安全管理及用户身份认证。A. 正确B. 错误

  • 7、 加强电脑安全防护,及时升级病 毒库,安装防火墙,及时查杀病毒和木马,是防范 电信网络诈骗的有效做法。A. 正确B. 错误

  • 在决策树建立过程中,使用一个属性对某个结点对应的数集合进行划分后,结果具有高信息熵(highentropy),对结果的描述,最贴切的是()。A. 纯度高B. 纯度低C. 有用D. 无用E. 以上描述都不贴切

  • AdaBoosting采用多个单一分类器组成一个强分类器()A. 错误B. 正确

  • 下列哪个方法属于知识图谱推理方法()A. 路径排序算法B. 深度学习推断C. 广度优先搜索D. 归纳逻辑程序设计

  • 路径排序算法的工作流程主要有三步()A. 特征抽取B. 特征计算C. 分类器训练D. 因果推断

  • 下列哪项关于监督学习算法的描述正确()A. 强化学习的训练效果一定优于监督学习B. 主要的监督学习方法包括生成方法和判别方法C. 广度优先搜索算法是一种监督学习算法

  • 下列哪项不是求解对抗搜索问题的基本算法( ) A.反向传播算法 B.广度优先排序算法 C.Alpha-Beta剪枝算法D.最小最大搜索算法

  • 下列哪项属于因果推理模型() A. 因果图B. 符号推理模型C. 神经符号推理D. 结构因果模型

  • 3.判断题K-means聚类算法对数据的尺寸敏感。()A. 对B. 错

  • 网络安全包括物理安全[1]、逻辑安全、操作系统安全及联网安全,其中逻辑安全包括访问控制[2]、加密、安全管理及用户身份认证。A. 正确B. 错误

  • 路径排序算法的工作流程主要有三步()A. 特征计算B. 特征抽取C. 分类器训练D. 因果推断

  • 下列哪项关于广度优先搜索的描述正确()A. 每次扩展时,该算法从边缘集合中取出最下层(最深)的节点B. 广度优先搜索算法是深度优先搜索算法的特例C. 每次扩展时,该算法从边缘集合中取出最上层(最浅)的节点D. 深度优先搜索是广度优先搜索的特例

  • 以下哪种方法属于卷积神经网络的基本组件()。A. 卷积层B. 池化层C. 激活函数D. 复制层

  • 下列不属于量子机器学习算法的是()A. 量子支持向量机B. 量子主成分分析C. 薛定谔方程求解D. 深度量子学习

  • 下列哪项贪婪最佳优先搜索算法的描述正确()A. 贪婪最佳优先搜索不属于启发式搜索算法B. 贪婪最佳优先搜索是一种A*搜索算法C. 贪婪最佳优先搜索是一种广度优先搜索算法D. 贪婪最佳优先搜索属于有信息搜索算法

  • 由脸书(Facebook)公司开发的深度学习编程框架是()A. TensorFlowB. PaddlePaddleC. PyTorchD. Mindspore

  • 2.单选题 讯飞星火可以实现多种文案类型和语言风格的文本写作。讯飞星火(网页版)“内容写作”功能可选的“语言风格”不包括( )。A. 口语化B. 高情商C. 专业D. 热情

  • 下列哪项属于因果推理模型()A. 因果图B. 神经符号推理C. 符号推理模型D. 结构因果模型

上一页下一页
logo
广州极目未来文化科技有限公司
注册地址:广州市黄埔区揽月路8号135、136、137、138房
关于
  • 隐私政策
  • 服务协议
  • 权限详情
学科
  • 医学
  • 政治学
  • 管理
  • 计算机
  • 教育
  • 数学
联系我们
  • 客服电话: 010-82893100
  • 公司邮箱: daxuesoutijiang@163.com
  • qt

©2023 广州极目未来文化科技有限公司 粤ICP备2023029972号    粤公网安备44011202002296号