《C Primer Plus》学习笔记——字符串和格式化输入/输出

1、char数组类型和空字符

空字符:\0

用%s打印一个字符串

 

2、strlen和sizeof

strlen计算的是字符串的长度,sizeof计算的是变量使用的内存大小,不受里面存储的内容改变。strlen不包括’\0’。

  sizeof(...)是运算符,在头文件中typedef为unsigned int,其值在编译时即计算好了,参数可以是数组、指针、类型、对象、函数等。
  它的功能是:保证能容纳实现所建立的最大对象的字节大小。

  由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内容没有关系。
  具体而言,当参数分别如下时,sizeof返回的值表示的含义如下:
  数组——编译时分配的数组空间大小;
  指针——存储该指针所用的空间大小(存储该指针的地址的长度,是长整型,应该为4);
  类型——该类型所占的空间大小;
  对象——对象的实际占用空间大小;
  函数——函数的返回类型所占的空间大小。函数的返回类型不能是void。

 

  strlen(...)是函数,要在运行时才能计算。参数必须是字符型指针(char*)。当数组名作为参数传入时,实际上数组就退化成指针了。
  它的功能是:返回字符串的长度。该字符串可能是自己定义的,也可能是内存中随机的,该函数实际完成的功能是从代表该字符串的第一个地址开始遍历,直到遇到结束符NULL。返回的长度大小不包括NULL。

  具体内容参考XXX一文。(待写)

3、明显常量定义格式

 #define NAME value 

 

4、printf()的使用格式

 printf(Control-string, item1, item2, ...) 

控制字符串就是双引号内的语句

"-"修饰符使文本左对齐输出

 

5、scanf()的返回值

scanf()函数返回成功读入的项目的个数。如果没有读取任何项目,返回值0;检测到文件结尾,返回EOF(一般EOF的值定为-1)。

 

6、printf()和scanf()的*修饰符

在printf()中,可以在字段宽度部分使用*代替数字,但也必须使用一个参数。

在scanf()中,它使函数跳过相应的输入项目。

 

空白字符:制表符、空格和换行符

 

catch22(但是跳过catch)

1 int b;
2 scanf("%*[^0-9]%d",&b);

 

7、编程练习

1、编写一个程序,要求输入名字和姓氏,然后以“名字,姓氏”的格式打印。

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5      char surname[20],firstname[20];
 6      printf("Please input your firstname and surname:");
 7      scanf("%s",firstname);
 8      scanf("%s",surname);
 9      printf("You are %s,%s.\n",firstname,surname);
10      return(0);
11 }

2、编写一个程序,要求输入名字,并执行以下操作:

    a.把名字引在双引号中打印出来。

    b.在宽度为20个字符的字段内打印名字,并且整个字段引在引号内。

    c. 在宽度为20个字符的字段的左端打印名字,并且整个字段引在引号内。

    d.在比名字宽3个字符的字段内打印它。

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main(void)
 5 {
 6      char name[20];
 7      int width;
 8      printf("Please input your name:");
 9      scanf("%s",name);
10      printf("A:\"%s\"\n",name);
11      printf("B:\"%20s\"\n",name);
12      printf("C:\"%-20s\"\n",name);
13      width=strlen(name)+3;
14      printf("D:\"%*s\"\n",width,name);//*对应width
15      return(0);
16 }

3、编写一个程序,读取一个浮点数,并且首先以小数点记数法,然后以指数记数法打印之。输出使用下列形式(在指数位置显示的数字的位数可能会随系统而不同):

    a. The input is 21.3 or 2.1e+001.

    b. The input is +21.290 or 2.129E+001.

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5      float a;
 6      printf("Please input a float:");
 7      scanf("%f",&a);
 8      printf("a.The input is %.1f or %.1e\n",a,a);
 9      printf("b.The input is %+.3f or %.3E\n",a,a);
10      return(0);
11 }

4、编写—个程序,要求输入身高(以英寸为单位)和名字,然后以如下形式显示:

       Dabney, you are 6.208 feet tall

  使用float类型,使用/作为除号。如果您愿意,可以要求以厘米为单位输入身高,并以米为单位进行显示。

 

 1 #include<stdio.h>
 2 
 3 int main(void)
 4 {
 5      float height;
 6      char name[20];
 7      printf("Please input your height by inches:");
 8      scanf("%f",&height);
 9      printf("Please input your name:");
10      scanf("%s",name);
11      printf("%s,you are %f feet tall\n",name,height/12);
12      return(0);
13 }

5、编写一个程序,首先要求用户输入名字,然后要求用户输入姓氏。在一行打印输入的姓名,在下行打印每个名字中字母的个数。把字母个数与相应名字的结尾对齐,如下所示:

Melissa Honeybee

        7             8

然后打印相同的信息,但是字母个数与相应单词的开始对齐。

 1 #include<stdio.h>
 2 #include<string.h>
 3 
 4 int main(void)
 5 {
 6      char surname[20],firstname[20];
 7      printf("Please input your firstname and surname:");
 8      scanf("%s",firstname);
 9      scanf("%s",surname);
10      printf("%s %s\n",firstname,surname);
11      printf("%*d %*d\n",strlen(firstname),strlen(firstname),strlen(surname),strlen(surname));//*对应宽度变量
12      return(0);
13 }

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 #include<stdio.h>
 2 #include<float.h>
 3 
 4 int main(void)
 5 {
 6      double a=1.0/3.0;
 7      float b=1.0/3.0;
 8      printf("double a=1.0/3.0:\n");
 9      printf("%.4e\n",a);
10      printf("%.12e\n",a);
11      printf("%.16e\n\n",a);
12      printf("float b=1.0/3.0:\n");
13      printf("%.4f\n",b);
14      printf("%.12f\n",b);
15      printf("%.16f\n\n",b);
16      printf("FLT_DIG:%d\n",FLT_DIG);
17      printf("DBL_DIG:%d\n",DBL_DIG);
18      return(0);
19 }

7、编写一个程序,要求用户输入行驶的英里数和消耗汽油的加仑数。接着应该计算和显示消耗每加仑汽油行驶的英里数,显示方式是在小数点右侧显示一个数字。然后,根据l加仑约等于3.785升,1英里约等于1.609公里的规则,它应该把每加仑英里数转换成每100公里的升数(欧洲通用的燃料消耗表示法),并显示结果,显示方式是在小数点右侧显示一个数字(请注意,美国方案测量每单位距离消耗的燃料数,而欧洲方案测量每单位燃料的行驶距离)。用符号常量表示两个转换系数(使用const或#define)。

 1 #include<stdio.h>
 2 #define GALLON 3.785  //1 gallon = 2.785 litre
 3 #define MILE 1.609   //1 mile = 1.609 kilometer
 4 
 5 int main(void)
 6 {
 7      float mile,gallon;
 8      printf("Please input miles and gallons:");
 9      scanf("%f %f",&mile,&gallon);
10      printf("Miles per gallon:%.1f\n",mile/gallon);
11      printf("Litres per 100 kilometre:%.1f\n",gallon*GALLON/(100*mile*MILE));
12      return(0);
13 }

 

转载于:https://www.cnblogs.com/cxyfreedom/p/3671085.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值