一、cin语句
cin语句是用来进行读入的,即把外界输入的数据储存在预先声明好的变量中。
cin语句的一般格式:
cin>>变量1>>变量2>>……>>变量n;
示例
观察下列程序,理解cin语句的使用。
#include <iostream>
using namespace std;
int main ()
{
int a;
char b;
double c;
cin >> a >> b >> c;
cout << c << " " << b << " " << a << endl;
return 0;
}
由程序可得,cin语句起到的作用是将键盘写入的数据储存进对应的变量中。
在读入之前,一定要记得提前声明好变量。
【例】a+b
【参考代码】
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}
View Code
二、程序的交互
有了cin语句,就可以进行基本的程序交互了。
我们设计的程序可以用来解决一类问题,根据不同的输入结果输出相应的计算结果。
【例】长方形面积与周长
【分析】
长方形面积=长×宽
长方形的周长=2×(长+宽)
【参考代码】
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
cout << a * b << endl;
cout << 2 * (a + b) << endl;
return 0;
}
View Code
【例】变量交换
【分析】
如果直接a=b,b=a行不行?
不行,此时a和b全部都会变成最开始b的值。
所以需要一个新变量来储存a的值。
【参考代码】
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
int tmp = a;//tmp用来储存a的值
a = b;
b = tmp;
cout << a << " " << b << endl;
return 0;
}
View Code
【思考】
如果不新增变量,只用a和b这两个变量能达到目的吗?
【参考代码】
#include <iostream>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
a = a + b;
b = a - b;
a = a - b;
cout << a << " " << b << endl;
return 0;
}
View Code
【例】反向输出
【分析】
设三位数为n。
则个位=n%10;
十位=n/10%10;
百位=n/100。
【参考代码】
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << n % 10 << n / 10 % 10 << n / 100 << endl;
return 0;
}
View Code
还有一个比较取巧的方法。
因为数字可以看作字符,所以在输入的时候我们可以设定输入的是3个字符,用3个字符变量分别储存,然后直接反向输出就行。
【参考代码】
#include <iostream>
using namespace std;
int main()
{
char a, b, c;
cin >> a >> b >> c;
cout << c << b << a << endl;
return 0;
}
View Code
二、格式化输入与输出
C++语言兼容C语言中的基本语句语法,而C语言可以使用scanf语句和printf语句来进行输入和输出。
scan是扫描、读入的意思,print是打印、输出的意思,后面的f是“格式”(format)的意思,所以它们也被称为格式化输入和格式化输出。
对于很多数据的输入输出,使用scanf语句和printf语句会比cin语句和cout语句更加高效。
除此之外,如果输出的结果需要满足特定的格式,比如保留若干位小数,那么用格式化输出会更加简单。
要想使用这两个语句,需要添加头文件<cstdio>
printf语句的基本格式为:
printf(“格式控制字符串”,输出列表)
现阶段常用的格式控制字符串有如下几个:
%d 输出int变量;
%lld 输出long long变量;
%c 输出char变量
%f 输出float变量;
%lf输出double变量。
小数输出默认是6位,如果想改变小数位数,那么在f或lf前加“.n”其中n表示小数位数。
如:%.3f表示输出结果保留3位小数。
示例
阅读下列程序并运行,理解printf语句的格式化输出效果。
#include <cstdio>
using namespace std;
int main()
{
int a = 3;
char b = '+';
double c = 3.1415926;
printf("%d %c %.2lf = %lf", a, b, c, a + c);
return 0;
}
scanf语句的基本格式为:
scanf(“格式控制字符串”,&输入列表)
需要注意的是,在输入的变量之前要加上一个&,它的作用是取变量储存地址。
如果是多个量读入,那么在格式控制字符串部分需要加上空格。
注:scanf没有精度控制,scanf("%.2f", &a)是错误的表达。
示例
阅读下列程序并运行,理解scanf语句的输入效果。
#include <cstdio>
using namespace std;
int main()
{
int a;
char b;
double c;
scanf("%d %c %lf", &a, &b, &c);
printf("%d %c %.2lf = %lf", a, b, c, a + c);
return 0;
}
【例】计算总价
【参考代码】
#include <cstdio>
using namespace std;
int main()
{
double a, b;
scanf(“%lf %lf”, &a, &b);
printf("%.2lf", a * b);
return 0;
}
View Code
如果需要输出多个数据,且数据要换行输出的话,那么需要在格式控制中添加\n。
如:“%d\n%.3lf"分为3个部分,%d表示这里会有一个整型变量,\n表示要换行,%.3lf表示这里会有一个保留3位小数的浮点数。
【例】圆
【分析】
保留4位小数:%.4lf;
分两行输出:\n。
【参考代码】
#include <cstdio>
using namespace std;
int main()
{
double r;
const double p = 3.14;
scanf("%lf", &r);
printf("%.4lf\n%.4lf ", 2 * p * r, p * r * r);
return 0;
}
View Code
两种输入输出方式的比较:
变量较少时使用cin和cout,写起来更简单;
变量较多,或者需要进行格式化处理时用scanf和printf,处理效果更好。
【课后测】赋值
【参考代码】
#include <iostream>
using namespace std;
int main()
{
int a, b, c;
cin >> a >> b >> c;
b = a + c;
a += 2;
c *= b;
a += c;
cout << a << " " << b << " " << c << " ";
return 0;
}
View Code
或
#include <cstdio>
using namespace std;
int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
b = a + c;
a += 2;
c *= b;
a += c;
printf("%d %d %d", a, b, c);
return 0;
}
View Code
【练】三个整数的和
【分析】
需要注意整数的范围,int可能会越界,需要使用long long。
【参考代码】
#include <iostream>
using namespace std;
int main()
{
long long a, b, c;
cin >> a >> b >> c;
cout << a + b + c << endl;
return 0;
}
View Code
【练】翻转六位数
【分析】
设六位数为n,则前3位为n/1000,后3位为n%1000。
【参考代码】
#include <iostream>
using namespace std;
int main()
{
int n;
cin >> n;
cout << n % 1000 << n / 1000;
return 0;
}
View Code
【练】公交车运行时间
【分析】
以0:00作为起点,把时间都化成分钟,相减,算出两个时刻之间相差的分钟,再把这个时间化成小时和分钟就行。
【参考代码】
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d, time;//time用来储存时间
cin >> a >> b >> c >> d;
time = c * 60 + d - (a * 60 + b);
cout << time / 60 << " " << time % 60 << endl;
return 0;
}
View Code
【练】均分饮料
【参考代码】
#include <cstdio>
using namespace std;
int main()
{
double t;
int n;
scanf("%lf %d", &t, &n);
printf("%.3lf ", t / n);
return 0;
}
View Code
【选】鸡兔同笼
【分析】
先通过具体的例子入手:如果有35个头,94只脚。
那么鸡和兔子共有35只,假设全部都是鸡,那么脚的总数应该是35×2=70。
将1只鸡换成1只兔子,那么脚的数量会增加4-2=2。
而94-70=24,要增加24只脚,24÷2=12,则要把12只鸡换成兔子。
即有12只兔子,35-12=23只鸡。
归纳出统一的算式:如果有a个头,b只脚。
则兔子的数量为:(b-a*2)÷2
而鸡的数量为:a-兔子的数量
【参考代码】
#include <iostream>
using namespace std;
int main()
{
int a, b, c, d;
//a和b分别表示头和脚的数量
//c和d分别表示兔子和鸡的数量
cin >> a >> b;
c = (b - a * 2) / 2;
d = a - c;
cout << d << " " << c <<endl;
return 0;
}
View Code
【选】输出算式
【分析】
有特殊格式要求的输出用printf会更简便。
a和b都是整数,要使得结果是小数,得先×1.0变成小数才行。
【参考代码】
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a, b;
cin >> a >> b;
printf("%d / %d = %d ... %d\n", a, b, a / b, a % b);
printf("%d / %d = %.8lf", a, b, a * 1.0 /b);
return 0;
}
View Code
【选】分糖果
【分析】
使用五个变量a,b,c,d,e分表表示五个人的糖果数,然后按照题目要求依次操作即可。
【参考代码】
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e;
a /= 3; b += a; e += a;
b /= 3; c += b; a += b;
c /= 3; d += c; b += c;
d /= 3; e += d; c += d;
e /= 3; a += e; d += e;
cout << a << " " << b << " " << c << " " << d << " " << e;
return 0;
}
View Code