我的问题。。
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];