用c语言输出一个分数的后200位的高精度小数

img

img

img


程序没有报错,但是运行后有警告弹窗,不知道是数组错误还是循环错误还是其他错误。

数组越界,你定义num[200],但是循环里面i<=200,会出现num索引到200的情况,所以提示你stack错误。
如果解决你您的问题,请点赞采纳,谢谢。

将数组容量扩大试试

【相关推荐】



  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7560049
  • 这篇博客也不错, 你可以看下C语言 蓝桥杯 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。
  • 您还可以看一下 钟洪发老师的鸿蒙设备开发之C知识点全面梳理课程中的 实现插入文件内容小节, 巩固相关知识点
  • 除此之外, 这篇博客: C语言中关于字符串的使用,以及字符串的存储方式中的 对于这里,需要明白字符在字符数组的存储! 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    **

    存储一:单个字符的存储

    char a[10];
    for(int i = 0;i<10;i++)
    scanf("%c",a[i]);//输入qwert12345
    //此时存储的字符为 a[0]='q';a[1]='w';a[2]='e';...a[8]='4';a[9]='5';
    

    对于单个字符的存储,如上述,它只是一个普通的存放十个元素的数组,系统不会为其末尾自动添加’\0’,它只是按照你的输入,将你输入的字符存放至指定位置的数组空间,由于循环进行十次,所以你还必然要输入十个元素

    可以等效为:

    char a[10]={'q','w','e','r','t','1','2','3','4','5'};
    //这也只是一个普通的存放十个元素的数组,不会为其末尾自动添加'\0',访问最大的下标是a[9];
    

    存储二:字符串在字符数组的存储方式:

    char a[20];
    scanf("%s",a);//输入qwert12345
    //此时存储的字符还是按照 a[0]='q';a[1]='w';a[2]='e';...a[8]='4';a[9]='5';进行存储,但是需要注意,由于是用字符串进行存储,也就导致了数组长度需要比字符串长度至少多出一位存储空间,字符串末尾系统会自动为其添加'\0'
    

    *当以如此方法存储时:

    1. char a[]=“qwert12345”;
      或给字符串加上大括号:
    2. char a[]={“qwert12345”};
      上述两种系统会自动在字符串的末尾加上字符串结束符,即 ‘\0’, (只要是双引号引起的字符串,系统会自动在字符串的末尾加上字符串结束符)
      C语言中串的存储看作是一种特殊的一维数组来处理,所以为其添加结束符’\0’
    3. 当用static char a[10]={‘1’,‘2’,‘3’,‘4’,‘5’};
      这种方法定义时,系统会自动从未初始化的元素开始,将之后的元素赋为\0,如上面的数组a中的元素实际上是:‘1’,‘2’,‘3’,‘4’,‘5’,’\0’,’\0’,’\0’,’\0’,’\0’
      这里添加的’\0’只是对数组元素的初始化,和上面系统为其字符串结束添加的’\0’标志不同
    4. char a[10]={‘1’,‘2’,‘3’,‘4’,‘5’};
      a[0] = ‘1’;a[1]=‘2’;…a[4] = ‘5’;由于不是静态数组,a[6]-a[9]的值不确定,系统也不会为其初始化添加’\0’。
    5. 当char a[10]={‘q’,‘w’,‘e’,‘r’,‘t’,‘1’,‘2’,‘3’,‘4’,‘5’};进行存储,系统不会为其自动添加结束符’\0’,只是作为单个字符,单个元素,存进字符数组中相应单元中。*

    对于上述直接输入一条串,C语言的存储也是每个数组元素存储一个字符,C语言不具有存储整条串的能力,不可以将"qwert12345"整条串存入数组一个单元内。
    用C++进行验证如下:
    存储方式的验证
    对于此类情况:
    char a[1];
    a = “qwert12345”;
    是错误的,“qwert12345"是一个字符串常量,而字符串常量代表的是地址值,数组名也是地址常量 ,这样的本质是将地址赋给了地址;更者,由于字符数组长度为1,只有一个存储单元,即使改成
    char a[1];
    scanf(”%s",a);//输入qwert12345
    也是错误的,同上述字符串结束系统自动添加’\0’问题,以及字符串的存储是以每个字符进行存储的,这样的做的结果是导致数组溢出

    可以如下:
    char *a = “qwert12345”;
    这样是将字符串常量的地址赋给指针,即让指针指向该字符串常量。由于是它一个串,所以系统会为此串的末尾加上字符串结束符,即 ‘\0’,

    也可以如下:
    char a[20];
    char *a1 = a;
    scanf("%s",a1); //输入 qwert12345
    这样是定义一个字符数组,又定义一个指针,让指针指向字符数组首地址,每个字符数组其中存放单个字符,输入一条串,串的第一个字符存入数组a1的首地址的位置,串的第二个字符,存入数组下一个地址…还是按照a[0]=‘q’;a[1]=‘w’;a[2]=‘e’;…a[8]=‘4’;a[9]=‘5’;进行存储,末尾添加结束符’0’


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^