C Primer Plus(第六版)第三章 数据和C

这篇笔记介绍了C语言中的数据类型,包括基本数据类型如int、float、char,以及它们的变种。讲解了浮点数的表示方式,如e记数法,并展示了如何使用printf和scanf函数处理不同数据类型。还提到了位和字节的概念,以及如何通过sizeof运算符获取数据类型的字节数。最后,通过示例程序展示了整数溢出和浮点数运算的情况。
摘要由CSDN通过智能技术生成

笔记记录

1、float 类型可以储存带小数的数字。

2、printf()中使用%f来处理浮点值。%.2f中的.2用于精确控制输出,指定输出的浮点数只显示小数点后面两位。

3、scanf()函数用于读取键盘的输入。

4、有些数据类型在程序使用之前已经预先设定好了,在整个程序的运行过程中没有变化,这些称为常量(constant)。其他数据类型在程序运行期间可能会改变或被赋值,这些称为变量(variable)。

5、C语言数据类型关键字: int 、short 、long 、unsigned 、char 、float 、double 、signed、void、_Bool、_Complex、_Imaginary。用int关键字来表示基本的整数类型。后3个关键字
(long、short和unsigned)和C90新增的signed用于提供基本整数类型的变式,例如unsigned short int和long long int。char关键字用于指定字母和其他字符(如,#、$、%和*)。另外,char类型也可以表示较小的整数。float、double和long double表示带小数点的数。_Bool类型表示布
尔值(true或false),_complex和_Imaginary分别表示复数和虚数。

7、最小的存储单元是位(bit),可以储存0或1(或者说,位用于设置“开”或“关”)。虽然1位储存的信息有限,但是计算机中位的数量十分庞大。位是计算机内存的基本构建块。字节(byte)是常用的计算机存储单位。对于几乎所有的机器,1字节均为8位。即1字节 = 8 bit。

8、浮点数与数学中实数的概念差不多。2.75、3.16E7、7.00 和 2e-8都是浮点数。注意,在一个值后面加上一个小数点,该值就成为一个浮点值。所以,7是整数,7.00是浮点数。显然,书写浮点数有多种形式。稍后将详细介绍e 记数法, 这里先做简要介绍: 3.16E7 表示3.16×107(3.16 乘以10 的7次方)。其中, 107=10000000,7被称为10的指数。

9、整数与浮点数的区别:①整数没有小数部分,浮点数有小数部分。

                                         ②浮点数可以表示的范围比整数大。

10、不同的进制要使用不同的转换说明。以十进制显示数字,使用%d;以八进制显示数字,使用%o;以十六进制显示数字,使用%x。另外,要显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#X。下面举个例子,

#include <stdio.h>
int main(void)
{
    int x = 100;
    printf("dec = %d; octal = %o; hex = %x\n", x,x, x);
    printf("dec = %d; octal = %#o; hex = %#x\n", x,x, x);
    return 0;
}
//编译并运行该程序,输出如下:
dec = 100; octal = 144; hex = 64
dec = 100; octal = 0144; hex = 0x64

注意,如果要在八进制和十六进制值前显示0和0x前缀,要分别在转换说明中加入#。

11、打印unsigned int类型的值,使用%u转换说明;打印long类型的值,使用%ld转换说明。如果系统中int和long的大小相同,使用%d就行。在x和o前面可以使用l前缀,%lx表示以十六进制格式打印long类型整数,%lo表示以八进制格式打印long类型整数。注意,虽然C允许使用大写或小写的常量后缀,但是在转换说明中只能用小写。

12、char broiled; /* 声明一个char类型的变量 */,broiled = 'T'; /* 为其赋值,正确 */用单引号括起来的单个字符被称为字符常量(character constant)broiled = T; /* 错误!此时T是一个变量 */如果省略单引号,编译器认为T是一个变量名,broiled = "T"; /* 错误!此时"T"是一个字符串 */如果把
T用双引号括起来,编译器则认为"T"是一个字符串。

关键字:
基本数据类型由11个关键字组成:int、long、short、unsigned、
char、float、double、signed、_Bool、_Complex和_Imaginary。
有符号整型:
有符号整型可用于表示正整数和负整数。
int ——系统给定的基本整数类型。C语言规定int类型不小于16位。
short或short int ——最大的short类型整数小于或等于最大的int类型
整数。C语言规定short类型至少占16位。
long或long int ——该类型可表示的整数大于或等于最大的int类型
整数。C语言规定long类型至少占32位。
long long或long long int ——该类型可表示的整数大于或等于最大
的long类型整数。Long long类型至少占64位。
一般而言,long类型占用的内存比short类型大,int类型的宽度要么
和long类型相同,要么和short类型相同。例如,旧DOS系统的PC提供
16位的short和int,以及32位的long;Windows 95系统提供16位的short以
及32位的int和long。
无符号整型:
无符号整型只能用于表示零和正整数,因此无符号整型可表示的
正整数比有符号整型的大。在整型类型前加上关键字unsigned表明该类
型是无符号整型:unsignedint、unsigned long、unsigned short。单独的
unsigned相当于unsignedint。
字符类型:
可打印出来的符号(如A、&和+)都是字符。根据定义,char类型
表示一个字符要占用1字节内存。出于历史原因,1字节通常是8位,但
是如果要表示基本字符集,也可以是16位或更大。
char ——字符类型的关键字。有些编译器使用有符号的char,而有
些则使用无符号的char。在需要时,可在char前面加上关键字signed或
unsigned来指明具体使用哪一种类型。
布尔类型:
布尔值表示true和false。C语言用1表示true,0表示false。
_Bool ——布尔类型的关键字。布尔类型是无符号 int类型,所占用的空间只要能储存0或1。
实浮点类型:
实浮点类型可表示正浮点数和负浮点数。
float ——系统的基本浮点类型,可精确表示至少6位有效数字。
double ——储存浮点数的范围(可能)更大,能表示比 float 类型
更多的有效数字(至少 10位,通常会更多)和更大的指数。
long long ——储存浮点数的范围(可能)比double更大,能表示比
double更多的有效数字和更大的指数。
复数和虚数浮点数:
虚数类型是可选的类型。复数的实部和虚部类型都基于实浮点类型来构成:
float _Complex
double _Complex
long double _Complex
float _Imaginary
double _Imaginary
long long _Imaginary

 13、如何知道当前系统的指定类型的大小是多少?运行下面程序,会列出当前系统的各类型的大小。

//* typesize.c -- 打印类型大小 */
#include <stdio.h>
int main(void)
{
    /* C99为类型大小提供%zd转换说明 */
    printf("Type int has a size of %zd bytes.\n",sizeof(int));
    printf("Type char has a size of %zd bytes.\n",sizeof(char));
    printf("Type long has a size of %zd bytes.\n",sizeof(long));
    printf("Type long long has a size of %zd bytes.\n",sizeof(long long));
    printf("Type double has a size of %zd bytes.\n",sizeof(double));
    printf("Type long double has a size of %zd bytes.\n",sizeof(long double));
    return 0;
}
//sizeof是C语言的内置运算符,以字节为单位给出指定类型的大小。C99和C11提供%zd转换说明匹配sizeof的返//回类型[2]。一些不支持C99和C11的编译器可用%u或%lu代替%zd。
//该程序的输出如下:
Type int has a size of 4 bytes.
Type char has a size of 1 bytes.
Type long has a size of 8 bytes.
Type long long has a size of 8 bytes.
Type double has a size of 8 bytes.
Type long double has a size of 16 bytes.

14、C 有多种的数据类型。基本数据类型分为两大类:整数类型和浮点数类型。

最后,第三章的笔记记录就到这里了,下面进行编程练习的编写。

/*第一题*/
#include <stdio.h>
int main(void)
{
    int i = 2147483647;
    unsigned int j = 4294967295;
    printf("%d %d %d\n", i, i+1, i+2);
    printf("%u %u %u\n", j, j+1, j+2);

    float float_max = 3.40e38;
	float float_min = 3.40e-38;
    printf("%f %f\n",float_max,float_max+1);
	printf("%f %f\n",float_min,float_min-1);
    return 0;
}

//输出的结果是:
2147483647     -2147483648  -2147483647
4294967295      0             1

/*主要的区别是,在超过最大值时,unsigned int 类型的变量 j 从 0开始;而int类型的
变量i则从−2147483648开始。float的输出结果太长了这里就不放出来了,有兴趣的自己去复制运行一下看结果。

/*第二题*/
#include <stdio.h>
int main(void)
{
    char ASCII;
    printf("Please enter a character.\n");
    scanf("%d", &ASCII); /* 用户输入字符 */
    printf("The code for %d is %c.\n", ASCII, ASCII);
    return 0;
}
//运行该程序后,输出示例如下:
Please enter a character.
67
The code for 67 is C.
/*第三题*/
#include<stdio.h>
int main(void)
{
	printf("\aStartled by the sudden sound, Sally shouted,\n");
	printf("\"By the Great Pumpkin, what was that!\"");
	
	return 0;
}       
/*第四题*/
#include<stdio.h>
int main()
{
	float n;
	
	printf("Enter a floating-point values: \n");
	scanf("%f",&n);
	printf("fixed-point notation: %f\n",n);
	printf("exponential notation: %e\n",n);
	printf("p notation: %#a",n);
	
	return 0;
}      

/*输出结果如下*/
/* [user@CentOS84 test3.4]$ ./test3.4 */
Enter a floating-point values: 
64.25
fixed-point notation: 64.250000
exponential notation: 6.425000e+01
p notation: 0x1.01p+6
/*printf()函数使用%f转换说明打印十进制记数法的float和double类型
浮点数,用%e打印指数记数法的浮点数。十六进制P计数法float类型用%#a打印。
/*第五题*/
#include<stdio.h>
int main()
{
	int age;
	double times;
	printf("please input your age: \n");
	scanf("%d",&age);
    times = 3.156e7 * age;
	printf("fixed-point notation: %lf\n",times);
    printf("exponential notation: %e\n",times);
	return 0;
}

/* 输出结果[user@CentOS84 test3.4]$ ./test3.4  */
please input your age: 
23
fixed-point notation: 725880000.000000
exponential notation: 7.258800e+08
//让程序分别输出小数和指数形式
/*第六题*/
#include <stdio.h>
int main()
{
    float a = 3.0e-23; //可写可不写
    float b = 950;     //可写可不写
    float kuatuo;
    float water;
    printf("Please enter the quarts of water:");
    scanf("\n%f", &kuatuo);
    water = b * kuatuo / a;
    printf("The number of water molecules is : %e。\n", water);
    return 0;
}

*/终端命令 [user@CentOS84 test3.6]$ ./test3.6*/
//下面是输出结果
Please enter the quarts of water:3
The number of water molecules is : 9.499999e+25。
/*第七题*/
#include <stdio.h>
int main()
{
    int inch;
    float cm;
    printf("Please enter your height (inch):");
    scanf("\n%d", &inch);
    cm = inch * 2.54;
    printf("Your height is : %f cm!\n", cm);
    return 0;
}
/*下面是终端三个输出结果*/
//[user@CentOS84 test3.7]$ ./test3.7
Please enter your height (inch):160
Your height is : 406.399994 cm!

//[user@CentOS84 test3.7]$ ./test3.7
Please enter your height (inch):60
Your height is : 152.399994 cm!

//[user@CentOS84 test3.7]$ ./test3.7
Please enter your height (inch):95
Your height is : 241.300003 cm!
/*第八题*/
#include <stdio.h>
int main()
{
    float cup, pint, ounce, spoon, teaspoon;
    printf("Please enter your cup count: ");
    scanf("\n%f", &cup);
    printf("%f cup is equal to the %f pint!\n", cup, cup/2);
    printf("%f cup is equal to the %f ounce!\n", cup, cup*8);
    printf("%f cup is equal to the %f spoon!\n", cup, cup*16);
    printf("%f cup is equal to the %f teaspoon!\n", cup, cup*48);
    return 0;
}

/*输出结果*/
Please enter your cup number: 2
2.000000 cup is equal to the 1.000000 pint!
2.000000 cup is equal to the 16.000000 ounce!
2.000000 cup is equal to the 32.000000 spoon!
2.000000 cup is equal to the 96.000000 teaspoon!

//浮点类型比整数类型更加合适,如果是3杯的时候用整数类型的话就会舍掉小数了,这显然不符合等量交换的意义。

好了,第三章也完结了,说明一下,本系列的代码都是经过编译运行通过后才放出来给大家看的,所以请放心,在Linux操作系统上安装的Vscode下编写运行的!请各位发现有问题的地方请留言,烦请各位多多指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值