gpt4 book ai didi

c - 结构体中的数组;如何使我的代码更加简洁?

转载 作者:行者123 更新时间:2023-11-30 18:33:39 25 4
gpt4 key购买 nike

我是编程新手,正在为编码的简洁性而苦苦挣扎。

练习题提供了一个值表(每个学生的姓名、ID 和四个测验),我们被要求将其放入 struct 中,然后打印每个学生的信息和测验平均值学生。

虽然我能够完成此任务,但我的代码并不优雅。我需要一些帮助来使其更加简洁,以便我现在可以养成良好的编码习惯。

这是练习题:

  • 创建一个数据结构来存储类(class)中学生的信息。对于每个学生,教授想要存储(目前,稍后会扩展):

    • 名称(字符串)
    • 大学 ID 号(整数)
    • 测验分数(包含 4 个浮点测验分数的数组)
  • 编写一个程序,初始化声明中的变量,然后计算并打印每个学生的测验平均值。

我能够弄清楚如何在结构中放置具有四个值的 float ,但我无法弄清楚如何压缩结构中的数组以减少代码的长度。

此外,我分别对每个学生的值进行编码,但很难让单个打印语句适用于所有学生,而必须为每个学生包含单独的打印语句。我怀疑有更好的方法通过循环来做到这一点,但我无法让它工作。

#include <stdio.h>
#include <stdlib.h>

struct student{
char name[30];
int id_no;
float quiz[4];
};

int main()
{
int i;
float avg;

struct student student1;
strcpy(student1.name,"C,Joe");
student1.id_no = 999;
student1.quiz[0] = 10.0;
student1.quiz[1] = 9.5;
student1.quiz[2] = 0.0;
student1.quiz[3] = 10.0;

struct student student2;
strcpy(student2.name,"Hernandez, Pete");
student2.id_no = 784;
student2.quiz[0] = 10.0;
student2.quiz[1] = 10.0;
student2.quiz[2] = 9.0;
student2.quiz[3] = 10.0;

struct student student3;
strcpy(student3.name,"Brownnose, Violet");
student3.id_no = 999;
student3.quiz[0] = 7.5;
student3.quiz[1] = 6.0;
student3.quiz[2] = 8.5;
student3.quiz[3] = 7.5;

{
printf("Name: %s ",student1.name);
printf("ID: %d ",student1.id_no);
avg = 0;
for(i=0;i<3;i++)
{
printf(" Quiz %d: %.1f ",i,student1.quiz[i]);
avg = avg + student1.quiz[i];
}
avg = avg/4;
printf("\nAverage quiz score: %.1f\n",avg);
}
printf("\n");
{
printf("Name: %s ",student2.name);
printf("ID: %d ",student2.id_no);
avg = 0;
for(i=0;i<3;i++)
{
printf(" Quiz %d: %.1f ",i,student2.quiz[i]);
avg = avg + student2.quiz[i];
}
avg = avg/4;
printf("\nAverage quiz score: %.1f\n",avg);
}
printf("\n");
{
printf("Name: %s ",student3.name);
printf("ID: %d ",student3.id_no);
avg = 0;
for(i=0;i<3;i++)
{
printf(" Quiz %d: %.1f ",i,student3.quiz[i]);
avg = avg + student3.quiz[i];
}
avg = avg/4;
printf("\nAverage quiz score: %.1f\n",avg);
}
return 0;
}

输出结果看起来不错。然而,我用来实现这一目标的方法是缺乏的(请注意,我必须在最后使用三个打印语句——每个学生一个)。

预先感谢您的帮助!

最佳答案

您的程序未完全响应提示,提示

[...] Write a program that will initialize the variable in the declaration [...]

。按照说明进行操作将在一定程度上简化您的代码,就像您希望做的那样。例如:

struct student student1 = { .name = "C,Joe", .id_no = 999, .quiz = { 10.0, 9.5, 0.0, 10.0 }};

只要您按照成员声明顺序提供初始值设定项,而不跳过,您就可以通过省略成员指示符并仅提供初始化值来进一步缩写。不过,我更喜欢使用指示符,因为我发现它更清晰。

Further, I coded the values for each student separately, but struggled to get a single print statement to work for all the students, and instead had to include separate print statements for each student. I suspect there's a better way to do this by looping, but I cannot get it to work.

如果你想循环,那么你需要某种支持迭代的数据结构。数组是显而易见的类型,但链表也可以工作。采用数组路线,您可能会避免学生使用单独的变量,如下所示:

struct student students[] = {
{ .name = "Alice", .id_no = 42, .quiz = { 1.0, 2.5, 3.0, 0.0 }},
{ .name = "Bob", .id_no = 99, .quiz = { 10.0, 9.5, 8.0, 7.0 }},
// ...
};

然后您可以循环数组,在 students[i] 上的每次迭代中进行操作,对于istudents的有效索引范围内.

关于c - 结构体中的数组;如何使我的代码更加简洁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55713996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com