作业,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.函数返回意义和类型。

posted @ 2016-11-17 10:42  计科1601史增宇  阅读(159)  评论(3编辑  收藏  举报