现附上我对第四章习题的解答,仅供参考,欢迎交流
//4.8.1
//4.8.1运用数组输出你的名和姓
# include <stdio.h>
int main(void)
{
char first_name[40];//定义名
char last_name[20]; //定义姓
printf("Please enter your first_name\n");
scanf("%s", first_name); //字符串不必加取地址符
printf("Ok,%s,now,enter your last_name\n", first_name);
scanf("%s", last_name);
printf("Welcome!%s,%s", first_name, last_name);
//输出最终结果
return 0;
}
//4.8.2
//4.8.2打印特定内容及格式
# include <stdio.h>
# include <string.h>//提供strlen()
int main(void)
{
char first_name[20];
char last_name[20]; //定义数组
int width1 = 0;
int width2 = 0; //定义字符宽度的整型变量
printf("Please enter your first_name:\n");
scanf("%s", first_name);
printf("Please enter your last_name:\n");
scanf("%s", last_name);
width1 = strlen(first_name);
width2 = strlen(last_name); //获得字符长度
printf("a.\"%s%s\"\n", first_name, last_name);
printf("b.\"%20s%20s\"\n", first_name, last_name);
printf("c.\"%-20s%-20s\"\n", first_name, last_name);
printf("d.%*s%*s\n", width1+3, first_name, width2+3, last_name);
//结果显示
return 0;
}
//我对题目的理解稍有偏颇
//是在整个宽度为20的字段打印,还是各20的宽度打印?
//上解为各20的宽度打印
//4.8.3
//4.8.3特定格式输出
# include <stdio.h>
int main(void)
{
float i; //定义浮点型变量
printf("Please input a floating point number:\n");
scanf("%f", &i); //获取
printf("输入%.1f或%.1e\n", i, i);
printf("输入%+.3f或%.3E\n", i, i);
//显示结果
return 0;
}
//4.8.4
//4.8.4交互式输出
# include <stdio.h>
int main(void)
{
char first_name[40];
float height; //定义
printf("Please enter your first_name:\n");
scanf("%s", first_name);
printf("Please enter your height:(feet)\n");
scanf("%f", &height);
//获取
printf("%s, you are %.3f feet tall", first_name, height);
//结果
return 0;
}
//4.8.5
//4.8.5打印三个变量的值(下载速度、文件大小和下载时间)
# include <stdio.h>
int main(void)
{
float Mb;
float MB;
float seconds; //定义
printf("Please enter a download speed of megabits per second:\n");
scanf("%f", &Mb);
printf("Please enter a file size in megabytes\n");
scanf("%f", &MB);
seconds = MB * 8 / Mb;
//获取,处理
printf("At %.2f megabits per second, a file of %.2f megabytes\n", Mb, MB);
printf("downloads in %.2f secodns", seconds);
//结果
return 0;
}
//4.8.6
//4.8.6.1运用函数strlen()获取宽度
# include <stdio.h>
# include <string.h>
int main(void)
{
char first_name[40];
char last_name[40];
int width1 = 0;
int width2 = 0;
printf("Please enter your first_name:\n");
scanf("%s", first_name);
printf("Please enter your last_name:\n");
scanf("%s", last_name);
width1 = strlen(first_name);
width2 = strlen(last_name);
printf("%s %s\n", first_name, last_name);
printf("%*d %*d\n", width1, width1, width2, width2);
printf("%s %s\n", first_name, last_name);
printf("%-*d %-*d", width1, width1, width2, width2);
return 0;
}
另解
//4.8.6.2利用printf返回值获取宽度
# include <stdio.h>
int main()
{
char first_name[10];
char last_name[10];
int width1;
int width2; //定义变量
printf("Please enter your first_name:\n");
scanf("%s", first_name);
printf("Please enter your last_name:\n");
scanf("%s", last_name);
width1 = printf("%s ", first_name);
width2 = printf("%s\n", last_name);//获取宽度并打印
width1 -=1; //有一个空格占宽度减去1
width2 -=1; //有一个转义字符占宽度减去1
printf("%*d ", width1, width1);
printf("%*d\n", width2, width2);
printf("%s %s\n", first_name, last_name);
printf("%-*d %-*d", width1, width1, width2, width2);
return 0;
}
//4.8.7
//4.8.7按要求给输出
# include <stdio.h>
# include <float.h>
int main(void)
{
double i;
float j; //定义
i = 1.0/3.0;
j = 1.0/3.0; //计算
printf("%.6f %.6f\n", i, j);
printf("%.12f %.12f\n", i, j);
printf("%.16f %.16f\n", i, j);
printf("%d %d", FLT_DIG, DBL_DIG);
//打印结果
return 0;
}
//4.8.8
//单位换算
# include <stdio.h>
# define LITRE 3.785
# define KM 1.609
int main(void)
{
float gallon;
float mile;
printf("Please enter your mile:\n");
scanf("%f", &mile);
printf("Please enter your gallon:\n");
scanf("%f", &gallon);
printf("In the American: %.1f\n", (gallon * LITRE)/(mile * KM * 100));
printf("In the Europe: %.1f", mile/gallon);
return 0;
}
如有不足,欢迎指正交流