其实数组那部分当时学的东西挺简单的.
常见的题就是用一个数组装几个数字.
然后排序,找出大于n的数字有几个,有几个重复数字之类的.
去年想出来一个题.
因为以前写的代码太复杂,又有很多不足和bug.所以今天重新写了下.
小明想要记录多个数字(即装到数组中),最多有50个数字,(都是十进制数)
但他不知道输入多少个好,请你设计一段代码来满足他的需求.(数字范围在int内)
并输出这些数字.
不考虑输入文章未出现的情况.(例如输入一个封号 ';' )
********************************************************************************
Q:我们在int n[50]后如何记录数字?
因为常用的记录数字往往是将数组全部装完
或者是先输入一个数字来决定数组长度
若果只是用循环来记录数字就会陷入死循环(没有那么多的数字)
Think:用一个特殊的数字来结束 例如输入0来结束 if(n[i]==0)break;←这样
但如果输入的数字里刚好有这个数字就会出现问题.
/***************************************************** * * 思想:将每个数字改成获得单个字符再转换(1) * 获得空格或回车就将以获得的数字装进数组(2) * *装满或获得两次回车就结束(3) * * 1.num用来装已获得的数字 * 2.js对数字计数 * flag表示能否计数 * 3.flagn表示是否获得了一个回车 ******************************************************/ #include<stdio.h> #include<stdlib.h> #define N 50 int main(int argc,char** argv){ ,flag = ,flagn = ; char ex; ){ if(scanf("%[0-9]",&ex)){ flag = ; //可以计数 flag flagn = ; //不结束循环 num=num*+ex-; //利用asc II码来计算num } else if(scanf("%[ ]",&ex)){ //选择空格字符 if(flag){ math[js++]=num; //录入数字 数字数量+1 )break; //达到上限 } num = flagn = ; //num归零 不结束循环 flag = ; //不可计数 flag } else if(scanf("%c",&ex) && ex == '\n'){ //选择回车符 if(flag)math[js++]=num; //计数 数字+1 num = flag = ; //num归零 不可计数 flag if(flagn)break; //将会*以双回车结束 flagn = ; } if(js==N)break; //达到上限 } //循环结束了 if(!js){ //*无数字处理 printf("NULL.\nEnd.\nThere are %d numbers.\n",js); system("PAUSE"); ; } num=; printf("Have %d number.\n",js); while(js--){ printf("%-5d",math[num++]); ))printf("\n"); } system("PAUSE"); ; }
Way2:将数字以十六进制来读取将十六进制转换为十进制 添加要求:以十六进制数a作为结束语句(其实只要是大于十的进制都可以)
代码如下:
#include<stdio.h> #include<stdlib.h> #define N 50 int main(int argc,char** argv){ ,changdu=,n=; ){ scanf("%x",&num); ){ math[n++]=num; //个位数直接赋值 if(n==N)break; //达到上限 continue; } )break; //输入十六进制数a 结束输入数字 shu=num; while(shu){ changdu*=; //将该十进制的十六进制最高位所代表的数计算出来即changdu shu/=; } //shu==0 changdu/=; while(changdu){ shu=shu*+num/changdu; num%=changdu; //去掉数字num的十六进制最高位的数 changdu/=; } math[n++]=shu; if(n==N)break; //达到上限 } printf("There are %d numbers.\n",n); shu=num=; while(n--){ printf("%-5d",math[shu++]); ))printf("\n"); } system("PAUSE"); ; }
个人觉得第一种比较好,没有要求以十六进制数a作为结束语句
更方便啊! QAQ