好吧……调试的时候说已停止工作是什么情况= =

Graphemer 2014-04-19 12:34:04




题目是1. 输入n及n个整数(n<20),然后按奇数升序、偶数降序排列输出。

是程序出了什么问题么= =
...全文
284 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Graphemer 2014-04-20
  • 打赏
  • 举报
回复
引用 5 楼 mcmay 的回复:
题目中说要用从n1的形式输出,你可以用 for(k = 0; k < l; k++) printf("%d ", odd[k+1]);的形式即可。
嗯……但是输出结果还是和上面两个运行框一样
mcmay 2014-04-19
  • 打赏
  • 举报
回复
请不要用图片上传代码,不方便这里的网友们帮你测试。你先试试将所有循环中的 x = 1; x <=N (这里x代表你所定义的变量),换成x = 0; x < N。如果你用x = 1的形式,数组的第一个元素即ar[0](这里的ar代表你所定义的数组名称)就被忽略掉了,而用x <= N的形式,则又超过了数组下表的最大值,是越界了。一个数组,例如,ar[6],其元素个数为6,其元素下标的范围为0~5。另外,不明白,你为什么要在声明数组时用n[N+1],odd[N+1]和even[N+1]的形式呢?那个+1起什么作用?是怕后面的x<=N造成数组下标越界吗?也许这个办法可以解决这个问题,但始终数组的第一个元素,即ar[0]由于你在for循环中用了x=1这样的表达式而被跳过去了,即ar[0]是未被赋值的,它的值是不确定的,你的程序也许会在运行时因此而崩溃。
mcmay 2014-04-19
  • 打赏
  • 举报
回复
题目中说要用从n1的形式输出,你可以用 for(k = 0; k < l; k++) printf("%d ", odd[k+1]);的形式即可。
mcmay 2014-04-19
  • 打赏
  • 举报
回复
用变量定义数组的大小是在C99标准下可以接受的,你找个兼容C99标准的编译器试试,或者打开编译器的C99支持开关(如果有这项设置的话)。
Graphemer 2014-04-19
  • 打赏
  • 举报
回复
#include <stdio.h>
int main()
{
	int i,j,N,k,m,l,temp,a;
	k=1;
	j=1;
	printf("请输入数字个数N(小于20)=");
	scanf("%d",&N);
	printf("N=%d\n",N);
	int n[N+1];
	int odd[N+1];
	int even[N+1];
	for(i=1;i<=N;i++)
	{
		printf("n[%d]=",i);
		scanf("%d",&n[i]);
	}
	for(i=1;i<=N;i++)
	{
		if(n[i]%2==0)
		{
			even[j]=n[i];
		    j++;
		}
		else
		{
			odd[k]=n[i];
		    k++;
		}
		m=j;
		l=k;
	}
	for(a=1;a<=m;a++)
	{
		for(j=1;j<=m;j++)
		{
			if(even[j]<even[j+1])
			temp=even[j];
			even[j]=even[j+1];
			even[j+1]=temp;
		}
	}
	for(a=1;a<=l;a++)
	{
		for(k=1;k<=l;k++)
		{
			if(odd[k]>odd[k+1])
			temp=odd[k];
			odd[k]=odd[k+1];
			odd[k+1]=temp;
		}
	}
	printf("odd=");
	for(k=1;k<=l;k++)
	{
		printf("%d  ",odd[k]);
	}
	printf("\n");
	printf("even=");
	for(j=1;j<=m;j++)
	{
		printf("%d  ",even[j]);
	}
return 0;
}
Graphemer 2014-04-19
  • 打赏
  • 举报
