C语言 平时测验6参考代码

佚名 2022-01-24

1 学霸猫

题目描述

在我认识它的时候,它就已经叫学霸猫了,虽然我不知道它名字的由来,但在石大这种地方被冠以学霸之名。它经常会光顾正在上课的教室,并跟同学们一起耐心听讲,学校的教学楼、机房里到处都留下它的倩影,相信它将来会成为一个Doctor Cat。有心的同学记录下了它出现的课堂名称和出现时间。聪明的学霸猫是非常擅长学习的,即使在打盹的时候,也是在学习。它在某个课堂停留的时间越长,学习效果就越好。请你计算一下它哪门课学的最好吧。

输入

第一行输入一个正整数n(n<=100),表示有n组测试。

之后每组一行,包含三个数据,分别表示课堂名称(无空格,长度不超过30个字符),学霸猫的出现时间和离开时间,这两个时间都是指同一天。课堂名称保证不重复。

输出

输出学霸猫学习效果最好的一门课的名称和时长(具体格式见样例输出),占一行,两个数据间以空格分隔,末尾没有空格。

样例输入

2

programming 14:00 15:30

math 8:00 8:10

样例输出

programming 1:30

测试用例1

输入

3

Chinese 10:20 10:50

English 12:10 16:00

math 8:00 8:10

输出

English 3:50

测试用例2

输入

3

Chinese 10:50 12:20

English 12:30 13:00

math 8:00 9:10

输出

Chinese 1:30


代码

