OJ入门--输入输出

由于各种程序设计大赛使用的输入输出一般使用的都有多组输入输出,且输入输出对于格式的规范性要求很高(便于判题自动测试验证),下面我们举几个例子演示基本的输入输出的技巧。

例1,没有说明测试数据输入的组数

题目内容:

已知数大于零两个整数a和b,求a和b的和。

输入描述:

输入两个大于零整数a和b。a,b都是整型(int),a,b以空格隔开。

输出描述:

输出整数a和b的和,并换行。

输入样例:

12

34

45

输出样例:

3

7

9

应对策略:

没有说明输入的测试数据的组数,那么我们默认是一值输入测试数据直到人为停止或者测试输入用完,在windows下按ctr+c组合键即可。实现代码如下。

C语言版:

#include<stdio.h>
int main()
{
     int a,b;
     while(scanf(“%d%d”,&a,&b) != EOF)
    {
    	 printf(“%d\n”,(a+b));   //注意输出描述要换行哦
    }
    return 0;
}

->知识要点

scanf函数返回值就是读取的变量个数,如:scanf( “%d %d”, &a,&b );
如果只有一个整数输入,返回值是1,如果有两个整数输入,返回值是2,如如果一个都没有,则返回值是-1。EOF是一个预定义的常量,等于-1

试着说出下面例子的输出结果:

#include<stdio.h>
int main()
{
     int a,b,c;
     printf("scanf(...,&a,&b)=%d\n",scanf("%d%d",&a,&b));                           
     printf("scanf(...,&a,&b,&c)=%d\n",scanf("%d%d%d",&a,&b,&c));
     return 0;
}

->课后思考???

作为C语言的标准输入scanf()函数有返回值,那么他的老搭档标准输出printf()是否有返回值呢?返回值的又是什么呢?

C++版:
#include<iostream>
using namespace std;
int main()
{
     inta,b;
     while(cin>>a>>b)
    {
     	cout<<a+b<<endl;
    }
     return0;
}

->知识要点

例2,手动输入测试数据的组数

题目内容:

已知输入大于零两个整数a和b,求a和b的和。

输入描述:

先输入测试数据组数n,在输入n组两个整数a和b。a,b都是整型(int)且都大于零,a,b以空格隔开。每一组数据输完后换行

输出描述:

输出一组整数a和b的和,并换行。

输入样例:

3

1 2

3 4

4 5

输出样例:

3

7

9

应对策略:

我们只要设置两个变量分别用来接受我们测试数据的组数和记录输入测试数据的组数。实现代码如下:

C语言版:

#include<stdio.h>
int main()
{
     inta,b,n;
     inti = 0;       //记录测试数据输入的组数
     scanf(“%d”,&n);//首先输入测试数据的组数
     while(i<n)
    {
    	 scanf(“%d%d”,&a,&b);
     	printf(“%d\n”,(a+b));   //注意输出描述要换行哦
     	++ i;         //别掉了哦,否则就会陷入死循环哦
    }
    return 0;
}

C++版:

#include<iostream>
using namespace std;
int main()
{
     inta,b,n;
     inti = 0;
     cin>>n;
     while(i<n)
    {
    	 cin>>a>>b;
     	cout<<a+b<<endl;
     	++ i;
    }
     return0;
}

例3,没有说明测试数据输入的组数,但是给出了输入结束的标识

题目内容:

已知数两个整数a和b,求a和b的和。

输入描述:

输入多组两个整数a和b。a,b都是整型(int)且都大于零,a,b以空格隔开。直至输入0 0结束。

输出描述:

输出整数a和b的和,并换行。

输入样例:

1 2

3 4

4 5

0 0

输出样例:

3

7

9

应对策略:

我们只需要每次输入完一组测试数据后检查测试数据本身是否为结束符即可。如果是则结束,否则继续。

C语言版

#include<stdio.h>
int main()
{
     inta,b;
     while(scanf(“%d%d”,&a,&b), a!=0&&b!=0)
    {
    	 printf(“%d\n”,(a+b));   //注意输出描述要换行哦
    }
    return 0;
}

->知识要点

这里我们要注意的是while(scanf(“%d %d”,&a,&b), a!=0&&b!=0)里的“,”逗号运算符的规则。

C++版:

#include<iostream>
using namespace std;
int main()
{
     inta,b;
     while(cin>>a>>b,a!=0&&b!=0)
    {
    	 cout<<a+b<<endl;
    }
     return0;
}

->知识要点

例4,字符串输入

题目内容:

将字符串完美再次呈现

输入描述:

输入多组字符串然

输出描述:

按照输入完全一模一样的输出字符串

输入样例:

Whlcome to c club

string

ni ho_no

输出样例:

Whlcome to c club

string

ni ho_no

应对策略:

没有说明输入的测试数据的组数,那么我们默认是一值输入测试数据直到人为停止或者测试输入用完,但是我们不是要说这个问题。我们需要注意的是接收一整行字符串要注意的问题,C或者C++提供的标准输入函数,以及输入函数之间的差别。或者C++的getline()函数。

C语言版:

#include<stdio.h>
#define N 80
int main()
{
     charstr[N];
     while(gets(str)!= NULL)
     {
     	printf(“str\n”,str);   //注意输出描述要换行哦
     }
     return 0;
}


->知识要点

gets()函数的返回值是函数的参数,也就是说gets(str)的返回值是str。if the return value isANULL pointer indicates an error or end-of-file condition.(引用于MSDN)我们决不能直接用scanf()因为空格也可以作为他的分隔符,那么字符串在“ni shi shui a”用scanf()接受则为四个字符串,显然是不符合题意的。我们可以用gets()函数,因为此函数的分隔符是“\n”。

->课后思考???

printf("%s\n",gets(str));输出的是什么?

C++版:

#include<iostream>
using namespace std;
int main()
{
     inta,b;
     while(cin>>a>>b)
     {
    	 cout<<a+b<<endl;
     }
     return0;
}


->知识要点

cin和scanf()存在相同的问题,就是一行的界定符并不只有“\n”一个,空格等都可以。

可以去下面的地址练练手吧!

A+B for Input-Output Practice(1

A+B for Input-Output Practice(2

A+B for Input-Output Practice(3

A+B for Input-Output Practice(4

A+B for Input-Output Practice(5

A+B for Input-Output Practice(6

A+B for Input-Output Practice(7

A+B for Input-Output Practice(8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值