C语言-学习笔记3

目录

3.1 C语言的基本数据类型简介

 3.2 标识符,常量和变量

1、标识符

1)、标识符的概念

2)、标识符的种类

2、常量

1)、数值常量

2)、字符常量 

3、变量

1)、变量的定义

2)、变量的说明

3.3 基本数据类型

1、整型

1)、整型变量的定义

2)、整型数的存储形式

3) 、整型变量赋值及其说明

2 、实型

1)、实型变量的定义

2)、实型数据的存储形式

 3) 、实型变量赋值及其说明

3 、字符型

1)、字符型变量的定义

2)、字符变量的赋值及字符常数表示

3.4 数据的输入与输出

1、字符输出函数

2、字符输入函数

3、格式输出函数

1)、整型格式说明符

2)、实型格式说明符

3)、字符型格式说明符

4)、字符串格式说明符

4、格式输入函数

1)、地址列表

2)、格式控制说明


3.1 C语言的基本数据类型简介

C 语言的数据类型可以分为四大类:基本类型,构造类型,指针类型及空类型。

 3.2 标识符,常量和变量

1、标识符

1)、标识符的概念

标识符是用来标识源程序中某个对象的名字的,这些对象可以是语句、数据类型、函数、变量、常量、数组等。标识符由字母,数字,下划线组成,且第一个位置只能取字母或下划线。

标识符在使用时要注意以下规则:

(1)标识符必须由字母(a~z,A~Z)或下划线开头。

(2)标识符的其他部分可以用字母,下划线或数字(0~9)组成。

(3)大小写字母表示不同意义,即代表不同的标识符。

(4)在不同的系统中标识符字符的有效位数不同。

(5)标识符不能使用Turbo C2.0的关键字。

2)、标识符的种类

(1)关键字:所谓关键字就是已被Turbo C 2.0 本身使用,不能作其他用途使用的字。系统保留的关键字有特定的含义,不能用作变量名,函数名等。C语言有以下32个关键字。

auto double int struct break else
long switch case enum register typedef
char extern return union const float
short unsigned continue for signed void
default goto sizeof valatile do if
while static

(2)编译预处理的命令单词:如#include,#define等。

(3) 用户标识符:用户自己定义的变量名,常量名和函数名等。

2、常量

常量是指程序运行过程中不能变化的量,分为数值常量和字符常量两种。

1)、数值常量

(1)整型常量(整数)

如207,30和181都是整型常量。整型常量有以下三种形式:十进制整数,八进制整数,十六进制整数。

(2)实型常量(实数)

实型常量表示的是通常数学中表示的实数,可以表示带小数点的数。有小数形式和指数形式两种形式。

小数的两种形式:①小数形式  如 2.14   ②指数形式  如 2.31e10表示2.31✕e¹⁰

小数的两种形式:①单精度    ②双精度  双精度比单精度有效位数多。

常量的定义形式:

#define 常量名 常数值

例如:

#define PI 3.1415926

2)、字符常量 

字符常量是由字符构成,如 'A' , 'X' 和 'a' 等常见的字符常量。除了熟悉的字符常量外,Turbo C 还定义了一些专门的控制字符。

\n 换行
\t 横向跳格
\v 纵向跳格
\b 退格
\r 回车
\f 走纸换页
\\ 反斜杠字符
\' 单引号字符
\? 问号字符
\" 双引号字符
\0
\ddd 1~3位八进制数所代表的字符
\xhh 1~2位十六进制数代表的字符

3、变量

变量是程序在运行中可以改变的量。每个变量都有名字,在内存中占一定的存储空间,用来存放数据。

1)、变量的定义

Turbo C 2.0 规定所有变量在使用之前都必须加以说明。一条变量说明语句由数据类型和其后的一个或多个变量名组成。变量定义的形式如下:

类型<变量名>;

例如: 

int a,b,c;           //说明三个变量a,b,c都是整型变量
unsigned long d;     //说明一个变量d是无符号长整型变量

2)、变量的说明

