1.计算职工工资 (25分)
给定N个职员的信息,包括姓名、基本工资、浮动工资和支出,要求编写程序顺序输出每位职员的姓名和实发工资(实发工资=基本工资+浮动工资-支出)。
输入格式:
输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。
输出格式:
按照输入顺序,每行输出一位职员的姓名和实发工资,间隔一个空格,工资保留2位小数。
输入样例:
3
zhao 240 400 75
qian 360 120 50
zhou 560 150 80
输出样例:
zhao 565.00
qian 430.00
zhou 630.00
#include
struct message
{
char a[9];
double basic;
double fu;
double output;
};
struct message d[100];
int main()
{
int N;
double f[100];
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%s %lf %lf %lf",d[i].a,&d[i].basic,&d[i].fu,&d[i].output);
f[i]=d[i].basic+d[i].fu-d[i].output;
}
for(int i=0;i<N;i++)
{
printf("%s %.2f\n",d[i].a,f[i]);
}
return 0;
}
2.考试座位号 (25分)
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
输入样例:
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
输出样例:
3310120150912002 2
3310120150912119 1
#include
struct message
{
char member[18];//之前定义的字符串数组空间为16个元素,而最后一位有/0,所设空间不够大
int shi;
int kao;
};
struct message d[100];
int main()
{
int N ,i,j;
scanf("%d",&N);
for( i=0;i<N;i++)
{
scanf("%s %d %d ",d[i].member,&d[i].shi,&d[i].kao);
}
int a;
scanf("%d",&a);
int m[10];
for(i=0;i<a;i++)
{scanf("%d",&m[i]);//输入待查询数组
}
for( i=0;i<a;i++)
{
for( j=0;j<N;j++)
{
if(m[i]==d[j].shi)
printf("%s %d\n",d[j].member,d[j].kao);
else
continue;
}
}
return 0;
}
输入格式:
输入第一行给出正整数n(<10),随后给出n本书的信息。每本书在一行中给出书名,即长度不超过30的字符串,随后一行中给出正实数价格。题目保证没有同样价格的书。
输出格式:
在一行中按照“价格, 书名”的格式先后输出价格最高和最低的书。价格保留2位小数。
输入样例:
3
Programming in C
21.5
Programming in VB
18.5
Programming in Delphi
25.0
输出样例:
25.00, Programming in Delphi
18.50, Programming in VB
作者
C课程组
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include
struct message
{
char name1[30];
char name2[30];
char name3[30];
double price;
} ;
struct message d[10];
int main()
{
int N;
scanf("%d",&N);
int i,j;
for(i=0;i<N;i++)
{
scanf("%s %s %s",d[i].name1,d[i].name2,d[i].name3);
scanf("%lf",&d[i].price);
}
int t,r;
double max,min;
max=min=d[0].price;
for(j=0;j<N;j++)
{
if(min>d[j].price)
{
min=d[j].price;
t=j;}
if(max<d[j].price)
{
max=d[j].price;
r=j;
}
}
printf("%.2lf, %s %s %s\n",max,d[r].name1,d[r].name2,d[r].name3);
printf("%.2lf, %s %s %s\n",min,d[t].name1,d[t].name2,d[t].name3);
return 0;
}
输入格式:
输入第一行给出正整数n(<10)。随后n行,每行按照“姓名 生日 电话号码”的格式给出一位朋友的信息,其中“姓名”是长度不超过10的英文字母组成的字符串,“生日”是yyyymmdd格式的日期,“电话号码”是不超过17位的数字及+、-组成的字符串。
输出格式:
按照年龄从大到小输出朋友的信息,格式同输出。
输入样例:
3
zhang 19850403 13912345678
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
输出样例:
wang 19821020 +86-0571-88018448
qian 19840619 13609876543
zhang 19850403 13912345678
作者
C课程组
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include
struct message
{
char name1[30];
char name2[30];
char name3[30];
double price;
} ;
struct message d[10];
int main()
{
int N;
scanf("%d",&N);
int i,j;
for(i=0;i<N;i++)
{
scanf("%s %s %s",d[i].name1,d[i].name2,d[i].name3);
scanf("%lf",&d[i].price);
}
int t,r;
double max,min;
max=min=d[0].price;
for(j=0;j<N;j++)
{
if(min>d[j].price)
{
min=d[j].price;
t=j;}
if(max<d[j].price)
{
max=d[j].price;
r=j;
}
}
printf("%.2lf, %s %s %s\n",max,d[r].name1,d[r].name2,d[r].name3);
printf("%.2lf, %s %s %s\n",min,d[t].name1,d[t].name2,d[t].name3);
return 0;
}
输入格式:
输入在一行中给出正整数N。随后N行,每行给出一位职员的信息,格式为“姓名 基本工资 浮动工资 支出”,中间以空格分隔。其中“姓名”为长度小于10的不包含空白字符的非空字符串,其他输入、输出保证在单精度范围内。
输出格式:
按照输入顺序,每行输出一位职员的姓名和实发工资,间隔一个空格,工资保留2位小数。
输入样例:
3
zhao 240 400 75
qian 360 120 50
zhou 560 150 80
输出样例:
zhao 565.00
qian 430.00
zhou 630.00
作者
C课程组
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include
struct message
{
char a[9];
double basic;
double fu;
double output;
};
struct message d[100];
int main()
{
int N;
double f[100];
scanf("%d",&N);
for(int i=0;i<N;i++)
{
scanf("%s %lf %lf %lf",d[i].a,&d[i].basic,&d[i].fu,&d[i].output);
f[i]=d[i].basic+d[i].fu-d[i].output;
}
for(int i=0;i<N;i++)
{
printf("%s %.2f\n",d[i].a,f[i]);
}
return 0;
}
6.通讯录的录入与显示 (20分)
通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。 本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。
输入格式:
输入在第一行给出正整数N(≤10);随后N行,每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示“男”、F表示“女”;固话和手机均为不超过15位的连续数字,前面有可能出现+。
在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N−1顺序编号)。数字间以空格分隔。
输出格式:
对每一条要查询的记录编号,在一行中按照姓名 固话 手机 性别 生日的格式输出该记录。若要查询的记录不存在,则输出Not Found。
输入样例:
3
Chris 1984/03/10 F +86181779452 13707010007
LaoLao 1967/11/30 F 057187951100 +8618618623333
QiaoLin 1980/01/01 M 84172333 10086
2 1 7
输出样例:
LaoLao 057187951100 +8618618623333 F 1967/11/30
Not Found
#include
struct message
{
char name[9];
char birthday[20];
char sex[5];//必须用数组!!!
char tel[20];
char phone[20];
};
struct message d[10];
int main()
{
struct message d[10];
int n;
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
{
scanf("%s",&d[i].name);
scanf("%s",&d[i].birthday);
scanf("%s",&d[i].sex);
scanf("%s",&d[i].tel);
scanf("%s",&d[i].phone);
}
int k,j,t;
int q;
int a[10];
scanf("%d",&k);
for(i=0;i<k;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<k;i++)
{
t=a[i];
if(t>n-1||t<0)
printf("Not Found");
else
{
printf("%s %s %s %s %s",d[t].name,d[t].tel,d[t].phone,d[t].sex,d[t].birthday);
}
printf("\n");
}
}