用c语言编写东西 为什么程序会停止工作?

编了个 10个学生 5个成绩 的 代码
可是一运行 就会exe停止工作 怎么回事。。
#include<stdio.h>
float x1[10],x2[5];
void main()
{
float xue_pinjun(float a[10][5]);
float ke_pinjun(float a[10][5]);
char name[10];
char course[5];
float fenshu[10][5];
int i,j;
printf("请输入10个名字:\n");
for(i=0;i<10;i++)
scanf("%s",name[10]);
printf("请输入5门课名字:\n");
for(j=0;j<5;j++)
scanf("%s",course[5]);
printf("请输入分数(50个):\n");
for(i=0;i<10;i++)
for(j=0;j<5;j++)
scanf("%f",&fenshu[i][j]);
xue_pinjun(fenshu);
x1[10]=x1[10];
for(i=0;i<10;i++)
{
printf("%s",name[i]);
printf("%f",x1[i]);
}
ke_pinjun(fenshu);
x2[5]=x2[5];
for(i=0;i<5;i++)
{
printf("%s",course[i]);
printf("%d",x2);
}
}
float xue_pinjun(float a[10][5])
{
int i,j;
float sum;
float ave;
for (i=0,sum=0;i<10;i++)
for(j=0;j<5;j++)
{
sum=sum+a[i][j];
ave=sum/5;
x1[i]=ave;
return (x1[10]);
}
}
float ke_pinjun(float a[10][5])
{
int i,j;
float sum=0;
float ave;
for(j=0,sum=0;j<5;j++)
for(i=0;i<10;i++)
sum=sum+a[i][j];
ave=sum/10;
x2[j]=ave;
return(x2[10]);
}

  这种情况叫做 runtime error (运行时错误)。


  在 Windows 7 上这样提示:

  在 Windows XP 上这样提示:

  runtime  error ï¼ˆè¿è¡Œæ—¶é”™è¯¯ï¼‰å°±æ˜¯ç¨‹åºè¿è¡Œåˆ°ä¸€åŠï¼Œç¨‹åºå°±å´©æºƒäº†ã€‚

  比如说:

  ①除以零

  ②数组越界:int a[3]; a[10000000]=10;

  ③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;

  ④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;

  ⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000]

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-26
程序停止响应,是因为你的内存出现非法读写操作
请检查你的代码所有关于内存读写的地方

不能用下标 10 读取数组 x1 的内容,这样子会导致数组上标越界
你只能使用 0 - 9 来读取数组 x1 的内容追问

可不可以给我说下是那块的。。。新手 不太熟练。。,给我说下。。怎么改,然后我再好好琢磨一下

本回答被提问者和网友采纳
第2个回答  2014-03-16
#include <stdio.h>
#include <string.h>

#define ITEMS 3
#define MAX   3

typedef struct {
char name[30];
double grades[ITEMS + 2];
}student;

char coursename[ITEMS + 2][10] = {"英语","数学","编程","平均成绩","总成绩"};

double AverageStudent(student stu[], int n,char name[]) {
int i;
for(i = 0; i < n; ++i) {
if(strcmp(stu[i].name,name) == 0)
return stu[i].grades[ITEMS - 1 + 1];
}
return 0.0;
}

double AverageCourse(student stu[], int n, char curname[]) {
int i,order = -1;
double sum = 0.0;
for(i = 0; i < ITEMS; ++i) {
if(strcmp(coursename[i],curname) == 0) {
order = i;
break;
}
}
if(order == -1) return 0.0;
for(i = 0; i < n; ++i)
sum += stu[i].grades[order];
if(n > 0) return sum/n;
return 0.0;
}

int main() {
student stu[MAX];
int i,j;
for(i = 0; i < MAX; ++i) {
stu[i].grades[ITEMS + 1] = 0.0;
printf("(%d/%d)名学生数据:\n",i + 1,MAX);
fflush(stdin);
scanf("%s",stu[i].name);
for(j = 0; j < ITEMS; ++j) { // 读入各科成绩
scanf("%lf",&stu[i].grades[j]);
stu[i].grades[ITEMS + 1] += stu[i].grades[j]; // 总分累计
}
stu[i].grades[ITEMS - 1 + 1] = stu[i].grades[ITEMS + 1]/ITEMS; // 计算平均分
}
for(i = 0; i < ITEMS; ++i) // 显示各科平均成绩
printf("%s平均分:%.2lf\n",coursename[i],AverageCourse(stu,MAX,coursename[i]));
return 0;
}

第3个回答  2014-03-16
scanf("%s",name[10]); 改成scanf("%s",&name[10]);
scanf("%s",course[5]);改成scanf("%s",course);
printf("%s",name[i]);改成printf("%c",name[i]);
printf("%s",course[i]);改成printf("%c",course[i]);追问

第二行和第一行不太一样锕。。
字符串可以用&吗?
%c不是只是一个字符么。。可以输出一个名字那么长么?
我新手,,能不能讲讲?

追答

sorry,&name[10]那改成name

%c你使用了循环想输多长输多长

追问

按你说的 输入ok了 但是输出目标达到不了
能不能帮我看看这个程序 麻烦了。。我就是搞不懂 我觉得逻辑上没错误。。怎么做不到。。

追答

你这个程序写复杂了,不知道你学了结构体没有,他可以把一个学生的多个不同类型的数据作为一个整体进行操作

他改成它

第4个回答  2014-03-16
代码没贴出来,,追问

贴了啊。。。

相似回答