(1)像其他语言一样,Turbo C的变量在使用之前必须先定义其数据类型,未经定义的变量不能使用。

(2)变量的名称只能由字母,数字和下划线组成,且数字不能打头。

(3)Turbo C 程序的书写格式非常灵活,没有严格限制。

3.3 基本数据类型

Turbo C 提供以下几种基本数据类型:整型( int ),实型( float 或 double )和字符型( char)。

1、整型

整型数由整型常数和整型变量组成。

1)、整型变量的定义

整型变量定义格式:

<整数类型><变量名>;

整数类型可以按有无符号和数据长短分类:

按有无符号分:① 有符号 ②无符号

按数据长短分:①长整数  ②短整数

类型 简写 字长 说明 数的范围
signed short int short 或 int 2字节 有符号短整型数 -32768~32767
signed long int long 4字节 有符号长整型数 -2147483648~2147483647
unsigned short int unsigned int 2字节 无符号短整型数 0~65535
unsigned long int unsigned long 4字节 无符号长整型数 0~4294967295

2)、整型数的存储形式

整数存储在存储单元时,有符号(signed)和无符号(unsigned)的整型量的区别在于它们的最高位的定义不同。如果定义的是有符号的整型(signed int),C编译程序所产生的代码就设定整型数的最高位为符号位,其余位表示数值大小。如最高位为0,则该整数为正;如最高位为1,则该整数为负。例如用16位二进制表示时:

[+1]源码=0000000000000001

[-1]源码=1000000000000001

[+127]源码=0000000001111111

[-127]源码=1000000001111111

在上述几个数中左数第一位都是符号位。

大部分计算机-表示有符号数时都使用二进制补码。正数的补码,反码和源码都一样都等于源码。负数的补码是反码加1,反码是将其对应数的绝对值的源码的各位按位求反,再反码上加1得到补码。上述4个数用8位二进制表示有符号数时计算机内反码,补码值为:

[+1]源码=0000000000000001=反码=补码

[-1]源码=1000000000000001

[-1]反码=1111111111111110

[-1]补码=反码+1=1111111111111111

有符号整数对于许多运算都是很重要的。但是它所能表达的最大数的绝对值只是无符号数的一半。例如,32767 的有符号整数表示为 0111111111111111。因为有符号,最高位表示符号,所以 32767 是 int 有符号整型数的最大数。如果最高位为 1,则该数就会被当作负数一1(因为 1111111111111111 是-1 的补码)。然而,如将该数定义为无符号整型(unsigned int),那么当最高位设置为 1 时,它就变成了 65 535。

3) 、整型变量赋值及其说明

(1)可以在定义整型变量的同时给变量赋初值,称为变量的初始化。

例如

int a=3,b=100;    //a,b被定义为有符号短整型变量,并且a的初值为3,b的初值为100
unsigned long c=65535;    //c被定义为无符号长整型变量,并且c的初值为65535

(2)在赋初值时八进制数、十六进制数整型常数需要特定的符号表示。

例如

int f=022;    //f的值是八进制数22,按十进制数输出时值为18

(3)在整型常数后添加一个字母 L或 l 表示该数为长整型数,如 22L、773L等,

例如

#define G 22L      //G的值定义为长整型数22
#define H 0773L    //H的值定义为八进制的长整型数。

2 、实型

1)、实型变量的定义

实型变量的定义形式如下:

<实型><变量列表>

实型数据因小数点后的位数不同分为不同的精度。C语言中,实型类型有3种:单精度实数,双精度实数,长双精度实数。这 3 种数据类型存储在计算机内存中,占用的单元数不同,表示出来的数的精度也不同。具体内容如表所示。

类型 字长 说明 有效字数 数的范围
float 4字节 单精度实型数 6~7 -3.4✕10⁻³⁸ ~ 3.4✕10³⁸
double 8字节 双精度实型数 15~16 -1.7✕10⁻³⁰⁸~ 1.7✕10³⁰⁸
long double 16字节 长双精度实型数 18~19 -1.2✕10⁻⁴⁹³² ~ 1.2✕10⁴⁹³²

