C Primer Plus 编程习题-第四章-字符串和格式化输入/输出
C Primer Plus 4.8
编程练习第一题
/* 题目:编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来*/
#include <stdio.h>
int main(void)
{
char name[40], first_name[40];
printf("Please input your first name and name:\n");
scanf("%s %s", first_name, name);
printf("%s,%s", name, first_name);
getchar();
getchar();
return 0;
}
编程练习第二题
/* 题目:编写一个程序,提示用户输入名字,并执行以下操作:
a.打印名字,包括双引号;
b.在宽度为20的字段右端打印名字,包括双引号;
c.在宽度为20的字段左端打印名字,包括双引号;
d.在比姓名宽度宽3的字段中打印名字 */
#include <stdio.h>
int main(void)
{
char name[30];
printf("Please input your name:\n");
scanf("%s", name);
printf("a:%c%s%c\n", '"', name, '"');
printf("b:%c%18s%c\n", '"', name, '"');
printf("c:%c%-18s%c\n", '"', name, '"');
printf("d:%c%c%c%s\n", '\0', '\0', '\0', name);
getchar();
getchar();
return 0;
}
编程练习第三题
/* 题目:编写一个程序,读取一个浮点数,首先以小数点记数法打印,
然后以指数记数法打印。用下面的格式进行输出(系统不同,指数记数
法显示的位数可能不同)
a.The input is 21.3 or 2.1e+001.
b.The input is +21.290 or 2.129E+001. */
#include <stdio.h>
int main(void)
{
float num = 21.29;
printf("a.The input is %.1f or %.1e.\n", num, num);
printf("b.The input is %+.3f or %.3E.\n", num, num);
getchar();
return 0;
}
编程练习第四题
/* 题目:编写一个程序,提示用户输入身高(单位:英寸)和姓名,
然后以下面的格式显示用户刚输入的信息:
Dabney, you are 6.208 feet tall
使用float类型,并用/作为除号。如果你愿意,可以要求用户以厘米
为单位输入身高,并以米为单位显示出来。*/
#include <stdio.h>
int main(void)
{
char name[20];
float height;
printf("Please input your name and height(cm):");
scanf("%s %f", name, &height);
height = height / 100.0;
printf("%s, you are %.2f metre tall.\n", name, height);
getchar();
getchar();
return 0;
}
编程练习第五题
/* 题目:编写一个程序,提示用户输入以兆位每秒(Mb/s)为单位的下载速度
和以兆字节(MB)为单位的文件大小。程序中应计算文件的下载时间。注意,这
里1字节等于8位。使用float类型,并用/作为除号。该程序要以下面的格式打印
3个变量的值(下载速度、文件大小和下载时间),显示小数点后两位数字:
At 18.12 megabits persecond, a file of 2.20 megabytes
downloads in 0.97 seconds */
#include <stdio.h>
int main(void)
{
float speed = 18.12, total = 2.20, download_time;
download_time = total * 8 / speed;
printf("At %.2f megabits persecond, a file of %.2f megabytes\ndownloads in %.2f
seconds", speed, total, download_time);
getchar();
return 0;
}
编程练习第六题
/* 题目:编写一个程序,提示用户输入名,然后提示用户输入姓。
在一行打印用户输入的名和姓,下一行分别打印名和姓的字母数。
字母数要与相应名和姓的结尾对齐,如下所示:*/
#include <stdio.h>
#include <string.h>
int main(void)
{
char name[10];
char first_name[10];
int name_length, first_name_length;
printf("Please input your name:");
scanf("%s", name);
printf("Then, please input your first name:");
scanf("%s", first_name);
name_length = strlen(name);
first_name_length = strlen(first_name);
printf("%7s %8s\n", name, first_name);
printf("%7d %8d\n", name_length, first_name_length);
printf("%7s %8s\n", name, first_name);
printf("%-7d %-8d\n", name_length, first_name_length);
getchar();
getchar();
return 0;
}
编程练习第七题
/* 题目:编写一个程序,将一个double类型的变量设置为1.0/3.0,一个float类型
的变量设置位1.0/3.0,分别显示两次计算的结果各3次:一次显示小数点后6位数字;
一次显示小数点后面12位数字;一次显示小数点后面16位数字。程序中要包含float.h
头文件,并显示FLT_DIG和DBL_DIG的值。是否一致?*/
#include <stdio.h>
#include <float.h>
int main(void)
{
float i1 = 1.0 / 3.0;
double i2 = 1.0 / 3.0;
printf("float:%.6f, double:%.6f\n", i1, i2);
printf("float:%.12f, double:%.12f\n", i1, i2);
printf("float:%.16f, double:%.16f\n", i1, i2);
printf("FLT_DIG:%d, DBL_DIG:%d", FLT_DIG, DBL_DIG);
getchar();
return 0;
}
编程练习第八题
/* 题目:编写一个程序,提示用户输入旅行的里程和消耗的汽油量。然后
计算并显示消耗每加仑汽油行驶的英里数,显示小数点后面一位数字。接下
来,使用1加仑大约3.785升,1英里大约为1.609千米,把单位是英里/加仑
的值转换为升/公里,并显示结果,显示小数点后面1位数字。使用#define
创建符号常量或使用const限定符创建变量来表示两个转换系数。 */
#include <stdio.h>
int main(void)
{
float mile, gallon, kilometre, litre, eu_oil, usa_oil;
const float mile_to_kilometre = 1.609;
const float gallon_to_litre = 3.785;
printf("Please input your mileage and gas consumption for the trip:");
scanf("%f,%f", &mile, &gallon);
eu_oil = mile / gallon;
usa_oil = (gallon * gallon_to_litre) / (mile * mile_to_kilometre / 100);
printf("欧洲通用的燃料消耗表示:%.2f英里/加仑\n美国采用的表示:%.2f升/百公里", "
"eu_oil, usa_oil);
getchar();
getchar();
return 0;
}