输入一个正整数n,再输入n个整数,输出最小值 c语言
9个回答
展开全部
你题目有没有写全,如果按照你这个题目,没有规定输入整数的位数,考虑要输入任意位数的数字,那么数字就不能使用已有的整数类型来保存(比如int只有4个字节大小,超出就溢出了)。
我写的是任意长度的数字输入,比较取最小值。(你内存够就行)
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define ssAdd 10//内存每次扩充大小 默认10个字符
//存储任意位数的整数,只接收数字输入,如夹杂非数字字符,将被过滤
char *saveNum(char *str,char c);//参数1:存储位置的首地址;参数2:要存储的数字字符;
//查找数字字符串数组中,最小的整数,返回最小整数所在的序列值
int findMin(char *num[],int n);//参数1:数字字符串数组 参数2:数字字符串个数
int maxSize;//当前最大存储空间大小(字符数 不算结束符号)
int main()
{
int n,i,minIndex;
printf("请输入n的值:");
scanf("%d",&n);
getchar();
char *num[n],c;
for(i=0;i<n;i++)
{
printf("请输入第%d个整数(回车确认):",i+1);
maxSize=ssAdd;
num[i]=(char *)malloc(sizeof(char)*(ssAdd+1));//初始化存储大小
memset(num[i],0,ssAdd+1);
while(1)
{
c=getchar();
if(c=='\n')
break;
if(c>='0' && c<='9')//输入的是数字才存储,不是数字直接跳过
num[i]=saveNum(num[i],c);
}
}
for(i=0;i<n;i++)
{
printf("%s\n",num[i]);
}
minIndex=findMin(num,n);
printf("最小值:%s",num[minIndex]);
return 0;
}
int findMin(char *num[],int n)
{
int minlen,len,i,j,index;
minlen=len=strlen(num[0]);
index=0;
for(i=1;i<n;i++)
{
len=strlen(num[i]);
if(len<minlen)//先比较数字长度
{
minlen=len;
index=i;
}
else if(len==minlen)//长度相等 从最高位开始比较数值
{
for(j=0;j<len;j++)
{
if((num[i][j]-'0')<(num[index][j]-'0'))
{
minlen=len;
index=i;
break;
}
}
}
}
return index;
}
char *saveNum(char *str,char c)
{
int len;
char *strSave=NULL;
len=strlen(str);
if(maxSize-len<=0)//存储空间不够,先扩充存储空间后再存储
{
strSave=str;
maxSize=maxSize+ssAdd;
str=(char *)malloc(sizeof(char)*(maxSize+1));//扩展新空间
memset(str,0,maxSize+1);
strcpy(str,strSave);
free(strSave);//释放原空间
strSave=NULL;
}
str[len]=c;//存储输入值
return str;
}
展开全部
#include<stdio.h>
int main()
{
int i,n,t,min;
scanf("%d",&n);//输入个数
scanf("%d",&t); //输入第一个数
min=t; //令最小值等于第一个数
for(i=1;i<n;i++) //输入余下n-1个数
{
scanf("%d",&t);
if(t<min)min=t; //保证min是当前输入所有数中最小的
}
printf("%d",min); //输出
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include<stdio.h>
void main(){
int n,i,j,temp,num[100000];
printf("请输入整数n:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("请输入第%d个整数:",(i+1));
scanf("%d",&num[i]);
}
for(i=0;i<n;i++){
for(j=0;j<n-i-1;j++){
if(num[j]<num[j+1]){
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
printf("这%d个数的最小值是:%d\n",n,num[n-1]);
}
void main(){
int n,i,j,temp,num[100000];
printf("请输入整数n:");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("请输入第%d个整数:",(i+1));
scanf("%d",&num[i]);
}
for(i=0;i<n;i++){
for(j=0;j<n-i-1;j++){
if(num[j]<num[j+1]){
temp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
printf("这%d个数的最小值是:%d\n",n,num[n-1]);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询