输入一个正整数n,再输入n个整数,输出最小值 c语言

 我来答
自我编程
推荐于2018-02-27 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

你题目有没有写全,如果按照你这个题目,没有规定输入整数的位数,考虑要输入任意位数的数字,那么数字就不能使用已有的整数类型来保存(比如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;
}
刺友互
高粉答主

2019-06-14 · 每个回答都超有意思的
知道答主
回答量:3979
采纳率:100%
帮助的人:72万
展开全部

1、首先,定义三个整型变量,保存正整数、临时变量和各位数总和。

2、给变量总和sum赋值,初值为0。

3、接着,输入正整数,保存在变量n中。

4、给临时变量赋值,让它的值等于正整数的值。

5、用while语句判断,判断的条件为n不等于0。

6、条件成立时,求正整数各位上数字的和。

7、将正整数中,已求和的这一位数去除。

8、最后,输出正整数各位上数字的总和。

9、运行程序,输入任意的一个正整数,计算机就会输出它的各位上数字的总和。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
听不清啊
高粉答主

推荐于2018-04-13 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

#include<stdio.h>

int main()

{int i,n,min,x;

 scanf("%d%d",&n,&min);

 for(i=2;i<=n;i++)

 {scanf("%d",&x);

  if(x<min)min=x;

}

printf("\nMin=%d\n",min);

   return 0;

}

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fallx
2018-02-27 · TA获得超过5485个赞
知道大有可为答主
回答量:2321
采纳率:73%
帮助的人:721万
展开全部
#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;  
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旅初彤2B
2016-11-11 · TA获得超过2.6万个赞
知道大有可为答主
回答量:4.4万
采纳率:65%
帮助的人:5426万
展开全部
#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]);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式