实验3 C语言分支语句和循环语句编程应用

//一元二次方程求解
//重复执行,直到按ctrl+z结束
// 
#include <math.h>
#include <stdio.h>

int main(){
    float a,b,c,x1,x2;
    float delta,real,imag;
    
    printf("Enter a,b,c:");
    
    while(scanf("%f%f%f",&a,&b,&c)!=EOF){
        if(a==0)
            printf("not quadratic equation.\n\n");
        else{
            delta=b*b-4*a*c;
            
            if(delta>=0){
                x1=(-b+sqrt(delta))/(2*a);
                x2=(-b-sqrt(delta))/(2*a);
                printf("x1=%.2f,x2=%.2f\n\n",x1,x2);
            }
            else{
                real=(-b)/(2*a);
                imag=sqrt(-delta)/(2*a);
                printf("x1=%.2f+%.2fi,x2=%.2f-%.2fi\n\n",real,imag,real,imag);
            }
        }
        printf("Enter a,b,c:");
    }
    return 0;
} 

 

 

//生成N个0~9之间的随机整数,并打印输出
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 5

int main(){
    int x,n;
    
    srand(time(0));
    n=0;
    do{
        n++;
        x=rand()%10;
        printf("%3d",x);
    }while(n<N);
    
    printf("\n");
    
    return 0;
} 

 

 

//ex3
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    int i,m,x,cnd;
    cnd=0;
    for(i=101;i<=200;i++)   //给定i的范围   
    {
        m=sqrt(1.0*i);      //定下最大除数 
        for(x=2;x<=m;x++)   //实现除数从2到根号被除数 
        {
        if(i%x==0)          //x不是素数 
        break;              //结束循环
        }
        if(x>m)             //除数过半,还未找到可整除的数 
        {
        printf("%d\t",i);   //打印输出i,每隔九列 
        cnd++;              //计数,统计素数个数 
        if(cnd%5==0)        //每打印五个,换行 
        {
        printf("\n");
        }
    }
}
    printf("\n101~200之间有%d个素数\n",cnd);
    return 0; 
}

 

 

任务四

算法思路:

①取出奇数:从末位开始,先对10取余,判断余数的奇偶,若是奇数则记录,偶数则不记录;将原数对10进行整除运算,重复上述步骤,且将第一次得到的数字乘以10在加上本次数字;继续重复上述步骤,直至对10整除得到结果为0;

②保持高位仍在高位:利用反位输出的原理,先对10取余,记录,再对10进行整除,第一次得到的数字乘以10加上第二次的数字,重复上述步骤,直至对10整除得到结果为0;

本题注意点是输入数字为长整型;

关于这部分的反位输出我写了两种,都尚存小瑕疵:

第一种输出是以整体数字输出,但从第二次开始,会将前一次的数字累加输出;

第二种输出是以单个数字输出,视觉效果是与题意相符的,但实际可能不是题目想得到的结果;

//ex4
//依次取出奇数,按序排列
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main (){
    long x,t,p;
    t=0,p=0;
    printf("请输入一个数字:\n");
    while(scanf("%ld",&x)!=EOF)
    {
        while(x!=0)
        {
            long m,n;
            m=x%10;
            n=m%2;
            
            if(n!=0)
            {
            t=t*10+m;
            x=x/10;    
            }
            else
            x=x/10;
        }
        while (t!=0)
        {
            int m,n;
            n=t%10;
            p=p*10+n;
            t=t/10;    
        }
        printf("%d",p);
}
    return 0;

 

//ex4
//依次取出奇数,按序排列
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int main (){
    long x,t;
    t=0;
    printf("请输入一个数字:\n");
    while(scanf("%ld",&x)!=EOF)
    {
        while(x!=0)
        {
            long m,n;
            m=x%10;
            n=m%2;
            
            if(n!=0)
            {
            t=t*10+m;
            x=x/10;    
            }
            else
            x=x/10;
        }
        while (t!=0)
        {
            int m,n,p;
            n=t%10;
            printf("%d",n);
            t=t/10;
        }
}

    return 0;
}

 

任务五

尚存问题:s值第一次是正确的,第二次起,会将前一次的结果加上后输出;

//ex5
#include <stdio.h>
#include <math.h>

int main(){
    int n,i,p;
    p=1;
    double s=0.0,t=-1.0,q;
    printf("Enter n(1~10):");
    while(scanf("%d",&n)!=EOF)
    {   
        if(n<=0||n>10)
        printf("something wrong,please enter again!\n");
            for(i=1;i<=n;i++)
            {
                p=p*i;
                q=pow(t,i-1.0);
                s=s+1/(p*q);
            }
        printf("n=%d,s=%f\n\n",n,s);
        printf("Enter n(1~10):");
    }
    return 0;
}

 

 

//ex6 
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
int main(){
    int m,n,x;
    n=1;
    srand(time(0));
    x=rand()%31+1;
    printf("猜猜2020年12月哪一天会是你的luck day\n");
    printf("开始喽,你有三次机会,猜吧(1~31):");
    
    scanf("%d",&m);
    while(n<3)
    {
    if(x==m)
    {printf("你猜对啦!恭喜你!\n");
    break;}
    else if(x>m)
    printf("你猜的日期早了,luck day还没到呢!\n");
    else
    printf("你猜的日期晚了,luck day悄悄溜到前面啦!\n");

    printf("再猜(1~31):");
    scanf("%d",&m);
    n++;
    }

    {
    if(n=3&&x==m)
    printf("你猜对啦!恭喜你!\n");
    else
    printf("次数用完了,悄悄告诉你:12月,你的luck day 是:%d",x);
    }

    return 0;
}

 

 

posted @ 2020-11-19 19:55  捞月亮的时光机  阅读(104)  评论(1编辑  收藏  举报