Z1_上_2_输入与交互
一、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; }
二、程序的交互
有了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; }
【例】变量交换

【分析】
如果直接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; }
【思考】
如果不新增变量,只用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; }
【例】反向输出

【分析】
设三位数为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; }
还有一个比较取巧的方法。
因为数字可以看作字符,所以在输入的时候我们可以设定输入的是3个字符,用3个字符变量分别储存,然后直接反向输出就行。
【参考代码】
#include <iostream> using namespace std; int main() { char a, b, c; cin >> a >> b >> c; cout << c << b << a << endl; return 0; }
二、格式化输入与输出
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; }
如果需要输出多个数据,且数据要换行输出的话,那么需要在格式控制中添加\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; }
两种输入输出方式的比较:
变量较少时使用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; }
或
#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; }
【练】三个整数的和

【分析】
需要注意整数的范围,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; }
【练】翻转六位数

【分析】
设六位数为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; }
【练】公交车运行时间

【分析】
以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; }
【练】均分饮料

【参考代码】
#include <cstdio> using namespace std; int main() { double t; int n; scanf("%lf %d", &t, &n); printf("%.3lf ", t / n); return 0; }
【选】鸡兔同笼

【分析】
先通过具体的例子入手:如果有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; }
【选】输出算式


【分析】
有特殊格式要求的输出用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; }
【选】分糖果

【分析】
使用五个变量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; }


浙公网安备 33010602011771号