1、主函数中通过键盘输入年份,调用函数fun判断该年是否为闰年。
#include
fun(int year)
{int flag;
/**********Program**********/
/********** End **********/
}
main()
{ int year,np;
printf("Pleae input a year:");scanf("%d",&year);
np=fun(year);
if (!np)
printf("%d is not a leap year\n",year);
else
printf("%d is a leap year\n",year);
}
答案
if (year%400==0) flag=1;
else if (year%4!=0) flag=0;
else if (year%100!=0) flag=1;
else flag=0;
return(flag);
2、编写函数fun其功能是:根据整型参数n,计算如下公式a1=1,a2=1/(1+a1),a3=1/(1+a2),……an=1/(1+a(n-1))数列的第n项。
#include "stdio.h"
#include"conio.h"
float fun(int n)
{/**********Program**********/
/********** End **********/
}
main()
{int m;
printf("Enter m: ");
scanf("%d", &m);
printf("\nThe result is %f\n", fun(m));
}
答案
float a=1;int i;
for(i=1;i a=1.0/(1+a); return a; 3、求表达式的前20项之和。程序的运行结果为1.950000。 1 1 1 S = 1 + —— + —— + ...... + ———— 1*2 2*3 n*(n+1) #include float fun(int n) { int i; float s,t; /**********Program**********/ /********** End **********/ return(s); } main() { float s; s=fun(20); printf("%f\n",s); } 答案 s=0; t=1; for(i=1;i<=n;i++) {s=s+t; t=1.0/(i*(i+1)); } 4、编写函数fun,函数的功能是:求一个四位数的各位数字的立方和。#include "stdio.h" int fun(int n) {/**********Program**********/ /********** End **********/ } main() {int k; k=fun(1234); printf("k=%d\n",k); } 答案: int d,k,s=0; while (n>0) {d=n%10; s+=d*d*d; n/=10; } return s; 5、编写函数fun,功能是:用下面的和式求圆周率的近似值。直到最后一项的绝对值小于等于eps。 π 1 1 1 — = 1 - — + — - — + ... 4 3 5 7 运行结果:pi=3.141397 #include "math.h" #include "stdio.h" float fun(float eps) {int i=1; float s=0,t=1,p=1; /**********Program**********/ /********** End **********/ } main() { printf("pi=%f\n",fun(0.0001)); } 答案: while(fabs(t)>eps) { s=s+t; p=-p; i=i+2; t=p/i; } return s*4; 6、编写函数fun,功能是求如下表达式: 1 1 1 S = 1 + —— + ——— + ...... + ——————— 1+2 1+2+3 1+2+3+......+n 如:n=5 运行结果:1.666667 #include "stdio.h" float fun(int n) { int i,j; float t,s=0; /**********Program**********/ /********** End **********/ } main() { int n; printf("Please input a number:"); scanf("%d",&n) ; printf("%10.6f\n",fun(n)); } -------------------------------------------------- 答案 for(i=1;i<=n;i++) { t=0; for(j=1;j<=i;j++) t=t+j; s=s+1/t; } return s; 7、编写函数fun,函数的功能是:求一分数序列2/1,3/2,5/3,8/5,13/8,21/13…的前n项之和。 每一分数的分母是前两项的分母之和 每一分数的分子是前两项的分子之和 例如:求前20项之和的值为32.660259。 #include "stdio.h" float fun(int n) {/**********Program**********/ /********** End **********/ } main() {float y; y=fun(20); printf("y=%f\n",y); } 答案: int i; float f1=1,f2=1,f3,s=0; for(i=1;i<=n;i++) {f3=f1+f2; f1=f2; f2=f3; s=s+f2/f1; } return s; 8、编写函数fun求sum=d+dd+ddd+……+dd...d(n个d),其中d为1-9的数字。 例如3+33+333+3333+33333(此时d=3,n=5),d和n在主函数中输入。 #include "stdio.h" main() { int d,n; long sum,fun(); printf("d="); scanf("%d",&d); printf("n="); scanf("%d",&n); sum=fun(d,n); printf("sum=%ld\n",sum); } long int fun(int d,int n) {/**********Program**********/ /********** End **********/ } 答案: long int s=0,t=0; int i; for(i=1;i<=n;i++) { t=t+d; s=s+t; d=d*10; } return s; 9、编写函数fun,函数的功能是:求1到100之间的偶数之积。 #include "stdio.h" double fun(int m) {/**********Program**********/ /********** End **********/ } main() {printf("ji=%f\n",fun(100)); } 答案 double y=1; int i; for(i=1;i<=m;i++) if(i%2==0)y*=i; return y; 10、编写函数fun求1!+2!+3!+ …… +n!的和,在main函数中由键盘输入n值,并输出运算结果。例如:若n值为20,则结果为268040729。 #include float fun(int n) {/**********Program**********/ /********** End **********/ } main() { int i,n; long int result; scanf("%d",&n); result=fun(n); printf("%ld\n",result); } 答案 int i; float f=1,s=0; for(i=1;i<=n;i++) {f=f*i; s=s+f;} return s; 11、调用函数fun判断一个三位数是否是"水仙花数"。在main函数中从键盘输入一个三位数,并输出判断结果。请编写fun函数。所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。例如,153是一个水仙花数,因为153等于1的立方加上5的立方加上3的立方之和。 #include "stdio.h" int fun(int n) {/**********Program**********/ /********** End **********/ } main() { int n,flag; scanf("%d",&n); flag=fun(n); if(flag) printf("%d 是水仙花数\n",n); else printf("%d 不是水仙花数\n",n); } 答案 int bw,sw,gw; bw=n/100;sw=(n-bw*100)/10;gw=n%10; if(n==bw*bw*bw+sw*sw*sw+gw*gw*gw) return 1; else return 0; 12、编写函数fun其功能是:判断一个整数w的各位数字平方之和能否被5整除,可以被5整除则返回1,否则返回0。 #include "stdio.h" #include"conio.h" int fun(int w) {/**********Program**********/ /********** End **********/ } main() {int m; printf("Enter m: "); scanf("%d", &m); printf("\nThe result is %d\n", fun(m)); } 答案 int k,s=0; do {s=s+(w%10)*(w%10); w=w/10; }while(w!=0); if(s%5==0)k=1; else k=0; return(k); 13、编写函数fun其功能是:计算出k以内最大的10个能被13或17整除的自然数之和。(k〈3000)。 #include "stdio.h" #include"conio.h" int fun(int k) {/**********Program**********/ /********** End **********/ } main() {int m; printf("Enter m: "); scanf("%d", &m); printf("\nThe result is %d\n", fun(m)); } 答案 int a=0,b=0,j; while((k>=2)&&(b<10)) { k--; if((k%13==0)||(k%17==0)) {a=a+k;b++;} } return a; {t=a[j];a[j]=a[j+1];a[j+1]=t;} 14、编写函数fun其功能是:根据整型形参m,计算如下公式的值:y=1/2!+1/4!+...+1/m!(m 是偶数) #include "stdio.h" double fun(int m) { /**********Program**********/ /********** End **********/ } main() {int n; clrscr(); printf("Enter n: "); scanf("%d", &n); printf("\nThe result is %1f\n", fun(n)); } 答案 double y=0.0; int i,j; double s=1; for (i=2;i<=m;i+=2) {for(j=i-1;j<=i;j++) s=s*j; y=y+1.0/s; } return y; 15、从键盘输入一个大于3的整数,调用函数fun判断其是否素数,然后在main函数中输出相应的结论信息。例如:7是素数,8不是素数。请编写fun函数。素数是仅能被1和自身整除的数 #include "stdio.h" main() { int m,flag; printf("input an integer:"); scanf("%d",&m); flag=fun(m); if(flag) printf("%d is a prime.\n",m); else printf("%d is not a prime.\n",m); } int fun(int n) {/**********Program**********/ /********** End **********/ } 答案 int i; int j; if (i<0) j=0; for(i=2;i {if(n%i==0) j= 0; } return j; 16、请编写函数fun,它的功能是:判断m是否为素数。主函数的功能是:求出100到200之间的素数的个数。 #include "stdio.h" main() { int m,k=0; for(m=100;m<200;m++) if(fun(m)) {printf("%4d",m); k++; if(k%5==0)printf("\n"); } printf("k=%d\n",k); } int fun(int m) {/**********Program**********/ /********** End **********/ } 答案 int i,k=1; if(m<=1) k=0; for(i=2;i if(m%i==0) k=0; return k; 17、编写函数fun其功能是:求给定正整数n以内的素数之积。(n<28) #include "stdio.h" #include"conio.h" long fun(int n) {/**********Program**********/ /********** End **********/ } main() {int m; printf("Enter m: "); scanf("%d", &m); printf("\nThe result is %ld\n", fun(m)); } long i,k; long s=1; for(i=2;i<=n;i++) {for(k=2;k if(i%k==0)break; if(k==i)s=s*i; } return s; 18、编写函数fun,函数的功能是:计算n门课程的平均值,计算结果作为函数值返回。例如,若有5门课程的成绩是:92,76,69,58,88,则函数的值为72.599998。 #include "stdio.h" float fun(int a[],int n) {/**********Program**********/ /********** End **********/ } main() {int a[]={92,76,69,58,88}; printf("y=%f\n",fun(a,5)); } 答案 int i; float y=0; for(i=0;i y+=a[i]; y=y/n; return y; 19、求一批数中小于平均值的数的个数。 #include int average_num(int a[],int n) {/**********Program**********/ /********** End **********/ } main() { int n,a[100],i,num; clrscr(); scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); num=average_num(a,n); printf("the num is:%d\n",num); } int i,sum=0,k=0; float average; for(i=0;i sum=sum+a[i]; average=sum*1.0/n; for(i=0;i if(average>a[i]) k++; return(k); 20、从键盘为一维整型数组输入10个整数,调用fun函数找出其中最小的数,并在main 函数中输出。请编写fun函数。 #include "stdio.h" int fun(int x[],int n) {/**********Program**********/ /********** End **********/ } main() { int a[10],i,min; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%3d",a[i]); printf("\n"); min=fun(a,10); printf("%d\n",min); } 答案 int min,i; min=x[0]; for(i=1;i {if(x[i] return min; 21、编写函数fun,函数的功能是:找出一批正整数中的最大的偶数。 #include "stdio.h" int fun(int a[],int n) {/**********Program**********/ /********** End **********/ } main() {int a[]={1,2,9,24,35,18},k; k=fun(a,6); printf("max=%d\n",k); } 答案 int i,amax=-1; for(i=0;i if(a[i]%2==0) if (a[i]>amax) amax=a[i]; return amax; 22、程序的功能是: 把20个随机数存入一个数组,然后输出该数组中的最大值。其中确定最大值的下标的操作在fun函数中实现,请给出该函数的定义。 #include "stdio.h" #define VSIZE 20 int vector[VSIZE] ; int fun(int list[],int size) {/**********Program**********/ /********** End **********/ } main() { int i; clrscr() ; for (i=0;i {vector[i]=rand(); printf("Vector[%d]=%6d\n",i,vector[i]); } i=fun(vector,VSIZE); printf("\nMaxnum: Vector[%d]=%6d\n",i,vector[i]); } 答案 int i,max=0; for(i=1; i if(list[max] max=i; return max; 23、求一批数中最大值和最小值的差。 int max_min(int a[],int n) {/**********Program**********/ /********** End **********/ } #define N 30 #include "stdlib.h" #include "stdio.h" main() { int a[N],i,k; clrscr(); for(i=0;i a[i]=random(51)+10; for(i=0;i {printf("%5d",a[i]); if((i+1)%5==0) printf("\n"); } k=max_min(a,N); printf("the result is:%d\n",k); } 答案 int i,max,min; max=min=a[0]; for(i=1;i if(a[i]>max) max=a[i]; else if(a[i] return(max-min); 24、给定n个数据, 求最大值出现的位置(如果最大值出现多次,求出第一次出现的位置即可)。 #include int station(int s[],int n) {/**********Program**********/ /********** End **********/ } main() { int a[100],n,i,t; clrscr(); scanf("%d",&n); for(i=0;i scanf("%d",&a[i]); t=station(a,n); printf("the max_value position is:%d\n",t); } 答案 int i,k; k=0; for(i=1;i<=n;i++) if(s[i]>s[k]) k=i; return(k+1); 25、从键盘为一维整型数组输入10个整数,调用fun函数找出其中最小的数,并在main 函数中输出。请编写fun函数。 #include "stdio.h" int fun(int x[],int n) {/**********Program**********/ /********** End **********/ } main() { int a[10],i,min; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) printf("%3d",a[i]); printf("\n"); min=fun(a,10); printf("%d\n",min); } 答案 int min,i; min=x[0]; for(i=1;i {if(x[i] return min; 26、请编写一个函数fun,函数的功能是:统计出若干个学生的平均成绩,最高分以及得最高分的人数。例如,输入10名学生的成绩分别为92,87,68,56,92,84,67,75,92,66,则输出平均成绩为77.9,最高分为92,得最高分的人数为3人。 #include "stdio.h" float Max=0; int J=0; float fun(float array[],int n) {/**********Program**********/ /********** End **********/ } main( ) { float a[10],ave; int i=0; for(i=0;i<10;i++) scanf("%f",&a[i]); ave=fun(a,10); printf("ave=%f\n",ave); printf("max=%f\n",Max); printf("Total:%d\n",J); } 答案 int i,j=0;float sum=0,ave; Max=array[0]; for(i=0;i { if(Max sum=sum+array [i]; } ave=sum/n; for(i=0;i if(array [i]==Max) J++; return(ave); 27、一个数组有8个元素,其初始数据为:1 2 3 4 5 6 7 8 要求在不增加数组,也不增加数组的存储单元的情况下,通过移动数组元素将数组变化为:4 5 6 7 8 1 2 3 #include void fun(int a[]) {int i,j,t; /**********Program**********/ /********** End **********/ } main() { int a[8]={1,2,3,4,5,6,7,8},i,j; fun(a); for(i=0;i<8;i++) printf("%5d",a[i]); printf("\n"); } 答案: int i,j,k,t; for(i=0;i<3;i++) {t=a[0]; for(j=0;j<8;j++) a[j]=a[j+1]; a[7]=t; } } 28、产生15个[20,80]上的随机整数,用顺序法(比较法)按从小到大排序后输出。 #include #include void fun(int a[], int n) {int i,j,t; /**********Program**********/ /********** End **********/ } #define N 15 main() {int i,a[N]; for(i=0;i a[i]=random(61)+20; fun(a,N); for(i=0;i printf("%5d",a[i]); printf("\n"); } 答案 for(i=0;i for(j=i+1;j if(a[i]>a[j]) {t=a[i]; a[i]=a[j]; a[j]=t; } 29、编写函数用选择排序法对数组中的数据进行从小到大的排序。#include #include void sort(int a[],int n) {/**********Program**********/ /********** End **********/ } main() {int a[13],i; clrscr(); for(i=0;i<13;i++) a[i]=random(20)-5; for(i=0;i<13;i++) printf("%3d",a[i]); printf("\n-------------------\n"); sort(a,13); for(i=0;i<13;i++) printf("%3d",a[i]); } 答案 int i,j,k,t; for(i=0;i {k=i; for(j=i+1;j if(a[k]>a[j]) k=j; if(k!=i) {t=a[i]; a[i]=a[k]; a[k]=t; } } 30、编写函数用冒泡排序法对数组中的数据进行从小到大的排序。 #include #include void sort(int a[],int n) {/**********Program**********/ /********** End **********/ } main() {int a[16],i; clrscr(); for(i=0;i<16;i++) a[i]=random(30)+15; for(i=0;i<16;i++) printf("%3d",a[i]); printf("\n-------------------\n"); sort(a,16); for(i=0;i<16;i++) printf("%3d",a[i]); } 答案 int i,j,t; for(i=0;i for(j=0;j if(a[j]>a[j+1]) { t=a[j];a[j]=a[j+1];a[j+1]=t;} 31、编写函数fun,在一个已按升序排列的数组中插入一个数,插入后,数组元素仍按升序排列。 #define N 11 #include void fun(int a[N],int number) { int i; /**********Program**********/ /********** End **********/ } main() {int i,j,t,number,a[N]={1,2,4,6,8,9,12,15,149,156}; printf("please enter an integer to insert in the array:\n"); scanf("%d",&number); printf("The original array:\n"); for(i=0;i printf("%5d",a[i]); printf("\n"); fun(a,number); printf("The result array:\n");