【王道训练营】第5题 读取一个整型数,字符,浮点数,分别到变量i,j,k中,然后将i,j,k直接相加并输出,小数点后保留两位小数

在这里插入图片描述

C语言:读取并相加整型数、字符和浮点数

在本文中,我们将探讨如何在C语言中读取一个整型数、一个字符和一个浮点数,然后将它们相加并输出结果。这个任务看似简单,但实际上涉及到了一些关键的编程概念,包括数据类型、输入/输出以及类型转换。

题目描述

读取一个整型数、一个字符和一个浮点数,分别存入变量i、j和k中。然后将i、j、k直接相加并输出,小数点后保留两位小数。不需要考虑输入的浮点数的小数部分超过两位。

输入

一个整型数,一个字符,一个浮点数。

输出

变量i、j、k的求和值,保留两位小数。

初始解决方案

以下是一个初始的解决方案,使用了scanf函数进行输入,以及printf函数进行输出。

#include<stdio.h>
int main(){
  int i;
  char j;
  float k;
  scanf("%d %c %f",&i,&j,&k);
  printf("%0.2f",(i+j+k));
  return 0;
}

其他可能的方法

尽管上述代码已经很好地实现了题目的要求,但我们仍可以尝试其他方法,例如使用不同的数据类型,或者改变输入和输出的方式。以下是一些可能的方法:

  1. 使用 double 而不是 float

    #include <stdio.h>
    int main(){
      int i;
      char j;
      double k;
      scanf("%d %c %lf",&i,&j,&k);
      printf("%.2f", i+j+k);
      return 0;
    }
    

    输出示例:

    Input
    10 A 5.5
    
    Output
    76.50
    
  2. 使用 getchar() 函数读取字符

    #include <stdio.h>
    int main(){
      int i;
      char j;
      float k;
      scanf("%d",&i);
      getchar(); // 读取并丢弃空格
      j = getchar(); // 读取字符
      scanf("%f",&k);
      printf("%.2f", i+j+k);
      return 0;
    }
    

    输出示例:

    Input
    10 A 5.5
    
    Output
    76.50
    

这段代码的主要目的是从用户输入中读取一个整数、一个字符(ASCII码)和一个浮点数,然后计算它们的总和并打印出来。在这段代码中使用了 scanf()getchar() 函数来读取用户的输入。

让我们逐行解释这段代码:

  1. scanf("%d",&i);:这行代码使用 scanf() 函数从用户输入中读取一个整数,并将其存储在变量 i 中。"%d" 是格式说明符,表示要读取一个整数。&i 是变量 i 的地址,scanf() 需要这个地址来知道在哪里存储读取的数据。

  2. getchar();:这行代码使用 getchar() 函数读取并丢弃一个字符。在这里,它的主要目的是读取并丢弃用户输入的空格。getchar() 函数从输入中读取下一个可用的字符,并返回它。在这个情况下,我们没有将 getchar() 的返回值存储在任何地方,所以读取的字符会被丢弃。

  3. j = getchar();:这行代码再次使用 getchar() 函数,这次是读取一个字符,并将其存储在变量 j 中。

  4. scanf("%f",&k);:这行代码使用 scanf() 函数从用户输入中读取一个浮点数,并将其存储在变量 k 中。

  5. printf("%.2f", i+j+k);:这行代码计算 ij(转换为其ASCII码对应的整数)和 k 的总和,并使用 printf() 函数打印结果。"%.2f" 是格式说明符,表示要打印一个浮点数,并保留两位小数。

所以,如果你的输入是 5 A 3.14(注意,A 的 ASCII 码值是 65),那么输出将是 73.14,因为 5 + 65 + 3.14 = 73.14
在这个例子中,用户输入的是 5 A 3.14,其中 5 是一个整数,A 是一个字符,3.14 是一个浮点数,它们之间用空格分隔。

输入5 A 3.14,具体说一下 空格是如何处理的

在 C 语言中,scanf() 函数默认会跳过前导空白字符(包括空格、制表符和换行符),然后开始读取直到遇到下一个空白字符为止。所以,当你使用 scanf("%d", &i); 读取整数 5 时,scanf() 会自动跳过前导空白字符(如果有的话),然后读取数字 5,并在遇到空格时停止。

然后,getchar(); 被调用来读取并丢弃一个字符。在这个情况下,它会读取并丢弃刚才 scanf() 函数留下的那个空格。

接下来,j = getchar(); 被调用来读取一个字符,这次它会读取字符 A,因为刚才的空格已经被 getchar(); 读取并丢弃了。

最后,scanf("%f", &k); 会跳过前导空白字符(也就是字符 A 后面的那个空格),然后开始读取浮点数 3.14,并在遇到输入结束或者下一个空白字符时停止。

总的来说,这段代码中的 getchar(); 主要用于读取并丢弃用户输入中的空格,以便 getchar();scanf("%f", &k); 能正确地读取字符和浮点数。

  1. 使用 sprintf() 函数将结果转换为字符串,然后再输出

    #include <stdio.h>
    int main(){
      int i;
      char j;
      float k;
      scanf("%d %c %f",&i,&j,&k);
      char result[50];
      sprintf(result, "%.2f", i+j+k);
      printf("%s", result);
      return 0;
    }
    

    输出示例:

    Input
    10 A 5.5
    
    Output
    76.50
    

注意,这些示例中的输出值是基于字符 ‘A’ 的 ASCII 值(65)。

总结

在这篇文章中,我们探讨了如何在C语言中读取并处理不同类型的数据。虽然我们的主要目标是求和,但我们也看到了如何使用不同的数据类型和函数来读取和输出数据。希望这篇文章能帮助你更好地理解C语言的一些基本概念,并提供一些有用的代码示例。

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值