C语言问题,总是在第四行定义数组a[]时有一个错误,求解啊各位大神~~

从键盘输入n个实数(n从键盘输入)将其存放在一个数组中,按降序排列后,从键盘读入一个待插入的数

#include <stdio.h>
void main()
{
int a[],i,m,n;
float t;
printf("please input n=");
scanf("%d",&n);
for(i=0;i<=n;i++)scanf("%d",&a[i]);
while(i<=n)
{
n++;
if(a[i]<a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}
else continue;
printf("%3d",a[i]);
}
printf("\n");
printf("please input t=");
scanf("%f",&t);
for(i=0;i<=n;i++)
{
if(a[i]>t)printf("%d",a[i]);
else if(a[i]<t)printf("%f",t);
else continue;
}
}

第1个回答  2013-11-14
因为你没有给a数组定义大小,电脑不知道数组a是多大的,就不知道应该给a分配多少的内存。
建议用malloc函数动态分配内存空间,然后再free掉。
要用stdlib.h头文件哦。
#include <stdio.h>
#include <stdlib.h>
void main()
{
int *a,i,m,n;
float t;
printf("please input n=");
scanf("%d",&n);
a = (int *)malloc(sizeof(int)*n);
for(i=0;i<=n;i++)scanf("%d",&a[i]);
while(i<=n)
{
n++;
if(a[i]<a[i+1]){m=a[i];a[i]=a[i+1];a[i+1]=m;}
else continue;
printf("%3d",a[i]);
}
printf("\n");
printf("please input t=");
scanf("%f",&t);
for(i=0;i<=n;i++)
{
if(a[i]>t)printf("%d",a[i]);
else if(a[i]<t)printf("%f",t);
else continue;
}
free(a);
}
第2个回答  2013-11-14
int a[]

这个定义数组时候你没有定义数组的大小,c/c++必须在定义数组时候指定大小
改为这样
int a[10], i, m, n; //这里10是任意你想要的大小,可以为0,不能小于零追问

请问一下哈,我改了但是倒序的地方出了点问题,插入的地方也是,怎么样让输入 5 9 4 3之后倒序呢?还有插入应该用什么语句呢?

追答 int nArray[ 33 ] = { 0 };
int nNum = 0;
int nInsert = 0;

printf( "请输入需要排序的数量:" );
while ( scanf( "%d", &nNum ) == 1 )
{
if ( nNum > 0 && nNum < 32 )
{
break;
}
printf( "请重新输入!\n" );
}
printf( "请输入需要排序的数:\n" );
for ( int i = 0; i < nNum; i++)
{
scanf( "%d", &nArray[i] );
}
for ( int i = 0; i < nNum; i++ )
{
for ( int j  = i + 1; j < nNum; j++ )
{
if ( nArray[ j ] > nArray[ i ] )
{
int nTmp = nArray[ j ];
nArray[ j ] = nArray[ i ];
nArray[ i ] = nTmp;
}
}
}
printf( "排序后的数为:\n" );
for ( int i  = 0; i < nNum; i++ )
{
printf( "%4d", nArray[ i ] );
}
printf( "\n请输入需要插入的数字:\n" );
scanf( "%d", &nInsert );
//插入数字
int nIndex = 0;
for ( nIndex = 0; nIndex < nNum; nIndex++ )
{
if ( nArray[ nIndex ] > nInsert )
{
continue;
}
for ( int i = nNum; i > nIndex; i-- )
{
nArray[ i ] = nArray[ i - 1 ];
}
nArray[ nIndex ] = nInsert;
break;
}
//如果插入的数比所有数小,则插在末尾
if ( nIndex == nNum )
{
nArray[ nIndex ] = nInsert;
}
printf( "插入后的排序为:\n" );
for ( int i  = 0; i < nNum + 1; i++ )
{
printf( "%4d", nArray[ i ] );
}
printf( "\n" );
return 0;

追问

能不能不用调用函数把这题编出来呢。。。我还没学。。。

追答

这个也不用掉函数,你把上面的代码放到 main函数里面就行了,主要的字数太多被限制,所以我就把main函数省掉了,你改成这样

#include <stdio.h>

int main(void)
{
    //上面的代码复制进来
}

这样就可以了

本回答被提问者采纳
第3个回答  2013-11-14
数组长度未知,你得写成a[233]之类的。中括号里只能写立即数或者有const 修饰的变量,比如const int b = 233。当然咯,c99标准支持变长数组声明,那看你的编译器支不支持啦哈哈哈哈
相似回答