2016年885考研真题编程题

第一题:

#include <stdio.h>
#include <math.h>
FILE *in=fopen("Coefficent.txt","r+");
FILE *out=fopen("result.txt","w+");
void deal(int a,int b,int c);
void deal(int a,int b,int c,double x);
void deal(int a,int b,int c,double x1,double x2);
int main(){
    int a,b,c,a1,b1,c1;
    double x1,x2,disc;
    while((fscanf(in,"%d%d%d",&a1,&b1,&c1))!=EOF){
        a=a1;b=b1;c=c1;
        if((a!=0)&&(b!=0)){//ax*x+b*x+c或者a*x*x+b*x形式 
            disc=b*b-4*a*c;
            if(disc>0){
                x1=(-b-sqrt(disc))/(2*a);
                x2=(-b+sqrt(disc))/(2*a);
                deal(a,b,c,x1,x2);
            }else if(disc==0){
                x1=-b/(2*a);
                deal(a,b,c,x1); 
            }else{
                deal(a,b,c);
            } 
        }else if((a==0)&&(b!=0)){
            deal(a,b,c,-c/b);
        }else if((a!=0)&&(b==0)){
            if(a>0){
                deal(a,b,c,sqrt(a/c),-sqrt(a/c));
            }else{
                deal(a,b,c);
            }
        }else if((a==0)&&(b==0)){
            if(c==0){
                deal(a,b,c); 
            }else{
                deal(a,b,c);
            }
        }
    }
    fclose(in);
    fclose(out);
    return 0;
}
void deal(int a,int b,int c){
    if(a==0&&b==0&&c==0){
       printf("a=%d\tb=%d\tc=%d时方程无穷解\n",a,b,c);    
    }else
     printf("a=%d\tb=%d\tc=%d时方程无实数解\n",a,b,c); 
}
void deal(int a,int b,int c,double x){
    printf("a=%d\tb=%d\tc=%d时方程具有单解x=%lf\n",a,b,c,x);
    fprintf(out,"%d\t%d\t%d\t%lf\n",a,b,c,x);
}
void deal(int a,int b,int c,double x1,double x2){
    printf("a=%d\tb=%d\tc=%d时方程具有双解x1=%lf\tx2=%lf\n",a,b,c,x1,x2);
    fprintf(out,"%d\t%d\t%d\t%lf\t%lf\n",a,b,c,x1,x2);
}

第二题:

#include <stdio.h>
#include <math.h>
#define N 30
struct student{
    int no;//学号
    char name[20];//姓名
    double score[5];//分数
    double sum;//总分
    int rank;//排名 
}stu[N],temp,kem;
int main(){
    int i,j,k;
    double sum;
    for(i=0;i<N;i++){
        printf("请输入第%d个学生的信息:\n",i+1);
        scanf("%d%s",&stu[i].no,stu[i].name); 
        sum=0;
        for(j=0;j<5;j++){
            scanf("%lf",&stu[i].score[j]);
            sum+=stu[i].score[j];
        }
        stu[i].sum=sum; 
    }//信息初始化
    //进行排序
    for(i=0;i<N-1;i++){
        kem=stu[i];k=i;
        for(j=i+1;j<N;j++){
           if(kem.sum<stu[j].sum){
             k=j;
             kem=stu[j];
          }
        }
        temp=stu[i];
        stu[i]=kem;
        stu[k]=temp;
    }//完成排序
    //对学生进行名次确定.考虑并列的情况;
    int rank=1;
    for(i=0;i<N;i++){
        if(i==0){ 
           stu[i].rank=rank;
           rank++;
       }else{
            if(stu[i].sum==stu[i-1].sum){
                stu[i].rank=stu[i-1].rank;
                rank++; 
            }else{
                stu[i].rank=rank;
                rank++;
            }
        }
    }//完成名次确定 
    printf("按总分成绩排序信息:\n");
    printf("学号\t姓名\t数学\t语文\t物理\t化学\t英语\t总分\t名次\n");
    for(i=0;i<N;i++){
        printf("%d\t%s\t",stu[i].no,stu[i].name);
        for(j=0;j<5;j++){
            printf("%6.3lf\t",stu[i].score[j]);
        }
        printf("%lf\t%d\n",stu[i].sum,stu[i].rank);
    }
    //关注前10名有单科成绩低于80分的情况
    printf("前10名有单科成绩低于80分的情况\n");
    printf("学号\t姓名\t数学\t语文\t物理\t化学\t英语\t总分\t名次\n");
    for(i=0;stu[i].rank<=10;i++){
        for(j=0;j<5;j++){
            if(stu[i].score[j]<80) break;
        }
        if(j<5){
           printf("%d\t%s\t",stu[i].no,stu[i].name);
           for(j=0;j<5;j++){
             printf("%6.3lf\t",stu[i].score[j]);
           }
           printf("%lf\t%d\n",stu[i].sum,stu[i].rank);
        }     
    } 
    return 0;
} 

测试数据:

2001 liu 85 85 85 76 100
2002 bao 90 90 90 90 90
2003 wang 100 100 100 100 70
2004 chen 70 100 80 90 60
2005 hu 100 50 100 90 100
2006 xu 70 90 90 90 90
2007 hua 10 10 10 10 10
2008 ma 20 20 20 20 20
2009 luo 30 30 30 30 30
2010 l1 40 40 40 40 40
2011 l2 50 50 50 50 50
2012 l3 60 60 60 60 60
2013 l4 70 70 70 70 70
2014 l5 80 80 80 80 80
2015 l6 90 90 90 90 90
2016 l7 40 40 40 40 40
2017 l8 50 50 50 50 50
2019 l9 60 60 60 60 60
2020 l10 70 70 70 70 70
2021 l11 80 80 80 80 80
2022 l12 90 90 90 90 90
2023 l13 40 40 40 40 40
2024 l14 50 50 50 50 50
2025 l15 60 60 60 60 60
2026 l41 70 70 70 70 70
2027 l51 80 80 80 80 80
2028 l61 90 90 90 90 90
2029 l52 80 80 80 80 80
2030 l62 90 90 90 90 90
2031 l62 90 90 90 90 90

结果:

第三题:

#include <stdio.h>
#include <math.h>
int fun(int n,int k){
    if(n==k||k==0) return 1;
    else return fun(n-1,k-1)+fun(n-1,k);
}
int main(){
    int n,k;
    scanf("%d%d",&n,&k);
    int s=fun(n,k);
    printf("n=%d,k=%d时s=%d\n",n,k,s);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

欲游山河十万里

你的鼓励是我们创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值