第
Download
1 / 53

第 2 章 C 语言的基本知识 - PowerPoint PPT Presentation


  • 155 Views
  • Uploaded on

第 2 章 C 语言的基本知识. 2.1 字符集和标识符 2.1.1 字符集 字符集是高级语言的编译系统所能识别的字母、数字和特殊符号。 C 语言的字符集包括: ( 1 )大小写英文字母; ( 2 )数字; ( 3 )运算符: + - * / % > < = & | ? ^ ~ ( 4 )括号 : ( ) { } [ ] ( 5 )标点符号:’ “ : ; ( 6 )特殊符号: \ _ $ # ( 7 )空白符:空格符、换行符、制表符. 2.1.2 标识符.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '第 2 章 C 语言的基本知识' - cecily


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
2章 C语言的基本知识

2.1 字符集和标识符

2.1.1 字符集

字符集是高级语言的编译系统所能识别的字母、数字和特殊符号。

C语言的字符集包括:

(1)大小写英文字母;

(2)数字;

(3)运算符:+ - * / % > < = & | ? ^ ~

(4)括号: ( ) { } [ ]

(5)标点符号:’ “ : ;

(6)特殊符号:\ _ $ #

(7)空白符:空格符、换行符、制表符


2 1 2
2.1.2 标识符

标识符  由字母、数字、下划线组成且由字母或下划线开头的字符串。

C语言的标识符有:

关键字:保留字,C编译程序预先登录的标识符,表示固定含义。

特定字:具有特殊含义的标识符,如:include、define等

用户自定义字:用户按语法规则定义的标识符


用户自定义标识符使用时应注意:

(1)可用来命名变量及作为常量名、函数名、类型名、文件名等,一个程序内不得有重复名。

如: _sum, sum, student_name, price等

(2) 大小写代表不同的意义;

(3)需注意标识符长度,视不同系统而定。

设允许8个字符。 则: student_ name、student_ number

为同一名字。

(4)避免使用易混淆的字符,如1和l、0和o等;

(5)标识符最好“见名知义”


§2.2 常量与变量

2.2.1变量

  • 变量:程序执行过程中其值可以改变的量

  • 变量有两个要素:变量名与变量值

  • 变量名:

    用标识符命名,大小写敏感,不能使用关键字

    命名原则:

    • 见名知意: name/xm(姓名)、salary/gz(工资)

    • 不宜混淆 如l与I, o与0

  • 例:判断下列标识符号合法性

  • sum Sum M.D.John day Date 3days

  • student_name #33 lotus_1_2_3

  • char a>b _above $123

M.D.John

3days

#33

char

a>b

$123


学习要点: 记住表示不同数据类型的关键字和它所分配得到的字节数


C其实定义一个变量就是请求分配一片存储区域(如同一个容器),并给这片存储区起一个名字语言中, 变量须先定义,后使用

如: int student

student=30;

则若写成student=30, 则未定义, 编译时指出其错。

一旦变量被定义,即可在编译时为其分配相应数量的单元。

一旦变量被定义, 其类型便确定。则可检查其运算的合法性。

如: a % b 表示a整除以b的余,则a,b必须为整型量。


2.2.2其实定义一个变量就是请求分配一片存储区域(如同一个容器),并给这片存储区起一个名字常量和符号常量

常量 程序运行过程中不能被改变的量。

一般的数据显式写法均表示常量。

如程序中:

20  整型常量

15.8  实型常量

'a'  字符常量


还可用一个符号表示一个常量 其实定义一个变量就是请求分配一片存储区域(如同一个容器),并给这片存储区起一个名字 符号常量

定义格式: #define 标识符 常量

例2.1: #define PRICE 30

main ( )

{

int num, total;

num=10;

total=num*PRICE;

printf("total=%d",total);

}


#define PRICE 30其实定义一个变量就是请求分配一片存储区域(如同一个容器),并给这片存储区起一个名字

符号常量(一般用大写,以区分变量)

再如: =3.1415629

#define PAI 3.1415629

优点:一改全改


2.3 C其实定义一个变量就是请求分配一片存储区域(如同一个容器),并给这片存储区起一个名字语言数据类型

§2.3.1 数据类型

著名计算机科学家沃思提出:

程序=数据结构+算法


一个例子:以考生各科成绩及总分排队问题为列。

 成绩的存放 ––– 以数组形式

 排队方法 –––– 算法