#include 
#include 
#include 
typedef struct
{
char name[50];
int a1, a2, b1, b2;
int t;
} co;
int cmp(const void *a, const void *b)
{
return (*(co*)b).t - (*(co*)a).t;
}
int main()
{
co cat[20];
int n,i = 0;
scanf("%d",&n);
while(n--)
{
scanf("%s", cat[i].name);
scanf("%d:%d%d:%d", &cat[i].a1, &cat[i].a2, &cat[i].b1, &cat[i].b2);
cat[i].t = cat[i].b1 * 60 + cat[i].b2 - cat[i].a1 * 60 - cat[i].a2;
i++;
}
qsort(cat, i, sizeof(cat[0]), cmp);
printf("%s %d:%d
", cat[0].name, cat[0].t / 60, cat[0].t % 60);
return 0;
}


2 学分绩

题目描述

《中国石油大学(华东)学生素质综合评价办法》中“综合评价是对学生德智体诸方面所作的全面的、系统的评价。目的是贯彻党的教育方针,引导全体学生“以学习为中心,走全面发展之路”,充分调动学生的主观能动性,培养学生成为有理想、有道德、有文化、有纪律的社会主义建设者和接班人”。并在学生素质综合评价体系中列举了指标内涵、权重设置、评价方法、等级标准。

对于总成绩的计算方法,具体如下:



其中:(1)Ii表示各门必修课、限选课的学分数;(2)Xi表示所学课程的百分制成绩;(3)Ni表示任意选修课的学分数;(4)成绩按所得的分数计算。

输入

第一行,一个整数T(0

接下来的T行,每行表示一门课程的信息。每门课程信息课程名,课程的百分制成绩,课程的学分数和课程的类别(bx表示必修、xx表示限选、rx表示任选)四项组成。

输出

该学生的学分绩,保留到小数点后面2位。

样例输入

3

c 98 2 bx

english 80 3 bx

writing 69 1 rx

样例输出

87.41

测试用例1

输入

3

c 88 2 bx

english 80 3 xx

writing 69 2 rx

输出

83.61

测试用例2

输入

4

c 80 4 bx

english 80 1 xx

writing 79 2 rx

program 60 2 bx

输出

74.76



代码

#include 
#include 
#define M 100
typedef struct course
{
char name[30];//课程名
int score;//成绩
int credit;//学分
char type[10];//课程类别
} COURSE;
double fun(COURSE stu[], int t)
{
int i, sum1 = 0, sum2 = 0, sum3 = 0;
for(i = 0; i < t; i++)
{
if(strcmp(stu[i].type, "bx") == 0 || strcmp(stu[i].type, "xx") == 0)
{
sum1 += stu[i].score * stu[i].credit;
sum2 += stu[i].credit;
}
else if(strcmp(stu[i].type, "rx") == 0)
{
sum3 += stu[i].score * stu[i].credit;
}
}
return (double)sum1 / sum2 + 0.003 * sum3;
}
int main()
{
int T, i;
double ave;
COURSE s[M];
scanf("%d", &T);
for(i = 0; i < T; i ++)
{
scanf("%s%d%d%s", s[i].name, &s[i].score, &s[i].credit, s[i].type);
}
ave = fun(s, T);
printf("%.2f
", ave);
return 0;
}


3 电话簿

【题目描述】

为电话簿输入n(n<10)个用户的姓名、手机号码(姓名和手机号码中均无空格)和年龄,统计一下年龄大于60岁的用户数量,最后输出该数量,宽度均为4。注意:仅提交自己写的函数。下面是已给出的部分代码:

#include 
#include 
typedef struct user
{
char name[20]; //姓名
char tel[20]; //手机号码
int age; //年龄
}USER;
void input(USER user[],int n)
{
int i;
for(i=0;i

【输入】

输入n个姓名字符串、电话号码字符串和年龄。

【输出】

输出年龄大于60岁的用户的数量,宽度均为4。

【样例输入】

3

zhangsan 13905326785 65

lisi 13505325678 45

wangwu 13505325678 69

【样例输出】

2

【测试用例1】

5

zhang 13905321234 90

wang 13905322345 34

li 13905323456 23

zhao 13905325678 12

sun 13505327890 50

1

【测试用例2】

5

zhang 13805321234 20

zhang 13705325678 30

li 13605321234 40

li 13705326789 50

zhao 13705326789 34

0

代码

int fun(USER user[],int n)
{
int i,sum1=0;
for(i=0;i60)
sum1++;
}
return sum1;
}

4 计算成绩

【题目描述】

某小学的期中考试结束了,老师想尽快掌握每个学生的总成绩。现在输入n(n<=10)名学生的信息(姓名中无空格),请帮老师计算每名学生的总成绩,并输出每名学生的所有信息,学号宽度8,姓名宽度20,各门课成绩和总成绩宽度为6。注意:仅提交自己写的函数。下面是已给出的部分代码:

#include 
typedef struct student
{
int id; //学号
char name[20]; //姓名
int score[3]; //三门课成绩
int sum; //总成绩
}STUD;
void input(STUD std[],int n)
{
int i,j;
for(i=0;i

【输入】

输入n名学生信息。

【输出】

输出输出每名学生的所有信息。学号宽度8,姓名宽度20,各门课成绩和总成绩宽度为6。

【样例输入】

3

1001 zhangsan 89 88 87

1002 lisi 90 98 78

1003 wangwu 89 87 89

【样例输出】

1001 zhangsan 89 88 87 264

1002 lisi 90 98 78 266

1003 wangwu 89 87 89 265

【测试用例1】

5

1001 zhang1 100 98 78

1002 zhang2 78 67 89

1003 zhang3 89 87 69

1004 zhang4 88 89 87

1005 zhang5 90 98 99

1001 zhang1 100 98 78 276

1002 zhang2 78 67 89 234

1003 zhang3 89 87 69 245

1004 zhang4 88 89 87 264

1005 zhang5 90 98 99 287

【测试用例2】

3

1001 zhang1 78 98 87

1002 zhang2 89 86 78

1003 zhang3 98 87 78

1001 zhang1 78 98 87 263

1002 zhang2 89 86 78 253

1003 zhang3 98 87 78 263

代码

void fun(STUD std[],int n)
{
int i,j;
for(i=0; i

5 碎片长度

【题目描述】

一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,字符串"aaabbaaac"是由下面碎片组成的: "aaa","bb","c"。UPCer现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少。

例如给定字符串为 "aaabbaaac",则所有碎片的平均长度 = (3 + 2 + 3 + 1) / 4 = 2.25。

【输入】

一个字符串(假定字符串的长度小于80,字符串中间没有空白字符,而且字符串仅包含小写字母)。

【输出】

输出一个整数,表示所有碎片的平均长度,保留两位小数。

【样例输入】

aaabbaaac

【样例输出】

2.25

【测试用例1】

abcde

1.00

【测试用例2】

aaaaaaaaaa

10.00

【测试用例3】

abccccdeeef

1.83

代码

#include 
#include 
#include 
#include 
int main()
{
int i,j;
char a[100];
int sum[100]= {0},n=0;
double s=0;
scanf("%s",a);
for(i=0; a[i]; i++)
{
for(j=i; a[i]; j++)
{
if(a[i]==a[j])
sum[i]++;
else
{
n++;
i=j-1;
break;
}
}
}
for(i=0; a[i]; i++)
{
if(sum[i]!=0)
s+=sum[i];
}
printf("%.2f",s/n);
return 0;
}
评论: 阅读:
猜你喜欢