pta7-5到底有多二运行时错误

img

运行时错误
我的解答思路和尝试过的方法
#include<stdio.h>
#include<string.h>
int main()
{
    int j,o=1;
    double r,p=1,c=0;
    char s[50];
    gets(s);
    int n=strlen(s);
    if(s[n-1]=='0'||s[n-1]=='2'||s[n-1]=='4'||s[n-1]=='6'||s[n-1]=='8')
        o=2;
    for(j=0;j<n;j++)
    {if(s[j]=='2')
            c++;
    }
    if(s[0]=='-')
    {p=1.5;
    n=n-1;}
    r=c/n*p*o*100;
    printf("%.2lf%%\n",r);
    return 0;
}

我想要达到的结果

结尾无空行,printf("%.2lf%%\n",r);这里的\n删掉。
C语言变量的声明放在最前面,把变量n的声明放在前面。
用下面的代码试试:

#include<stdio.h>
#include<string.h>
int main()
{
    int j,o=1;
    double r,p=1;
    int n,c=0; //这里c改成了int类型
    char s[50];
    gets(s);
    n=strlen(s);
    if(s[n-1]=='0'||s[n-1]=='2'||s[n-1]=='4'||s[n-1]=='6'||s[n-1]=='8')
        o=2;
    for(j=0;j<n;j++)
    {
        if(s[j]=='2')
        c++;
    }
    if(s[0]=='-')
    {
        p=1.5;
        n=n-1;
    }
    r=1.0*c/n*p*o*100; //这里计算的时候用1.0乘以,转成double类型
    printf("%.2lf%%",r);
    return 0;
}


  1. 首先要确定2出现的个数;
  2. 来确定是不是偶数,就要看最后一位是不是偶数即可;
  3. 判断是不是负数,是负数的话要注意位数要减1;
#include<stdio.h>

int main(){
  char Input[1000];
  float flag =1; int oushu =1, i, n = 0;
  floatout;
  scanf("%s", &Input);
  if (Input[0] =='-'){//判断负号
    flag = 1.5;
  }
  for (i =0; Input[i] !='\0'; i++){//判断输入位数
  if (Input[i] =='2')
    n++;
  }
  if ((Input[i -1] - 48) % 2 ==0){//判断偶数
    oushu = 2;
  }
  if (flag ==1.5){//如果偶数,即-号占了位置
    i--;
  }
  out = (float)n / (float)i*flag*oushu*100;//输出
  printf("%.2f%%",out);