实验三

#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;
}

#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;
}

#include<stdio.h>
int main(){
    int i,j,k,n=0;
    for(i=101;i<=200;i++){
        k=1;
        for(j=2;j<i;j++){
            if(i%j==0){
                k=0;
                break;
            }
        }
        if(k==1){
            printf("%5d",i);
            n++;
            if(n%5==0){
                printf("\n");
            }
        }
    }
    printf("\n101~200之间共有%d个素数",n);
    return 0;
}

#include<stdio.h>
int main(){
    long s;
    int n,i,j,k;
    
    printf("Enter a number:");
    while(scanf("%ld",&s)!=EOF){
        i=s;
        n=1;
    while(i>9){
        i/=10;
        n*=10;
    }
    printf("New number is:");
    for(;n>0;n/=10){
        j=s/n;
        s%=n;
        if(j%2!=0){
            printf("%d",j);
        }
    }
    printf("\n\nEnter a number:");
    }
    return 0;
}

实验四主要思路:要提取出奇数,就要由高到低提取出每一位数进行判断。先算出输入的 number是n位数,对应x=10的n-1次方,比如5位数对应10000.用number除以x,可以得到number的最高位,用number对x取余,可以得到number剩下的数字,让x/10.依此循环,可以把number的每一位数由高到低分离开来,再对2取余,若不等于0,则为奇数,输出即可。

#include<stdio.h>
int main(){
    int n,i=2,j=1,x=1;
    double k,s=1.0;
    printf("Enter n(1~10):");
    while(scanf("%d",&n)!=EOF){
        for(;i<=n;i++){
        j*=i;
        k=1.0/j;
        x++;
        if(x%2==0){
            k=-k;
        }
        s+=k;
    }
    printf("n=%d,s=%lf\n\n",n,s);
    getchar();
    printf("Enter n(1~10):");
    }
    return 0;
} 

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main(){
    int i,j,k=0,n=0;
    
    srand(time(0));
    i=rand()%31+1;
    
    printf("猜猜2020年12月哪一天会是你的lucky day\n\n");
    printf("开始咯,你有三次机会,猜吧(1~31):");
    
    do{
        if(k!=0)
        printf("\n\n再猜(1~31):");
        scanf("%d",&j);
        if(j<i){
            printf("\n\n你猜的日期早了,lucky day还没到呢");
        }
        else if(j>i){
            printf("\n\n你猜的日期晚了,lucky day悄悄溜到前面去了");
        }
        else{
            n=1;
        }
        k++;
    }while(j!=i&&k<3);
    if(n==1){
        printf("\n\n猜对啦"); 
    }
    if(n==0){
        printf("\n\n次数用完啦。偷偷告诉你:12月,你的lucky day是%d号",i);
    }
    return 0;
}

 

 

实验总结:

       这次实验给我的最大收获是使用while(scanf(“%d%d”)!=EOF),以前总觉得代码运行一次要重启才能运行第二次很麻烦,现在解决这个问题啦。但是EOF和-1之间的关系还不是很懂。

       这次实验的瓶颈是排版吧,能算出结果固然重要,但把它弄成之间想要的排版也很重要。在实验六中,先输出什么,后输出什么,怎么让“再猜”在三次内出现,而最后一次不出现之类的问题,修修改改了很多次。

       在编程的时候,总是让我思考很久的是使用什么循环语句最快捷高效,希望有大佬能指点迷津啊。

      像素数,数字分离之类的问题,是出现得很频繁的,觉得自己还不够熟练,希望自己多加练习吧。

posted @ 2020-11-15 19:06  时生与你  阅读(108)  评论(0编辑  收藏  举报