用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
代码没贴出来,,追问

贴了啊。。。

c语言中一般运行后停止工作有哪些情况
只要编译通过,一般情况下C语言程序停止工作,多为输入输出格式不对,或计算陷入死循环。1、输入输出格式不对。最常见的就是&符号,该有的没有,不该有的打了&符号。例如:int n;scanf("%d",n);n前少打了&符号。编译能通过,执行时就会出现停止工作的情况。2、个别计算陷入死循环的情况,例如:i...

C语言程序运行后 出现exe停止工作 为什么呢?
C语言程序运行出现exe停止工作的原因是因为内存溢出和编译器错误。第一种:内存溢出 内存溢出(out of memory)通俗理解就是内存不够,程序所需要的内存远远超出了主机内安装的内存所承受大小,就叫内存溢出。系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软...

C语言编程的时候出现“程序已停止工作”的原因有哪些?
最常见的原因:程序发生了空指针调用。如果你刚入门,请检查:scanf("%d",&i); 有没有加上“&”号,scanf必须在变量前加“&”(取地址符)。如果没有加&, scanf会把变量当作地址来用,而你的程序中又没有以变量为地址的变量,操作系统不允许程序读写程序规定范围以外的空间。出于安全起见,操作系...

求助大神为什么我用c语言编写的程序运行的时候显示程序停止工作?
是%lf,而不是%If,scanf语句中,,&fRadius在""后面,而不是在""里面。

为什么执行c语言程序时,就会出现编程软件停止工作
有可能是程序中有死循环、或者编译有问题

C语言编好的程序停止工作
程序停止响应,是因为你的内存出现非法读写操作 请检查你的代码所有关于内存读写的地方 不能用下标 10 读取数组 x1 的内容,这样子会导致数组上标越界 你只能使用 0 - 9 来读取数组 x1 的内容

c语言exe已停止工作怎么解决
对于你遇到的问题"c语言exe已停止工作",可能的解决方案如下:首先,需要确定停止工作的具体原因。这可能涉及到错误消息、错误代码或程序的行为。在C语言中,一些常见的问题源包括:1. 语法错误:检查代码中是否有明显的语法错误,例如丢失的分号、括号不匹配、不正确的变量声明等。2. 内存管理问题:确保...

为什么C语言程序运行时出现exe停止工作,但可以输出结果,用的是vc6...
你定义 数组 long int r[39];表示该数组元素个数为39个,数组下标是从0开始算起的,也就是说r[0] 为第一个元素,地39个元素应该是r[38], 所以你检查一下自己的程序,看看是不是两个循环里面都会出现,r[39]的情况?r[39]表示第40个元素,数组越界,程序就崩溃了,所以才出现exe停止运行...

为什么编写完C语言程序运行时老是跳出来【已停止工作】
先不说这个程序功能能否实现,报错的原因可能出在数组的定义上。把头文件里加上 include <malloc.h>把定义 int i, j, m, temp, n, a[n];改成 int i, j, m, temp, n;在获取n值之后,加入一行 int *a = (int *)malloc(sizeof(int) * n);用这个为数组进行初始化。最后在返回结束...

为什么我的C语言程序会出现 程序已经停止工作呢?程序如下
这种情况叫做 runtime error (运行时错误)。在 windows 7 上这样提示:在 windows xp 上这样提示:runtime error (运行时错误)就是程序运行到一半,程序就崩溃了。比如说:①除以零 ②数组越界:int a[3]; a[10000000]=10;③指针越界:int * p; p=(int *)malloc(5 * sizeof(int));...

相似回答