第八次作业

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

样例输入

yangguang
Bob
zhengyang
Bob
Bob
Zhengyang
Yangguang
Bob

样例输出

Bob

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

struct p{
    char n[20];
    int l;
}m[3];

void main()
{
    char a[20],c = '0';
    m[0].l = 0;
    m[1].l = 0;
    m[2].l = 0;
    int n = 0,max = 0;
    scanf("%s %s %s",m[0].n,m[1].n,m[2].n);
    while (c!='\n')
    {
        scanf("%s", &a);
        if (strcmp(a,m[0].n)==0)
            m[0].l++;
        else if (strcmp(a, m[1].n) == 0)
            m[1].l++;
        else if (strcmp(a, m[2].n) == 0)
            m[2].l++;
        n++;
        c = getchar();
    }
    for(n = 0; n <3 ; n++)
    {
        if (m[max].l < m[n].l)
        {
            max = n;
        }
    }
    printf("%s", m[max].n);
}

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

输入描述

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

输出描述

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

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

样例输入

3.5 -2.7 -13.9 8.7

样例输出

(17.4, -11.4)

#include<stdio.h>

struct l{
    float x;
    float y;
}a,b;

void main()
{
    scanf("%f %f %f %f",&a.x,&a.y,&b.x,&b.y);
    printf("(%.1f, %.1f)",a.x-b.x,a.y-b.y);
}

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

输入描述

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

输出描述

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

样例输入

yangchang 80 81 82
 yangguang 90 94 92
 liguang 85 80 90

样例输出

yangguang 92.00

#include<stdio.h>

struct s{
    char name[20];
    int a;
    int b;
    int c;
}m[3];

void main()
{
    int n;
    float i,j,k;
    for(n = 0; n < 3; n++){
        scanf("%s %d %d %d",m[n].name,&m[n].a,&m[n].b,&m[n].c);
    }   
    i = (m[0].a + m[0].b + m[0].c)/3.0;
    j = (m[1].a + m[1].b + m[1].c)/3.0;
    k = (m[2].a + m[2].b + m[2].c)/3.0;
    if(i > j&&i >k)
        printf("%s %.2f",m[0].name,i);
    else if(j > i&&j > k)
        printf("%s %.2f",m[1].name,j);
    else if(k > j&&k > i)
        printf("%s %.2f",m[2].name,k);
}

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

输入描述 输入包含多组样例。

每组样例包含一个整数N,代表有N个学生。

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

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

样例输入

2
1000 mingming 89
1001 lingling 90
3
1090 huanghuang 88
1076 zhouzhou 76
1003 xiaohong 87
0

样例输出

1001 lingling
1090 huanghuang

#include<stdio.h>

void main()
{
    int n;
    while(scanf("%d",&n)!=0)
{
    if(n==0)break;

    struct student{
        int num;
        char name[20];
        int gra;
    } a[n];
    int m = n,i = 0,j = 0;
    while (n != 0)
    {
        scanf("%d %s %d", &a[j].num,a[j].name,&a[j].gra);
        n--; j++;
    }
 for (i = 0,j = 0; i < m; i++)
    {
        if (a[j].gra < a[i].gra)
            j = i;
    }
        printf("%d %s\n", a[j].num, a[j].name);
    }
}

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

输入描述

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

输出描述

每组输出占一行

样例输入

6 8
1 8
12 12
6 6
0 0

样例输出

1 8
6 6
6 8
12 12

#include<stdio.h>

struct date{
    int month;
    int day;
};

void main()
{
    struct date a[100];
    int i = 0,j,n,t,f,m;
    while(scanf("%d %d", &a[i].month, &a[i].day) != EOF){
    if (a[i].month == 0 && a[i].day == 0)break;
        i++;
    }
    n = i;
    for(i = 0; i < n-1; i++){
        for(j = i+1; j < n; j++){
            if(a[i].month > a[j].month){
                t = a[i].month;f = a[i].day;
                a[i].month = a[j].month;
                a[i].day = a[j].day;
                a[j].month = t;
                a[j].day = f;
            }
        }
    }
    for(i = 0; i < n-1; i++){
        for(j = i+1; j < n; j++){
            if(a[i].month == a[j].month){
                        if(a[i].day>a[j].day){
                            m = a[i].day;
                        a[i].day = a[j].day;
                        a[j].day = m;
                    }
            }
        }
    }
    for(i = 0;i < n; i++){
        printf("%d %d\n",a[i].month,a[i].day);
    }
}

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值