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