所以,存放数据的方式直接反映了一种语言的数据表达能力。

数据的存储方式又称之为:数据类型。


前面已述 一个例子:以考生各科成绩及总分排队问题为列。. C数据类型丰富,分为:

整型

字符型

基本类型

单精度

实型

双精度

枚举

数组

构造类型

数据类型决定:

1. 数据占内存字节数

2. 数据取值范围

结构体

指针类型

共用体

空类型

数据有常量、变量之分,均为其中一种类型。

本章先学习前三种基本类型。


§2.4 一个例子:以考生各科成绩及总分排队问题为列。整型数据

2.4.1 整型常量

整型常量 整型常数

C语言提供了三种形式

 十进制

如: 256, 308, -120等


一个例子:以考生各科成绩及总分排队问题为列。 八进制

以数字0开头表示的整数

例:0235, 0146 -012等.

0235=2×82+3×8+5=15710

0146=1×82+4×8+6=10210

-012=-(1×8+2)=-1010

十六进制

以"0x"开头的整型数

如: 0x16, 0x28


2.4.2 一个例子:以考生各科成绩及总分排队问题为列。整型变量

一、分类:

分为四种:基本型、短整型、长整型、无符号型

1.基本型:

用"int"定义

2.短整型:

用"short int"或 "short"定义

3.长整型:

用"long "或 "long int "定义


4. 一个例子:以考生各科成绩及总分排队问题为列。无符号型:

不存放符号,则不带符号数.

(1)无符号基本型:用unsigned int或unsigned定义;

(2)无符号短整型:用unsigned short定义;

(3)无符号长整型:用unsigned long定义。

上述各种类型所占内存单元数及取值范围视不同机器而不同。


一个例子:以考生各科成绩及总分排队问题为列。2-1 带限定词后不同类型整数的长度和范围(带方括号部分可以省略)

注意:不同版本的C,类型长度不一定完全相同。


二、定义方法 一个例子:以考生各科成绩及总分排队问题为列。

整型变量分别以下列方式定义

1.基本整型:

int a, b, c;

2.短整型

short int 或 short a, b, c;

3.长整型

long int 或 long a, b, c;


4. 一个例子:以考生各科成绩及总分排队问题为列。无符号型

unsigned a, b, c;

unsigned short a, b, c;

unsigned long a, b, c;

例2-2: main ( )

{int a, b, c, d; /*指定a, b, c, d为整型变量*/

unsigned u; /*指定u为无符号整型变量*/

a=12; b= –24; u=10;


c=a+u; d=b+u; 一个例子:以考生各科成绩及总分排队问题为列。

printf("a+u=%d, b+u=%d\n",c,d);

}

运行结果为

a+u=22, b+u= –14

由此看到: 不同类型的整型数据可进行算术运算。


三、关于整型常量 一个例子:以考生各科成绩及总分排队问题为列。

程序中出现的整型常数, 系统按以下规则分配变量(内存单元)或赋值给相应变量

1.当常数(量)在 – 32768~32767之间,则可赋给int, long int 变量。

2.若超越,而在–2147483648~2147483647之间,则可赋给 long int 变量。


3. 一个例子:以考生各科成绩及总分排队问题为列。若int, short int 长度相同,则二者皆可赋值。

4.一个非负整数<32768 则可赋给 unsigned int。

5.一个常数后加 'l',或'L',表示长整数. 如123l. 主要用于函数调用时形、实参数传递。


四 数据的溢出 一个例子:以考生各科成绩及总分排队问题为列。

在 c中一个int型变量的最大允许值为32767,如果再加1,会出现什么情况?

例2-3: 整型数据的溢出。

main()

