c语言怎么写出:“输入一个正整数n,再输入n个整数,输出最小值,及它的位置”的代码
#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==' ') break; if(c>='0' && c<='9')//输入的是数字才存储,不是数字直接跳过 num[i]=saveNum(num[i],c); } } for(i=0;i<n;i++) { printf("%s ",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;}
1.用scanf输入n
2.用for循环,循环n次,每次用scanf输入一个数到数组
3.另写一个找出最小值的函数,用for循环很容易实现,找出数组中的最小值及第几个
4.输出
热门标签: