OJ入门--输入输出

来源:岁月联盟 编辑:exp 时间:2012-07-23

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

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

题目内容:

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

输入描述:

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

输出描述:

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

输入样例:

    12

    34

    45

输出样例:

    3

    7

    9

应对策略:

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

 

C语言版:

[cpp] 
#include<stdio.h> 
int main() 

     int a,b; 
     while(scanf(“%d%d”,&a,&b) != EOF) 
    { 
    <span style="white-space:pre">  </span> printf(“%d/n”,(a+b));   //注意输出描述要换行哦 
    } 
    return 0; 

->知识要点

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

 

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

[cpp] 
#include<stdio.h> 
int main() 

     int a,b,c; 
     printf("scanf(...,&a,&b)=%d/n",scanf("%d%d",&a,&b));                             
[cpp] 
     printf("scanf(...,&a,&b,&c)=%d/n",scanf("%d%d%d",&a,&b,&c)); 
     return 0; 

->课后思考???

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

 

[cpp]  
C++版: 
#include<iostream> 
using namespace std; 
int main() 

     inta,b; 
     while(cin>>a>>b) 
    { 
     <span style="white-space:pre"> </span>cout<<a+b<<endl; 
    } 
     return0; 
}<span style="color: blue; font-family: FangSong_GB2312;font-size:16px; "> </span> 
->知识要点

例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语言版:

[cpp] 
#include<stdio.h> 
int main() 

     inta,b,n; 
     inti = 0;       //记录测试数据输入的组数 
     scanf(“%d”,&n);//首先输入测试数据的组数 
     while(i<n) 
    { 
    <span style="white-space:pre">  </span> scanf(“%d%d”,&a,&b); 
     <span style="white-space:pre"> </span>printf(“%d/n”,(a+b));   //注意输出描述要换行哦 
     <span style="white-space:pre"> </span>++ i;         //别掉了哦,否则就会陷入死循环哦 
    } 
    return 0; 

C++版:

[cpp] 
#include<iostream> 
using namespace std; 
int main() 

     inta,b,n; 
     inti = 0; 
     cin>>n; 
     while(i<n) 
    { 
    <span style="white-space:pre">  </span> cin>>a>>b; 
     <span style="white-space:pre"> </span>cout<<a+b<<endl; 
     <span style="white-space:pre"> </span>++ 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语言版:

[cpp] 
#include<stdio.h> 
int main() 

     inta,b; 
     while(scanf(“%d%d”,&a,&b), a!=0&&b!=0) 
    { 
    <span style="white-space:pre">  </span> printf(“%d/n”,(a+b));   //注意输出描述要换行哦 
    } 
    return 0; 

->知识要点

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

C++版:

[cpp] 
#include<iostream> 
using namespace std; 
int main() 

     inta,b; 
     while(cin>>a>>b,a!=0&&b!=0) 
    { 
    <span style="white-space:pre">  </span> 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语言版:


[cpp] 
#include<stdio.h> 
#define N 80 
int main() 

     charstr[N]; 
     while(gets(str)!= NULL) 
     { 
     <span style="white-space:pre"> </span>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++版:

[cpp] 
#include<iostream> 
using namespace std; 
int main() 

     inta,b; 
     while(cin>>a>>b) 
     { 
    <span style="white-space:pre">  </span> cout<<a+b<<endl; 
     } 
     return0; 


作者:wudemiao1246403394