每日练习一:结构体统计学生成绩
题目要求:有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。
注意事项❤️:
- i, j, sum, max等变量不应在结构体内部定义,在主函数内部用的话,就在main函数的开头部分,定义如上变量。
- 由于此程序要键盘输入很多数,所以在赋值模块中,一定要打印 提示语句。
- 数组内的元素比较大小后,没必要将数组进行交换,只需记住数组的位置
每日练习二:快递费用计算
本关任务:编写一个计算机快递费的程序。
某快递公司根据投送目的地距离公司的远近,将全国划分成
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
的范围。
知识补充:
- 直接赋值给整数变量。如: int i = 2.5 或 i = (int) 2.5 这种方法采用的是舍去小数部分。
- 使用运算符。C/C++中的整数除法运算符"/"本身就有取整功能(int / int),整数除法对正数的取整是舍去小数部分,但是整数除法对负数的取整结果和使用的C编译器有关。
- 使用floor函数。floor(x)返回的是x的整数部分。如: floor(2.5) = 2 floor(-2.5) = -3
- 使用ceil函数。ceil(x)返回的是不大于x的最小整数。如: ceil(2.5) = 3 ceil(-2.5) = -2
- floor和ceil对于正数没有区别,但是对于负数结果不同。floor()是向负无穷大舍入,floor(-2.5) = -3;ceil()是向正无穷大舍入,ceil(-2.5) = -2。
- 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;
}
写在最后
创作不易,还希望各位大佬支持!
👍🏻点赞,你的认可是我创作的动力!
⭐收藏,你的青睐是我努力的方向!
💛评论,你的意见是我进步的财富!