{

int a, b;

a=32767;

b=a+1;

printf("%d,%d“, a, b);

}

运行结果为

32767,-32768


2.4.3 一个例子:以考生各科成绩及总分排队问题为列。用printf显示整型数据

  • printf函数的功能是按照指定的格式显示数据。

  • 为给要显示的数据指定格式需要用转换说明符%和转换字符,根据需要转换字符有不同,显示整型数据的转换字符有:d、o、x、u等,分别表示:

    %d:表示把数据按十进制整数输出;

    %o:表示把数据按八进制整数输出;

    %x:表示把数据按十六进制整数输出;

    %u:表示把数据按无符号整数输出。

    如下例:

函数回顾


2.4.3 一个例子:以考生各科成绩及总分排队问题为列。用printf显示整型数据(续)

例2-4:将整型变量按不同进制输出

#include “stdio.h”

void main()

{

int x,y,z;

x=129,y=0127,z=0x128;

printf(“%d,%d,%d\n”,x,y,z);

printf(“%o,%o,%o\n”,x,y,z);

printf(“%x,%x,%x\n”,x,y,z);

}

运行结果:

129,87,296

201,127,450

81,57,128


2.4.3 一个例子:以考生各科成绩及总分排队问题为列。用printf显示整型数据(续)

(1)d格式符,有以下几种用法:

  • %d:按整型数据的实际长度输出;

  • %md:m为指定的输出字段的宽度。

    若数据位数小于m,则左端补空格;

    若数据位数大于m,则按实际位数输出。

  • %ld,输出长整型数据,也可指定宽度。


2.4.3 一个例子:以考生各科成绩及总分排队问题为列。用printf显示整型数据(续)

例2-5:d格式符的不同使用方法。

#include “stdio.h”

void main()

{

int a=123,b=12345;

printf(“%4d,%4d \n”,a,b);

long c=135870;

printf(“%ld”,c);

printf(“%8ld”,c);

}

运行结果:


2.4.3 一个例子:以考生各科成绩及总分排队问题为列。用printf显示整型数据(续)

(2)o格式符,以八进制形式输出整数,不带符 号,即将符号位也一起作为八进制数的一部分输出。

(3)x格式符,以十六进制形式输出整数,也不带符号位。

(4)u格式符,用来输出unsigned型数据,以十进制形式输出。也可用来输出有符号的int型。

(5)在%后面加符号“-”,数据显示左对齐,否则右对齐。


2.4.3 一个例子:以考生各科成绩及总分排队问题为列。用printf显示整型数据(续)

例2-6:o、x、u格式符的使用

  • #include "stdio.h"

  • void main()

  • {

  • int a=-1;

  • printf("%x,%o,%d \n",a,a,a);

  • unsigned int b=65535;

  • int c=-2;

  • printf("%d,%o,%x,%u \n",b,b,b,b);

  • printf("%d,%o,%x,%u \n",c,c,c,c);

  • /* printf("%d",8*sizeof(int)); */

  • }

运行结果:


2.4.4 一个例子:以考生各科成绩及总分排队问题为列。用scanf输入整型数据

scanf 函数(格式输入函数)

  • scanf(格式说明,地址表列)

地址表列是用地址运算符”&”取变量的地址

例2-7:scanf输入整数

main()

{ int a,b,c;

scanf(“%d,%d”,&a,&b);

printf(“a=%d,b=%d”,a,b);

输入:10,15

输出:a=10,b=15

a

10

b

15


2.4.4 一个例子:以考生各科成绩及总分排队问题为列。用scanf输入整型数据(续)

  • 使用scanf函数,要注意:

  • 一个输入域就是一个连续的非空白字符的数字串。

  • 格式信息中除了%开始的转换说明符,还可以有普通字符,只是这些字符不是显示在屏幕上,而是要求用户在输入数据时,要在相应的位置输入相同的字符(除空格、tab或换行符)。


  • 如: 一个例子:以考生各科成绩及总分排队问题为列。int a,b,c;

  • scanf(“%d%d%d”,&a,&b,&c);

  • 输入形式:10 17 181

  • int a,b,c;

  • scanf(“%d,%d,%d\n”,&a,&b,&c);

  • 输入形式: 10,11,12

scanf(“a=%3db=%3oc=%x”,&a,&b,&c);

输入形式:a=123b=456c=10


§2.5 一个例子:以考生各科成绩及总分排队问题为列。实型数据

2.5.1 实型常量

有二种表示形式

1.十进制形式

如: 0.126, 523.64等

2.指数形式

对于较大或较小的数,可用指数形式

0.0000126 1.26E –5

1260000 1.26E+6 或1.26E6

' E ', 'e ' 均可.

(注:e或E之前必须有数字,且后指数必须为整数)

例如:3.5E-5 2e3

错误:E2 3.6e3.5 .e6 e


2.5.2 一个例子:以考生各科成绩及总分排队问题为列。实型变量

分为单精度型与双精度型.

分别为

float x, y, z; (单精度)

double a, b, c; (双精度)

有的版本还支持: long double

一般地: 单精度占4字节内存单元;

双精度占8字节内存单元.


注意 一个例子:以考生各科成绩及总分排队问题为列。:不同机器对实型变量的有效数字长度的限制

如: pc机, 单精度一般为7位, 双精度15位

于是: float a;

a=123456.789

则实际赋值a123456.7

单精度数值: 10–38~1038

双精度数值: 10–308~10308


2.5.3 一个例子:以考生各科成绩及总分排队问题为列。用%f格式符以小数形式输出实数

(1) %f :不指定字段宽度,由系统自动指定,

使整数部分全部如数输出,并输出6位小数。

注意float型和double型数据的有效位数,

如:float x=123456.123;

printf(“%f”,x);

输出结果:123456.125000

%lf:输出双精度类型

如:double y=12345678.98765432

printf(“%lf”,y);

输出结果:12345678.987654


main() 一个例子:以考生各科成绩及总分排队问题为列。

{ double x,y;

x=1111111111111.111111111;

y=1111111111111.111111111;

printf(“%f”,x+y);

}

2222222222222.222170


如: 一个例子:以考生各科成绩及总分排队问题为列。float f=123.456;

printf(“%10.2f ,%-10.2f”,f);

输出结果: 123.46,123.46

(2) %m.nf :指定输出的数据共占m列,其中有n

位小数。若数据长度小于m,则左端补空格。

(3)%–m.nf : 与%m.nf 基本相同,只是使输出

的数值向左端靠,右端补空格。


2.5.3 一个例子:以考生各科成绩及总分排队问题为列。用%e格式符以指数形式输出实数

(1) %e

如: printf(“%e”,123.456);

输出结果: 1.234560e+002

6位

3位

一般共占13列宽度

(2) % m.ne和 %–m.ne: m、n和“–”字符含义与

前相同。此处n指数据的数字部分(又称尾数)

的小数位数。


如: 一个例子:以考生各科成绩及总分排队问题为列。f=123.468;

printf(“%f , %e , %g”, f , f, f);

输出如下:

123.468000 , 1.234680e+002 , 123.468

如:f=123.468;

printf(“%f , %e , %g”, f , f, f);

输出如下:

123.468000 , 1.234680e+002 , 123.468

10列

10列

13列

%g格式符——用来输出实数,它根据数值的大小,自动选f格式或e格式(选择输出时占宽度较小的一种),且不输出无意义的零。


转义字符及其含义: 一个例子:以考生各科成绩及总分排队问题为列。

转义字符

含义

转义字符

含义

\t

\n

换行

水平制表

垂直制表

\b

退格

\v

\r

回车

\f

换页

\a

响铃

\\

反斜线

\‘

单引号

\“

双引号

<

2位16进制数代表的字符

\ddd

3位8进制数代表的字符

\xhh

§2.6 字符型数据

2.6.1 字符常量

字符常量:用单引号括起来的一个字符 ‘a’,’b’

字符常量在内存中以该字符的ASCII码值存储.

转义字符:非图形字符,如退格、换行等,用反斜线后面跟一个字符或一个代码值表示。

例 转义字符举例

main()

{

printf("How are you \n");

printf("\\C Program\\\n");

printf("Turbo \'C\'");

}

如 ‘a’ ‘A’ ‘?’ ‘\n’ ‘\101’

如 ‘A’——65, ‘a’——97,

‘0’——48 , ‘\n’——10

运行结果:(屏幕显示)

How are you

\C Program\

Turbo ‘C’

如 ‘\101’ -----------‘A’ ‘\012’ -----------’\n’

‘\376’ -----------’’ ‘\x61’ -----------’a’

‘\60’ -----------’0’ ‘\483’ ----------()

例:

‘A’-------’\101’-------’\x41’--------65


2.6.2 一个例子:以考生各科成绩及总分排队问题为列。字符变量

用来存放一个字符的变量.

其定义方式为:

char c1, c2;

c1=' a ';

c2= ' b ';

字符变量只占一个字节单元。其对应单元存放的是其ASCII码,即ASCII码的二进制形式。

由此: 字符变量中的数据是一整型数据。输出时既可输出字符,亦可输出整数,且字符变量可作整数运算。


看如下几个例子 一个例子:以考生各科成绩及总分排队问题为列。:

例1: main ( )

{ char c1, c2;

c1=97;

c2=98;

printf ("%c %c", c1, c2)

}

用转换说明符%c可以输出单个字符

运行结果 a b


一个例子:以考生各科成绩及总分排队问题为列。2: main ( )

{ char c1, c2;

c1= ' a ';

c2=' b ';

c1=c1– 32; c2=c2– 32;

printf ("%c %c", c1, c2)

}

运行结果 A B


一个例子:以考生各科成绩及总分排队问题为列。3: main ( )

{ int i;

char c;

i= ' a ';

c=97;

printf ("%c, %d \n", c, c);

printf ("%c, %d \n", i, i);

}

说明:一个整数,只要它的值在0~255范围内,也可以用字符形式输出,在输出前,将该整数转换成相应的ASCII字符;反之,一个字符数据也可以用整数形式输出。

运行结果: a , 97

a , 97


2.6.3 一个例子:以考生各科成绩及总分排队问题为列。用scanf输入字符

使用%c作转换说明符输入字符时,scanf不会跳过空格、tab或换行,而是直接把下一个字符输入给参数,不论它是什么。

例:scanf(“%d%c”,&i,&m);

若从键盘输入29 w,则m的结果不是字符w,而是空格。

空格

解决方法是:scanf(“%d %c”,&i,&m);

空格


1 getchar

例: 一个例子:以考生各科成绩及总分排队问题为列。

#include”stdio.h”

void main()

{ char c;

c=getchar();

printf(”%c”,c);

}

1. getchar函数

2.6.4 用getchar输入字符和用putchar输出字符

功能∶从终端输入一个字符。

格式: getchar( ) ——没有参数

必须有预编译命令∶#include <stdio.h>


2. putchar 一个例子:以考生各科成绩及总分排队问题为列。函数

功能:在屏幕上输出一个字符)

格式: putchar( 参数) ——需将输出字符作为参数

  • 例:

    • #include <stdio.h>

    • void main( )

    • {

    • char a,b,c;

    • a=‘B’; b=‘O’; c=‘Y’;

    • putchar(a);

    • putchar(b);

    • putchar(c);

    • putchar(‘\’’);

    • }

输出结果: BOY’


  • 说明: 一个例子:以考生各科成绩及总分排队问题为列。

    getchar()和putchar()函数的返回值均为整型,返回值为字符的ASCII码值。

    例:输入一个字符,按字符原封不动输出。

  • #include”stdio.h”

  • void main()

  • { int c,i;

  • c=getchar();

  • i=putchar(c);

  • printf("%d",i);

  • }


2.6.5 一个例子:以考生各科成绩及总分排队问题为列。字符串常量

用双引号括起来的字符串。

例: "Good Morning! "

注意'A' 与"A"是不同

字符串存放时,在最后加上"/ 0" –– 空字符。

于是:

Good Morning ! /0


"A " 一个例子:以考生各科成绩及总分排队问题为列。

A /0

但'A'

A

注意:

1.字符串长度=实际字符个数+1,但最后\0不输出.

printf (" Good Morning! ")

此处不写 /0, 自动加上。

2.单个字符的字符串不能赋给字符变量。

例: char c;

c= " a "; 是错误的。


2.6.6 一个例子:以考生各科成绩及总分排队问题为列。用%s格式符输出字符串

(1) %s :按原长度输出字符串。

如: printf(“%s”,“CHINA”)

输出结果:CHINA

(2) %ms :输出的字符串占m列,如字符串本

身长度大于m,则突破m的限制,将字符串

全部输出,若串长小于m,则左补空格。

(3) %–ms :如果串长小于m,则在m列范围内,

字符串向左靠,右补空格。


如: 一个例子:以考生各科成绩及总分排队问题为列。printf(“%3s,%7.2s,%.4s,%-5.3s\n”,

“CHINA”, “CHINA” ,“CHINA”, “CHINA”);

输出结果:CHINA, CH,CHIN, CHI

(4) %m.ns :输出占m列,但只取字符串中左端

n个字符。输出在列的右侧,左补空格。如

果n>m,则自动取值,即保证n个字符正常输出。

(5) %–m.ns , 其中m、n含义同上,n个字符输出

在m列范围的左侧,右补空格。


ad