【问题标题】:I need help solving this code in C, please我需要帮助在 C 中解决此代码,请
【发布时间】:2013-12-22 11:18:39
【问题描述】:

我的问题..

a.) 使用内存分配创建一个浮点数组来存储学生的 GPA 分数 10名学生。给它赋值(你的选择)

b.) 找出这个数组中的最大 GPA。

c.) 将此数组的内容写入文件 alloc.txt

d.) 扩展数组以容纳另外 5 名学生的 GPA 分数。

e.) 将此扩展数组的内容写入另一个文件 realloc.txt

f.) 将 realloc.txt 的内容读取到另一个名为 Expand 的浮点数组。

g.) 打印出 Expand 数组的内容。

到目前为止我有..

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

main ()
{

int i = 0;

float StudentGPA [9];
StudentGPA [0] = 3.7;
StudentGPA [1] = 2.9;
StudentGPA [2] = 3.8;
StudentGPA [3] = 2.5;
StudentGPA [4] = 3.4;
StudentGPA [5] = 1.9;
StudentGPA [6] = 2.4;
StudentGPA [7] = 4.0;
StudentGPA [8] = 3.1;
StudentGPA [9] = 3.9;
float *arrayStart = (float*) malloc(sizeof(float));

for (i=0; i<StudentGPA; i++) { 
(*arrayStart + i);   
} 
float maxValue = *arrayStart; 

for (int i=1; i<StudentGPA; i++) { 
if ( *(arrayStart + i) > maxValue ) 
maxValue = *(arrayStart + i); 
} 
const char(0) fileName = "alloc.txt"; 
FILE* outputFile = fopen (fileName, "w"); 
if (outputFile) { 
for (int i=0; i<StudentGPA; i++) { 
printf(outputFile,"%.2f\n", *(arrayStart + i)); 
} 
fclose(outputFile); 
} 

outputFile = NULL;

}

我被困在这里,我意识到这还没有完成,但我无法进一步完成。我的编译器通知多个错误。有人请帮忙。 提前谢谢你!

【问题讨论】:

  • 请说明您的问题并返回。
  • 你也要我们洗碗吗?
  • 抱歉,您需要提出一个具体问题,准确告诉我们您遇到的问题并给我们一个实际的错误消息,而不是“多个错误”。
  • 请缩进你的代码。这几乎无法阅读。
  • edit您的问题使标题更有意义。当未来的用户在这里寻找类似问题的解决方案时,“需要帮助解决这个 c 中的代码”绝对没用。您当前主题中唯一有用的词是“c”,我们已经从您使用的标签中知道了这一点。谢谢。

标签: c arrays malloc expand realloc


【解决方案1】:

这听起来像是家庭作业。你的课本可以说什么课程材料?如果你来这里只是为了答案而没有理解,那么你可能会通过作业,但你不会从课程中学到东西。

假设您将使用这些信息来学习,这里有一些信息可以帮助您入门。

a.) 使用内存分配创建一个浮点数组来存储 10 名学生的 GPA 分数。给它赋值(你的选择)

为此,您需要使用 malloc。您的代码当前通过将堆栈声明为常量大小数组来使用堆栈。相反,您应该这样做:

float* studentGPA = (float*)malloc(10 * sizeof(float));

然后用值初始化它。他们这样做的方式很好。

b.) 找出这个数组中的最大 GPA。

我不知道你为什么使用奇怪的指针算法,但是在数组中找到最大值很容易。只需循环遍历数组的范围并与先前已知的值进行比较。例如。

float maxVal = studentGPA[0];
for (int i=1; i<10; i++) 
  if (studengGPA[i] > maxVal) 
    maxVal = studentGPA[i];

c.) 将此数组的内容写入文件 alloc.txt

有很多方法可以做到这一点。可以使用write 直接写入内容,或者使用fprintf 将它们打印到文件中。前者更准确,但后者实际上制作了人类可读的文件。例如,如果您将整数16 写入文件,您实际上将写入 4 个字节(整数的通常大小)并且值(以十六进制表示)将为 0x10 0x00 0x00 0x00。但是,如果您打印数字,您将写入字符“1”和“6”。这些映射到 0x31 和 0x36 的 ascii 值。在此示例中,打印会生成较小的文件,但通常情况正好相反。整数可以表示非常大的数字,并且打印每个数字需要一个字节。但是,写入总是需要 4 个字节。

也就是说,这是一种快速打印到文件的方法。

FILE* outfile=fopen("alloc.txt", "w");
for (i=0; i<10; i++) 
  fprintf(outfile, "%f\n", studentGPA[i]);

d.) 扩展数组以容纳另外 5 名学生的 GPA 分数。

您可以手动执行此操作,方法是分配一个大小为 15 的新数组,然后将旧数组复制到其中。不过,realloc 可能就是您要找的。​​p>

realloc((void*)studentGPA, 15 * sizeof(float));

e.) 将此扩展数组的内容写入另一个文件 realloc.txt

见上文。

f.) 将 realloc.txt 的内容读取到另一个名为 Expand 的浮点数组中。

类似于fprintf,可以使用fscanf。它会将格式化的输入读入您的值。

float* expand = (float*)malloc(15 * sizeof(float));
FILE* infile=fopen("realloc.txt", "r");
for (i=0; i<15; i++)
  fscanf(infile, "%f", &(expand[i]));

g.) 打印出 Expand 数组的内容。

只需使用printf 即可打印到屏幕上。

for (i=0; i<15; i++)
  printf("%f\n", expand[i]);

【讨论】:

  • 谢谢!非常感谢!
【解决方案2】:

我不明白你在做什么。 第一个 for 循环什么都不做。它计算内存地址,但什么也不做。此外,它不应该工作,因为你只分配 大小(浮动) 并不是 10 * sizeof(float)

我理解 arrayStart 是一个指针。如果是这样,你应该声明 浮动*数组开始; 要找到最大值,您只需要以下循环 最大=学生GPA [0]; 对于 (int i=0; i max) {max = StudentGPA[i]} } i 是一个索引,应该取 0 到数组大小之间的值 要扩展数组,最简单的方法是创建一个新数组并将旧数组复制到其中。 否则,使用链表。

【讨论】:

    【解决方案3】:

    首先,您声明了一个大小为 9 的数组,但您尝试使用它,因为它有 10 个元素。 将数组声明更改为:

    float StudentGPA[10];
    

    【讨论】:

      猜你喜欢
      • 2021-05-05
      • 2010-11-04
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多