第2周

2.1 输入输出进阶

%f:读入输出float/输出double。

%lf:读入double。

%lld:读入输出long long。

%s:读入输出字符串,不需要加“&”。

%u:以无符号整数形式输出整数。

%x:以十六进制形式读入或输出整数。

2.2 算术运算符和算术表达式

精度:double > long long > int > short > char

表达式的值的类型,以操作数中精度高的类型为准。

2.3 关系运算符和逻辑表达式

逻辑表达式是短路计算的。

2.4 其它运算符及运算符优先级

单目运算符、条件运算符、赋值运算符的优先级从右至左结合。

单目运算优于双目运算,关系运算符中“!=”“==”比其他的低一个级别。

 

作业

1.对齐输出

Description:读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们。

Input:只有一行,包含三个整数,整数之间以一个空格分开。

Output:只有一行,按照格式要求依次输出三个整数,之间以一个空格分开。

Sample Input:123456789 0 -1

Sample Output:123456789 0 -1

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     int a, b, c;
 6     scanf("%d %d %d", &a, &b, &c);
 7 
 8     printf("%8d %8d %8d\n", a, b, c);
 9 
10     return 0;
11 }

2.输出保留12位小数的浮点数

Description:读入一个双精度浮点数,保留12位小数,输出这个浮点数。

Input:只有一行,一个双精度浮点数。

Output:也只有一行,保留12位小数的浮点数。

Sample Input:3.1415926535798932

Sample Output:3.141592653580

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     double a;
 6     scanf("%lf", &a);
 7 
 8     printf("%.12f\n", a);
 9 
10     return 0;
11 }

3.空格分隔输出

Description:读入一个字符,一个整数,一个单精度浮点数,一个双精度浮点数,然后按顺序输出它们,并且要求在他们之间用一个空格分隔。输出浮点数时保留6位小数。

Input:共有四行:第一行是一个字符;第二行是一个整数;第三行是一个单精度浮点数;第四行是一个双精度浮点数。

Sample Input:

a

12

2.3

3.2

Sample Output:a 12 2.300000 3.200000

 1 #include <cstdio>
 2 
 3 int main()
 4 {
 5     char a;
 6     int b;
 7     float c;
 8     double d;
 9     scanf("%c %d %f %lf", &a, &b, &c, &d);
10 
11     printf("%c %d %.6f %.6f\n", a, b, c, d);
12 
13     return 0;
14 }

4.计算球的体积

Description:对于半径为r的球,其体积的计算公式为V=4/3*πr3,这里取π= 3.14。现给定r,求V。

Input:输入为一个不超过100的非负实数,即球半径,类型为double。

Output:输出一个实数,即球的体积,保留到小数点后2位。

Sample Input:4

Sample Output:267.95

 1 #include <cstdio>
 2 
 3 #define PI 3.14
 4 
 5 int main()
 6 {
 7     double r;
 8     scanf("%lf", &r);
 9 
10     printf("%.2f\n", 4.0/3*PI*r*r*r);
11 
12     return 0;
13 }

5.大象喝水

Description:一只大象口渴了,要喝20升水才能解渴,但现在只有一个深h厘米,底面半径为r厘米的小圆桶(h和r都是整数)。问大象至少要喝多少桶水才会解渴。

Input:输入有一行:包行两个整数,以一个空格分开,分别表示小圆桶的深h和底面半径r,单位都是厘米。

Output:输出一行,包含一个整数,表示大象至少要喝水的桶数。

Sample Input:23 11

Sample Output:3

 1 #include <cstdio>
 2 
 3 #define PI 3.14159
 4 #define EPS 1e-8
 5 
 6 int main()
 7 {
 8     int h, r;
 9     scanf("%d %d", &h, &r);
10 
11     double f = 20000.0/(h*PI*r*r);
12     int n = f;
13     n += (f-n)>EPS;
14 
15     printf("%d\n", n);
16 
17     return 0;
18 }

Hint:不要用“a == b”的办法判断两个浮点数是否相等,也不要用“a == 0”的办法判断浮点数 a是否等于0,因为浮点数是有误差的。应该用“a-b>-eps && a-b<-eps“,即a和b的差的绝对值小于某个很小值 eps的办法来判断a和b是否相等。如果结果要保留小数点后面n位,那么 eps可以取 10的-(n+2)次方。

 

posted @ 2016-07-08 14:47  VincentValentine  阅读(1332)  评论(0编辑  收藏  举报