c语言-求帮忙找问题,C语言程序

问题描述

求帮忙找问题,C语言程序
在一个学生成绩管理系统中,保存学生个人的成绩情况,其中包括学号,姓名,性别,5门课成绩。对所有成绩作如下处理:

(1)从键盘输入10个学生的学号,姓名,性别,5门课成绩,并计算出每个人平均成绩,全班每门课的平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stu.c”中。

(2)将上题“stu.c”文件中的学生数据,按每个人的平均分进行排序处理,将已排序的学生数据存入一个新文件“stu-sort”中。

(3)将上题已排序的学生成绩文件进行插入处理。插入一个学生的5门课成绩,程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件。

#include
#include
#define SIZE 2

struct Student
{
int num;
char name[20];
char sex[2];
int score[5];
float aver;
struct Student *next;
}stu[SIZE]*head*p*q;

void save()
{
FILE *fp;
int ij;
fp = fopen(""stu.c""w+"");
head = p = (struct Student *)malloc(sizeof(struct Student));
head ->next = &stu[0];
for(i = 0;i < SIZE;i++)
{

    scanf(""%d ""&stu[i].num);    fprintf(fp%dn""stu[i].num);    gets(stu[i].name);    fprintf(fp%sn""stu[i].name);    gets(stu[i].sex);    fprintf(fp%sn""stu[i].sex);    for(j = 0;j < 5;j++)        scanf(""%d""&stu[i].score[j]);    fprintf(fp%d %d %d %d %dn""stu[i].score[0]stu[i].score[1]stu[i].score[2]        stu[i].score[3]stu[i].score[4]);    stu[i].aver = (stu[i].score[0] + stu[i].score[1] + stu[i].score[2] + stu[i].score[3]        + stu[i].score[4])/5.0;    fprintf(fp%fn""stu[i].aver);    if(i <= SIZE - 2)        stu[i].next = &stu[i + 1];    else        stu[i].next = NULL;}fclose(fp);

}

