首页 > 代码库 > 第七次作业

第七次作业

一、实验内容

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

代码:

#include<stdio.h>
int isprime(int x);
int main()
{
    int i,n=0;
    for(i=1;i<=1000;i++)
    {
        if(isprime(i)==1)
        {
            printf("%4d",i);
            n++;
            if(n%10==0)
            {
                printf("\n");
            }
        }
    }
    printf("\n");
    printf("一共有%d个素数\n",n);
    return 0;
}
int isprime(int x)
{
    int i;
    for(i=2;i<=x-1;i++)
    {
        if(x%i==0)
            return 0;
    }
    return 1;
}

程序运行结果:技术分享

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

代码:

#include<stdio.h>
int ged(int m,int n);
int lcm(int m,int n);
int main()
{
    int a,b,m,n;
    printf("请输入两个整数:\n");
    scanf("%d%d",&a,&b);
    m=ged(a,b);
    n=lcm(a,b);
    printf("最大公约数是%d,最小公倍数是%d\n",m,n);
    return 0;
}
int ged(int m,int n)
{
    int c1;
    if(m==n)
        c1=m;
    else
    {
        while(m!=n)
        {
            if(m>n)
                m=m-n;
            else
                n=n-m;
        }
        c1=m;
    }
    return c1;
}
int lcm(int m,int n)
{
    int c2;
    c2=m*n/ged(m,n);
    return c2;
}

程序运行结果:技术分享

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;
    printf("请输入一个值:\n");
    scanf("%lf",&x);
    y1=fun(2);
    y2=fun(x+15);
    y3=fun(sin(x));
    printf("y1=%d,x=%lf时,y2=%.2lf,y3=%.6lf\n",y1,x,y2,y3); 
return 0;    
}
double fun(double x)
{
    double y;
    y=x*x-5*x+4;
    return y;
}

程序运行结果:技术分享

4、实验要求:用函数实现:火柴棍等式问题。

 有16根火柴,可以拼出多少个形如“A+B=C”的等式,A、B、C是用火柴棍拼出的整数,且为一位数,输出该等式形式。

 注意:  1. 加号与等号各自需要两根火柴棍    2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0) 3. 16根火柴棍必须全部用上。

代码:

# include <stdio.h>
int change(int n);      
int main()
{
    int a,b,c,x,y,z,m;
    for(x=0;x<=9;x++)
    {
        a=change(x);
        for(y=0;y<=9;y++)
        {
            b=change(y);
            z=x+y;
            c=change(z);
            if(a+b+c==12)
            {
                printf("%d+%d=%d\n",x,y,z);
            }
        }
    }
}
int change(int n)
{
    int m;
        if(n==1)
        {
            m=2;
        }
        else if(n==2||n==3||n==5)
        {
            m=5;
        }
        else if(n==4)
        {
            m=4;
        }
        else if(n==6||n==9||n==0)
        {
            m=6;
        }
        else if(n==7)
        {
            m=3;
        }
        else
        {
            m=7;
        }    
return m;        
}

程序运行结果:技术分享

二、知识点总结:
1、函数的返回值一般是通过return语句返回到主调函数的;

2、参数传递是单向传递的;

3、函数不能嵌套;

4、调用函数:

①、实参表可以包含多个实参,各参数间用逗号隔开,实参可以是常量、变量,表达式;

②、如果是调用无参函数,则“实参表”可以为空,但括弧不能省略;

③、实参与形参的个数应相等,类型应一致;

三、实验总结

1、一般情况下,函数中不能有输入输出的语句;

2、函数声明前要加分号;

3、函数中return语句中注意返回哪个值;

 

第七次作业