💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
前言
在我们实际应用中,每一种类(可认为是物体)都有多种属性。列如一位学生,他的属性有,性别 ,姓名,学号,成绩等多种。假设一个班级有30位学生,如果把这些学生分别单独定义,就会特别松散、复杂,难以规划,因此我们需要把30个学生组合起来,以一个集合形式对30个学生进行描述,因此就用到了结构体类型的数组,该数组里的元素都是学生类型的结构体。下面将会讲解3道结构体数组编程题,这3三道编程题很经典,其解法也很相识似。同时又与现实问题很吻合。希望看完对你有所帮助!
点击即可查看:结构体数组知识
题目1:输出朋友信息
描述:创建一结构类型描述朋友信息,包括姓名、生日,电话号码(字符串)。输入n(n<10)个朋友的信息存放到结构数组中,再按他们的年龄从大到小的顺序依次输出其信息。
朋友信息:
张三 18 4月12日 13435789087
李四 26 4月23日 13435781234
小夏 23 4月04日 13435785678
小和 35 5月04日 13435744567
代码如下:
//声明Firend类型的结构体
struct Friend
{
char name[20]; //名字
int age; //年龄
char bir[20]; //生日日期
char num[20]; //电话号码
};
int main()
{
struct Friend friend[4];
//输入朋友信息
for (int i = 0; i < 4; i++)
{
scanf("%s%d%s%s", &friend[i].name, &friend[i].age, &friend[i].bir, &friend[i].num);
}
//排序
for (int i = 0; i < 4 - 1; i++)
{
for (int j = 0; j < 4 - i - 1; j++)
{
if (friend[j].age < friend[j + 1].age)
{
int temp = friend[j].age;
friend[j].age = friend[j + 1].age;
friend[j].age = temp;
}
}
}
//输出
printf("%s %s %s %s\n", "姓名", "年龄", "生日日期", "电话号码");
for (int i = 0; i < 4; i++)
{
printf("%s %d %s %s\n", friend[i].name, friend[i].age, friend[i].bir, friend[i].num);
}
return 0;
}
输出结果:

解析:解决这道题关键是将他们的年龄从大到小的排序。这就需要使用冒泡排序了。
题目2:输出员工薪资信息
描述:创建一结构类型描述员工薪资信息,包括编号,薪资情况。输入5个员工的信息存放到结构数组中,再按他们的工资从高到低的顺序排序。最后输出员工薪资信息和最低工资。
员工信息:
编号 薪资
01 8888.65
02 8893.78
03 7799.78
04 8881.22
05 6699.89
代码如下:
struct Stuff
{
int stuffid; //编号
float bonus; //薪资
};
int main()
{
struct Stuff stuff[5]; //定义一个Stuff结构体类型的数组
float minBonus; //存放最低薪资
//输入员工数据
for (int i = 0; i < 5; i++)
{
scanf("%d %f", &stuff[i].stuffid, &stuff[i].bonus);
}
minBonus = stuff[0].bonus; //假设最低薪资为第一位员工
//找出最低薪资
for (int i = 0; i < 5; i++)
{
if (minBonus > stuff[i].bonus)
{
minBonus = stuff[i].bonus;
}
}
//打印
printf("%s %s\n", "编号", "工资");
for (int j = 0; j < 5; j++)
{
printf("%02d %.2f\n", stuff[j].stuffid, stuff[j].bonus);
}
printf("最低工资:%.2f", minBonus);
return 0;
}
输出结果:

题目3:输出学生成绩信息
创建一结构类型描述学生综合成绩信息,包括学号,姓名,综合得分。输入4个学生的信息存放到结构数组中,再按他们的成绩从高到低的顺序依次输出其信息,并输出平均分。
学生成绩信息:
2023123 小夏 78.75
2023111 小溪 87.68
2023233 笑笑 82.98
2023456 小猪 69.55
代码如下:
struct Student
{
int id;
char name[20];
float score;
};
int main()
{
struct Student stu[4];
float avg = 0;
for (int i = 0; i < 4; i++)
{
scanf("%d %s %f", &stu[i].id, & stu[i].name, &stu[i].score);
avg += stu[i].score / 4;
}
//冒泡排序
//趟数
for (int i = 0; i < 4 - 1; i++)
{
//比较次数
for (int j = 0; j < 4 - i - 1; j++)
{
if (stu[j].score < stu[j + 1].score)
{
float temp = stu[j].score;
stu[j].score = stu[j + 1].score;
stu[j + 1].score = temp;
}
}
}
//输出
printf("%s %s %s\n", "学号", "姓名", "成绩");
for (int j = 0; j < 4; j++)
{
printf("%d %s %.2f\n", stu[j].id, stu[j].name, stu[j].score);
}
printf("平均分:%.2f", avg);
return 0;
}

题目4:输出购物者小票
有一位顾客想在幸运小猫平台的线下商店购买三种猫粮中的一种,三种猫粮分别为:roy-幼猫粮-109.5,now-幼猫粮-89.5,go-成猫粮-180。输出顾客所购买猫粮的金额。
代码如下:
typedef struct Shop
{
char brand[10]; //品牌
char var[10]; //类型
float price; //价格
}Shop;
void Print(struct Shop shop[])
{
printf("%s %s %s\n", "品牌", "类型", "价格");
for (int i = 0; i < 3; i++)
{
printf("%s %s %.2f\n", shop[i].brand, shop[i].var, shop[i].price);
}
}
int main()
{
Shop shop[3] = { {"now", "幼猫粮", 89.5f},{"roy", "幼猫粮", 109.8f},{"go", "幼猫粮", 180.5f} };
int count = 0; //购买个数
float money = 0; //购买金额
char temp[10] = { 0 }; //购买猫粮品种
//打印
Print(shop);
scanf("%s %d", temp, &count);
//计算金额
for (int i = 0; i < 3; i++)
{
if (0 == strcmp(shop[i].brand, temp))
{
money = shop[i].price * count;
}
}
printf("合计: %.2f", money);
return 0;
}
输出结果:

思路:
- 声明Shop结构体类型。
- 实现Print打印三种品牌猫粮的信息。
- 实现金额计算。
总结: 通过这篇文章,我相信你对处理类似这种类型的编程题应该是游刃有余了,一定更加了解结构体数组的应用了,也对自定义类型结构体有更深的了解。
这类题的基本思路:
- 定义一个结构体类型的数组。
- 根据题目要求去逐步实现。
- 题目要求排序一般用冒泡排序,这种算法较简单。
那么写到这里,本节内容就结束了,这篇博客花费了很长时间,但写完有满满的成就感,希望能帮助到大家,如果文章有不足的地方,欢迎在评论区留言指正,我们一起学习交流!
希望能得到大家的关注、点赞、评论、收藏! 你的支持是我最大的动力!!
2047

被折叠的 条评论
为什么被折叠?



