结构体例题(C语言)

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 <stdio.h>
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 <stdio.h> 
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;
}
  1. 查找书籍 (20分)
    给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。

输入格式:
输入第一行给出正整数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 <stdio.h>
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;
}
  1. 通讯录排序 (20分)
    输入n个朋友的信息,包括姓名、生日、电话号码,本题要求编写程序,按照年龄从大到小的顺序依次输出通讯录。题目保证所有人的生日均不相同。

输入格式:
输入第一行给出正整数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 <stdio.h>
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;
}
  1. 计算职工工资 (20分)
    给定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
作者
C课程组
单位
浙江大学
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

#include <stdio.h>
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 <stdio.h>
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");
      
    }
	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值