第四章就这样结束了,下面我们来做书后习题。
如果你愿意练习,请不要看答案。
每个程序之后可能会有一些解释,都是我做的时候遇到的问题和是如何解决的,如果你还有其他疑问,评论区见,一起探讨。
----------------------------------------------分割线------------------------------------------------
1.编写一个程序,要求输入名字和姓氏,然后以“名字,姓氏”的格式打印。
#include <stdio.h>
int main (void)
{
char xing [40];
char ming [40];
printf("请输入你的名字和姓氏\n");
scanf("%s",xing);
scanf("%s",ming);
printf("你的名字是:%s %s", xing, ming);
return 0;
}
2.编写一个程序,要求输入名字,并执行以下操作:
a.把名字引在双引号中打印出来。
b.在宽度为20个字符的字段内打印名字,并且整个字段引在引号内。
c. 在宽度为20个字符的字段的左端打印名字,并且整个字段引在引号内。
d.在比名字宽3个字符的字段内打印它。
#include <stdio.h>
int main(void)
{
char name [20];
//int width=3;
printf("请输入你的名字\n");
scanf("%s", name);
printf("A:\"%s\"\n", name);
printf("B:\"%20s\"\n", name);
printf("C:\"%-20s\"\n", name);
//printf("D:%*s\n", width, name);
printf("D:%3s\n", name);
return 0;
}
对于D问题我好像有好几种写法,限于水平不知道有没有错误,因为输出结果都是一样的。。。哪位知道原因的麻烦在下面帮忙指正一下。。。
另外网上给的答案是这样的
#include<stdio.h>
#include<string.h>
int main(void)
{
char name[20];
int width;
printf("Please input your name:");
scanf("%s",name);
printf("A:\"%s\"\n",name);
printf("B:\"%20s\"\n",name);
printf("C:\"%-20s\"\n",name);
width=strlen(name)+3;
printf("D:\"%*s\"\n",width,name);//*对应width
return(0);
}
3.编写一个程序,读取一个浮点数,并且首先以小数点记数法,然后以指数记数法打印之。输出使用下列形式(在指数位置显示的数字的位数可能会随系统而不同):
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 n ;
printf("请输入一个浮点数\n");
scanf("%f", &n);
printf("A:The input is %.1f or %.1e\n", n, n);
printf("B:The input is %+.3lf or %.3le\n", n, n);
return 0;
}
输出结果为:
请输入一个浮点数
14.25
A:The input is 14.3 or 1.4e+001
B:The input is +14.250 or 1.425e+001
A中 %.1表示保留一位小数,同理可知B中的%.3表示保留三位小数。在%.3中添加了“+”使得打印结果多了一个+。
4.编写—个程序,要求输入身高(以英寸为单位)和名字,然后以如下形式显示:
Dabney, you are 6.208 feet tall
使用float类型,使用/作为除号。如果您愿意,可以要求以厘米为单位输入身高,并以米为单位进行显示。
#include <stdio.h>
int main (void)
{
float inch;
char name [40];
printf("请输入你的身高:");
scanf("%f",&inch);
printf("\n");
printf("请输入你的名字:");
scanf("%s",name);
printf("\n");
printf("你好%s,你有%.3f 英尺高\n", name, inch);
return 0;
}
这里主要是考察输入字符串,使用数组char name[40],当然[]里的数字只要够。
5 . 编写一个程序,首先要求用户输入名字,然后要求用户输入姓氏。在一行打印输入的姓名,在下行打印每个名字中字母的个数。把字母个数与相应名字的结尾对齐,如下所示:
Melissa Honeybee
7 8
然后打印相同的信息,但是字母个数与相应单词的开始对齐。
#include <stdio.h>
#include <string.h>//提供string()函数原型
int main (void)
{
char xing [40];
char ming [40];
printf("请输入你的姓氏:");
scanf("%s",xing);
printf("\n");
printf("请输入你的名字:");
scanf("%s",ming);
printf("\n");
printf("%s %s\n", xing, ming);
printf("%*d %*d\n",strlen(xing),strlen(xing),strlen(ming),strlen(ming));
/*
前一个 strlen(xing)对应*,将“xing ”的字段宽度赋给“* ”;
后一个strlen(xing)对应“d ”以整型表示字段宽度。
*/
printf("%s %s\n", xing, ming);
printf("%-*d %-*d\n",strlen(xing),strlen(xing),strlen(ming),strlen(ming));
return 0;
}
一开始我用的%d,然后运行输入结束后,直接给我结束进程了。。。可见转换说明重要性。
欲知后事如何请看下集。