我需要帮助用C语言解决这个代码



我的问题。。

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

b.)在此数组中查找最大GPA。

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

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

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

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

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

到目前为止我已经。。

#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,"%.2fn", *(arrayStart + i)); 
} 
fclose(outputFile); 
} 
outputFile = NULL;
}

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

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

假设你将使用这些信息来学习,这里有一些信息可以让你开始学习。

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。但是,如果你打印数字,你会写出字符"1"one_answers"6"。这些映射到ascii值0x31和0x36。在本例中,打印会生成较小的文件,但通常情况下,情况正好相反。一个整数可以表示非常大的数字,而打印每个数字需要一个字节。但是,写入总是需要4个字节。

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

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

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

您可以手动分配一个大小为15的新数组,然后将旧数组复制到其中。但是,realloc可能是您想要的。

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.)打印出展开数组的内容。

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

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

我不明白你在做什么。第一个for循环不起任何作用。它计算内存地址,但不使用。此外,它不应该工作,因为你只分配大小(浮动)而不是10*尺寸(浮动)

我知道arrayStart是一个指针。如果是,您应该声明float*arrayStart;要找到最大值,只需要以下循环max=学生平均绩点[0];for(int i=0;i<10;i++){如果(StudentGPA[i]>max){max=StudentGPA[i]}}i是一个索引,其值应介于0和数组大小之间要扩展数组,最简单的方法是创建一个新数组并将旧数组复制到其中。否则,请使用链表。

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

float StudentGPA[10];

相关内容

  • 没有找到相关文章

最新更新