C语言实验报告(四)一、实验目的1.掌握C语言中函数和模块2.掌握怎样定义函数,如何调用或使用函数,如何声明函数3.掌握函数的参数,了解在函数调用时,参数是如何传递的4.在使用函数的过程中怎样确定函数的参数5.如何使用局部变量和全局变量二、实验内容1. 偶数判断描述: 编写一个用户自定义函数,该函数有一个整型参数,函数的功能是:当这个整型数的值是偶数时,函数的返回值为0,当这个整型数的值是奇数时,返回值为1 。
编写一个程序,从键盘输入m个整数,分别调用用户自定义函数来判断这m个整数的奇偶性。
输入: 第一行为一个整数m,表示要判断m个整数的奇偶性;紧接着是m行,每行一个整数。
输出:有m行,分别对应输入的第2到第m+1行的整数的奇偶性样例输入: 216样例输出: 奇数偶数·程序代码:#include"stdio.h"int isEven(int a){if(a%2==0)return 1;elsereturn 0;}int main(){int m,i,b;scanf("%d",&m);for(i=1;i<=m;i++){scanf("%d",&b);if(isEven(b)==1)printf("偶数\n");elseprintf("奇数\n");}return 0;}2.温度转换描述: 编写一个用户自定义函数,函数的功能是:将华氏温度转F换为摄氏温度C。
转换公式为:C=5*(F-32)/9。
编写一个程序,输出指定范围的华氏温度与摄氏温度的对照表,其中华氏温度步长为4。
输入: 两个空格隔开的整数n,m(且0<n<m<1000)输出: 华氏温度与摄氏温度的对照表样例输入: 32 45样例输出: 32 0.0036 2.2240 4.4444 6.67·程序代码:#include "stdio.h"float conver(int f){return 5*(f-32)/9.0;}int main(){int n,m,i;scanf("%d%d",&n,&m);for(i=n;i<=m;i+=4)printf("%d%10.2f\n",i,conver(i));return 0;}3.最大值函数描述:编写一个用户自定义函数,该函数有三个整数参数,函数的功能是:求解这三个整数的最大值,函数的返回值为三个参数的最大值。
编写一个程序,从键盘输入任意5个整数,分别两次调用用户自定义函数来求出这5个整数中的最大值。
输入:第一行为N,表示有N组数据,接下来是N行,每行是5个用空格隔开的整数(在VC++6.0 int范围)。
输出:有N行,每行是对应输入的5个整数的最大值。
样例输入: 31 2 3 4 55 4 3 2 11 2 5 3 4样例输出: 555·程序代码:#include "stdio.h"int max(int a, int b, int c ){int t;t=a;if(b>t)t=b;if(c>t)t=c;return t;}int main(){int n,a,b,c,d,e,i;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);printf("%d\n",max(a,b,max(c,d,e)));}return 0;}4. 三位数数字排序描述: 对于给定的若干个三位正整数,将它们的各位上的数字按由小到大的顺序输出。
要求,写一个函数,能将其整型参数的各位数字按照由小到大进行输出。
主函数完成对输入的若干个三位数,分别调用该函数,完成指定的输出。
输入: 若干行,每行有一个三位正整数,输入为0结束。
输出: 有若干行,依次对应于非0的整数,将相应三位正整数的数字由小到大输出,数字间没有空格。
样例输入: 123987670样例输出: 123789067·程序代码:#include "stdio.h"int main(void){int n,a[4],xx,sum;scanf("%d",&n);while(n!=0){int i,j;for(i=1;i<=3;i++){a[i]=n%10;n/=10;}for(i=1;i<=3;i++){for(j=i;j<=3;j++){if (a[i]>a[j]){xx=a[j];a[j]=a[i];a[i]=xx;}}}for(i=1;i<=3;i++){printf("%d",a[i]);}printf("\n");scanf("%d",&n);}return 0;}5. 排列数计算描述: 表示从m个元素中抽出n个元素的排列的个数。
计算公式为:编写一个用户自定义函数,该函数有一个整数参数,函数的功能是求解这个整数的阶乘,函数的返回值为这个整数的阶乘。
编写一个程序,从键盘输入m、n值,分别两次调用用户自定义函数来求解输入: 多行测试数据,每行两个用空格隔开的整数,0 0 表示结束。
输出: 有多行,对应于非0 0行的排列值。
样例输入: 5 38 20 0样例输出: 6056·程序代码:#include "stdio.h"int main(void){double n,m,t;double x1,x2,i,k,kk;scanf ("%lf%lf",&m,&n);while (n!=0&&m!=0){x1=1;/*if(m<n){t=m;m=n;n=t;}*/for(i=1;i<=m;i++){x1*=i;}k=m-n;x2=1;for(i=1;i<=k;i++){x2*=i;}kk=x1/x2;printf("%.0lf\n",kk);scanf ("%lf%lf",&m,&n);}return 0;}6.素数对描述: 哥德巴赫猜想大家都知道一点吧.我们现在不是想证明这个结论,而是想在程序语言内部能够表示的数集中,任意取出一个偶数,来寻找两个素数,使得其和等于该偶数.做好了这件实事,就能说明这个猜想是成立的.由于可以有不同的素数对来表示同一个偶数,所以专门要求所寻找的素数对是两个值最相近的,而且素数对中的第一个数不大于第二个数.输入:输入中是一些偶整数M(6<M<=10000).输出:对于每个偶数,输出两个彼此最接近的素数,其和等于该偶数(要求这两个素数是不等的)。
样例输入: 20304046样例输出: 7 1313 1717 2317 29·程序代码:#include "stdio.h"int prime(int n){int i;for (i=2;i<n;i++)if(n%i==0)return 0;return 1;}int main(){int m,i;while(scanf("%d",&m)==1)for(i=m/2;i>=2;i--)if(prime(i)&&prime(m-i)&&i!=m-i){printf("%d %d\n",i,m-i);break;}return 0;}7.函数表达式计算描述:计算下列表达式的值:输入:输入x和n的值,其中x为非负实数,n为正整数。
输出:输出f(x,n),保留2位小数。
样例输入: 3 2样例输出: 2.00·程序代码:#include "math.h"#include "stdio.h"/*f(x,1)=sqrt(1+x);f(x,2)=sqrt(2+sqrt(1+x))=sqrt(2+f(x,1));f(3,x)=sqrt(3+sqrt(2+qrt(1+x)))=sqrt(3+f(x,2));......f(x,n)=sqrt(n+f(x,n-1));*/double f(double x,int n){if(n>1)return sqrt(n+f(x,n-1));elsereturn sqrt(1+x);}int main(){int n;double x;scanf("%lf%d",&x,&n);printf("%.2f\n",f(x,n));return 0;}8. 递归公约数描述:递归形式的公约数定义如下:使用此定义求两个整数的最大公约数。
输入: 有多行,每行为两个用空格隔开的整数。
输出: 对应的有多行,每行为对应输入的两个整数的最大公约数。
样例输入: 12 69 511 3样例输出: 611·程序代码:# include "stdio.h"int gcd(int m, int n ){if(m%n==0)return n;elsegcd(n,m%n);}int main(void){int a,b;while (scanf("%d%d",&a,&b)==2){printf("%d\n",gcd(a,b));}return 0; }。