c/c++语言开发共享C语言的一道数组题Plus

其实数组那部分当时学的东西挺简单的. 常见的题就是用一个数组装几个数字. 然后排序,找出大于n的数字有几个,有几个重复数字之类的. 去年想出来一个题. 因为以前写的代码太复杂,又有很多不足和bug.所以今天重新写了下. 小明想要记录多个数字(即装到数字中),最多有50个数字,(都是十进制数) 但他不 …

其实数组那部分当时学的东西挺简单的.

常见的题就是用一个数组装几个数字.

然后排序,找出大于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){      int math[n],num,js = 0,flag = 0,flagn = 0;      char ex;      while(1){          if(scanf("%[0-9]",&ex)){              flag = 1;                        //可以计数 flag               flagn = 0;                        //不结束循环               num=num*10+ex-48;                //利用asc ii码来计算num           }          else if(scanf("%[ ]",&ex)){            //选择空格字符                if(flag){                  math[js++]=num;                //录入数字 数字数量+1                   if(js == 51)break;            //达到上限              }                              num = flagn = 0;                //num归零 不结束循环               flag = 0;                        //不可计数 flag           }          else if(scanf("%c",&ex) && ex == 'n'){    //选择回车符               if(flag)math[js++]=num;                //计数 数字+1               num = flag = 0;                        //num归零 不可计数 flag               if(flagn)break;                        //将会*以双回车结束               flagn = 1;          }          if(js==n)break;                    //达到上限      }                                    //循环结束了             if(!js){                            //*无数字处理           printf("null.nend.nthere are %d numbers.n",js);          system("pause");          return 0;      }      num=0;      printf("have %d number.n",js);      while(js--){          printf("%-5d",math[num++]);          if(!(num%10))printf("n");      }      system("pause");      return 0;  }

 

way2:将数字以十六进制来读取将十六进制转换为十进制 添加要求:以十六进制数a作为结束语句(其实只要是大于十的进制都可以)

        代码如下:这个代码有误 最近会尽快更正!

#include<stdio.h>  #include<stdlib.h>  #define n 50    int main(int argc,char** argv){      int math[n],num,shu=0,changdu=1,n=0;      while(1){          scanf("%x",&num);          if(num<10){              math[n++]=num;            //个位数直接赋值                if(n==n)break;            //达到上限               continue;          }          else if(num==10)break;        //输入十六进制数a 结束输入数字           shu=num;          while(shu){              changdu*=16;            //将该十进制的十六进制最高位所代表的数计算出来即changdu               shu/=16;          }                            //shu==0                    changdu/=16;          while(changdu){              shu=shu*10+num/changdu;               changdu/=16;              num/=16;          }          math[n++]=shu;          if(n==n)break;                //达到上限       }      printf("there are %d numbers.n",n);      shu=num=0;      while(n--){          printf("%-5d",math[shu++]);          if(!(shu%10))printf("n");      }      system("pause");      return 0;  }

通过比较, 第二种似乎更好.

但我觉得第一种比较好,它没有要求以十六进制数a作为结束语句

更加方便,更能使客户(小明)满意.

想了个plus plus的题:

在这个基础上要求输入的可能使算式,要求将数字计算出再存储到数组中(算式中可能会出现加减乘除符号,符号最多出现两个,每个参与计算的数不超过两位数)

(好吧…… 后面补充的是为了方便我写代码 嘻嘻)

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/604590.html

(0)
上一篇 2021年5月12日
下一篇 2021年5月12日

精彩推荐