当前位置: 首页 > 知识库问答 >
问题:

是否可以在二维数组中输入2种数据类型?

云建木
2023-03-14

所以我被要求写一个程序,列出学生的名字和分数,并计算平均分数。您需要声明两个名为name和marks的数组。假设学生人数为5人。

声明数组名称:(使用二维数组)字符名称[num\u std][name\u len]//名称长度可以为20个字符

声明数组标记:浮点标记[num\u std];

让我恼火的是,我不知道为什么当我尝试运行调用名称和标记的循环时我会得到一个空。我还想知道以这种方式编码我的二维数组是正确的方式吗?. sry,我对二维数组还是新手,这让我很困惑。

有人能给我一个完整的代码,因为我想指出我错在哪里。thx大量:D

///////////////////////代码////////////////////////

#include <stdio.h>

int main ()
{
    int n,i;
    char num_std;
    char name_len[20];
    char name[num_std][name_len[20]];
    float sum = 0,marks [5];
    for (n=0;n<5;n++)
    {
        printf("\nEnter student name:");
        scanf("%s",&name[n][1]);

        printf("Enter student marks:");
        scanf("%f",&marks[n]);
        sum += marks[n];
    }

        for(n=1;n<5;n++)
        {
        printf("%s %f",name[n][1],marks[n]);
         }

    float average = sum/5.0;
    printf("\nAverage mark of 5 students = %.2f",average);
    
    return 0;
    }

////////////////////输出///////////////////////

Enter student name:Brian
Enter student marks:99

Enter student name:Edward
Enter student marks:79

Enter student name:Fred
Enter student marks:69

Enter student name:Adrian
Enter student marks:45

Enter student name:Smith
Enter student marks:55
(null) 45.000000
Average mark of 5 students = 69.40
Process returned 35 (0x23)   execution time : 40.064 s
Press any key to continue.

共有3个答案

宗政才俊
2023-03-14

在foor循环中使用i是一种很好的技术

#include <stdio.h>

int main ()
{
char name[5][20];
float marks [5],sum=0;
for (int i=0;i<5;i++)
{
    printf("\nEnter student name :");
    scanf("%s[^\n]",name[i]);
    printf("Enter student marks :");
    scanf("%f",&marks[i]);
    sum += marks[i];
}

    for(int i=0;i<5;i++)
    {
          printf("\n%s : %f",name[i],marks[i]);
    }
  printf("\nAverage mark of 5 students = %.2f",(double)sum/5.0);
 //float average=(float) sum/5.0;
 //printf("\nAverage mark of 5 students = %.2f",average);
 return 0;
}
蒯宏达
2023-03-14

