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个关键字。

autodoubleintstructbreakelse
longswitchcaseenumregistertypedef
charexternreturnunionconstfloat
shortunsignedcontinueforsignedvoid
defaultgotosizeofvalatiledoif
whilestatic

(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
\ddd1~3位八进制数所代表的字符
\xhh1~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 intshort 或 int2字节有符号短整型数-32768~32767
signed long intlong4字节有符号长整型数-2147483648~2147483647
unsigned short intunsigned int2字节无符号短整型数0~65535
unsigned long intunsigned long4字节无符号长整型数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 种数据类型存储在计算机内存中,占用的单元数不同,表示出来的数的精度也不同。具体内容如表所示。

类型字长说明有效字数数的范围
float4字节单精度实型数6~7-3.4✕10⁻³⁸ ~ 3.4✕10³⁸
double8字节双精度实型数15~16-1.7✕10⁻³⁰⁸~ 1.7✕10³⁰⁸
long double16字节长双精度实型数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被定义为无符号字符变量

 字符型数据类型

类型字长说明数的范围
char1字节有符号字符型-128 ~ 127
unsigned char1字节无符号字符型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

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XJSFDX_Ali

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值