C语言如何实现将一个小数以百分比的形式输出

在C语言中我们用连着的两个百分比符号表示一个百分比符号,即“%%”就表示一个百分比符号,例如我们想输出40%这个数到屏幕上我们可以执行以下语句:

printf("%d%%n",40);

这样就可以将40%输出在屏幕上了

若我们想要将0.857这个浮点数以百分制的形式输出在屏幕上呢?我们知道将0.857这个数转换成为百分制的数是85.7%,所以我们应该先将0.857扩大100倍再配合百分符号输出,即执行语句:

printf("%.1f%%n",0.857*100);

若要将小数0.77594,以百分制的形式输出,且在百分符号前的部分四舍五入保留整数部分呢?那我们可以执行以下语句

printf("%.0f%%n",0.77594*100);

以上三条语句的执行结果:

会有这条博客的原因是因为我在刚开始学C语言的时候,实现第三种情况,是先将百分符号前面的小数部分乘以100后转换成为四舍五入的整数形式,即先将小数乘以100减去它的整数部分然后和0.5比较若大于等于0.5则整数部分加1反之则整数部分不变,然后以printf("%d%%",Int);形式输出,如我下面这个程序采用的就是我上面所说的这种方法:

题目描述

这是蓝桥杯官网上题库中的一道题目,我给出的解决代码是

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // 请在此输入您的代码
  int n,array[10000],pass=0,good=0;
  float temp;
  scanf("%d",&n);
  for(int i=0;i<n;i++)
  {
    scanf("%d",&array[i]);
    if(array[i]>=60)
    {
      pass++;
    }
    if(array[i]>=85)
    {
      good++;
    }
  }
  temp=((double)pass/n)*100;
  if(temp-(pass*100/n)>=0.5)
  {
    pass=pass*100/n+1;
  }
  else
  {
    pass=pass*100/n;
  }
  temp=((double)good/n)*100;
  if(temp-(good*100/n)>=0.5)
  {
    good=good*100/n+1;
  }
  else
  {
    good=good*100/n;
  }
  printf("%d%%n",pass);
  printf("%d%%n",good);

  
  return 0;
}

 就很简单的一道题我写出了这么长的代码,其实后面有很大一段代码都可以只用一条输出语句来解决即代码段

temp=((double)pass/n)*100;
  if(temp-(pass*100/n)>=0.5)
  {
    pass=pass*100/n+1;
  }
  else
  {
    pass=pass*100/n;
  }
  temp=((double)good/n)*100;
  if(temp-(good*100/n)>=0.5)
  {
    good=good*100/n+1;
  }
  else
  {
    good=good*100/n;
  }
  printf("%d%%n",pass);
  printf("%d%%n",good);

描述的功能用下面两条输出语句即可解决

printf("%.0f%%n",(double)pass*100/n);
printf("%.0f%%n",(double)good*100/n);

那么我的程序就可以大大精简,不用再那么冗长