1. 定义一个判断素数的函数isprime(int n),利用该函数输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)
# include <stdio.h> int isprime(int a) { int b; for(b=2;b<=a-1;b++) { if(a%b==0) { return 0; } } return 1; } int main() { int a,b,c=0; for(a=2;a<=1000;a++) { if(isprime(a)) { printf("%-3d ",a); c++; if(c%10==0) { printf(" "); } } } printf(" "); printf("共有%d ",c); return 0; }
2.求两个正整数的最大公约数和最小公倍数。
# include<stdio.h> int gcd(int m,int n); //提示 int lcm(int m,int n); int main() { int a,b,c,e,f; printf("输入两个整数最大公约数为最小公倍数为 "); scanf("%d,%d",&a,&b); e=gcd(a,b); f=lcm(a,b); printf("最大公约数为%d,最小公倍数为%d",e,f); } int gcd(int a,int b) //需要函数的变量 为上面的值 { int c,n; n=b; c=a%b; while(c!=0) { a=b; b=c; c=a%b; } return b; } int lcm(int a,int b) { int g; g=(a*b)/gcd(a,b); return g; }
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
# include <stdio.h> # include <math.h> float sum(float m); float sum(float m); float sum(float m); int main() { float a,y1,y2,y3,r,b; printf("输入数求 "); scanf("%f",&a); r=2; y1=sum(r); printf("%f ",y1); r=a+15; y2=sum(r); printf("%f ",y2); r=sin(a); y3=sum(r); printf("%f ",y3); return 0; } float sum(float r) { float b; b=r*r-5*r+4; return b; }
4.用函数实现:火柴棍等式问题
# include<stdio.h> int sum(int a); int sum(int b); int sum(int e); int main() { int a,b,d,e,g,f,m; for(a=0;a<=9;a++) { for(b=0;b<=9;b++) { g=a+b; if(g>9) { break; } e=sum(a); d=sum(b); m=sum(g); f=m+e+d; if(f==12) { printf("%d+%d=%d ",b,a,g); } } } return 0; } int sum(int b) { int c; switch(b) { case 0: case 6: case 9:c=6; break; case 1:c=2; break; case 2: case 3: case 5:c=5; break; case 4:c=4; break; case 7:c=3; break; case 8:c=7; break; } return c; }
附加题
函数实现万年历,其中需定义以下函数
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> 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);// 输出万年历 int main() { int year,month,n; printf("输入年月日输出当天为星期几 "); scanf("%d%d",&year,&month); if(isvalidate(year,month)==0) { printf("输入错误请重新输入 "); exit(0); } n=totaldays(year,month) ; system("cls"); printf("总共%d天 ",n); printf("%d年%d月 ",year,month); printcanlender(year,month); return 0; } int isvalidate(int year,int month) { if(year<0||(month<=0||month>=13)) { { return 0; } } return 1; } int isleap(int year) { if((year%4==0&&year%100!=0)||(year%400==0)) { return 1; } return 0; } int days(int year,int month) { int m; if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) { m=31; return m; } else if(month==4||month==6||month==9||month==11) { m=30; return m; } else if(month==2) { if(isleap(year) ) { m=29; return m; } if(isleap(year) ==0) { m=28; return m; } } } int totaldays(int year,int month) { int d,e,f,c=1,g,sum,n; if(isleap(year) ) { if(month<3) { c=c-1; } } d=year-1900; e=month-1; f=c-1; g=d/4; switch(e) { case 0: sum=0; break; case 1: sum=31; break; case 2: sum=59; break; case 3: sum=90; break; case 4: sum=120; break; case 5: sum=151; break; case 6: sum=181; break; case 7: sum=212; break; case 8: sum=243; break; case 9: sum=273; break; case 10: sum=304; break; case 11: sum=334; break; } n=sum+g+d*365+f; return n; } void printcanlender(int year,int month) { int n,y,z,q,e=1; q=days(year,month); n=totaldays(year,month); y=n%7; printf("星期日 星期一 星期二 星期三 星期四 星期五 星期六 "); if(y==6) { y=1; } for(z=0;z<=y;z++) { printf(" "); } e=e+y; for(n=1;n<=q;n++) { printf("%d ",n); e++; if(e%7==0) { printf(" "); } } }
知识点总结:1.函数是由函数头和函数体组成,需要在主函数后定义变量;
2.当调用函数时需要将计算的数返回到之前调用函数的位置,在函数中目前只能返回一个变量,
3.调用函数时需要注意函数的数据类型,有时需要添加主函数,像“<math.h>”这样的,
4.调用函数是形式参数可以与main函数中的变量相同,两个函数不相互影响,形式参数的格式:数据格式 形参名1,
5.函数中使用了一次之后函数中各变量会清除缓存不在有期前的值出现,
6.调用函数后也要注意声明变量,注意格式的对齐,在主函数后的函数头部要加分号,后面的不用加,
实验总结:
1.第一次接触函数,使用非常生疏,经常出现错误,比如第一题经常把逻辑顺序搞混乱,
2.在写代码时会思索整个框架的结构,当在电脑上不行时,自己习惯在纸上打一遍草稿,
当然要是代码很长会单独的复制出来,将代码分开单独判断验证找出出错的地方,
3.有时忽然间就忘记加分号了,多加细心吧,