可以用以下语句定义实型变量:

float a,b;    //a,b被定义为单精度实型变量
double c;     //c被定义为双精度实型变量

2)、实型数据的存储形式

float 是单精度实数类型,字长占 4 字节,共有 32 位二进制位,数的取值范围是-3.4✕10⁻³⁸ ~ 3.4✕10³⁸ 。内存形式为以高 24位表示小数部分,最高位表示符号位;低 8 位代表指数部分。实数类型数 3.141 592 6 的存储形式如图所示。


对于 double 型数据类型,共占 64 位,有的系统中将其中的 56 位用于存放小数部分,指数部分8 位。这样存储的双精度实数类型有效位数多,可以减少数值运算误差。有一点说明:所有实型数均为有符号实型数,没有无符号实型数。

 3)、实型变量赋值及其说明

对实型变量赋初值可以在定义的同时赋值。例如:

float a=23.562

实数类型说明如下:
(1)实数类型常数只有十进制。
(2)所有实数类型常数都被默认为 double 型
(3)绝对值小于 1 的实型数,其小数点前面的 0 可以省略。如 0.22 可写为.22,
—0.0015E—3 可写为一.0015E-3。
(4)Turbo C 默认格式输出实型数时,最多只保留小数点后 6 位。

3 、字符型

1)、字符型变量的定义

字符型变量的定义形式如下:

<字符类型><变量列表>;

字符类型有两种:有符号和无符号;

例如:

char a;           //a被定义为有符号字符变量
unsigned char c;  //c被定义为无符号字符变量

 字符型数据类型

类型 字长 说明 数的范围
char 1字节 有符号字符型 -128 ~ 127
unsigned char 1字节 无符号字符型 0 ~ 255

2)、字符变量的赋值及字符常数表示

字符变量可以在定义时直接赋初值。

char a='A';   //a被定义为有符号字符变量,并且将a变量赋初值为'A',这时a变量中存储A的 ASCII 码值为十进制数 65。

在赋初值时,可直接用单引号括起来表示字符,如'a'、9'和'Z',也可用该字符的 ASCII码值表示。

char a='A';
char a= 65;

上面两个赋初值是等效的。

        C 语言允许使用的字符串常量是一对用双引号括起来的字符序列,如"Hello TurboC 2.0"。需注意 'a‘ 和 "a" 是不同的,前者是一个字符,可以赋给一个变量;后者是一个字符串,不能赋给一个字符变量  。C 规定在每一个字符串的结尾加一个字符串结束标志\0',在 C 语言中没有专门的字符串变量 。

3.4 数据的输入与输出

        输入与输出的概念是相对计算机而言的,当数据从外部设备(如键盘)送给计算机时,称为“输人”;当数据从计算机中送出到外部设备(如显示器或打印机)时,称为“输出”。
        在 C 语言中,没有提供专门的输人输出语句,输人或输出操作是通过调用输入输出库函数来实现的,如 printf()就是库函数。C语言函数库中有一批标准输入输出函数,包括 printf() , scanf() ,  putchar() , getchar() , puts() 和 gets() 等。

1、字符输出函数

函数的格式:

putchar(ch)

函数的功能:将变量 ch 中的内容以一个字符形式输出到屏幕上。其中 ch 可以是字
符型变量,也可以是整型变量,还可以是字符型常量或整型常量。

putchar()函数,不仅可以输出普通可显示的字符,还可以输出转义控制字符。如 putchar(\n); 表示输出换行符,即控制输出位置换到下一行的开头。

【例1】putchar() 函数的使用。

#include<stdio.h>
int main()
{
	char x='A',y='B';
	int z=97;
	putchar(x);
	putchar(y);
	putchar('\n');
	putchar(z);
}
//运行结果为:
AB
a

2、字符输入函数

函数的调用格式:

c=getchar()

