高级语言第八次作业

一,这也是一道水题

题目描述

2048星球要举行一次选举,以选出他们的新一任国王。请你帮忙写一道小程序来帮助他们确定谁是新的国王。有三个候选人,每个选民只能投一票,要求输出最终的票最高的人的名字。

输入描述

前三行输入三个候选人的名字,接下来有多组输入,第i+3行代表第i个选民所支持的候选人的名字。

输出描述

输出最终当选的候选人名字。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct people{
    char name[20];
    int count;
} num[3];

int main () {
    int i,j;
    struct people p;
    char a[20];
    for(i=0;i<3;i++)
    {
        scanf("%s",num[i].name);
    }

    for(i=0;i<5;i++)
    {
        scanf("%s",&a);
        for(j=0;j<3;j++)
        {
            if(strcmp(a,num[j].name)==0)
                num[j].count++;
        }
    }
    p.count=num[0].count;
    for(i=1;i<3;i++)
    {
        if(num[i].count>p.count)
            p=num[i];
    }
    printf("%s",p.name);
    return 0;
}

二,输出坐标

题目描述

本题要求编写程序,用结构体来存储二维平面向量坐标并计算两个二维平面向量的差向量。

输入描述

输入在一行中按照“x1  y1  x2  y2 ”的格式给出两个二维平面向量v1=(x1,y1)和v2=(x2,y2)的分量。

输出描述

在一行中按照(x, y)的格式输出差向量,坐标输出小数点后一位(注意不能输出−0.0)。

注意输出逗号后面有一个空格!

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct place{
    double x;
    double y;
} num[2];

int main () {
    int i,j;
    double x,y;
    scanf("%lf%lf%lf%lf",&num[0].x,&num[0].y,&num[1].x,&num[1].y);
    x=num[0].x-num[1].x;
    y=num[0].y-num[1].y;
    printf("(%.1f, %.1f)",x,y);
    return 0;
}

三,这是一个水题

题目描述

本题要求用结构体来存储三个学生的成绩,每个学生有3门课的成绩(成绩为小数),从键盘输入以上数据(包括姓名以及各课程成绩),计算出平均成绩,然后按照平均分的降序排列输出。

输入描述

依次输入三个学生的信息,每个学生的信息占用一行。

输出描述

按照平均分的降序依次输出每个学生的姓名和平均分(保留小数点后两位数),两组输出之间需换行分割

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct place{
    char name[20];
    int a;
    int b;
    int c;
} num[3];

int main () {
    int i;
    double sum;
    struct place p;
    for(i=0;i<3;i++)
    {
        scanf("%s %d %d %d",&num[i].name,&num[i].a,&num[i].b,&num[i].c);
    }
    p=num[0];
    for(i=1;i<3;i++)
    {
        if((num[i].a+num[i].b+num[i].c)>(p.a+p.b+p.c))
            p=num[i];
    }
    sum=(p.a+p.b+p.c)/3.0;
    printf("%s %.2f",p.name,sum);

    return 0;
}

四,输出学号

题目描述

输入多个学生的学号、姓名和成绩,然后输出成绩最高的哪个学生的姓名和学号

输入描述

输入包含多组样例。每组样例包含一个整数N,代表有N个学生。接下来N行依次输入每个学生的学号、姓名和成绩。若N = 0,则表示输入结束,这个样例不需要被处理。

输出描述

对于每组用例,你应当输出这组样例N个学生中成绩最高的学生的姓名和学号,每个输出占一行。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct student{
    int number;
    char name[20];
    int score;
} num[10];

int main () {
    int i,n;
    for(i=0;;i++)
    {
        scanf("%d",&n);
        if(n!=0)
        {
            struct student p;
            int j;
            for(j=0;j<n;j++)
            {
                scanf("%d%s%d",&num[j].number,&num[j].name,&num[j].score);
            }
            p=num[0];
            for(j=1;j<n;j++)
            {
                if(num[j].score>p.score)
                    p=num[j];
            }
            printf("%d %s\n",p.number,p.name);
        }
        else
        {
            break;
        }
    }

    return 0;
}

五,输出日期

题目描述

给定几组日期,要求按照时间从前往后顺序输出

输入描述

有多组样例输入,以0 0代表结束。每行两个数字,第一个代表月份,第二个代表日期。

输出描述

每组输出占一行

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct date{
    int month;
    int day;

} num[10];

int main () {
    int i,j,count=0;
    double sum;
    struct date p;
    for(i<0;;i++)
    {
        scanf("%d %d",&num[i].month,&num[i].day);
        count++;
        if(num[i].month==0&&num[i].day==0)
            break;
    }

    for(i=0;i<count-1;i++)
    {
        for(j=i;j<count-1;j++)
        {
            if(num[i].month==num[j].month)
            {
                if(num[i].day>num[j].day)
                {
                    p=num[j];
                    num[j]=num[i];
                    num[i]=p;
                }
                else
                continue;
            }
            else if(num[i].month>num[j].month)
            {
                    p=num[j];
                    num[j]=num[i];
                    num[i]=p;
            }
        }
    }
    for(i=0;i<count-1;i++)
        printf("%d %d\n",num[i].month,num[i].day);

    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值