Contest 9
时间换算
Description
本题要求编写程序,以hh:mm:ss的格式输出某给定时间再过n秒后的时间值(超过23:59:59就从0点开始计时)。
Input
输入在第一行中以hh:mm:ss的格式给出起始时间,第二行给出整秒数n。
Output
输出在一行中给出hh:mm:ss格式的结果时间。
Sample Input 1
11:59:40
30
Sample Output 1
12:00:10
计算两个复数之积
Description
编写程序,利用结构变量求解两个复数之积 。
Input
分别输入四个个数代表第一个复数的实部和虚部和第二个复数的实部与虚部。
Output
输出格式为 (a1+b1i) * (a2+b2i) = a + bi,a,b为计算出的复数积的实部与虚部。(注意空格)
Sample Input 1
3 4 5 6
Sample Output 1
(3+4i) * (5+6i) = -9 + 38i
Hint
提示: 求解 (al+a2i)*( bl+b2*i), 乘积的实部为:a1 * a2 - b1 * b2 , 虚部为: a1 * b2 +a2 * b1。
#include<stdio.h>
struct complex
{
int r,i;
};
int main()
{
struct complex c[2];
int product=0;
scanf("%d%d%d%d",&c[0].r,&c[0].i,&c[1].r,&c[1].i);
int r,i;
r=c[0].r*c[1].r-c[0].i*c[1].i;
i=c[0].r*c[1].i+c[0].i*c[1].r;
printf("(%d+%di) * (%d+%di) = %d + %di",c[0].r,c[0].i,c[1].r,c[1].i,r,i);
return 0;
}
平面向量加法
Description
输入两个二维平面向量 Vl = ( x l , y l) 和 V2 = ( x2 , y2 ) 的分量,计算并输出两个向量的和向量。试编写相应程序
Input
输入在一行中按照“x1y1x2y2”的格式给出两个二维平面向量v1=(x1,y1)和v2=(x2,y2)的分量
Output
在一行中按照(x, y)的格式输出和向量(逗号和y之间有空格),坐标输出小数点后一位(注意不能输出−0.0)。
Sample Input 1
3.5 -2.7 -13.9 8.7
Sample Output 1
(-10.4, 6.0)
#include<stdio.h>
struct vector
{
float x;
float y;
};
int main()
{
struct vector v[2];
scanf("%f%f%f%f",&v[0].x,&v[0].y,&v[1].x,&v[1].y);
float x,y;
x=v[0].x+v[1].x;
y=v[0].y+v[1].y;
if (x!=-0.0&&y!=-0.0)
{
printf("(%.1f, %.1f)",x,y);
}
return 0;
}
查找书籍
Description
给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。
Input
输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。
Output
在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。
Sample Input 1
3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0
Sample Output 1
25.00,Programming in Delphi
18.50,Programming in VB
#include <stdio.h>
struct book{
char name[30];
double price;
};
int getline_(char s[]){
int c,i;
i=0;
while((c=getchar())!=EOF&&c!='\n')
s[i++]=c;
s[i]='\0';
return i;
}
int main(){
int n;
scanf("%d",&n);
struct book b[n];
char c;
for (int i=0;i<n;i++){
getchar();//先删去最开始的空格
getline_(b[i].name);
scanf("%lf",&b[i].price);
}
/*for(int i=0;i<n;i++){
printf("%s\t%lf\n",b[i].name,b[i].price);
}*/
int maxx=0,minn=0;
for (int i = 0; i < n; i++){
if (b[maxx].price<b[i].price)maxx=i;
}
for (int i = 0; i < n; i++){
if (b[minn].price>b[i].price)minn=i;
}
printf("%.2lf,%s\n%.2lf,%s",b[maxx].price,b[maxx].name,b[minn].price,b[minn].name);
return 0;
}
通讯录排序
Description
输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。
Input
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,
其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。
Output
按照年龄从大到小输出朋友的信息,格式同输出
Sample Input 1
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
Sample Output 1
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
#include <stdio.h>
struct mail_list
{
char name[11];
int birthday;
char number[18];
};
int main()
{
int n,i=0,j=0;
scanf("%d",&n);
struct mail_list m[n];
for ( i = 0; i < n; i++)
{
getchar();
scanf("%s%d",m[i].name,&m[i].birthday);
scanf("%s",m[i].number);
}
int index=0;
struct mail_list temp;
for ( i = 0; i < n-1; i++)
{
index=i;
for (int j = i+1; j < n; j++)
{
if (m[j].birthday<m[index].birthday)
{
index=j;
}
}
temp=m[index];
m[index]=m[i];
m[i]=temp;
}
for ( i = 0; i < n; i++)
{
printf("%s %d %s\n",m[i].name,m[i].birthday,m[i].number);
}
return 0;
}
按等级统计学生成绩
Description
输入n(n<20)个学生的学号、姓名和成绩, 输出学生的成绩等级和不及格人数。每个学生的记录包括学号、姓名、成绩和等级,
要求定义和调用函数 set_grade(), 根据学生成绩设置其等级,并统计不及格人数,等级设置:85-100 为 A , 70-84 为 B ,
60-69 为 C , 0-59 为 D。 试编写相应程序。
Input
第一行输入学生人数n,接下来n行输入n个学生的学号 姓名 成绩
Output
第一行输出不及格的人数 接下来逐行输出学号 姓名 等级。
Sample Input 1
10
31001 annie 85
31002 bonny 75
31003 carol 70
31004 dan 84
31005 susan 90
31006 paul 69
31007 pam 60
31008 apple 50
31009 nancy 100
31010 bob 78
Sample Output 1
The count for failed (<60): 1
The grades:
31001 annie A
31002 bonny B
31003 carol B
31004 dan B
31005 susan A
31006 paul C
31007 pam C
31008 apple D
31009 nancy A
31010 bob B
#include<stdio.h>
char dengji(int i)
{
if(i<60)
{
return'D';
}
else if(i<70)
{
return'C';
}
else if(i<85)
{
return'B';
}
else
{
return'A';
}
}
char xuenumber[20][20],name[20][20],jibie[20];
int score[20];
int main()
{
int n=0;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
for(int w=0;w<20;w++)
{
xuenumber[i][w]='\0';
name[i][w]='\0';
}
}
for(int i=0;i<n;i++)
{
scanf("%s",xuenumber[i]);
char *pxn=xuenumber[i];
scanf("%s",name[i]);
char *pna=name[i];
scanf("%d",&score[i]);
jibie[i]=dengji(score[i]);
}
/*for(int i=0;i<n;i++){
printf("%s %s %d %c\n",xuenumber[i],name[i],score[i],jibie[i]);
}*/
int count=0;
for(int i=0;i<n;i++)
{
if(jibie[i]=='D')
{
count++;
}
}
printf("The count for failed (<60): %d\nThe grades:\n",count);
for(int i=0;i<n;i++){
printf("%s %s %c\n",xuenumber[i],name[i],jibie[i]);
}
/*for(int i=0;i<n;i++)
{
for(int w=0;w<20;w++)
{
printf("%c",xuenumber[i][w]);
}
printf(" ");
for(int w=0;w<20;w++)
{
printf("%c",name[i][w]);
}
printf(" ");
printf("%c",jibie[i]);
printf("\n");
}*/
return 0;
}