回复
引用 1 楼 mcmay 的回复:
请不要用图片上传代码,不方便这里的网友们帮你测试。你先试试将所有循环中的 x = 1; x <=N (这里x代表你所定义的变量),换成x = 0; x < N。如果你用x = 1的形式,数组的第一个元素即ar[0](这里的ar代表你所定义的数组名称)就被忽略掉了,而用x <= N的形式,则又超过了数组下表的最大值,是越界了。一个数组,例如,ar[6],其元素个数为6,其元素下标的范围为0~5。另外,不明白,你为什么要在声明数组时用n[N+1],odd[N+1]和even[N+1]的形式呢?那个+1起什么作用?是怕后面的x<=N造成数组下标越界吗?也许这个办法可以解决这个问题,但始终数组的第一个元素,即ar[0]由于你在for循环中用了x=1这样的表达式而被跳过去了,即ar[0]是未被赋值的,它的值是不确定的,你的程序也许会在运行时因此而崩溃。


#include <stdio.h>
int main()
{
int i,j,N,k,m,l,temp,a;
k=1;
j=1;
printf("请输入数字个数N(小于20)=");
scanf("%d",&N);
printf("N=%d\n",N);
int n[N+1];
int odd[N+1];
int even[N+1];
for(i=1;i<=N;i++)
{
printf("n[%d]=",i);
scanf("%d",&n[i]);
}
for(i=1;i<=N;i++)
{
if(n[i]%2==0)
{
even[j]=n[i];
j++;
}
else
{
odd[k]=n[i];
k++;
}
m=j;
l=k;
}
for(a=1;a<=m;a++)
{
for(j=1;j<=m;j++)
{
if(even[j]<even[j+1])
temp=even[j];
even[j]=even[j+1];
even[j+1]=temp;
}
}
for(a=1;a<=l;a++)
{
for(k=1;k<=l;k++)
{
if(odd[k]>odd[k+1])
temp=odd[k];
odd[k]=odd[k+1];
odd[k+1]=temp;
}
}
printf("odd=");
for(k=1;k<=l;k++)
{
printf("%d ",odd[k]);
}
printf("\n");
printf("even=");
for(j=1;j<=m;j++)
{
printf("%d ",even[j]);
}
return 0;
}



谢谢大神……我稍微修改了一下可以执行……
但是运算结果是错的…………我也不知道错哪里了……麻烦大神帮忙看一下……

这个是按照=0 <N的方式改过后的结果


这个是我原来的测试结果……

= =
我那个+1是为了防止越界的……还有数组定义似乎是不能用变量的……我在VS2013里输入一遍似乎是说int [N+1],或者int [N]这种形式是错的……不知道为什么在C-FREE 5中可以使用


老师要求是输出结果和题目完全一致……由于题目中第一个是n[1]……所以我只能想办法跳过n[0]了
  大家好,我是录制课程的老师,课程已经上线课堂,欢迎大家试听,感谢同学们的支持。在你们的学习中我会全力助你提升MySQL技能,助你冲击更高年薪。支持课程答疑,支持一对一答疑服务,由课程老师直接回答。    MySQL凭借着它不错的性能、不错的稳定性、数据的安全性常年稳居行业老二宝座。    越来越多的DBA和后端同学在工作中少不了和MySQL打交道,也经常会产生这样的疑问:    为什么我写的sql语句性能这么低?  为什么明明我建了索引却没有用到索引?  为什么突然我的数据就成了乱码?  为什么我备份的文件在主库恢复,数据无法同步到从库?  为什么我的数据库数据不多,却占了很多的空间?  生产中我应该选择哪种隔离级别?  生产中都在使用innodb存储引擎,我却对它一无所知?  我应该怎么规划缓冲池才能让数据库性能更高?  为什么我做表数据迁移这么慢?  为什么我写的sql会造成那么多的锁冲突、死锁?  为什么我不能将数据恢复到任意时间点?  为什么我不能解决公司主从复制架构中的故障?  吧啦吧啦一大堆问题……    在面试中MySQL的一些知识更成为躲不过的问题,比如b+tree索引、MVCC、隔离级别的实现、锁的使用,主从复制,MySQL性能优化、事务两阶段提交等等都成为了面试考题重灾区。    我的课程就是从实际工作来,从问题出发,带着问题来学习MySQL,想解决问题就要学习新的知识,大家跟紧老司机,MySQL的面纱就会慢慢摘下。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