<代码>字符名称[数字\u标准][名称\u长度[20] 是错误的name\u len是一个由20个元素组成的数组,因此这些元素的索引范围为0到19。访问name\u len[20]不正确。此外,此时未给name\u len中的元素赋值。C标准允许在程序执行期间设置长度的数组,但必须在定义数组时给出长度。它不能是在变量更改时调整的长度。在学习的这一点上,将长度更改为给定的最大值:char name[num\u std][21] 。21个数组元素(每个元素都是字符)允许一个名称中有20个字母加上一个空字符来标记结束。(稍后,您将学习管理不同长度的多个字符串的其他方法。)

您还需要在此定义之前提供一个值。目前尚不清楚该值应该是多少。课程的其他部分是为五名学生编写的硬代码。在这种情况下,您可以使用char num\u std=5定义num\u std 。在这样的作业中,程序通常首先从输入读取num\u std。在这种情况下,您需要一个scanf来读取char name[num\u std][21]行之前的num\u std

<代码>scanf(“%s”,

在printf中(“%s%f”,名称[n][1],标记[n]),您还应该使用名称[n][0],并且您需要再次传递其地址,

滕项明
2023-03-14

您的代码是如何错误的:

#include <stdio.h>

int main ()
{
    /* i is declared but not used (legal) */
    int n,i;
    char num_std;
    char name_len[20];
    /* uninitialized variable num_std is used as array length (critical) */
    /* out-of-range name_len[20] is used (critical) */
    char name[num_std][name_len[20]];
    float sum = 0,marks [5];
    for (n=0;n<5;n++)
    {
        printf("\nEnter student name:");
        /* the first element of the array name[n] is not used (legal) */
        scanf("%s",&name[n][1]);

        printf("Enter student marks:");
        scanf("%f",&marks[n]);
        sum += marks[n];
    }

    /* indentation is broken (legal) */
        /* the first data is not printed (legal) */
        for(n=1;n<5;n++)
        {
        /* char (name[n][1]) is passed where char* is required (critical) */
        /* data is printed without being separated (legal) */
        printf("%s %f",name[n][1],marks[n]);
         }

    float average = sum/5.0;
    /* newline character is not printed at end of output (legal) */
    printf("\nAverage mark of 5 students = %.2f",average);
    
    return 0;
    /* but indentation is broken (legal) */
    }

这里,“关键”是指错误会引发未定义的行为,“合法”是指错误不会引发未定义的行为,但行为可能不是想要的或不典型的。

固定代码:

#include <stdio.h>

int main (void)
{
    int n;
    char name[5][21]; /* 20-character name + 1 terminating null-character */
    float sum = 0,marks [5];
    for (n=0;n<5;n++)
    {
        printf("\nEnter student name:");
        scanf("%20s",name[n]); /* specify length limit to avoid buffer overrun */

        printf("Enter student marks:");
        scanf("%f",&marks[n]);
        sum += marks[n];
    }

    for(n=0;n<5;n++)
    {
        printf("%s %f\n",name[n],marks[n]);
    }

    float average = sum/5.0;
    printf("\nAverage mark of 5 students = %.2f\n",average);
    
    return 0;
}
 类似资料:
  • 本文向大家介绍将二维数组转为一维数组的2种方法,包括了将二维数组转为一维数组的2种方法的使用技巧和注意事项,需要的朋友参考一下 如何将下面的二维数组转为一维数组。 第一种方法: 第二种方法: 以上两种解法print_r($names);后的结果为: 注意:array_column();可以有第三个参数,如 $n = array_column($msg, 'name', 'id'); print_r

  • 在java.util.scanner.throwfor(未知源)在java.util.scanner.next(未知源)在java.util.scanner.nextint(未知源)在java.util.scanner.nextint(未知源)在test.main(test.java:6) 如何修复以及如何在数组中输入字符串

  • 问题内容: 假设我们有Java代码: 那会跑吗?进一步说明,如果我们尝试这样的操作: 那么arr1将是一个等效于2D的2D数组: 怎么样:如果我们直到运行时才知道该数组的维数怎么办? 编辑:如果这有帮助(我确定会…),我们正在尝试从形式为String的字符串解析未知维度的数组 要么 等等 Edit2:万一像我这样愚蠢的人尝试使用此垃圾,这是一个至少可以编译并运行的版本。逻辑是否合理完全是另一个问题

  • 问题内容: 我想用()缩放数据,现在我可以通过将RDD的值传递给transform函数来做到这一点,但是问题是我想保留键。无论如何,我是否通过保留数据密钥来扩展数据? 样本数据集 进口货 代码部分 功能: 问题答案: 这不是一个很好的解决方案,但是您可以调整我对类似Scala问题的答案。让我们从一个示例数据开始: 不幸的是,它只是围绕JVM模型的包装,并且它并不是真正的Python友好。幸运的是,

  • 本文向大家介绍java二维数组遍历的2种代码,包括了java二维数组遍历的2种代码的使用技巧和注意事项,需要的朋友参考一下 二维数组遍历: 思想: 1.先将二维数组中所有的元素拿到 2.再将二维数组中每个元素进行遍历,相当于就是在遍历一个一维数组 第一种方法:双重for循环 运行结果图: 第二种方法:增强for循环foreach 运行结果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希