实验任务一

//一元二次方程求解
#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 //要几个就把5改成几 

int main()
{
    int x,n;
    
    srand(time(0)); //以当前系统时间作为随机种子 ?
    n=0;
    do{
        n++;
        x=rand()%10; //生成一个0~9之间的随机整数
        printf("%3d",x); 
    } while(n<N); 
    
    printf("\n");
    
    return 0; 
} 

 

实验任务三

//输出100-200的素数及个数
#include<stdio.h>
#include <math.h>
int main(){
    int m,n,i,a;
    m=0;
    for(n=101;n<200;n++){
        a=sqrt(1.0*n);
        for(i=2;i<=a;i++)
        {
            if(n%i==0)break;
        }
        if(i>a){
          printf("%5d",n);
          m++;
          if(m%5==0){
            printf("\n"); 
          }
        } 
    }
    
    printf("\n100~200之间共有%d个素数",m); 
    return 0;
    
}

 

实验任务四

算法思路:

1.如何取出数位上的奇数:通过取余得到最低位的数字,再通过整除得到去掉最低位的数,再判断,余数取余是否为0,若为0,则该余数是偶数,不符合,继续循环,若不为0,则余数为奇数,符合,取出。

2.如何确保构成的新数中,原先的高位仍在高位,原先的低位仍在低位:每次循环后将得到的余数加上上次余数(初始值为0)的10倍,得到完整的所有奇数组成的数,但此时最高位与最低位的位置是反的,所以再做一次倒序处理即可得到高位仍在高位、低位仍在低位的奇数。

#include<stdio.h>
int main(){
    long m,s,t=0,a,b=0;
    printf("Enter a number:");
     
    while(scanf("%ld",&s)!=EOF){
        while(s!=0){
            m=s%10;
            s=s/10;
            if((m%2)!=0){
                t=t*10+m;
            }
        }
        while(t!=0){
            a=t%10;
            t=t/10;
            b=b*10+a;            
        }     
        printf("new number is:%ld\n",b);
        b=0;
        printf("\nEnter a number:");       
    }
    return 0;
}

 

实验任务五

 

#include<stdio.h>
#include<math.h>
unsigned f(unsigned x);
int main(){
    unsigned n,a=2;
    double b=2.0;
    float s=1.0;
    printf("Enter n(1~10):");
    
    while(scanf("%u",&n)!=EOF){    
        while(a<=n){
            s=s+(pow(-1.0,b-1.0)/f(a));
            a++,b++;
        }
    printf("n = %u, s= %f\n",n,s);
    a=2,b=2.0;
    printf("\nEnter n(1~10):");
    }
    return 0;    
}

unsigned f(unsigned x){
    unsigned y;
    
    if(x==1)
        y=1;
    else
        y=x*f(x-1);
    
    return y;
}

这个用了函数的使用,但是只有个别输出的结果正确,想知道哪里出了错T T.

#include<stdio.h>
int main(){
    int m=-1,n,a;
    double s=1.0,b=1.0;
    printf("Enter n(1~10):");
        
    while(scanf("%d",&n)!=EOF){
        a=2;
        while(a<=n){
            b=a*b;
            s=s+m*1.0/b;
            a++;
            m=-m;
        }
        printf("n = %d,s = %lf\n",n,s);
        printf("\nEnter n(1~10):");
    }        
    return 0;
} 

n=10的输出结果还是和文档里给的实例不一样,想知道是程序出错了还是因为小数的叠加的出现误差。

 

实验任务六

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

试了很多次,最后一次判断还是无法输出,保留疑问。

 

实验总结:

        通过本次实验,对循环和条件语句的应用更加熟悉了一些,但是还是有自己都绕不出来的部分,有参考其他同学的代码,再自己进行编写和改变,还有一些实验目的没有达到,希望可以再改进。