有一个长度为n的整数序列,其中最大值和最小值不会出现在序列的第一和最后一个位置。
请写一个程序,把序列中的最小值与第一个数交换,最大值与最后一个数交换。输出转换好的序列。
#include
int main()
{
int n,i=0,pos;
int a[]={};
int temp,j;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",a[i]);
}
temp=a[i];
pos=i;
for(j=i+1;j<n;j++)
{
if(a[0]<a[j])
{
a[j]=temp;
pos=j;
}
}
a[pos]=a[i];
a[i]=temp;
temp=a[i];
pos=i;
i=n;
for(j=i-1;j>=0;j--)
{
if(a[i]>a[j])
{
a[j]=temp;
pos=j;
}
}
a[pos]=a[i];
a[i]=temp;
for(i=0;i<n;i++)
{
printf("%d",a[i]);
}
return 0;
}
为什么直接结束了运行 应该怎么写才对 我用dev c++写的
我还碰到一个问题 运行时出现 “0x77el4995”志林或引用的“0x77bbfc42e”内存,该内存不能为“written”
要终止程序,请点击“确定”
要调试程序,请点击“取消”
我大概看了一下你的代码,说实话乱七八糟,我不认为你那代码能通过编译器检查~
我写了一份,你自己看看吧
#include<stdio.h>
#define MAX 50
int main()
{
int max = 0,//最大值下标
min = 0;//最小值下标
int n;//数列长度
int sq[MAX];//数列,C声明数组一定要指定数组长度,java不能指定长度,其他不知道
printf("输入数列长度:");
scanf("%d",&n);//输入时要传的是地址
printf("依次输入数列");
//循环初始化数组,同时确定最小值和最大值
for (int i = 0; i < n;i++) {
scanf("%d",&sq[i]);
if (sq[i]<sq[min]) {
min = i;
}
if (sq[i]>sq[max]) {
max = i;
}
}
//将最小值换到第一位
int temp=sq[0];
sq[0] = sq[min];
sq[min] = temp;
//将最大值换到最后一位
temp = sq[n - 1];
sq[n - 1] = sq[max];
sq[max] = temp;
//循环输出数列
printf("调整后数列:");
for (int i = 0; i < n;i++) {
printf("%d",sq[i]);
}
}
你写的代码编译器不报错?
int a[]={};
这里就错了,这里分配的数组是0长度的
scanf("%d",a[i]);
这里内存都在越界读写,当然报错。
int a[100]; //可以这么写,当然下面n不能大于100
或者
int * a;
scanf("%d",&n);
a = (int *)malloc(sizeof(int) * n);
1.拿数组中2-n的值和第一个值比较,得到最小的。2.拿2-(n-1)和最后一个值比较,大值放最后。
代码真的有点乱七八糟。。。
在结尾加一行readykey();
看着好乱,思路不清晰