第七次作业

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

#include<stdio.h>
int isprime(int n);
int main()
{
    int m,n,i;
    for(m=0,i=2;i<=1000;i++)
    {
        if(isprime(i))
        {
            printf("%3d   ",i);
            m++;
            if(m%10==0)
        {
            printf("\n");
        }
        }
    }
    printf("%d",m);
}
int isprime(int n)
{
    int ia;
    for(ia=n-1;ia>=2;ia--)
    {
        if(n%ia==0)
        {
            return 0;
        }
     } 
     return 1;
}

 2.求两个正整数的最大公约数和最小公倍数。用一个函数gcd(int a,int b)求最大公约数,另一个函数lcm(int a,int b)根据求出的最大公约数求最小公倍数。

#include<stdio.h>
int m;
int gcd(int a,int b);
int lcm(int a,int b);
int main()
{
    int x,y,n;
    scanf("%d %d",&x,&y);
    m=gcd(x,y);
    if(gcd(x,y))
    {
        n=x*y; 
        printf("没有公约数,最小公倍数为%d\n",n);
    }
    else
    {
        n=lcm(x,y);
        printf("最大公约数为%d,最小公倍数为%d\n",m,n);
    }
}
int gcd(int a,int b)
{
    int ii,ia;
    for(ii=a;ii>=1;ii--)
    {
        if(a%ii==0&&b%ii==0)
        {
            return ii;
        }
    }
    return 0;
}
int lcm(int a,int b)
{
    int i=1;
    while(1)
    {
        if(i%a==0&&i%b==0)
        {
            break;
        }
        else
        {
            i=i*m;
        }
    }
    return i;
}

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 y3;
    int x,y1,y2;
    scanf("%d",&x);
    y1=fun(x);
    y2=fun(x+15);
    y3=fun(sin(x));
    printf("y1=%d,y2=%d,y3=%lf",y1,y2,y3);
}
double fun(double x)
{
    double i;
    i=x*x-5*x+4;
    return i;
}

 

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

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

二、知识点总结

1、函数声明只是告诉程序“我有这个函数”,而程序的反应是“我知道了,帮你看看”,只有在写这个函数时这个函数才真正具有内容。

2、调用函数,可以在任何时候,其方式因函数种类而异。个人认为分两种,及自定义函数的调用和非自定义函数的调用。

3、形参即“模板位置”,实参为“实际内容”,运算时实参被传递到形参代表的“模具位置”进行运算。

4、全局(外部)变量应声明于所运用的函数之前。

三、实验总结

1、火柴问题中,要注意将“多对一”的问题交给switch解决,switch很难解决这种情况下的“一对多”问题。

2、实验二中的全局变量实际多余......

posted on 2016-11-20 17:54  wxc123  阅读(317)  评论(1编辑  收藏  举报

导航