zoukankan      html  css  js  c++  java
  • 2016-11-16

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

    #include <stdio.h>
    int isprime(int n);
    void main()
    {
        int i,k=0;
        for(i=2;i<=1000;i++)
        {
            if(isprime(i))
            {
                printf("%03d ",i);
                k++;
                if(k%10==0)
                {
                    printf("
    ");
                }
            }
        }
        printf("一共有%d个素数
    ",k);
    }
    int isprime(int n)
    {
        int j;
        for(j=2;j<=n-1;j++)
        {
            if(n%j==0)
            {
                return 0;
            }  
        }
        return 1;
    }
      
    总结:注意如何调用函数
    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);
    void main()
    {
        int a,b,k,j;
        printf("请输入两个正整数a,b
    ");
        scanf("%d%d",&a,&b);
        while(a<=0||b<=0)
        {
            printf("Error  请重新输入
    ");
            scanf("%d%d",&a,&b);
        }
        k=gcd(a,b);
        j=lcm(a,b);
        printf("最大公约数为%d,最小公倍数为%d
    ",k,j);
    }
    int gcd(int a,int b)
    {
        int i,min,k;
        if(a>b)
        {
            min=b;
        }
        else
        {
            min=a;
        }
        for(i=1;i<=min;i++)
        {
            if(a%i==0&&b%i==0)
            {
                k=i;
            }
    
        }
        return k;
    }
    int lcm(int a,int b)
    {
        int j;
        j=a*b/gcd(a,b);
        return j;
    }

    总结:注意不要忘了自定义函数的最后的返回值

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

     总结:注意寻找各个式子之间的规律   最后在主函数中调用y

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

    #include <stdio.h>
    int huochai(int a);
    void 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);
                }
            }
    }
    int huochai(int a)
    {
        int m;
        switch(a)
        {
            case 0: 
            case 6: 
            case 9: m=6; break;
            case 2: 
            case 3: 
            case 5: m=5; break;
            case 1: m=2; break;
            case 4: m=4; break;
            case 7: m=3; break;
            case 8: m=7; break;
        }
        return m;
    }

     总结:寻找火柴棍和算式之间的规律   可以注意代码的优化

    附加题

        函数实现万年历,其中需定义以下函数

        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))
        {
            printf("error
    ");
            scanf("%d%d",&year,&month);
        }
        system("cls");
        printCanlender(year,month);
        return 0;
    }
    int isValidate(int year,int month)// 输入数据的合法性验证
    {
        int n=0;    
        if(year<1900||month<1||month>12)
        {
            n=1;
        }
        return n;
    }
    int isLeap(int year)// 判断闰年
    {
        int m=0;
        if((year%4==0&&year%100!=0)||year%400==0)
        {
            m=1;
        }
        
        return m;
    }
    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(isLeap(year))
             {
                  day=29;
             }
             else
             {
                 day=28;
            }
        }
        return day;
    }        
    int totalDays(int year,int month)//  计算某年某月到1900年1月1日的总天数
    {
        int i,days=0;
        for(i=1900;i<year;i++)
        {
            if(isLeap(i))
            {
                days=days+366;
            }
            else
            {
                days=days+365;
            }
        }
        for(i=1;i<month;i++)
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10|i==12)
            {
                days+=31;
            }
            else if(i==4||i==6||i==9||i==11)
            {
                days+=30;
            }
            else
            {
                if(isLeap(year))
                {
                    days+=29;
                }
                else
                {
                    days+=28;
                }
            }
        }
    
        return days;
    }
    void printCanlender(int year,int month)//  输出万年历
    {
        int weekday,i;
        weekday=(totalDays(year, month)+1)%7;
        printf("%d年%d月
    ",year,month);
        printf("
                *******%d年%d月*******
    ",year,month);
        printf("星期日	星期一	星期二	星期三	星期四	星期五	星期六
    ");    
        for(i=0;i<weekday;i++)
        {
            printf("	");
        } 
        for(i=1;i<=days(year,month);i++)
        {
            printf("  %d	",i);
            if((i+weekday)%7==0)
            {
                printf("
    ");
            }
        }
        printf("
    ");
    }

     总结:要多思考函数与函数之间如何调用   循环变量不能再写错了

    知识点总结:

    1.一般情况下函数中不应有输入输出语句

    2.函数的返回语句:

    (1)函数中可以有多个return语句

    (2)若无return语句,遇}时,自动返回调用函数

    (3)若函数类型与return语句中表达式值的类型不一致,按前者为准

    3.函数的调用

    (1)()起到了表示函数调用的重要作用

    (2)即使没有参数也需要()

    (3)如果有参数,则需要正确的数量和顺序

    (4)函数没有返回值的时候,单独作为一个函数调用语句

             如:printstar();

                   printf("Hello,World ");

    (5)函数有返回值时,可放到一个赋值表达式语句中:m=max(a,b)*2;

    (6)形参:全称为“形式参数”是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数。
    形参的作用是实现主调函数与被调函数之间的联系,通常将函数所处理的数据,影响函数功能的因素或者函数处理的结果作为形参。没有形参的函数在形参表的位置应该写void.main 函数也可以有形参和返回值,其形参也称为命令行参数,由操作系统在启动程序时初始化,其返回值传递给操作系统。形式参数是用于调用函数和被调用函数之间进行数据传递的,使用时需进行类型说明。形参可以为空,也可以由多个参数组成。
    (7)实参:可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值输入等办法使实参获得确定值。

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

    (9)不允许函数体内嵌套定义函数

  • 相关阅读:
    字符串题目
    Java 练习题摘录
    数据库原理及应用-引言
    数学类题目
    牛顿法
    动态规划-最大子段和
    判断数幂
    杭电1096
    算法导论01 几种排序以及其时间复杂度01
    杭电2059龟兔赛跑
  • 原文地址:https://www.cnblogs.com/333xar/p/6070529.html
Copyright © 2011-2022 走看看