函数的功能:接收从标准输入设备(键盘)输人的一个字符,并将该字符作为函数的值赋给变量 c。
该函数的执行是等待从键盘输入一个字符,当用户输入一个字符后,函数的值就是所输入的字符的 ASCII 码值。所以常用赋值语句的形式,将键盘输人的字符,赋给一个变量。

使用getchar()函数应注意以下两点:

(1)getchar()函数可以作为 putchar()函数的参数,如语句 putchar(getchar()); 是正确的。其功能是显示键盘输人的字符。
(2)使用 getchar()函数时,回车键也会作为输入字符的一部分。尤其在连续使用
getchar()函数时要注意回车键将会作为换行符被下一个 getchar()所接受。

 【例2】getchar() 函数的使用。

#include<stdio.h>
int main()
{
	putchar(getchar());
}
//运行结果为:
A     //输入
A

3、格式输出函数

函数的调用格式:

printf("格式控制",输入项列表);

函数的功能:按某种格式,向输出设备输出若干指定类型的数据。

printf() 函数的参数包括格式控制和输出项列表两部分。格式控制部分又可分为普通字符和格式说明两部分。

(1)普通字符,将原样式输出。例如:

printf("China");

输出结构如下: 

China

(2)格式说明部分,以%开头,以”格式说明符“结束。例如:%d,%f 等。

在 printf("sum=%d",a); 中:

sum-->普通字符

%d-->格式说明

a-->输出项列表

输出格式说明符及其含义

格式说明符 含义
d 按十进制有符号整型数输出
o 按八进制无符号整型数输出
x 按十六进制无符号整型数输出
u 按十进制无符号整型数输出
c 以字符格式输出,只输出一个字符
s 输出字符串

f

以小数形式输出单,双精度数,输出6位小数
e 以标准指数形式输出单,双精度数
g 按 f 和 e 格式中较短的一种输出
l 用于输出 long 型数据,如 %ld , %lu等
m.n 指定输出域宽及精度, m 和 n 都是正整数
- 左对齐输出数据

1)、整型格式说明符

(1)十进制形式输出
① %md:控制输出项按十进制有符号整数形式输出。m 是一个整数,用于指定输出数据的最小占位宽度,若所输出数据的位数小于 m,左端(高位)将以空格占位;若输出数据的位数大于 m,则按数据的实际宽度输出;若省略 m 则按所要输出数据的实际长度
输出。如;

#include<stdio.h>
int main()
{
	int a=123,b=123456;
	printf("a=%5d\nb=%5d",a,b);
	
}
//运行结果为:
a=  123
b=123456

② % mld:格式中的 l 符号用于输出 long 型数据,m 指定输出数据的占位宽度,long 型数不能用%d 格式输出。如:

#include<stdio.h>
int main()
{
	long a=123456;
	printf("%ld\n",a);
	printf("%9ld",a);
}
//运行结果为:
123456
   123456

③  %一md 或%一mld:格式中的一修饰符表示输出数据左对齐。当输出数据的位
数小于 m 时,数据将左对齐,右边以空格占位,如:

#include<stdio.h>
int main()
{
	int a=123;
	printf("%5d+%5d=%6d\n",a,a,a+a);
	printf("%-5d+%-5d=%-6d\n",a,a,a+a);			
}
 //运行结果为:
  123+  123=   246
123  +123  =246

④ %mu 或 %mlu:控制输出项按十进制无符号整型数输出。其中 m 和 l 的含义如前所述。


(2)八进制形式
① %mo:控制输出项按八进制整数形式输出。
② %mlo:控制输出项按八进制整数形式输出。


(3)十六进制形式
① %mx:控制输出项按十六进制整数形式脸出。
② %mlx:控制输出项按十六进制整数形式输出。

2)、实型格式说明符

