郑州轻工业大学zzulioj1180~1189合集

郑州轻工业大学zzulioj1180~1189合集


1080成绩统计(结构体专题)

题目描述
从键盘输入若干个学生的信息,每个学生信息包括学号、姓名、3门课的成绩,计算每个学生的总分,输出总分最高的学生的信息。

输入
首先输入一个整数n(1<=n<=100),表示学生人数,然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及三个整数,表示语文、数学、英语三门课成绩,数据之间用空格隔开。

输出
输出总成绩最高的学生的学号、姓名、及三门课成绩,用空格隔开。若有多个最高分,只输出第一个。

样例输入 Copy
3
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
样例输出 Copy
541207010189 Wangli 85 87 99
代码如下(示例):

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

typedef struct score{
	char ID[15];
	char name[30];
	int a, b, c;
}GRADE; 

int main() {
	int n, i;
	GRADE stu, max;
	max.a = 0;
	max.b = 0;
	max.c = -1;
	scanf("%d", &n);	// 输入n 
	for(i = 0; i < n; i++){
		scanf("%s", stu.ID);	// 输入学号 
		scanf("%s", stu.name);	// 输入姓名 
		scanf("%d %d %d", &stu.a, &stu.b, &stu.c);	// 输入成绩
		if(stu.a + stu.b + stu.c > max.a + max.b + max.c){	// 求总分最高 
			max = stu;
		} 
	}
	printf("%s ", max.ID);
	printf("%s ", max.name);
	printf("%d ", max.a);
	printf("%d ", max.b);
	printf("%d\n", max.c); 
	
	return 0;
}

1081谁的年龄最小(结构体专题)

题目描述
设计一个结构体类型,包含姓名、出生日期。其中出生日期又包含年、月、日三部分信息。输入n个好友的信息,输出年龄最小的好友的姓名和出生日期。

输入
首先输入一个整数n(1<=n<=10),表示好友人数,然后输入n行,每行包含一个好友的信息:姓名(不超过20位)以及三个整数,分别表示出生日期的年月日。

输出
输出年龄最小的好友的姓名和出生日期,用空格隔开,出生日期的输出格式见输出样例。

样例输入 Copy
3
Zhangling 1983 2 4
Wangliang 1983 12 11
Fangfang 1985 6 1
样例输出 Copy
Fangfang 1985-06-01

代码如下(示例):

#include <stdio.h>
typedef struct date
{
    char name[32];
    int year, month, day;
} DATE;
int main()
{
    int n, i;
    scanf("%d", &n);
    DATE d, max;
    max.year = 0;
    max.month = 0;
    max.day = -1;
    while (n--)
    {
        scanf("%s %d %d %d", d.name, &d.year, &d.month, &d.day);
        if (max.year == d.year)
        {
            if (max.month == d.month)
            {
                if (max.day < d.day)
                {
                    max = d;
                    /* code */
                }
                /* code */
            }
            else if (max.month < d.month)
            {
                max = d;
            }
            /* code */
        }
        else if (d.year > max.year)
        {
            max = d;
        }
    }
    printf("%s %04d-%02d-%02d\n", max.name, max.year, max.month, max.day);
    return 0;
}

1082查询记录(结构体专题)

题目描述
有一学生成绩表,包括学号、姓名、3门课程成绩。请实现如下查找功能:输入一个学生的学号,输出该学生学号、姓名、3门课程成绩

输入
首先输入一个整数n(1<=n<=100),表示学生人数;
然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。
最后一行输入一个学号num
输出
若学号num存在,输出该学生的学号、姓名、3门课程成绩;若该学号不存在,则输出“Not Found”。
样例输入 Copy
3
541207010188 Zhangling 89 78 95
541207010189 Wangli 85 87 99
541207010190 Fangfang 85 68 76
541207010188
样例输出 Copy
541207010188 Zhangling 89 78 95
代码如下(示例):

#include <stdio.h>
#include<math.h>
#include<limits.h>
#include<string.h>
#include<ctype.h>
#include<malloc.h>
typedef struct student
    {
        long long ID;
        char name[21];
        int x;
        int y;
        int z;
    }STU;
int main()
{
    STU stu[101],kay;
    int n,i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%lld %s %d %d %d",&stu[i].ID,&stu[i].name,&stu[i].x,&stu[i].y,&stu[i].z);
    scanf("%lld",&kay.ID);
    for(i=0;i<n;i++)
    {
      if(stu[i].ID==kay.ID)
      {
          printf("%lld %s %d %d %d",stu[i].ID,stu[i].name,stu[i].x,stu[i].y,stu[i].z);
          return 0;
      }
    }
    printf("Not Found");
    return 0;
}


