第十二周 在线编程题
1、计算时间差V2.0(4分)
题目内容:
用结构体定义时钟类型,编程从键盘任意输入两个时间(例如4时55分和1时25分),计算并输出这两个时间之间的间隔。要求不输出时间差的负号。结构体类型定义如下:
typedef struct clock
{
int hour;
int minute;
int second;
} CLOCK;
函数原型: CLOCK CalculateTime(CLOCK t1, CLOCK t2);
函数功能:计算并返回两个时间t1和t2之间的差
程序运行结果示例1:
Input time one:(hour,minute):4,55↙
Input time two: (hour,minute):1,25↙
3hour,30minute
程序运行结果示例2:
Input time one:(hour,minute):1,33↙
Input time two: (hour,minute):5,21↙
3hour,48minute
输入提示: “Input time one:(hour,minute):”
"Input time two: (hour,minute):"
输入格式: “%d,%d”
输出格式:"%dhour,%dminute\n"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
时间限制:500ms内存限制:32000kb
C语言实现:
#include <stdio.h>
#include <math.h>
typedef struct clock
{
int hour;
int minute;
int second;
} CLOCK;
CLOCK CalculateTime(CLOCK t1, CLOCK t2);
int main()
{
CLOCK t1, t2, t3;
printf("Input time one:(hour,minute):");
scanf("%d,%d", &t1.hour, &t1.minute);
printf("Input time two: (hour,minute):");
scanf("%d,%d", &t2.hour, &t2.minute);
t3 = CalculateTime(t1, t2);
printf("%dhour,%dminute\n", t3.hour, t3.minute);
return 0;
}
CLOCK CalculateTime(CLOCK t1, CLOCK t2)
{
t1.hour = t1.hour - t2.hour;
t1.minute = t1.minute - t2.minute;
if(t1.hour<0 && t1.minute<0)
{
t1.hour = fabs(t1.hour);
t1.minute = fabs(t1.minute);
}
else if(t1.hour<0 || t1.minute<0)
{
t1.hour = fabs(t1.hour);
t1.minute = fabs(t1.minute);
t1.hour = t1.hour - 1;
t1.minute = 60 - t1.minute;
}
else ;
return t1;
}
2、奖学金发放(4分)
题目内容:
某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,每项奖学金获取的条件分别如下:
-
院士奖学金:期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生每人均可获得8000元;
-
五四奖学金:期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生每人均可获得4000元;
-
成绩优秀奖:期末平均成绩高于90分(>90)的学生每人均可获得2000元;
-
西部奖学金:期末平均成绩高于85分(>85)的西部省份学生每人均可获得1000元;
-
班级贡献奖:班级评议成绩高于80分(>80)的学生干部每人均可获得850元;
只要符合上述条件就可获得相应的奖项,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚明的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。
现在给出若干学生的相关数据(假设总有同学能满足获得奖学金的条件),请编程计算哪些同学获得的奖金总数最高。
结构体类型定义如下:
typedef struct winners
{
char name[20];
int finalScore;
int classScore;
char work;
char west;
int paper;
int scholarship;
} WIN;
函数原型:void Addup(WIN stu[], int n);
函数原型:int FindMax(WIN student[], int n);
程序运行结果示例:
Input n:4↙
Input name:YaoMing↙
Input final score:87↙
Input class score:82↙
Class cadre or not?(Y/N):Y↙
Students from the West or not?(Y/N):N↙
Input the number of published papers:0↙
name:YaoMing,scholarship:4850
Input name:ChenRuiyi↙
Input final score:88↙
Input class score:78↙
Class cadre or not?(Y/N):N↙
Students from the West or not?(Y/N):Y↙
Input the number of published papers:1↙
name:ChenRuiyi,scholarship:9000
Input name:LiXin↙
Input final score:92↙
Input class score:88↙
Class cadre or not?(Y/N):N↙
Students from the West or not?(Y/N):N↙
Input the number of published papers:0↙
name:LiXin,scholarship:6000
Input name:ZhangQin↙
Input final score:83↙
Input class score:87↙
Class cadre or not?(Y/N):Y↙
Students from the West or not?(Y/N):N↙
Input the number of published papers:1↙
name:ZhangQin,scholarship:8850
ChenRuiyi get the highest scholarship 9000
输入学生人数提示:“Input n:”
输入学生姓名提示:“Input name:”
输入学生期末平均成绩提示:“Input final score:”
输入学生班级评议成绩提示:“Input class score:”
输入是否为学生干部提示:“Class cadre or not?(Y/N):”
输入是否为西部学生提示:“Students from the West or not?(Y/N):”
输入发表文章数量提示:“Input the number of published papers:”
输入格式:
输入学生人数:"%d"
输入学生姓名:"%s"
输入学生成绩:"%d"
输入是否为学生干部:" %c" (注意:%c前面有一个空格)
输入是否为西部学生:" %c" (注意:%c前面有一个空格)
输入发表文章数量: "%d"
输出格式:
输出学生获得的奖学金: "name:%s,scholarship:%d\n"
输出获得奖学金总数最高的学生:"%s get the highest scholarship %d\n"
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
时间限制:500ms内存限制:32000kb
C语言实现:
#include <stdio.h>
#define N 10
typedef struct winners
{
char name[20];
int finalScore;
int classScore;
char work;
char west;
int paper;
int scholarship;
} WIN;
void Addup(WIN stu[], int n);
int FindMax(WIN student[], int n);
int main()
{
int n,i;
int me;
printf("Input n:");
scanf("%d",&n);
WIN stu[N];
for(i=0;i<n;i++)
{
printf("Input name:");
scanf("%s",&stu[i].name);
printf("Input final score:");
scanf("%d",&stu[i].finalScore);
printf("Input class score:");
scanf("%d",&stu[i].classScore);
printf("Class cadre or not?(Y/N):");
scanf(" %c" ,&stu[i].work);
printf("Students from the West or not?(Y/N):");
scanf(" %c" ,&stu[i].west);
printf("Input the number of published papers:");
scanf("%d",&stu[i].paper);
Addup(stu,i);
}
me=FindMax(stu,n);
printf("%s get the highest scholarship %d\n",stu[me].name,stu[me].scholarship);
return 0;
}
void Addup(WIN stu[], int n)
{
stu[n].scholarship=0;
if(stu[n].finalScore>80&&stu[n].paper>=1)
stu[n].scholarship+=8000;
if(stu[n].finalScore>85&&stu[n].classScore>80)
stu[n].scholarship+=4000;
if(stu[n].finalScore>90)
stu[n].scholarship+=2000;
if(stu[n].west=='Y'&&stu[n].finalScore>85)
stu[n].scholarship+=1000;
if(stu[n].work=='Y'&&stu[n].classScore>80)
stu[n].scholarship+=850;
printf( "name:%s,scholarship:%d\n",stu[n].name,stu[n].scholarship);
}
int FindMax(WIN student[], int n)
{
int a=0;
int i;
for(i=1;i<n;i++)
{
if(student[a].scholarship<student[i].scholarship)
a=i;
}
return a;
}
3、评选最牛群主v1.0(4分)
题目内容:
现在要评选最牛群主,已知有3名最牛群主的候选人(分别是tom,jack和rose),有不超过1000人参与投票,最后要通过投票评选出一名最牛群主,从键盘输入每位参与投票的人的投票结果,即其投票的候选人的名字,请你编程统计并输出每位候选人的得票数,以及得票数最多的候选人的名字。候选人的名字中间不允许出现空格,并且必须小写。若候选人名字输入错误,则按废票处理。
程序运行结果示例1:
Input the number of electorates:8↙
Input vote 1:tom↙
Input vote 2:jack↙
Input vote 3:rose↙
Input vote 4:tom↙
Input vote 5:rose↙
Input vote 6:rose↙
Input vote 7:jack↙
Input vote 8:rose↙
Election results:
tom:2
jack:2
rose:4
rose wins
程序运行结果示例2:
Input the number of electorates:5↙
Input vote 1:tom↙
Input vote 2:mary↙
Input vote 3:rose↙
Input vote 4:jack↙
Input vote 5:tom↙
Election results:
tom:2
jack:1
rose:1
tom wins
提示输入候选人数量:“Input the number of electorates:”
提示输入候选人: “Input vote %d:”
输入格式:
输入候选人数量:"%d"
输入候选人姓名:"%s"
输出格式:
输出候选人得票数:"%s:%d\n"
输出票数最多的候选人姓名:"%s wins\n"
输出评选结果提示信息:“Election results:\n”
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
时间限制:500ms内存限制:32000kb
C语言实现:
#include <stdio.h>
#include <string.h>
#define N 1000
void Y(char str[N], char name[3][10], int a[3]);
int Find_Win(int a[]);
int main()
{
char str[N];
char name[3][10]={"tom", "jack", "rose"};
int n, i, ret;
int a[3]={0};
printf("Input the number of electorates:");
scanf("%d", &n);
for(i=0;i<n;i++)
{
printf("Input vote %d:", i+1);
scanf("%s", str);
Y(str, name, a);
}
printf("Election results:\n");
for(i=0;i<3;i++)
{
printf("%s:%d\n", name[i], a[i]);
}
ret = Find_Win(a);
printf("%s wins\n", name[ret]);
return 0;
}
void Y(char str[N], char name[3][10], int a[3])
{
int i, r;
int lenth=strlen(str), lenth0=strlen(name[0]), lenth1=strlen(name[1]), lenth2=strlen(name[2]);
for(i=0;i<lenth-1;i++)
{
if(str[i] == name[0][0])
{
for(r=0;r<lenth0;r++)
{
if(str[i+r] != name[0][r]) break;
if(r == lenth0-1) a[0]++;
}
}
if(str[i] == name[1][0])
{
for(r=0;r<lenth1;r++)
{
if(str[i+r] != name[1][r]) break;
if(r == lenth1-1) a[1]++;
}
}
if(str[i] == name[2][0])
{
for(r=0;r<lenth2;r++)
{
if(str[i+r] != name[2][r]) break;
if(r == lenth2-1) a[2]++;
}
}
}
return ;
}
int Find_Win(int a[])
{
int i, ret=0;
for(i=0;i<3;i++)
{
if(a[ret] < a[i])
ret = i;
}
return ret;
}
4、星期判断(4分)
题目内容:请输入星期几的第一个字母(不区分大小写)来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母(小写),否则输出“data error”。
程序运行结果示例1:
please input the first letter of someday:
S↙
please input second letter:
u↙
sunday
程序运行结果示例2:
please input the first letter of someday:
F↙
friday
程序运行结果示例2:
please input the first letter of someday:
h↙
data error
第一个字母的输入提示信息:“please input the first letter of someday:\n”
第二个字母的输入提示信息:“please input second letter:\n”
用户输入错误提示信息:“data error\n”
输入格式: " %c" (注意:%c前面有一个空格)
输出格式:
星期一:“monday\n”
星期二:“tuesday\n”
星期三:“wednesday\n”
星期四:“thursday\n”
星期五:“friday\n”
星期六:“saturday\n”
星期日:“sunday\n”
为避免出现格式错误,请直接拷贝粘贴题目中给的格式字符串和提示信息到你的程序中。
时间限制:500ms内存限制:32000kb
C语言实现:
#include <stdio.h>
#include<string.h>
#define N 10
int main()
{
char *a[]={" ","monday","tuesday","wednesday",
"thursday","friday","saturday","sunday"};
char ch1,ch2;
int i,x=-1,flog=0;
printf("please input the first letter of someday:\n");
scanf(" %c",&ch1);
for(i=1;i<=7;i++)
{
if(ch1==a[i][0]||ch1==a[i][0]-32)
{
if(flog==0)
{
flog++;
printf("please input second letter:\n");
scanf(" %c",&ch2);
}
if(ch2==a[i][1])
{
x=i;
}
}
}
switch(x){
case 1:{
printf("monday\n");
break;}
case 2:{
printf("tuesday\n");
break;}
case 3:{
printf("tuesday\n");
break;}
case 4:{
printf("thursday\n");
break;}
case 5:{
printf("friday\n");
break;}
case 6:{
printf("saturday\n");
break;}
case 7:{
printf("sunday\n");
break;}
case -1:{
printf("data error\n");
break;}
}
return 0;
}