您的位置:首页 > 编程语言 > C语言/C++

C Primer Plus学习笔记----第四章字符串和格式化输入/输出

2017-06-19 19:12 435 查看

41. 前导程序

#include <stdio.h>

#include <stdlib.h>

#include <string.h>      //提供strlen()函数的原型

#define DENSITY 62.4     //人体密度(单位:磅/立方英尺)

int main()

{

    float weight , volume;

    int size , letters;

    char name[40];       //name是一个可容纳40个字符的数组

    printf("Hi ! What's your first name?\n");

    scanf("%s",name);

    printf("%s,what's your weight in pounds?\n");

    scanf("%f",&weight);

    size = sizeof name;

    letters = strlen(name);

    volume = weight/DENSITY;

    printf("Well,%s,your volume is %2.2f cubic feet.\n",name ,volume);

    printf("Also,your first name has %d letters,\n",letters);

    printf("and we have %d byte to store it.\n");

    return 0;

}

4.2 字符串简介

字符串是一个或多个字符的序列。

1.char类型数组和null字符
C语言没有专门用于存储字符串的变量,字符串都被储存在char类型的数组中,数组由连续的存储单元组成。
字符串数组中末尾位置字符为\0,这是空字符,C语言用它标记字符串的结束。
因此,前导程序中有40个存储单元的字符串,只能储存39个字符,剩下一个字节留给空字符。

2.使用字符串
%s告诉printf()打印一个字符串。
你不用亲自把空字符放入字符串末尾,scanf()读取输入时已经完成这项工作。
应该注意scanf()只会读取字符串中的一个单词,而不是一整句,当它遇到第一个空白(空格、制表符、换行符)时就不在读取输入。
字符串常量“x”和字符常量‘x’不同,区别是是否末尾有空字符。

3.strlen()函数
上一章中提到了sizeof运算符,它以字节为单位给出对象的大小。
下面来看一段代码:



string.h头文件中包含多个与字符串相关的函数原型,包括strlen()函数。
sizeof运算符报告,name数组有40个存储单元,但只有前4个单元用来储存eric,所以strlen()得出的结果是4.
name数组的第5个单元储存空字符,strlen()并未将其计入。
对于PRAISE,用strlen()得出的也是字符串中的字符数(包括空格和标点符号),但是sizeof()运算符给出的数更大,
因为它把字符串末尾不可见得空字符也计算在内。改程序并未明确告诉计算机要给字符串预留多少空间,所以它必须计算
双引号内的字符数。
另外还有一点,sizeof是否使用圆括号取决于运算对象是类型还是特定变量,尽管如此,还是建议所有情况都使用圆括号。

4.3 常量和C预处理器

1.有时在程序中需要使用常量,例如:3
circumference = 3.1415926 * diameter;
3.1415926代表pi(π)
使用符号常量比数字常量要好,首先符号常量表达的信息更清楚,其次符号常量方便修改代码。
#define PI 3.1415926 
编译程序时,程序中所有的PI都会 替换为3.1415926,这一过程被称为编译时替换,通常这样生命的常量也叫作明示常量。
另外,还有一个不常用的命名约定, 即在名称前带c_或k_前缀来表示常量。

2.const限定符
C90标准新增了const关键字,用于限定一个变量为只读(在C语言中,用const类型限定符声明的是变量,不是常量)。
const int MONTHS = 12;   //MONTHS在程序中不可修改,值为12
这使得MONTHS成为一个只读值,也就是说在使用MONTHS时,只可打印,不可修改。

4.4 printf() 和 scanf()

printf()函数和scanf()函数能让用户与程序交流,它们是输入/输出函数,简称I/O函数。

1.printf()函数

请求printf()函数打印数据的指令要与待打印数据的类型相匹配,例如打印整数时用%d,打印字符时用%c。
如果要打印一个%符号,则使用%%即可。
printf()有一个返回值,它返回打印字符的个数。
下面这段代码会产生报错:
printf("The printf() function printed %d
characters.\n");
字符串常量中有非法字符。在字符串中,可以使用\n来表示换行字符,但是不能通过按下Enter键产生实际的换行符。
此部分书本上其余内容较多较杂,在这里不作详述。

2.scanf()函数

C库包含了多个输入函数,scanf()是最通用的一个,因为它可以读取不同格式的数据。
和printf()类似,scanf()也使用格式字符串和 参数列表。区别在于printf()函数使用变量、常量和表达式,
而scanf()函数使用指向变量的指针。
scanf()函数有一个返回值,返回读取的项数,如果没有读取任何项,则返回0.当scanf()检测到“文件结尾”时,会返回EOF。

4.5 编程练习

1.编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。



2.编写一个程序,提示用户输入旅行的历程和消耗的汽油量。然后计算并显示消耗每加仑汽油行驶的英里数,显示小数点后1位数字。接下来,使用1加仑
大约3.785升,1英里大约1.609千米,把单位是英里/加仑转换为升/100公里,并显示结果,显示小数点后1位数字。使用#define创建符号常量或使用const
限定符创建变量来表示两个转换系数。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言
相关文章推荐