作业,7
一、实验内容
1. 定义一个判断素数的函数isprime(int n),利用该函数输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)
#include<stdio.h>
int sushu(int x);
int main()
{
int i,a=0,b=0,c=0;
for(i=2;i<=1000;i++)
{
if(sushu(i))
{
printf("%3d ",i);
a++;
if(a%10==0)
{
printf("\n");
}
}
}
printf("\n一共有%d个素数",a);
}
int sushu(int x)
{
int a,b;
for(a=2;a<=x-1;a++)
{
if(x%a==0)
{
return 0;
break;
}
if(a==x)
{
return 2;
}
}
}
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 a,b,c,d;
printf("输入两个正整数,求最大约数和最小公倍数\n");
scanf("%d%d",&a,&b);
c=gcd(a,b);
d=lcm(a,b);
printf("最大公约数为%d最小公倍数为%d",c,d);
return 0;
}
int gcd(int a,int b)
{
int r;
while(1)
{
r=a%b;
a=b;
b=r;
if(r==0)
{
return (a);
break;
}
}
}
int lcm(int a,int b)
{
int r;
r=(a*b)/gcd(a,b);
return r;
}
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>
double fun(double x)
{
double y;
y=x*x-5*x+4;
return y;
}
int main()
{
double x,y1,y2,y3;
printf("请输入x的数值\n");
scanf("%lf",&x);
y1=fun(2);
y2=fun(x+15);
y3=fun(sin(x));
printf("y1=%.3lf,y2=%.3lf,y3=%.3lf",y1,y2,y3);
return 0;
}
4.用函数实现:火柴棍等式问题。
#include<stdio.h>
int gun(int x);
int main()
{
int a,b,c,d,e,f;
for(a=0;a<=9;a++)
for(c=0;c<=9;c++)
{
b=gun(a);
d=gun(c);
e=a+c;
f=gun(e);
// printf("%d %d %d\n",b,d,f);
if(b+d+f==12)
{
printf("%d+%d=%d ",a,c,e);
}
}
return 0;
}
int gun(int e)
{
int g;
if(e==1)
g=2;
if(e==2||e==3||e==5||e==17)
g=5;
if(e==4||e==11)
g=4;
if(e==6||e==9||e==0||e==14)
g=6;
if(e==7)
g=3;
if(e==8||e==12||e==13||e==15)
g=7;
if(e==16)
g=8;
if(e==18)
g=9;
return (g);
}
附加,函数万年历
#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 a1,c1,month,year,day; while(a1!=1) { printf("请输入年份月份和日期,用空格隔开\n"); scanf("%d%d",&year,&month); if(isValidate(year,month)) { printf("输入错误,请重新输入\n"); continue; } else { a1=1; } } system("CLS"); printCanlender(year,month); return 0; } int isValidate(int year,int month) { if((year<1900)||(month>=13||month<=0)) return 1; else return 0; } int isLeap(int year) { if((year%4==0&&year%100!=0)||(year%400==0)) return 1; else return 0; } int totalDays(int year,int month) { int i1,sum1,sum2,sum,j1; for(i1=1900,sum1=0;i1<=year-1;i1++) { if(isLeap(i1)) { sum1=sum1+366; } else { sum1=sum1+365; } } for(j1=1,sum2=0;j1<=month-1;j1++) { if(j1==1||j1==3||j1==5||j1==7||j1==8||j1==10||j1==12) { sum2=sum2+31; } else if(j1==4||j1==6||j1==9||j1==11) { sum2=sum2+30; } else { if(isLeap(i1)) { sum2=sum2+29; } else { sum2=sum2+28; } } } sum=sum1+sum2+1; return (sum); } int days(int year,int month) { int e1; if(month==4||month==6||month==9||month==11) /*小月份*/ { e1=30; } else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12) /*大月份*/ { e1=31; } else if(isLeap(year)&&month==2) /*闰年二月份*/ { e1=29; } else /*平年二月份*/ { e1=28; } return (e1); } void printCanlender(int year,int month) { int d1,b1,c1; c1=totalDays(year,month)%7; printf("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\n"); for(d1=c1;d1>0;d1--) { printf("\t"); } for(b1=1;b1<=days(year,month);b1++) { printf("%-2d\t",b1); if((b1+c1)%7==0) { printf("\n"); } } }
二、知识点总结
1、自定义函数要有一个返回值
2、函数定义的基本格式:函数类型 函数名(形参)
{
说明部分
语句部分
}
三、实验总结
1.函数参数的数目和顺序,及各参数意义和类型。
2.函数返回意义和类型。