1083平面点排序(一)(结构体专题)

题目描述
平面上有n个点,坐标均为整数。请按与坐标原点(0,0)距离的远近将所有点排序输出。可以自己写排序函数,也可以用qsort库函数排序。

输入
输入有两行,第一行是整数n(1<=n<=10),接下来有n行,每行一对整数(每对整数对应一个点)。

输出
输出排序后的所有点,格式为(u,v),每个点后有一个空格。测试数据保证每个点到原点的距离都不同。

样例输入 Copy
4
1 3
2 5
1 4
4 2
样例输出 Copy
(1,3) (1,4) (4,2) (2,5)
代码如下(示例):

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

typedef struct point{
	int x;
	int y;
	int dist;
}stu; 

int main() {
	int n, i, j;
	stu a[15], t;
	scanf("%d", &n);
	for(i = 0; i < n; i++){
		scanf("%d%d", &a[i].x, &a[i].y);	// 输入坐标x,y 
		a[i].dist = a[i].x * a[i].x + a[i].y * a[i].y;
	}
	for(i = 0; i < n - 1; i++){
		for(j = i + 1; j < n; j++){
			if(a[i].dist > a[j].dist){	// 排序 
				t = a[i];
				a[i] = a[j];
				a[j] = t; 
			}
		}
	}
	for(i = 0; i < n; i++){
		printf("(%d,%d) ", a[i].x, a[i].y);
	}
	return 0;
}

1084平面点排序(二)(结构体专题)

题目描述
平面上有n个点,坐标均为整数。横坐标相同时按纵坐标排序,否则按横坐标排序。本题要求用结构体存储坐标,再进行排序。先升序排序输出,再降序排序输出,可以自己写排序函数,也可以用qsort库函数排序。

输入
第一行是整数n(1<=n<=100),表示接下来有n行,每行两个整数,表示平面上一个点的坐标。

输出
输出有两行,即排序后的点,格式为(u,v),每个点后有一个空格。第一行升序排序结果,第二行降序排序结果。

样例输入 Copy
4
1 3
2 5
1 4
4 1

样例输出 Copy
(1,3) (1,4) (2,5) (4,1)
(4,1) (2,5) (1,4) (1,3)
代码如下(示例):

#include <stdio.h>

typedef struct point{
	int x;
	int y;
}stu; 

int main() {
	stu a[101], t;
	int i, j, n;
	scanf("%d", &n);	// 输入n
	for(i = 0; i < n; i++){
		scanf("%d%d", &a[i].x, &a[i].y);	// 输入坐标点 
	} 
	for(i = 0; i < n - 1; i++){	// 升序排序 
		for(j = i + 1; j < n; j++){
			if(a[i].x > a[j].x){
				t = a[i];
				a[i] = a[j];
				a[j] = t;
			}
			else if(a[i].x == a[j].x){
				if(a[i].y > a[j].y){
					t = a[i];
					a[i] = a[j];
					a[j] = t;
				}
			}
		}
	}
	for(i = 0; i < n; i++){	// 升序输出
		printf("(%d,%d) ", a[i].x, a[i].y); 
	} 
	printf("\n");
	for(i = n - 1; i >= 0; i--){	// 降序输出 
		printf("(%d,%d) ", a[i].x, a[i].y); 
	}
	
	return 0;
}

1085添加记录(结构体专题)题目描述

有一学生成绩表,包括学号、姓名、3门课程成绩。已知该成绩表按学号升序排序。请编程实现,添加一个新的学生信息,且使成绩表仍按学号有序;若待添加的学号与已有学号重复,则输出错误信息,拒绝添加。

输入
首先输入一个整数n(1<=n<=100),表示学生人数;
然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。
最后一行输入一个待添加的学生信息,包括学号、姓名和3门课成绩

输出
若待添加的学号与已有学号重复,则输出只有一行“error!”;否则,输出n+1行,即添加后的成绩单信息。

样例输入 Copy
3
541207010188 Zhangling 78 95 55
541207010189 Wangli 87 99 88
541207010191 Fangfang 68 76 75
541207010190 Lilei 68 79 82
样例输出 Copy
541207010188 Zhangling 78 95 55
541207010189 Wangli 87 99 88
541207010190 Lilei 68 79 82
541207010191 Fangfang 68 76 75

代码如下(示例):

