1. 定义一个判断素数的函数isprime(int n),利用该函数输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)
# include <stdio.h> # include <stdlib.h> # include <math.h> int isprime(int n); int main() { int i,y,z=0; for(i=2;i<=1000;i++) { y=isprime(i); if(y!=1) { printf("%3d ",y); z++; if(z!=0&&z%10==0) { printf(" "); } } } printf(" 一共有%d个素数",z); return 0; } int isprime(int n) { int flag,ic,j; flag=0; ic=sqrt(n); for(j=2;j<=ic;j++) { if(n%j==0) { n=1; } }
return n; }
2.求两个正整数的最大公约数和最小公倍数。用一个函数gcd(int a,int b)求最大公约数,另一个函数lcm(int a,int b)根据求出的最大公约数求最小公倍数。
# include <stdio.h> int gcd(int a,int b); int lcm(int a,int b); int main() { int c,d,e,f; printf("请输入两个正整数(用逗号隔开): "); scanf("%d,%d",&e,&f); c=gcd(e,f); d=lcm(e,f); printf("%d和%d的最大公约数是%d,最小公倍数是%d ",e,f,c,d); return 0; } int gcd(int a,int b) { int i,x; if(a<b) { x=a; } else { x=b; } for(i=b;i>0;i--) { if(b%i==0&&a%i==0) { break; } } return i; } int lcm(int a,int b) { int n; n=a*b/gcd(a,b); return n; }
3.编写一个函数fun(double x)求表达式x2-5x+4的值,x作为参数传给函数。在主函数中调用该函数求下列式子的值:
y1= 22-5*2+4
y2= (x+15)2-5*(x+15)+4
y3= sin2x-5*sinx+4
求y3用数学函数 sin(x) 头文件math.h
求解y2和y3时需要输入x的值。
样例:
y1=-2, x=0.5时,y2=166.75,y3=1.832721
# include <stdio.h> # include <math.h> double fun(double x); int main() { int y1; double y2,y3,x; scanf("%lf",&x); y1=fun(2); y2=fun(x+15); y3=fun(sin(x)); printf("y1=%d,y2=%.2lf,y3=%.6lf ",y1,y2,y3); return 0; } double fun(double x) { double y; y=x*x-5*x+4; return y; }
4.用函数实现:火柴棍等式问题。
# include <stdio.h> int change(int n); int main() { int a,b,c,x,y,z,n; for(x=0;x<=9;x++) { a=change(x); for(y=0;y<=9;y++) { b=change(y); for(z=0;z<=9;z++) {
c=change(z); if(a+b+c==12&&x+y==z) { printf("%d+%d=%d ",x,y,z); }
} } } } int change(int n) { int N; if(n==1) { N=2; } else if(n==2||n==3||n==5) { N=5; } else if(n==4) { N=4; } else if(n==6||n==9||n==0) { N=6; } else if(n==7) { N=3; } else { N=7; } return N; }
4.用函数实现:火柴棍等式问题。
附加题
函数实现万年历,其中需定义以下函数
int isValidate(int year,int month) // 输入数据的合法性验证
int isLeap(int year) // 判断闰年
int days(int year,int month) // 计算某年某月的天数
int totalDays(int year,int month) // 计算某年某月到1900年1月1日的总天数
void printCanlender(int year,int month) // 输出万年历
# include <stdio.h> # include <stdlib.h> # include <math.h> int isValidate(int year,int month); int isLeap(int year); int days(int year,int month); int totalDays(int year,int month); void printCanlender(int year,int month); int main() { int c,year,month; tt:printf("请输入日期(年、月,用逗号隔开): "); scanf("%d,%d",&year,&month); c=isValidate(year,month); if(c==0) { printf("输入错误!!!"); goto tt; } printCanlender(year,month); return 0; } int isValidate(int year,int month) { int a=1; if(year<1900||month<1||month>12) { a=0; } return a; } int isLeap(int year) { int a=1; if((year%4==0&&year%100!=0)||year%400==0) { a=0; } return a; } int days(int year,int month) { int a,b,i,e; a=isLeap(year); if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { e=31; } else if(month==4||month==6||month==9||month==11) { e=30; } else { if(a==0) { e=29; } else { e=28; } } return e; } int totalDays(int year,int month) { int days1,i,j; days1=0; for(i=1900;i<=year;i++) { if(i<year) { for(j=1;j<=12;j++) { days1=days1+days(i,j); } } else { for(j=1;j<month;j++) { days1=days1+days(i,j); } } } return days1; } void printCanlender(int year,int month) { int a,b,c,d,i,g=0,f,x; a=totalDays(year,month) ; c=days(year,month); b=a%7; printf("%d年%d月 ",year,month); printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六 "); if(b!=6) { for(i=0;i<=b;i++) { printf(" "); g++; } } for(i=1;i<=c;i++) { printf("%-2d ",i); g++; if(g!=0&&g%7==0) { printf(" "); } } }
知识点总结:
1.建立新函数int xxx(int x);
2.利用自己建立的新函数来解决一些格式相同但自变量不同的步骤;
3.自己建立的函数之间也可以互相调用;
4.要熟练运用不同函数之间的调用。
实验总结:
1返回值不一定是输入值,而是那个有用的值;
2.void 开头的函数最后不加return 0;
3.刚开始用这种方法也许不太会,多练习,熟了就会了。