• 第七次作业


      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.刚开始用这种方法也许不太会,多练习,熟了就会了。

  • 相关阅读:
    .NET开源工作流RoadFlow-表单设计-组织机构选择
    .NET开源工作流RoadFlow-表单设计-按钮
    .NET开源工作流RoadFlow-表单设计-标签(label)
    git客户端使用
    简单几句概括join
    算法笔记:线段树
    通常情况下的中国剩余定理
    NOIP2016:Day2解题报告
    关于jzyzoj——P1341:被污染的牛奶的题解探讨
    关于错位排列
  • 原文地址:https://www.cnblogs.com/w123/p/6063992.html
Copyright © 2020-2023  润新知