本章开始,将以简单的A+B问题为例,着重讲解ACM、蓝桥杯比赛种的输入输出格式,让大家快速了解学习
题目为英文描述,但题目非常简单,故不用在意英文。
本章所讲的八集格式输入输出问题,已经上线视频教程,采用C语言实现,有需要视频教程的同学可以点击 竞赛输入输出教程在线学习
本节题目详细描述及提交评测见: A+BⅠ问题
本题的题目非常简单,就是求a+b的和的问题,不存在大数问题,因此非常简单,唯独需要注意的题目当中描述有提到多组数据,且样例中也明显举例:
1 5 10 20
输出
6 30
所以非常明显,即要求你的程序接收两个数字1 5算出和为6输出之后还能继续接收10 20输出30,因此程序一定要有循环可以不断的接收才可以实现题目多组输入的要求。这是很多初学C语言的同学所不理解的,也无法完成的。
故而,我们给大家介绍本题的写法,首先以大家都熟悉的C语言为例,先看完整的代码:
#include<stdio.h> int main() { int a,b; while(scanf(“%d%d”,&a,&b)==2) //利用scanf的返回值 { printf(“%d\n”,a+b); } return 0; }
请大家注意,输出两个数的和几乎没有难度,这是大家都能理解的。本题最大的难度在于使用循环接收,并且将scanf接收的语句优雅的放到了while循环里,通过判断scanf返回值是否等于2来作为循环条件。
这可能是许多初学编程同学无法理解的(还能这么写?这是啥意思!)
如果大家明白:scanf函数也是有返回值的,其返回值的意义表示成功接收变量的数量,那么这种写法就不难理解了
本代码即,接收两个数字,如果接收成功,那么进去循环,计算两个数的和。进而继续等待接受下一组数据。
当然,你可能不禁要问,scanf难道还有不接收成功的时候吗?有的!
一旦属于的数据过多,其大小超过了一个缓冲文件的大小,是有接收不到两个数字的时候,scanf可能返回1甚至0甚至-1,详细scanf的返回值可以参考这篇文章scanf函数用法末尾部分
那么,大家再来看代码想必也就豁然开朗了!对于另外一种写法,大家也就能理解了,即将scanf的返回值与EOF相比,代码如下:
#include<stdio.h> int main() { int a,b; while(scanf(“%d%d”,&a,&b)!=EOF) //利用scanf的返回值 { printf(“%d\n”,a+b); } return 0; }
不懂EOF的同学可以,参考这篇文章:EOF是什么意思
下面,其他语言版本的代码也就触类旁通了
C++代码版本:
#include<iostream> using namespace std; int main() { int a,b; while(cin>>a>>b) cout<<(a+b)<<endl; return 0; }
Java代码版本:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int a = scanner.nextInt(); int b = scanner.nextInt(); int c = a + b; System.out.println(c); } } }
Python代码版本:
while True: try: a,b=map(int,input().strip().split()) print(a+b) except: break
请大家理解,然后亲自提交本题!
1085 | A+B for Input-Output Practice (I) |
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程