- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是编程新手,正在为编码的简洁性而苦苦挣扎。
练习题提供了一个值表(每个学生的姓名、ID 和四个测验),我们被要求将其放入 struct
中,然后打印每个学生的信息和测验平均值学生。
虽然我能够完成此任务,但我的代码并不优雅。我需要一些帮助来使其更加简洁,以便我现在可以养成良好的编码习惯。
这是练习题:
创建一个数据结构来存储类(class)
中学生的信息。对于每个学生,教授想要存储(目前,稍后会扩展):
编写一个程序,初始化声明中的变量,然后计算并打印每个学生的测验平均值。
我能够弄清楚如何在结构中放置具有四个值的 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]
上的每次迭代中进行操作,对于i
在students
的有效索引范围内.
关于c - 结构体中的数组;如何使我的代码更加简洁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55713996/
我正在用 C# 编写动态语言的解释器,并将原始函数实现为具有虚拟 Apply 方法的抽象类 Primitive,其中每个实际原始函数都是重写 Apply 的子类。 (另一种方法是只拥有类 Primit
我正在用 C# 编写动态语言的解释器,并将原始函数实现为具有虚拟 Apply 方法的抽象类 Primitive,其中每个实际原始函数都是重写 Apply 的子类。 (另一种方法是只拥有类 Primit
我是 Dapper 的新手我正在尝试了解它实际上是如何映射事物的。我有以下数据库结构: calendar | Id | Name | meeting_room | Id | Calendar_id
抱歉问题标题很糟糕。有没有办法在一行中做到这一点: Button button = (Button)Gridview.Cells[0].FindControl("controlname"); butt
在 Java 中在声明点和使用点声明列表/数组文字的tersest方法是什么? 作为次要问题,我更喜欢一种不会导致编译时警告或要求抑制警告的方法。 注意:就我个人而言,这是针对Java 8ish on
什么是现代、简洁、快速的方法来测试节点是否有任何与给定选择器匹配的子节点? “简洁”是指类似于 jQuery 或函数式风格,例如避免循环。我知道本地选择器越来越多地使用这种类型的东西,但没有跟上发展的
getFirstNotNullResult 执行函数列表,直到其中一个函数返回非空值。 如何更优雅/简洁地实现 getNotNullFirstResult? object A { def main
根据 stackoverflow 上某人的推荐,我使用了 jquery succint https://github.com/micjamking/Succinct截断我在 php 网站上的帖子。 它
我是一名优秀的程序员,十分优秀!