zoukankan      html  css  js  c++  java
  • 第七次作业

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

    #include<stdio.h>
    int isprime(int n);
    int main()
    {
        int i,d=0;
        for(i=2;i<=1000;i++)
        {
            if(isprime(i))
            {
                printf("%3d ",i);
                d++;
                if(d%10==0)
                printf("
    ");
            }
        }
        printf("总是为%d个。
    ",d); 
    }
    int isprime(int n)
    {
        int a,b=1;
        for(a=2;a<=n-1;a++)
            {
                if(n%a==0)
                {    
                    b=0;
                    break;
                }    
            }
        if(b==1)
            return 1;
        else
            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 num1,num2;
        printf("请输入两个正整数,用空格隔开。
    ");
        scanf("%d%d",&num1,&num2);
        while(num1<=0||num2<=0)
        {
            printf("输入错误,请重新输入。
    ");
            scanf("%d%d",&num1,&num2);
        }
        printf("最大公约数为%d,最小公倍数为%d。
    ",gcd(num1,num2),lcm(num1,num2));
    }
    int gcd(int a,int b)
    {
        int i,x,c;
        if(b>a)
        {
            x=b;
            b=a;
            a=x;
        }
        while(1)
        {
            c=a%b;
            if(c==0)
            {
                break;
            }
            a=b;
            b=c;
        }
        return b;
    }
    int lcm(int a,int b)
    {    int d;
        d=a*b/gcd(a,b);
    }

    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()
    {
        double  x,y1,y2,y3;
        printf("x*x-5*x+4
     请输入x的值。
    ");
        scanf("%lf",&x);
        y1=fun(2);
        y2=fun(x+15);
        y3=fun(sin(x));
        printf("%.3lf  %.3lf  %.3lf",y1,y2,y3);
    }
    double fun(double x)
    {
        double y;
        y=x*x-5*x+4;
        return y; 
    }

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

    #include<stdio.h>
    int huochai(int a);
    int main()
    {
        int a,b,c;
        for(a=0;a<=9;a++)
        for(b=0;b<=9;b++)
        {
            c=a+b;
            if(c>9)
            break;
            if(huochai(a)+huochai(b)+huochai(c)==12)
            {
                printf("%d+%d=%d
    ",a,b,c);
            }
        }
        return 0;
    }
    int huochai(int a)
    {
        int A;
        switch(a)
            {
                case 0:
                case 6:
                case 9:A=6;break;
                case 1:A=2;break;
                case 2:
                case 3:
                case 5:A=5;break;
                case 4:A=4;break;
                case 7:A=3;break;
                case 8:A=7;break;
            }
            return A;
    }

    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>
    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;
        printf("请输入年份个月份,用空格分开。
    ");
        
        scanf("%d%d",&year,&month);
        while(isValidate(year,month))
        scanf("%d%d",&year,&month);    
        system("cls");
        printCanlender(year,month);
        return 0;            
    }
    int isValidate(int year,int month)/*输入数据的合法性验证  */
    {
        int flag=0;
        if(year<1900||month<1||month>12)
        {
            printf("数据错误,请重新输入。
    ");
            flag=1;
        }    
        return flag;
    }
    int isLeap(int year)/* 判断闰年 */
    {
        int run=0;
        if(year%4==0&&year%100!=0||year%400==0)
            {
                run=1;
            }
        return run;
    }
    int days(int year,int month)/*计算某年某月的天数  */
    {
        int day;
        if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
        {
            day=31;
        }        
        else if(month==4||month==6||month==9||month==11)
        {
            day=30;
        }
        else if(month==2)    
        {
            if(isLeap(year))
            {
                day=29;
            }
            else 
            {
                day=28;
            }
        }
        return day;
    }
    int totalDays(int year,int month)/* 计算某年某月到1900年1月1日的总天数 */
    {
        int sum1=0,sum2=0,sum=0,i,year1;
        year1=year;
        for(year1=year1-1;year1>=1900;year1--)
        {
            if(isLeap(year1))
            {
                sum1=sum1+366;
            }
            else
            {
                sum1=sum1+365;
            }
        }
        
        for(i=1;i<month;i++)
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
            {
                sum2=sum2+31;
            }
            else if(i==4||i==6||i==9||i==11)
            {
                sum2=sum2+30;
            }
            else if(i==2)
            {
                if(isLeap(year))
                {
                    sum2=sum2+29;
                }
                else
                {
                    sum2=sum2+28;
                }
            }
        }       
        sum=sum1+sum2;
        return sum;
    }
    void printCanlender(int year,int month)/*输出万年历  */
    {
        int n,h;
        printf("%d年%d月
    ",year,month);
        printf("星期日  星期一  星期二  星期三  星期四  星期五  星期六
    ");
        switch(totalDays(year,month)%7)
            {
        /*1*/   case 0:printf("	");h=2;break;
                case 1:printf("		");h=3;break;
                case 2:printf("			");h=4;break;
                case 3:printf("				");h=5;break;
                case 4:printf("					");h=6;break;
                case 5:printf("						");h=7;break;
                case 6:h=1;break;
            } 
        for(n=1;n<=days(year,month);n++,h++) 
        {
            printf("  %2d    ",n);
            if(h%7==0)
            {
            printf("
    ");        
            }
        }
    
    }

    知识点总结:一个函数最多只能返回一个值。

          函数只能单向传递,即实参传给形参,形参不会影响实参。

          一般情况下自定义函数里不应该有输入输出语句。

          函数原型采用复制粘贴函数首部加分号的方法。

          好习惯:在程序开头声明说有函数;主函数放在前面。

          自定义函数只是暂时储存数值,执行结束后便会清空。

          如果不声明函数类型,默认是int。

          函数无返回值,单独作为一个函数调用语句。

          函数之前是平行的,不能嵌套。

          自定义函数之前也可以相互调用。

    实验总结:自定义函数体里,如果除了形参外需要用其他变量,一定在函数体前要在定义。

         声明函数后面不要丢掉分号。

         分清实参和形参。

         自定义函数之前相互调用时考虑好同一个变量是否已经改变。

         定义类型和输入输出类型保持一致。

         辗转相除法:最小的除数就是最大公约数;

          

  • 相关阅读:
    java事件处理(贪吃蛇)
    九九乘法表
    使用文件包含指令include
    jsp页面的基本构成
    软件测试博客

    成功职业女性处世的10大秘诀
    再见啦,冬冬妹
    网摘——杜晓眼眼中的尹珊珊:什么都要,什么都要得到
    网摘——事关“工程师思维”
  • 原文地址:https://www.cnblogs.com/TX980502/p/6063995.html
Copyright © 2011-2022 走看看