• 作业七


      1. 定义一个判断素数的函数isprime(int n),利用该函数输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)

    #include<stdio.h>
    # include <stdlib.h>
    # include <math.h>
    int isprime(int n);
    int isprime(int n)
    {
             int i1,i2,x,flag;
             flag=0;
            x=sqrt(n);
                flag=0;
                for(i2=2;i2<=x;i2++)
                {
                    if(n%i2==0)
                    {
                        flag=1;
                        break;
                    }
                } 
                 if(flag==1)
                {
                    n=1;
                }
            return n;
    }
    int main()
    {
        int i,y,m=0;
        for(i=2;i<=1000;i++)
        {
            y=isprime(i);
            if(y!=1)
            {
                printf("%03d ",y);
                m++;
                if(m!=0&&m%10==0)
                {
                     printf("
    ");
                }
            }    
        }
        printf(" 
    有%d个素数",m);
        return 0;
    }

     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 a1,b1,a2,b2;
        tt:printf("输入两个正整数,用逗号隔开
    ");
        scanf("%d,%d",&a2,&b2); 
        if(a2<0||b2<0)
        {
            printf("输入错误
    ");
            goto tt;
        }
        a1=gcd(a2,b2);
        b1=lcm(a2,b2);
        printf("%d,%d的最大公约数是%d,最小公倍数是%d
    ",a2,b2,a1,b1);
        return 0;        
    }
    int gcd(int a,int b)
    {
        int i,c;
         if(a<b)
        {
            c=a;
        }
        else
        {
            c=b;
        }
        for(i=b;i>0;i--)
        {
             if(b%i==0&&a%i==0)
            {
                break;
            }
        }
        return i;
    }
    int lcm(int a,int b)
    {
        int i1;
        i1=a*b/gcd(a,b);
        return i1;
    }

    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的值。

    #include<stdio.h>
    #include<math.h>
    double fun(double x);
    double fun(double x)
    {
        double y;
        y=x*x-5*x+4;
        return y; 
    }
        int main()
    {
        double  x,y1,y2,y3;
        printf("函数为y=x*x-5*x+4
     请输入x的值:
    ");
        scanf("%lf",&x);
        y1=fun(x);
        y2=fun(x+15);
        y3=fun(sin(x));
        printf("%.4lf  %.4lf  %.4lf",y1,y2,y3);
    }

    4.用函数实现:火柴棍等式问题。

    #include<stdio.h>
    int mty(int a);
    int main()
    {    
        int x,y,sum;
        for(x=0;x<=9;x++)
        for(y=0;y<=9;y++)
        {
            sum=x+y;
        if((mty(x)+mty(y)+mty(sum)==12)&&x<9&&y<9&&sum<9)
              {
                  printf("%d+%d=%d
    ",x,y,sum);
              }
        }
            return 0;
    }
    int mty(int z)
    {
        int gen3;
        switch(z)
               {
               case 0: gen3=6; break;
               case 1: gen3=2; break;
               case 2: gen3=5; break;
               case 3: gen3=5; break;
               case 4: gen3=4; break;
               case 5: gen3=5; break;
               case 6: gen3=6; break;
               case 7: gen3=3; break;
               case 8: gen3=7; break;
               case 9: gen3=6; break;
                   }
                   return gen3;
    }

    附加题:

    # 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 a,year,month;
        A:printf("请输入日期年月用逗号隔开:
    ");
        scanf("%d %d",&year,&month);
        a=isValidate(year,month);/*合法性*/        /*调用函数1*/
        if(a==0)
        {
            printf("输入错误!!!");
            goto A;
        }
        printCanlender(year,month);
    return 0;    
    }
    void printCanlender(int year,int month)
    {
        int a,b,c,i,x1=0,f,x;
        a=totalDays(year,month)    ;    /*调用函数4*/
        c=days(year,month);            /*调用函数3*/
        b=a%7;
        printf("%d年%d月
    ",year,month);
        printf("星期日	星期一	星期二	星期三	星期四	星期五	星期六
    ");
        for(i=0;i<b;i++)
        {
            printf("	");
            x1++;
        }
        for(i=1;i<=c;i++)
        {
            printf("%-2d	",i);
            x1++;
            if(x1!=0&&x1%7==0)
            {
                printf("
    ");
            }
        }
        
    }
    int isValidate(int year,int month)        /*函数1*/
    {
        int a=1;
        if(year<1900||month<1||month>12)
        {
            a=0;
        }
    return a;
    }
    
    int isLeap(int year)                            /*判断闰年*/    /*函数2*/
    {
        int a=1;
        if((year%4==0&&year%100!=0)||year%400==0)
        {
            a=0;
        }
    return a;
    }
    
    int days(int year,int month)                    /*某年某月的天数*/    /*函数3*/
    {
        int a,b;
        a=isLeap(year);
        if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
        {
            b=31;
        }
        else if(month==4||month==6||month==9||month==11)
        {
            b=30;
        }
        else
        {
            if(a==0)
            {
                b=29;
            }
            else
            {
                b=28;
            }        
        }
    return b;    
    }
    
    int totalDays(int year,int month)                /*总天数*/        /*函数4*/
    {
        int day,i,j;
        day=0;
        for(i=1900;i<=year;i++)
        {
            for(j=1;j<month;j++)
            {
                day=day+days(i,j);
            }
        }
    return day;    
    }

    二、知识点总结:

    1.注意函数的调用。

    2.分清各个函数对应的关系。

    3.函数也是一段程序,可以对多个数值进行计算,注意括号里的变量。

    4.函数结束,要用return,使函数有出口。

    5.最前边函数后边要加“;”,程序中后边不加“;”。

    6.注意 # include <stdlib.h> 和# include <math.h>的使用。

    三、实验总结:

    1.不给变量初值的话可能造成结果错误。

    2.火柴实验,注意区分数字和根数的加法运算和联系。

    3.注意公约数和公倍数的求法。

  • 相关阅读:
    Java 递归、尾递归、非递归、栈 处理 三角数问题
    vmware虚拟机迁移导致的eth0消失问题
    c语言输入输出
    改动虚拟机镜像的rootpassword
    面试题之变态跳台阶
    努力是种病:放慢节奏,才能快速奔跑(转)
    做技术到底可以做到哪种地步-技术为什么越走越窄 (转)
    wpf 客户端【JDAgent桌面助手】开发详解(三) 瀑布流效果实现与UI虚拟化优化大数据显示
    我为什么写博客(转)
    入行必读:互联网行业薪酬等级!看看你值多少钱?(转)
  • 原文地址:https://www.cnblogs.com/mty1997/p/6067011.html
Copyright © 2020-2023  润新知