用于输出单精度或双精度数的格式说明符是相同的。实型格式说明符有以下两种。
(1)%f 或 %m.nf:以小数形式输出单、双精度数据。格式中的 m 表示输出的整个数据所占的列数(注意小数点占一列),含义如前所述;n 表示输出数据的小数部分的位数,如果不指定 n,则默认输出 6 位小数。
(2)%e 或 %m.ne:以标准指数形式输出单、双精度数。m 的含义如前所述,注意此格式中,实际输出的小数部分的位数为 n一 1 位。若不指定 n ,则默认输出 5 位小数。

3)、字符型格式说明符

该格式用于输出一个字符,字符型数据的格式说明符为%c或%mc。其中 m 表示输出的单个字符占的列数,即在输出的字符前要有m一1个空格占倍。

4)、字符串格式说明符

该格式用于输出一个字符串,字符串型数据的格式说明符为 %-m.ns。格式中的 m 指输出字符串占 m 列。若要输出的字符串长度大于 m,则不受 m 限制,全部输出;若要输出的字符串长度小于 m,则左边以空格占位补齐 m 位。n 用于指定输出字符串左端截取 n 个字符。一表示当输出的字符个数小于 m 时,输出左对齐,右边以空格占位补齐 m 位。
请看下面程序段的运行结果:

#include<stdio.h>
int main()
{
	printf("%3s\n%5.2s\n%.4s\n%-5.3s\n","china","china","china","china");	
}
//运行结果为:
china
   ch
chin
chi

4、格式输入函数

函数的调用格式:

scanf("格式控制",输出项列表);

函数的功能:接收键盘输人的信息,按指定格式转换后,存放到地址列表所对应的变量中。

1)、地址列表

地址列表由若干地址组成,它们可以是变量的地址也可以是字符串的首地址。变量的地址可以通过取地址运算符 & 得到。例如,变量 a的地址表示为&a。

2)、格式控制说明

与 printf类似,格式控制说明以%开头,以格式说明符结束,中间可加入附加说明
符。

输入格式说明符及其含义

格式说明符 含义
d 输入十进制整型数
o 输入八进制整型数
x 输入十六进制整型数
c 输入一个字符
s 输入字符串

f

输入十进制的小数形式或指数形式的实数
e 输入一个实数,与 f 相同
l 用于输入 long 型数据,如 %ld , %lu ,或输入double型数据,如%lf
h 用于输入short型数据,如 %hd
m 域宽说明,是一个正整数,指出输入数据所占列数
* 表示本输入项不赋给变量

使用格式输入函数时,需要注意以下几点:

(1)当输入一串数据时,要考虑分隔各个数据。

 scanf("%d %d %d",&a,&b,&c); 执行该输入时,要连续输入3个整数,可以用以下几种分隔方法。

① 可以用空格分隔各个数。

② 可以用 Enter 键分隔。

③  可以用Tab 键分隔

④ 根据格式控制说明中指定的域宽来分隔数据

#include<stdio.h>
int main()
{
	int a,b;
	scanf("%4d%3d",&a,&b);
	printf("a=%d b=%d",a,b);	
}
//运行结果为:
1234567    //输入
a=1234 b=567

⑤ 根据格式字符的含义来分隔数据。 

#include<stdio.h>
int main()
{
	int a;
	char b;
	float c;
	scanf("%d%c%f",&a,&b,&c);
	printf("a=%d b=%c c=%f",a,b,c);	
}
//运行结果为:
123D3.12    //输入
a=123 b=D c=3.120000

 ⑥ 使用自定义的分隔符

比如逗号分隔:

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%d,%d,%d",&a,&b,&c);
	printf("a=%d b=%d c=%d",a,b,c);	
}
//运行结果为:
12,13,14    //输入
a=12 b=13 c=14

(2)附加说明符 * 号的作用是抑制输入,即用 * 说明的输入项不给任何变量。

#include<stdio.h>
int main()
{
	int a,b,c;
	scanf("%3d%*2d%2d",&a,&b,&c);
	printf("a=%d b=%d c=%d",a,b,c);	
}
//运行结果为:
1234567    //输入
a=123 b=67 c=0

猜你喜欢

转载自blog.csdn.net/m0_66411584/article/details/122782802