C语言数组长度不定时的最小数

C语言数组长度不定时的处理方法

突然想到一个程序不知道要输入多少数据时应该怎么处理,此时想到了sizeof。写了如下代码,结果如下,发现并没什么用。如果可以修改源代码,完全可以在代码中修改数组长度。

#include<stdio.h>
int main()
{
	int sort(int a[],int n);//函数声明 	
		
	int r[]={7,2,8,5,9,3};
	int n=sizeof(r)/4;
	printf("有%d个数\n",n);
	
	int min=sort(r,n);
	printf("最小值为%d",min);
	 
}

int sort(int a[],int n)
{
	//注意:此处为a[0]的地址有8位 
	printf("地址为%d位\n",sizeof(a));
	int min=a[0];

	for(int i=0;i<n;i++)
	{
		if(min>a[i])
		min=a[i];		
	}
	return min;
}

在这里插入图片描述
然后我做了下修改,使其在执行文件中改变数组长度。以-1为结束的标志,结果如下,虽然可以实现随意的输入并挑出其中最小的数,但终究还是有上限的最多输入100个数

#include<stdio.h>
int main()
{
	int sort(int a[],int n);//函数声明 	

	int r[100]={0},i;
	for(i=0;;i++)
	{
		scanf("%d",&r[i]);
		if(r[i]==-1)
		break;
	}
	printf("有%d个数 \n",i);
	
	int min=sort(r,i);
	printf("最小的为%d",min);
}

int sort(int a[],int n)
{

	int min=a[0];

	for(int i=0;i<n;i++)
	{
		if(min>a[i])
		min=a[i];		
	}
	return min;
}

在这里插入图片描述
c中有个叫动态内存的东西,还是比较复杂因为需要提前输入需要的数据数目。

#include<stdio.h>
#include<stdlib.h>
int n,i;
int main()
{
	double sort(double a[]);

	printf("请输入你要输入的整数个数");
	if(scanf("%d",&n)==0) 
		{	
			printf("wrong"); 
			goto finish;
		}
	//分配内存 
	double *ptd,min;
	ptd=(double *)malloc(n*sizeof(double));
	printf("请输入%d个数字\n",n);
	for(i=0;i<n;i++)
		{
			scanf("%lf",&ptd[i]);		
		}
	
	for(i=0;i<n;i++)
		{
			printf("%2.2lf ",ptd[i]);		
		}
	min=sort(ptd);
	printf("\n%2.2lf ",min);
	free(ptd); //释放内存 
finish:
	printf("\ndone");
	return 0;
}
double sort(double a[])
{

	double min=a[0];

	for(i=0;i<n;i++)
	{
		if(min>a[i])
		min=a[i];		
	}
	return min;
}

在这里插入图片描述

再次做下修改以字符‘ / ’为结束标志

#include<stdio.h>
#include<stdlib.h>
	int i=0,j;
int main()
{
	double sort(double a[]);

	//分配内存 
	double *ptd,min;
	ptd=(double *)calloc(1,sizeof(double));
	scanf("%lf",&ptd[0]);

	for(j=0;;j++)
		{
		i++;
		realloc(ptd,sizeof(double)*i);
		printf("开辟空间%d\n",sizeof(double)*i);
		scanf("%lf",&ptd[i]);
		if(getchar()=='/')
		break;
		}
	for(j=0;j<i;j++)
	{
		printf("%2.2lf  ",ptd[j]);
	}
	
	min=sort(ptd);
	printf("\n最小数字%2.2lf",min);
	free(ptd);
	return 0;
}
double sort(double a[])
{

	double min=a[0];

	for(j=0;j<i;j++)
	{
		if(min>a[j])
		min=a[j];		
	}
	return min;
}

在这里插入图片描述

发布了10 篇原创文章 · 获赞 0 · 访问量 456

猜你喜欢

转载自blog.csdn.net/KEY_Init/article/details/103282905
今日推荐