关于#c语言#的问题,请各位专家解答!好难。

img

c语言,样例一可以输出,不会样例二的输出,不知道如何判断‘.'然后不会了,大脑空白,啥都不会,我好蠢啊

不超过1000位,那只能作为字符串输入了。然后检索小数点的位置就可以了。小数点前的整数部分求余4,就知道第一组有几个数需要输出

#include <stdio.h>
int main()
{
    char s[1001] = {0};
    int len=0,plen = 0,i=0,count=0,r=0,flag = 0;
    gets(s);
    while(s[plen] != '\0' && s[plen] != '.')
        plen++;
    len = strlen(s);
   if(s[plen]!='.')
      plen--;
   count = plen%4;
   if(count == 0)
       count = 4;
   while(r<plen)
    {
        if(flag == 1)
             printf(" ");
        flag = 1;
        for(i=0;i<count;i++)
            printf("%c",s[r++]);
        count = 4;
    }
    if(r<len)
        printf("%s",s+r);

    return 0;

}

运行截图及代码如下,如有帮助,请帮忙采纳一下,谢谢。

img

代码:

#include <stdio.h>
#include <string.h>
int main()
{
    double f;
    char buf[40]={0};
    int i,j,n,cnt = 0;
    int flag = 0;
    scanf("%lf",&f);
    sprintf_s(buf,"%lf",f); //sprintf_s如果不识别,就改成sprintf(buf,"%s",f)
    
    n = strlen(buf);

    //去掉后面多余的0
    while (buf[n-1]=='0')
    {
        buf[n-1] = 0;
        n--;
    }
    

    for (i=n-1;i>=0;i--)
    {
        if (flag)
        {
            cnt++;
            if(cnt%4==0)
            {
                for(j=n;j>i;j--)
                    buf[j] = buf[j-1];
                buf[i]= ' ';
                n+=1;
            }
        }else
        {
            if(buf[i]=='.')
                flag = 1;
        }
    }
    if(buf[n-1]=='.') buf[n-1]=0;
    printf("%s",buf);
    return 0;
}

你先想办法把输入的小数转换成字符串
可以直接scanf()成字符串,但感觉这样不符合出题者的意图,虽然简单,但没法排除各种奇奇怪怪的输入