最近遇到很多关于输入n个数,对这n个数进行操作的题目。下面就用C语言介绍如何实现。
初学者一般会定义数组时,将变量的数目定义为n这一变量,但是将程序编译运行时却发现不可以正常运行。这是因为中括号内可以包含常量或常量表达式,但是不可以包含变量,如“int a[n];”是不合法的。也就是说,C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。
如:
int n;
scanf("%d",&n);
int a[n];
是非法的。
在总结了若干方法后,我个人感觉用calloc函数开辟动态存储区是最好的方法。
其函数原型为
void *calloc(unsigned n,unsigned size);
其作用是在内存的动态存储区中分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组。
下面就来展示一下关于输入n个数,将其按照升序输出的C语言程序
#include <stdio.h>
#include <stdlib.h>
int i,*p1;
int sum=0;
int main()
{
int check(int*p);
int m;
printf("请输入该数据的个数:(用回车结束输入)\n");
scanf("%d",&i);
p1=(int*)malloc(i*sizeof(int));//定义了一个动态数组。
printf("各个数据之间用逗号隔开,最后一个数用回车结束");
for(m=0;m<i;m++)
scanf("%d,",p1+m);
printf("\n");
for(m=0;m<i;m++)
{
printf("%d",*(p1+m));
printf(" ");
}
printf("\n");
check(p1);
return 0;
}
int check(int *p)//冒泡排序
{
int w,q,t,n;
for(w=0;w<i-1;w++)
for(q=0;q<i-1-w;q++)
if(p[q]>p[q+1])
{
t=p[q];
p[q]=p[q+1];
p[q+1]=t;
}
for(n=0;n<=i-1;n++)
{
printf("%d",p[n]);
printf(" ");
}
}