void sort()
{
FILE *fp_in*fp_sort;
int ij;
float stu_aver[SIZE];
struct Student temp;
fp_in = fopen(""stu.c""r+"");
for(i = 0;i < SIZE;i++)
{
fscanf(fp_in%d%f""&stu[i].num&stu[i].aver);
printf(""fuck %fn""stu[i].aver);
stu_aver[i] = stu[i].aver;
}
for(i = 0;i < SIZE;i++)
printf(""%fn""stu_aver[i]);
for(i = 0;i < SIZE - 1;i++)
{
for(j = 0;j < SIZE - 1 - i;j++)
{
if(stu[j].aver > stu[j + 1].aver)
{
temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
fp_sort = fopen(""stu-sort""w+"");
for(i = 0;i < SIZE;i++)
{
fprintf(fp_sort%dn""stu[i].num);
fprintf(fp_sort%sn""stu[i].name);
fprintf(fp_sort%sn""stu[i].sex);
fprintf(fp_sort%d %d %d %d %dn""stu[i].score[0]stu[i].score[1]stu[i].score[2]
stu[i].score[3]stu[i].score[4]);
fprintf(fp_sort%lfn""stu[i].aver);
}
fclose(fp_sort);
fclose(fp_in);
}

void add()
{
FILE *fp_new*fp_in;
int i;
head ->next = &stu[0];
q = (struct Student *)malloc(sizeof(struct Student));
scanf(""%d ""&(q ->num));
gets(q ->name);
gets(q ->sex);
for(i = 0;i < 5;i++)
scanf(""%d""&(q ->score[i]));
q ->aver = (q ->score[0] +q ->score[1] + q ->score[2] +q ->score[3]
+ q ->score[4])/5.0;
fp_in = fopen(""stu-sort""r+"");
for(i = 0;i < SIZE;i++)
{
fscanf(fp_in%d%f""&stu[i].num&stu[i].aver);
//printf(""fuck %fn""stu[i].aver);
//stu_aver[i] = stu[i].aver;
}
for(i = 0;i < SIZE;i++)
printf(""%fn""stu[i].aver);
printf(""%fn""q ->aver);
p = head;
if(q ->aver <= stu[0].aver)
{
p ->next = q;
q ->next = &stu[0];
}
else if(q ->aver >= stu[SIZE - 1].aver)
{
stu[SIZE - 1].next = q;
q ->next = NULL;
}
else
{
for(i = 0;i < SIZE - 1;i++)
{
if((q ->aver > stu[i].aver) && (q ->aver < stu[i + 1].aver))
{
stu[i].next = q;
q ->next = &stu[i + 1];
}
}
}
fclose(fp_in);
fp_new = fopen(""new""w+"");
p = head ->next;
for(;;)
{
fprintf(fp_new%dn""p ->num);
fprintf(fp_new%sn""p ->name);
fprintf(fp_new%sn""p ->sex);
fprintf(fp_new%d %d %d %d %dn""p ->score[0]p ->score[1]p ->score[2]
p ->score[3]p ->score[4]);
fprintf(fp_new%lfn""p ->aver);
p = p ->next;
if(p == NULL)
break;
}
fclose(fp_new);

}

int main(void)
{
//FILE *fp;
//int ij;
save();
sort();
add();
return 0;
}

(1)(2)问处理好像没问题了,第(3)点插入处理,输出的学生数据只有两个人的。。是不是链表链接有问题,还是别的地方出现错误。~

解决方案

只做过单片机的程序,其他的不知道

解决方案二:
说说看你有没有调试程序,你是怎么调试的。既然只输出两个人,在输出的循环上下个断点看看

解决方案三:
既然怀疑链表的建立过程,为什么不调试一下代码呢?调试的过程,个人认为比编码更重要。

解决方案四:
我想是你的输入问题,注意C语言,scanf和getchar,gets通用时,末尾换行符错误问题。

解决方案五:
没有C的环境,我其实很喜欢找错的。。。

解决方案六:
非常感谢大家的回答哈

解决方案七:
没有仔细看你的代码逻辑,看是否是 #define SIZE 2 限制了正常的输出数量。

解决方案八:
又是一个一大篇代码的!表示没时间看下去!

解决方案九:
那个SIZE是不是有问题?最好单步调试一下。

解决方案十:
可以在每次插入完成后把链表数据循环打印一下

时间: 2024-10-04 17:36:17

c语言-求帮忙找问题,C语言程序的相关文章

编程c语言-写的c代码求帮忙找错误

问题描述 写的c代码求帮忙找错误 #include #include #include #include #include extern "C" { WINBASEAPI HWND WINAPI GetConsoleWindow(); } int main(int argc, char *argv[]) //主线程运行结束,辅助线程也结束. { HWND hwnd; HDC hdc; printf("There are some words in console window

c语言-求帮忙看下为什么程序调用了西沟函数导致程序整个不能运行

问题描述 求帮忙看下为什么程序调用了西沟函数导致程序整个不能运行 写说明一下代码,代码主要是要在控制台模拟浏览器对tab和网页前进后退的一些操作 再说明一下问题,问题在于brwosertab类和webinformation类的西沟函数,一旦在这两个类的西沟函数里面写上delete 指针名字:整个程序就不能运行了,最关键的是我不太明白为什么程序要调用这两个函数,因为我感觉我都是动态对象啊.最后说明一下,我很菜,只有一点java编程的经验,所以第一次应对c++我真的需要一些帮助.谢谢你们了! 解决方

c语言-求帮忙补充下 写成能在C环境下能编译的代码

问题描述 求帮忙补充下 写成能在C环境下能编译的代码 先读入数据建立顺序表va,表中的数据元素递增有序,再读入一个整数x,将它插入到顺序表中的适当位置,并保持顺序表的有序性. 输入:先输入一个小于100的正整数n,紧接着读入n个从小到大的正整数,建立顺序表,最后再读入一个正整数x,把它插入到顺序表中的适当位置,并保持顺序表的有序性. 输出:按顺序输出整个顺序表,输出的每个元素占一行. Status InsertOrderList(SqList &va,int x) { int i; if(va.

c语言-求大神用C语言编写一个自由落体动画

问题描述 求大神用C语言编写一个自由落体动画 如题求大神用C语言编写一个自由落体动画,可以的话可以配上声音! 解决方案 自由落体动画其实很简单,定时绘制一个物体,设当前时间到最初时间的时间差为t,物体的y坐标=g*t*t,其中g为重力常数,为了效果,也可以稍微修改.配上声音很简单,你可以丢一个什么东西,用录音机录下来,保存为wav文件用mci播放 解决方案二: c语言是没有自带绘图的,只有用openGL,你可以用MFC来实现,方法就是 caozhy说的那样,注意绘图用双缓冲,不然会闪烁 解决方案

c语言-求大神,C语言求 结构体

问题描述 求大神,C语言求 结构体 有5个学生,每个学生的数据包括学号.姓名.3门课的成绩,从键盘输入5个学生的数据,要求输出3门课总平均成绩,以及最高分的学生的数据. 要求用一个input函数输入3个学生数据,用一个average函数求总平均分,用max函数找出最高分的学生数据,总平均分和最高分的学生数据都在主函数中输出. 写到这里,报错太多,写不下去了 解决方案 首先,你的student结构体定义了没有.你有没有定义全局的stu,造成了冲突. 然后,你函数是不是和库函数冲突,比如max,在标

c语言-求大神解释C语言题,请解释详细一点,谢谢

问题描述 求大神解释C语言题,请解释详细一点,谢谢 下面的代码输出什么? #include int main(void) { int i; int a[5]; for (i = 0; i <= 5; ++i) { a[i] = -i; printf("a[%d] = %dn", i, a[i]); } return 0; } 解决方案 #include<stdio.h> void main() { int i=0; int a[5]={0,0,0,0,0}; for

语言-求一个能计算圆周率的程序的源代码

问题描述 求一个能计算圆周率的程序的源代码 求一个能计算圆周率的程序的源代码,要求如下:语言不限,要能计算精确度在100万位以上要求计算100万位花费的时间(以Pentium 4 3.0GHz CPU为基准),不大于1分钟计算结果可以保存在外部文件中计算结果必须是十进制的 解决方案 参考GPi--使用GPU计算圆周率GPi是一款免费的.基于OpenCL的圆周率计算工具,可用于GPU性能测试,支持nVidia.AMD.Intel等厂商GPU.CPU.GPi可充分利用GPU强大的并行计算能力,使用主

c语言-求msp430F149避障小车C程序,要是是智能小车更好

问题描述 求msp430F149避障小车C程序,要是是智能小车更好 谢谢!请发送邮箱875604452@qq.com!,加分!避障用hc-sr04 解决方案 智能小车循迹避障程序

c语言-求大神解答一下!程序编译通过,总是停止运行。

问题描述 求大神解答一下!程序编译通过,总是停止运行. int* qiuyu(int n,int i) { int sum; static int m=2; sum[i]=n%m; m=2; n-=sum[i]; if(sum[i]==0) /*求n的2次方之和*/ return qiuyu(n,i); if(n==0) return sum; else return qiuyu(n,++i); } int main(void) { int m; int *sum,n=27,i=0; sum=q