【C语言基础】练习:结构体统计学生成绩,快递费用计算

每日练习一:结构体统计学生成绩

题目要求:有3名学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输入3个学生的数据,打印出每个学生的平均成绩,以及最高分学生的数据(包括学号、姓名、3门课的成绩、平均分数)。

 #include<stdio.h>
 #define N 2
 struct student
 {
 	char id;
 	char name[10];
 	int score[3];//暂且设置输入三科成绩 
 }stu[N];
 int main()
 {
 	int i,j;//i和学生关联,j和成绩关联 
	int max=0;
	int sum[10]={0};
	float average[N];
	
	
 	//赋值模块 
 	for(i=0;i<N;i++)
 	{
	  	printf("请输入学号 姓名:\n");
 		scanf("%d %s",&stu[i].id,&stu[i].name);
 		for(j=0;j<3;j++)
 		{
 		   printf("请输入第%d科成绩:\n",j+1);
 		   scanf("%d",&stu[i].score[j]);
 	    }
	}
	
	//计算每个学生总成绩和平均成绩 
	for(i=0;i<N;i++)
	{
		for(j=0;j<3;j++)
		{
			sum[i]+=stu[i].score[j];//每个学生的总成绩 
		}
		average[i]=sum[i]/3.0; //平均成绩 
	}
	
    //输出总成绩最高的学生姓名 各科成绩 总成绩
	for(i=0;i<N;i++)
	{
		if(sum[max]<sum[i])
		{
			max=i;
		}
	}
	
    printf("\n姓名    总分    平均成绩\n");
	for(i=0;i<N;i++)
	{
    	printf("%s   %d    %.1f",stu[i].name,sum[i],average[i]);
    	printf("\n");
    }
    printf("分数最高的学生信息如下:\n");
    printf("学号      姓名      成绩\n");
    printf("%d      %s ",stu[max].id,stu[max].name);
    for(j=0;j<3;j++)
    {
    	printf("   %d ",stu[max].score[j]);
	}
	return 0;
}

代码是一步步修改得来的,这里我为了方便调试,代码中把人数设置为2

注意事项❤️:

  1. i, j, sum, max等变量不应在结构体内部定义,在主函数内部用的话,就在main函数的开头部分,定义如上变量。
  2. 由于此程序要键盘输入很多数,所以在赋值模块中,一定要打印 提示语句。
  3. 数组内的元素比较大小后,没必要将数组进行交换,只需记住数组的位置

每日练习二:快递费用计算

本关任务:编写一个计算机快递费的程序。

某快递公司根据投送目的地距离公司的远近,将全国划分成5个区域:0 1 2 3 4

快递费按邮件重量计算,由起重费用、续重费用两部分构成:

(1) 起重(首重)1公斤按起重资费计算(不足1公斤,按1公斤计算),超过首重的重量,按公斤(不足1公斤,按1公斤计算)收取续重费;

(2) 同城0区起重资费10元,续重3元/公斤;

(3) 寄往1的邮件,起重资费10元,续重4元;

(4) 寄往其他地区的邮件,起重资费统一为15元。而续重部分,不同区域价格不同:2区的续 重 5元/公斤,3区的续重6.5元/公斤,4区的续重10元/公斤。

编程要求

编写程序,从键盘输入邮件的目的区域编码和重量,计算并输出运费,计算结果保留2位小数

续重部分不足一公斤,按1公斤计算。因此,如包裹重量2.3公斤:1公斤算起重,剩余的1.3公斤算续重,不足1公斤按1公斤计算,1.3公斤折合续重为2公斤。如果重量应大于0、区域编号不能超出0-4的范围。

知识补充:

  1. 直接赋值给整数变量。如:    int i = 2.5  或 i = (int) 2.5    这种方法采用的是舍去小数部分。
  2. 使用运算符。C/C++中的整数除法运算符"/"本身就有取整功能(int / int),整数除法对正数的取整是舍去小数部分,但是整数除法对负数的取整结果和使用的C编译器有关。
  3. 使用floor函数。floor(x)返回的是x的整数部分。如: floor(2.5) = 2    floor(-2.5) = -3
  4. 使用ceil函数。ceil(x)返回的是不大于x的最小整数。如: ceil(2.5) = 3    ceil(-2.5) = -2    
  5. floor和ceil对于正数没有区别,但是对于负数结果不同。floor()是向负无穷大舍入,floor(-2.5) = -3;ceil()是向正无穷大舍入,ceil(-2.5) = -2。
  6. round(x)返回x的四舍五入整数值。

C语言数学函数ceil(), floor(), round()均使用头文件#include<math.h>返回类型均为double,默认8位小数。此程序主要以switch语句为主体

#include<stdio.h>
#include<math.h>
int main()
{
	int i,num;
	float n,weight,price;
	printf("请输入地区编号和重量:\n"); 
	scanf("%d,%f",&num,&n);//输入地区编号和初始重量 
	weight=ceil(n);//此函数功能详见上方“知识补充” 
	
	
	switch(num)
	{
		case 0:
			if(weight<=1)
			   price=10;
			else
			   price=10+3*(weight-1);
			break;
		case 1:
			if(weight<=1)
			   price=10;
			else
			   price=10+4*(weight-1);
			break;
		case 2:
		case 3:
		case 4:
		    if(num==2)
            {
			   price=15+5*(weight-1);
               break;
            }
			else if(num==3)
            {
			   price=15+6.5*(weight-1);
               break;
            }
			else if(num==4)
            {
			   price=15+10*(weight-1);
			   break; 
            }
		default:
			printf("Error in Area\n"); 
	}
	
	printf("Price: %.2f\n",price);
	return 0;
} 

写在最后

创作不易,还希望各位大佬支持!

👍🏻点赞,你的认可是我创作的动力!

⭐收藏,你的青睐是我努力的方向!

💛评论,你的意见是我进步的财富!

  • 7
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

畅游星辰大海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值