【PTA|编程题|期末复习|part 1】结构体(注释详细)

目录

7-1 查找书籍

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-2 通讯录排序

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-3 计算职工工资

输入格式:

输出格式:

输入样例:

输出样例:

代码

7-4 计算平均成绩

输入格式:

输出格式:

输入样例:

输出样例:

代码


7-1 查找书籍

给定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

代码

 
#include <stdio.h>
#include <string.h>
struct Book{           //定义结构类型struct Book,包含两个成员price和name
    double price;
    char name[31];
};
 
int main(){
    int n;
    scanf("%d",&n);//输入整数
    struct Book book[n];//定义结构数组book,每个元素的结构类型struct Book
    int i,max = 0,min = 0;
    for(i=0; i<n; i++){ //for循环遍历,对数组下标i的元素(也是结构)进行操作
        getchar();//吃掉前面输入整数带来的回车
        
        gets(book[i].name);//输入字符串给结构成员name
        
        scanf("%lf",&book[i].price); //输入浮点数给结构成员price
        
        if(book[i].price>book[max].price)//最大值判断
            max = i;
        
        if(book[i].price<book[min].price)//最小值判断
            min = i;
    }
    printf("%.2lf, %s\n",book[max].price,book[max].name); //最大值输出
    printf("%.2lf, %s\n",book[min].price,book[min].name);//最小值输出
    return 0;
}

7-2 通讯录排序

输入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

代码

 
#include<stdio.h>

struct friends{ //定义结构类型struct friends,包含三个成员name birth number
    char name[20];
    int  birth;
    char number[30];
}num[15],temp; //定义结构数组num,与结构变量temp


int main()
{
    int n,i,j;
    scanf("%d",&n); //输入整数
    for(i=0; i<n; i++)//对结构数组num的每个元素(结构)赋值 
    { 
        scanf("%s",num[i].name); //成员 name赋值
		scanf("%d",&num[i].birth);//成员 birth赋值
		scanf("%s",num[i].number ); //成员 number赋值
    }
    for(i=0;i<n-1;i++) //采用冒泡排序
	{
		for(j=0;j<n-1-i;j++)
		{
			if(num[j].birth>num[j+1].birth)
			{
				temp=num[j+1];
				num[j+1]=num[j];
				num[j]=temp;
			}
		}
	}
	for(i=0;i<n;i++)//循环输出结果
	{
		printf("%s %d ",num[i].name,num[i].birth);
		puts(num[i].number);
	} 
    return 0;
}

7-3 计算职工工资

给定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 salary { //定义结构类型struct salary
   int num;
   char name[10]; 
   float a,b,c;
   double sum;
}; 

 int main()
{   
  int i, n;
  struct salary s1;       //定义结构变量s1,结构类型struct salary

  scanf ("%d", &n);  //输入整数

  for (i = 1; i <= n; i++){ //循环输入每行

  scanf ("%s %f %f %f",s1.name,&s1.a,&s1.b,&s1.c);
      //结构成员name是数组(字符串)使用%s,数组名表示数组首元素地址,不需要&,其他结构成员是普通变量需要&
  s1.sum = s1.a + s1.b - s1.c;//将每行输入的a b c进行求和,结果存放到结构成员sum中
  printf("%s %.2lf\n", s1.name,s1.sum);//输出name和sum
  
  }

  return 0;
}

7-4 计算平均成绩

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和成绩([0,100]区间内的整数),要求计算他们的平均成绩,并顺序输出平均线以下的学生名单。

输入格式:

输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩”,中间以空格分隔。

输出格式:

首先在一行中输出平均成绩,保留2位小数。然后按照输入顺序,每行输出一位平均线以下的学生的姓名和学号,间隔一个空格。

输入样例:

5
00001 zhang 70
00002 wang 80
00003 qian 90
10001 li 100
21987 chen 60

输出样例:

80.00
zhang 00001
chen 21987

代码

#include <stdio.h>

struct stdent //定义结构类型struct student,包含三个成员id name grade
{
    int id[5];
    char name[10];
    int grade;
}stu[10]; //定义结构数组stu

int main()
{
    int i, j, temp, N, sum;
    double average;
    
    scanf("%d", &N);//输入整数
    for (sum = i = 0; i < N; i++)
    {
        scanf("%s %s %d", stu[i].id, stu[i].name, &stu[i].grade);//给结构数组下标i的元素(结构)的成员赋初值
        sum += stu[i].grade;//成绩求和
    }
    average = sum/N; //求平均
    printf("%.2lf\n", average); //输出平均值
    for (i = 0; i < N; i++)
    {
        if (stu[i].grade < average) //输出平均线以下的学生的姓名和学号
            printf("%s %s\n", stu[i].name, stu[i].id);
    }
    
    return 0;
}

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值