#include <stdio.h>
#include<math.h>
#include<limits.h>
#include<string.h>
#include<ctype.h>
#include<malloc.h>
typedef struct student
{
    long long ID;
    char name[21];
    int x;
    int y;
    int z;
}STU;
int main()
{
    STU stu[101],kay;
    int n,i,q=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%lld %s %d %d %d",&stu[i].ID,&stu[i].name,&stu[i].x,&stu[i].y,&stu[i].z);
    scanf("%lld %s %d %d %d",&kay.ID,&kay.name,&kay.x,&kay.y,&kay.z);
    for(i=0;i<n;i++)//循环一遍查找是否有重复的;
    {
      if(stu[i].ID==kay.ID)
      {
          printf("error!");//若有输出error!,直接结束程序;
          return 0;
      }
    }
    for(i=0;i<n;i++)
    {
      if(stu[i].ID>kay.ID&&q==0)//用q标记是否插入过,如果stu[i].ID>kay.ID,把kay直接输出在stu[i]前面;
      {
          q=1;
          printf("%lld %s %d %d %d\n",kay.ID,kay.name,kay.x,kay.y,kay.z);
      }
      printf("%lld %s %d %d %d\n",stu[i].ID,stu[i].name,stu[i].x,stu[i].y,stu[i].z);
    }
      if(q==0)//如果没有插入过,代表kay最大,最后输出就行了;
      printf("%lld %s %d %d %d\n",kay.ID,kay.name,kay.x,kay.y,kay.z);
    return 0;
}

1086删除记录(结构体专题)

题目描述
有一学生成绩表,包括学号、姓名、3门课程成绩。请实现如下删除功能:输入一个学生的学号,删除该学生的所有信息。

输入
首先输入一个整数n(1<=n<=100),表示学生人数;
然后输入n行,每行包含一个学生的信息:学号(12位)、姓名(不含空格且不超过20位),以及3个整数,表示3门课成绩,数据之间用空格隔开。
最后一行输入一个学号num。

输出
若要删除的学号不存在,则输出“error!”;否则,输出删除该学生后的所有记录。

样例输入 Copy
3
541207010188 Zhangling 78 95 55
541207010189 Wangli 87 99 88
541207010190 Fangfang 68 76 75
541207010188
样例输出 Copy
541207010189 Wangli 87 99 88
541207010190 Fangfang 68 76 75
代码如下(示例):

#include<stdio.h>
struct student{
    long long xuehao;
    char name[20];
    int score[3];
};
int main(){
    struct student stu[101];
    int n,index,flag=0;
    long long mubiao;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%lld %s %d %d %d",&stu[i].xuehao,stu[i].name,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2]);
    }
    scanf("%lld",&mubiao);
    for(int i=0;i<n;i++){
        if(stu[i].xuehao==mubiao){
            flag=1;
            index=i;
            break;
        }
    }
    if(flag){
        for(int i=index;i<n-1;i++){
            stu[i]=stu[i+1];
        }
        n--;
        for(int i=0;i<n;i++){
            printf("%lld %s %d %d %d\n",stu[i].xuehao,stu[i].name,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
        }
    }else{
        printf("error!");
    }
    return 0;
}

1087棒棒糖(结构体专题)

题目描述
新年快到了,计算机学院新年晚会正在筹备中,今年有一个新创意:来参加晚会的所有学生都有礼物(一根棒棒糖)。老师把买棒棒糖的任务交给小明了,并指定了要买的棒棒糖的品牌和品种。俗话说得好,货比三家不吃亏。小明来到了商店,看了各个店铺里这种棒棒糖的价格,不仅如此,他还记住了每个店铺的存货量。已知小明打算购买n根棒棒糖,问他最少要花多少钱?

输入
第一行输入一个整数n,表示要购买的棒棒糖数量;第二行是一个整数m(1<=m<=10),表示明明考察过的店铺的数量;接下来m行,每行两个数,表示该店铺中棒棒糖的价格和数量,价格为一实数(最多两位小数),数量为一整数。

输出
输出一个实数,保留两位小数,表示最小费用。

样例输入 Copy
100
4
0.5 50
0.33 30
1 80
0.6 40
样例输出 Copy
46.90

代码如下(示例):

