C Primer Plus学习_8第四章编程练习(略带解释 )

第四章就这样结束了,下面我们来做书后习题。

如果你愿意练习,请不要看答案。

每个程序之后可能会有一些解释,都是我做的时候遇到的问题和是如何解决的,如果你还有其他疑问,评论区见,一起探讨。

----------------------------------------------分割线------------------------------------------------

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,然后运行输入结束后,直接给我结束进程了。。。可见转换说明重要性。

欲知后事如何请看下集。






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值