c primer plus--字符串和格式化输入/输出(第4章)--习题

本周没有比较深切的感触,就直接开始吧,关于题的想法过程会放在题后面的括号或者代码的注释里。

 

 

 

1.编写一个程序,要求输入名字和姓氏,然后以 “名字,姓氏” 的格式打印。

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4     char surname[10];
 5     char name[10];
 6     printf("Please write your name and surname: ");
 7     scanf("%s %s", &name, &surname);
 8     printf("Well, you are %s %s.\n", name, surname);
 9     return 0;
10 }

2.编写一个程序,要求输入名字,并执行以下操作:

  a. 把名字引在双引号中打印出来。

1 #include <stdio.h>
2 int main(void)
3 {
4     char name[10];
5     printf("Please input your name: ");
6     scanf("%s", &name);
7     printf("Your name is \"%s\".\n", name);
8     return 0;
9 }

  b. 在宽度为20个字符的字段内打印名字,并且整个字段因在引号内。

1 #include <stdio.h>
2 int main(void)
3 {
4     char name[20];
5     scanf("%s", &name);
6     printf("Ok, your name is %20s.\n", name);
7     return 0;
8 }

  c. 在宽度为20个字符的字段的左端打印名字,并且整个字段引在引号内。

1 #include <stdio.h>
2 int main(void)
3 {
4     char name[20];
5     scanf("%s", &name);
6     printf("Ok, your name is %-20s.\n", name);
7     return 0;
8 }

  d. 在比名字宽3个字符的字段内打印它。

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main(void)
 4 {
 5     char name[20];
 6     int length;
 7     scanf("%s", &name);
 8     length = strlen(name) + 3;
 9     printf("%*s\n", length, name);
10     return 0;
11 }

3. 编写一个程序,读取一个浮点数,并且首先以小数记数法,然后以指数记数法打印之。输出使用下列形式(在指数位置显示的数字的位数可能会随系统而不同):

  a. The input is  21.3  or  2.1e+001

1 #include <stdio.h>
2 int main(void)
3 {
4     double number;
5     scanf("%lf", &number);
6     printf("The input is %.1f or %.1e", number, number);
7     // 示例看来不管是小数或指数打印都取了小数点后一位,故认为需添上 .1
8     return 0;
9 }

  b. The input is  +21.290  or  2.129E+001

1 #include <stdio.h>
2 int main(void)
3 {
4     double number;
5     scanf("%lf", &number);
6     printf("The input is %+.3f or %.3E", number, number);
7     return 0;
8 }

4. 编写一个程序,要求输入身高(以英寸为单位)和名字,然后以如下形式显示:

  Dabney, you are 6.208 feet tall

使用 float 类型,使用 / 作为除号。如果你愿意,可以要求以厘米为单位输入身高,并以米为单位进行显示。

(英寸和码咋换来的?嘛,用厘米换米好了)

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4     char name[10];
 5     float stature;
 6     printf("Please input your name and height:\n");
 7     scanf("%s %f", &name, &stature);
 8     printf("%s, you are %.3f m tall\n", name, stature/100);
 9     return 0;
10 }

5. 编写一个程序,首先要求用户输入名字,然后要求用户输入姓氏。在一行打印输入的姓名,在下一行打印每个名字中字母的个数。把字母个数与相应名字的结尾对齐,如下所示:

  Melissa Honeybee

       7     8

然后打印相同的信息,但是字母个数与相应单词的开始对齐。

  Melissa Honeybee

  7   8

 1 #include <stdio.h>
 2 #include <string.h>
 3 int main(void)
 4 {
 5     char name[20];
 6     char surname[20];
 7     scanf("%s %s", &name, &surname);
 8     int len_name = strlen(name);
 9     int len_surname = strlen(surname);
10     printf("%s %s\n", name, surname);
11     printf("%*d %*d\n", len_name, len_name, len_surname, len_surname);
12     // 问题在于需要让输出知晓字段宽,故需用到 * 
13     printf("\n");
14     printf("%s %s\n", name, surname);
15     printf("%-*d %-*d\n", len_name, len_name, len_surname, len_surname);
16     return 0;
17 }

6. 编写一个程序,设置一个值为 1.0/3.0 的 double类型变量和一个值为 1.0/3.0 的 float类型变量。每个变量的值显示三次:一次在小数点右侧显示4个数字,一次在小数点右侧显示12个数字,另一次在小数点右侧显示16个数字。同时要让程序包括 float.h 文件,并显示 FLT_DIG 和 DBL_DIG 的值。1.0/3.0 的显示值与这些值一致吗?

(从程序输出看来,1.0/3.0与FLT_DIG和DBL_DIG的值完全不一样,不知是不是我的理解偏差)

 1 #include <stdio.h>
 2 #include <float.h>
 3 int main(void)
 4 {
 5     double NUM_1 = 1.0/3.0;
 6     float NUM_2 = 1.0/3.0;
 7     printf("%.4f\t%.12f\t%.16f\n", NUM_1, NUM_1, NUM_1);
 8     printf("%.4f\t%.12f\t%.16f\n", NUM_2, NUM_2, NUM_2);
 9     printf("Digit of float value on this system = %e\n", FLT_DIG);
10     printf("Digit of double value on this system = %e\n", DBL_DIG);
11     return 0;
12 }

7. 编写一个程序,要求用户输入行驶的英里数和消耗汽油的加仑数。接着应该计算和显示消耗每加仑汽油行驶的英里数,显示方式是在小数点右侧显示一个数字。然后,根据 1加仑约等于 3.785升,1英里约等于 1.609公里的规则,它应该把每加仑英里数转换成每 100公里的升数(欧洲通用的燃料消耗表示法),并显示结果,显示方式是在小数点右侧显示一个数字(请注意,美国方案测量每单位距离消耗的燃料数,而欧洲方案测量每单位燃料的行驶距离)。

用符号常量表示两个转换系数(使用 const或 #define)。

(这题整得有点懵,可能数值方面会有些小问题)

 1 #include <stdio.h>
 2 #define LITER 3.785
 3 int main(void)
 4 {
 5     const float kilo = 1.609;
 6     double mile, gallon;
 7     printf("Please input the mile and gallon:\n");
 8     scanf("%lf %lf", &mile, &gallon);
 9     printf("One gallon can drive %.1f miles.\n", mile/gallon);
10     printf("The 100 kilometres cost %.1f liters.\n", (gallon*LITER)/(mile*kilo/100));
11     return 0;
12 }

 

转载于:https://www.cnblogs.com/ultra-zhukai/p/9906391.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值