#include<stdio.h>
#include<stdlib.h>
struct candy{
    int number;
	double money;
};
int main(){
    int n,m;
	float sum=0;
    struct candy p[12];
    struct candy s;
    scanf("%d",&n);
    scanf("%d",&m);
//    p=(struct candy**)malloc(sizeof(int)*m);
    for(int i=0;i<m;i++){
//        p[i]=(struct candy*)malloc(sizeof(struct candy));
        scanf("%lf%d",&p[i].money,&p[i].number);
    }
    for(int i=0;i<m-1;i++){
        for(int j=i+1;j<m;j++){
            if(p[i].money>p[j].money){
                s=p[i];
                p[i]=p[j];
                p[j]=s;
            }
        }
    }
    int i=0;
    while(n>0){
        if(n>p[i].number){
            sum+=p[i].number*p[i].money;
            n=n-p[i].number;
            i++;
        }else if(p[i].number>=n){
            sum+=p[i].money*n;
            n=0;
        }
    }
    printf("%.2lf\n",sum);
    return 0;
}

1088选票统计(一)(结构体专题)

题目描述
某单位进行选举,有5位候选人:zhang、wang、zhao、liu、miao。编写程序,统计每人所得的票数。要求每人的信息里包括两部分:name和votes,分别描述姓名和所得票数。每个人的信息用一个结构体来表示,5个人的信息使用结构体数组。
输入
首先输入一个整数n,表示一张选票,接下来n行,每行是一个由小写英文字母组成的字符串,表示以上5个候选人之一。
输出
输出5行,按zhang、wang、zhao、liu、miao的顺序输出5个候选人的姓名和所得票数,用空格隔开。
样例输入 Copy
8
zhang
wang
zhang
zhao
wang
liu
wang
wang
样例输出 Copy
zhang 2
wang 4
zhao 1
liu 1
miao 0
代码如下(示例):

#include<stdio.h>
#include<string.h>
struct houxuanren{
    char name[10];
    int votes;
};
int main(){
    struct houxuanren p[5]={{"zhang",0},{"wang",0},{"zhao",0},{"liu",0},{"miao",0}},x;
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%s",x.name);
        if(strcmp(x.name,p[0].name)==0){
            p[0].votes++;
        }else if(strcmp(x.name,p[1].name)==0){
            p[1].votes++;
        }else if(strcmp(x.name,p[2].name)==0){
            p[2].votes++;
        }else if(strcmp(x.name,p[3].name)==0){
            p[3].votes++;
        }else if(strcmp(x.name,p[4].name)==0){
            p[4].votes++;
        }
    }
    for(int i=0;i<5;i++){
        printf("%s %d\n",p[i].name,p[i].votes);
    }
    return 0;   
}

1089选票统计(二)(结构体专题)

题目描述
计算机与通信工程学院2012届学生会主席投票选举工作定于1月6日在电教楼前隆重举行。本次投票将采用电脑统计选票的方式,当投票选举正式开始后,同学们将排队一一走到电脑前,投上自己神圣的一票:在电脑前输入一个姓名,然后输入回车表示确认。
当所同学投票结束,工作人员只需要输入一个”#”并回车确认,表示投票结束,电脑立即显示出得票最高的同学姓名,该同学将当选为新一届计算机与通信工程学院学生会主席。
选举大会的准备工作正在紧张进行,编程统计投票的工作就交给你了。

输入
本题为单实例测试。输入包含多行,每行是一个由小写英文字母组成的字符串,表示一个姓名,遇到#时表示输入结束。 你可以假定,参加投票学生的人数不超过500人,每个学生姓名字符串的长度小于20。

输出
输出为一个字符串——当选为学生会主席的学生姓名

样例输入 Copy
wanglin
liming
wanglin
wanglin
fangfang
liming

样例输出 Copy
wanglin
代码如下(示例):

#include<stdio.h>
#include<string.h>
typedef struct People{
	char name[21];  //姓名
	int ticket;  //选票数 
}f;

int main()
{
	int i,n=0,max,flag;
	char str[21];
	f a[100];
	
	while(scanf("%s",str),strcmp(str,"#")!=0)
	{
		flag=0;
		//循环判断输入的名字受否已经存在结构体数组中
		for(i=0;i<n;i++)
		{
			flag=0; 
			if(strcmp(str,a[i].name)==0)
			{
				flag=1;
				a[i].ticket++;
				break;	
			}	
		} 
		//若不存在结构体数组中,将名字加入
		if(flag==0)
		{
			strcpy(a[n].name,str);
			a[n].ticket=1;	
			n++;
		} 
	}
	//利用循环找到得票最多的人
	max=0;
	for(i=0;i<n;i++)
	{
		if(a[i].ticket>a[max].ticket)
			max=i;	
	} 
	//输出
	printf("%s\n",a[max].name);
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

橘花猫不爱睡懒觉

你的鼓励将是我最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值