第 2 章 基本数据类型与常用库函数

45
2 2 第第第第第第第第第第第 第第第第第第第第第第第

description

第 2 章 基本数据类型与常用库函数. 第 2 章 基本数据类型与常用库函数. 2.1 字符集与标识符 2.2 基本数据类型 2.3 常量与变量 2.4 输入 / 输出函数 2.5 常 用 函 数. 学习目标. 掌握标识符的命名规则 掌握标识符的命名规则 掌握各种基本类型常量的使用 学会变量的定义和初始化 理解整型数据的内存存储形式 学会使用基本数据的输入、输出函数 学会常用库函数的使用. 2.1 字符集与标识符. C 语言的字符集 大写英文字母 小写英文字母 数字: 0 1 2 3 4 5 6 7 8 9 - PowerPoint PPT Presentation

Transcript of 第 2 章 基本数据类型与常用库函数

Page 1: 第 2 章  基本数据类型与常用库函数

第第 22 章 基本数据类型章 基本数据类型与常用库函数与常用库函数

Page 2: 第 2 章  基本数据类型与常用库函数

第第 22 章 基本数据类型与常用库函数章 基本数据类型与常用库函数2.1 2.1 字符集与标识符 字符集与标识符 2.2 2.2 基本数据类型基本数据类型2.3 2.3 常量与变量常量与变量2.4 2.4 输入输入 // 输出函数输出函数2.5 2.5 常 用 函 数常 用 函 数

Page 3: 第 2 章  基本数据类型与常用库函数

学习目标学习目标掌握标识符的命名规则掌握标识符的命名规则掌握标识符的命名规则掌握标识符的命名规则掌握各种基本类型常量的使用掌握各种基本类型常量的使用学会变量的定义和初始化学会变量的定义和初始化理解整型数据的内存存储形式理解整型数据的内存存储形式学会使用基本数据的输入、输出函数学会使用基本数据的输入、输出函数学会常用库函数的使用学会常用库函数的使用

Page 4: 第 2 章  基本数据类型与常用库函数

2.1 2.1 字符集与标识符字符集与标识符CC 语言的字符集语言的字符集

大写英文字母大写英文字母

小写英文字母小写英文字母

数字:数字: 0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9其他符号:其他符号: + - * / % < > = ^ ~ | & ! # ’ “+ - * / % < > = ^ ~ | & ! # ’ “ , . : ; , . : ; (( ))

[ ] { } _ ? \ [ ] { } _ ? \ 空格空格 标识符标识符

给程序中的实体——变量、函数、数组、结构体及文件给程序中的实体——变量、函数、数组、结构体及文件起的名字。起的名字。

Page 5: 第 2 章  基本数据类型与常用库函数

关键字关键字数据类型关键字:数据类型关键字: charchar 、、 intint 、、 shortshort 、、 longlong 、、 floatfloat 、、

doubledouble 、、 signedsigned 、、 unsignedunsigned 、、 structstruct 、、 unionunion 、、 enumenum 、、voidvoid 。。

存储类型关键字:存储类型关键字: autoauto 、、 registerregister 、、 staticstatic 、、 externextern 、、 ttypedefypedef 。。

流程控制关键字:流程控制关键字: ifif 、、 elseelse 、、 switchswitch 、、 defaultdefault 、、 casecase 、、whilewhile 、、 dodo 、、 forfor 、、 breakbreak 、、 continuecontinue 、、 returnreturn 、、 gotogoto 。。

其他关键字:其他关键字: sizeofsizeof 、、 constconst 、、 volatilevolatile 。。

标识符标识符

用户标识符用户标识符

系统标识符系统标识符

符号常量名符号常量名

变量名变量名

用户函数名 等用户函数名 等

关键字关键字

系统函数名系统函数名

预编译命令预编译命令

Page 6: 第 2 章  基本数据类型与常用库函数

标识符的定义方法标识符的定义方法规定:规定: 1. 1. 只能由字母、数字、下划线三种字符组成。只能由字母、数字、下划线三种字符组成。

2 .2 . 第一个字符必须是字母或下划线。第一个字符必须是字母或下划线。

3 .C3 .C 语言中大写字母与小写字母不同。语言中大写字母与小写字母不同。

4 .4 . 标识符的命名要做到见名知义。标识符的命名要做到见名知义。

例如例如NAMENAME 、、 _sum_sum 、、 maxmax 、、 i12i12 、、 j_3j_3 、、 x1ab2x1ab2 、、 z2009_5z2009_5是合法标识符。是合法标识符。

NUM 1NUM 1 、、 3sum3sum 、、 doubledouble 、、 usa$a5 usa$a5 是非法标识符。 是非法标识符。

ABAB 、、 AbAb 、、 aBaB 、、 abab 各不相同。 各不相同。

空格

非字母或下划线开头

关键字

非字母、数字、下划线

Page 7: 第 2 章  基本数据类型与常用库函数

2.2 2.2 基本数据类型基本数据类型

数据类型数据类型

基本类型基本类型

构造类型构造类型

指针类型指针类型空类型空类型 (void)(void)

整型整型

字符型字符型 (char)(char)

实型实型 (( 浮点型浮点型 ))

枚举类型枚举类型 (enum)(enum)

数组类型数组类型结构体类型结构体类型 (struct)(struct)

共用体类型共用体类型 (union)(union)

单精度型单精度型 (float)(float)

双精度型双精度型 (double)(double)

短整型短整型 (short)(short)

整型整型 (int)(int)

长整型长整型 (long)(long)

Page 8: 第 2 章  基本数据类型与常用库函数

2.2.1 2.2.1 整型数据整型数据整型数据在内存中的存放形式整型数据在内存中的存放形式

以补码形式表示,最高位为符号位以补码形式表示,最高位为符号位 例:例: int a=-1,b=2; int a=-1,b=2;

整型数据的长度、标识符与范围整型数据的长度、标识符与范围 (VC++6.0 (VC++6.0 见表见表 2.1)2.1)

1. int ( 32 bit 1. int ( 32 bit 数的范围 数的范围 -2-231 31 ---- (2(23131-1) )-1) )

2. short int ( 16 bit 2. short int ( 16 bit 数的范围数的范围 -32768--32767 )-32768--32767 )

3. long int -23. long int -23131---- (2(23131-1)-1)

4. unsigned int 0-- (24. unsigned int 0-- (23232-1)-1)

unsigned short int 0--65535unsigned short int 0--65535

unsigned long int 0--4294967295unsigned long int 0--4294967295

测定数据类型所占存储空间长度的运算符:测定数据类型所占存储空间长度的运算符: sizeofsizeof

sizeof(sizeof( 类型标识符类型标识符 ))或或sizeof(sizeof( 变量名变量名 ))

aa 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

b 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0

例例 :int a;:int a;sizeof(int)sizeof(int)或或sizeof(a)sizeof(a)

Page 9: 第 2 章  基本数据类型与常用库函数

2.2.2 2.2.2 实型数据实型数据实型数据在内存中的存放形式实型数据在内存中的存放形式 占占 44 或或 88 个字节,在内存中以指数形式存放个字节,在内存中以指数形式存放实型变量的分类实型变量的分类float 32 bit, float 32 bit, 数范围 数范围 10-38---1038 610-38---1038 6 位有效位位有效位double 64 bit, double 64 bit, 数范围 数范围 10-308---10308 1610-308---10308 16 位有效位位有效位 float a,b,x;float a,b,x;

a=11111111.1111;a=11111111.1111; b=11111111.1;b=11111111.1; x=123.456789E10;x=123.456789E10;

double y;double y; y=123.456789E10;y=123.456789E10;

实型数据的舍入误差实型数据的舍入误差 有效位数 有效位数 float 6float 6 位位 double 16double 16 位位

#include <stdio.h>#include <stdio.h>

main()main()

{ float a,b;{ float a,b;

a=123456.789e5;a=123456.789e5;

b=a+20;b=a+20;

printf(“\nb=%f\n”,b);printf(“\nb=%f\n”,b);

}}运行结果:运行结果:b=12345678848.000000b=12345678848.000000

Page 10: 第 2 章  基本数据类型与常用库函数

字符类型的数据存储单元中存放的是对应字符的字符类型的数据存储单元中存放的是对应字符的 ASCIIASCII 代码。代码。一个字节存储一个字符。一个字节存储一个字符。char a,b,c;char a,b,c;

0 1 0 0 0 0 0 10 1 0 0 0 0 0 1a=‘A’;a=‘A’;0 0 1 1 1 0 0 00 0 1 1 1 0 0 0b=‘8’;b=‘8’;0 0 0 0 1 0 1 00 0 0 0 1 0 1 0c=‘\n’;c=‘\n’;

以以 ASCIIASCII 码参加运算,处理方法与整数相同。码参加运算,处理方法与整数相同。

2.2.3 2.2.3 字符型数据字符型数据

Page 11: 第 2 章  基本数据类型与常用库函数

2.3 2.3 常量与变量常量与变量2.3.1 2.3.1 常量常量常量常量:在程序执行过程中,其值不能被改变的量。常量的:在程序执行过程中,其值不能被改变的量。常量的

类型由其书写格式决定。类型由其书写格式决定。整型常量整型常量 (( 三种形式三种形式 ))

1.1. 十进制整数——十进制整数——由数字由数字 0~90~9 和正负号表示。和正负号表示。 123, -56, 0, -19123, -56, 0, -192.2. 八进制整数——八进制整数——由数字由数字 00 开头开头 ,, 后跟数字后跟数字 0~70~7 表示。表示。 0123 0123 即十进制的 即十进制的 8383 -011 -9-011 -9 020 16020 163.3. 十六进制整数——十六进制整数——由由 0x0x 开头开头 ,, 后跟后跟 0~9,a~f,A~F0~9,a~f,A~F 表示。表示。 0x123 0x123 即十进制的 即十进制的 291291 -0x56 -0x56 即十进制的 即十进制的 -86-86 0x1a 0x1a 即十进制的 即十进制的 2626

Page 12: 第 2 章  基本数据类型与常用库函数

2.3 2.3 常量与变量常量与变量整型常量的类型整型常量的类型1. int 1. int

2. long2. long

3. int short3. int short

4. unsigned short a,b;4. unsigned short a,b;

unsigned int x,y;unsigned int x,y;

a=50000; x=50000;a=50000; x=50000;

b=70000; b=70000; 溢出 溢出 y=70000;y=70000;

注意: 非负整型常数可视为无符号型常量,也可加注意: 非负整型常数可视为无符号型常量,也可加后缀字后缀字符符 uu 或或 UU ,注意数的范围。,注意数的范围。

5. 5. 整型数后加 整型数后加 L,l L,l 表示表示 long int long int 型。型。 12l, 89L, 02L 12l, 89L, 02L

Page 13: 第 2 章  基本数据类型与常用库函数

2.3 2.3 常量与变量常量与变量实型常量的表示方法实型常量的表示方法 1.1. 十进制小数形式十进制小数形式。。

0.123, 98.78 , 123. 0.00.123, 98.78 , 123. 0.0

2. 2. 指数形式指数形式。。 注意注意 : : E E 或或 e e 前必须有数字,后为整数。前必须有数字,后为整数。

1e3, (1*101e3, (1*1033=1000)=1000)

142e-3 (142*10142e-3 (142*10-3-3=0.142)=0.142)

2.3E2 (2.3*102.3E2 (2.3*1022=230)=230)

3. 3. floatfloat 类型实常量类型实常量 实型常量均为实型常量均为 doubledouble 类型,即以类型,即以 88 个字节存放,有个字节存放,有效位数为效位数为 1616 位,加位,加 ff 后缀则为后缀则为 floatfloat 型实常量,有效位型实常量,有效位数为数为 6--76--7 。。

Page 14: 第 2 章  基本数据类型与常用库函数

2.3 2.3 常量与变量常量与变量字符常量字符常量

定义定义 :: 用用单引号单引号括起来的单个括起来的单个普通字符普通字符或或转义字符转义字符字符常量的字符常量的值值:该字符的:该字符的 ASCIIASCII 码值码值转义字符转义字符 :: 反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示转义字符及其含义:转义字符及其含义:

转义字符 含义

\n

\v

\r

\a

\‘

\ddd

\t

\b

\f

\\

\“

\xhh

转义字符 含义

换行垂直制表

回车

响铃单引号

3 位 8 进制数代表的字符

水平制表退格

换页

反斜线

双引号2 位 16 进制数代表的字符

Page 15: 第 2 章  基本数据类型与常用库函数

例 例 2-1 2-1 输入一个字符,输出该字符的字形及其输入一个字符,输出该字符的字形及其 ASCIIASCII 码。码。#include <stdio.h>#include <stdio.h>

void main()void main()

{ {

char ch;char ch;

scanf(“%c”,&ch); scanf(“%c”,&ch); // // 输入一个字符输入一个字符

printf(“%c ASCII:%d\n”,ch,ch); printf(“%c ASCII:%d\n”,ch,ch);

// // 输出该字符的字形及其输出该字符的字形及其 ASCIIASCII 码码

}}

运行结果:运行结果:A↙A↙A ASCII:65A ASCII:65

Page 16: 第 2 章  基本数据类型与常用库函数

2.3 2.3 常量与变量常量与变量符号常量符号常量

在程序中指定用符号名代表一个常量,程序中可以使用在程序中指定用符号名代表一个常量,程序中可以使用符号名代替常量。符号名代替常量。 例 例 2-2 2-2 输入一个半径值,求圆周长和圆面积。输入一个半径值,求圆周长和圆面积。

#include <stdio.h>#include <stdio.h>#define PI 3.14159#define PI 3.14159void main()void main(){ { double r,k,s; double r,k,s; scanf("%lf",&r); scanf("%lf",&r); // // 输入半径输入半径 k=2*PI*r;k=2*PI*r; s=PI*r*r; s=PI*r*r; printf("circleprintf("circle :: %.2f area%.2f area :: %.2f\n",k,s); %.2f\n",k,s); // // 其中其中 %.2f%.2f 表示保留表示保留 22 位小数位小数 }}

运行结果:运行结果:1↙1↙circlecircle :: 6.28 area6.28 area :: 3.13.144

Page 17: 第 2 章  基本数据类型与常用库函数

2.3.2 2.3.2 变量变量概念:在程序运行过程中,其值可以被改变概念:在程序运行过程中,其值可以被改变变量定义的一般格式:变量定义的一般格式: 数据类型数据类型 变量 变量 1[1[ ,变量,变量 22 ,…,变量,…,变量 n];n];

决定分配字节数和数的表示范围

合法标识符

例 : float x,y; int i,j; char c;

变量初始化变量初始化 :: 定义时写作“变量名定义时写作“变量名 == 表达式”的形式赋初值表达式”的形式赋初值

编译程序根据变量定义为其分配指定字节的内存单元 …

...

地址

int a=1, b=-3,c;

a

b

c

4 字节

4 字节

4 字节

地址

地址

….

..

内存

1

-3

随机数

变量的使用:变量的使用:先定义,后使用先定义,后使用变量定义位置:变量定义位置:一般一般放在函数开头放在函数开头变量名变量名与与变量值变量值

11

aa变量名变量名

变量值变量值

存储单元存储单元

例 : int a=2,b,c=4; float data=3.67; char ch=‘A’; int x=1,y=1,z=1; int x=y=z=1;

Page 18: 第 2 章  基本数据类型与常用库函数

2.3.2 2.3.2 变量变量整型变量整型变量

占字节数随机器不同而不同占字节数随机器不同而不同 ,, 一般占一个机器字一般占一个机器字short≤int≤longshort≤int≤long

可用可用 sizeofsizeof(( 类型标识符)或类型标识符)或 sizeofsizeof(( 变量名)测量变量名)测量

实型变量实型变量floatfloat :占:占 44 字节,提供字节,提供 66 ~~ 77 位有效数字位有效数字doubledouble :占:占 88 字节,提供字节,提供 1616 位有效数字位有效数字

字符型变量字符型变量字符变量存放字符字符变量存放字符 ASCIIASCII 码码charchar 与与 intint 数据间可进行算术运算数据间可进行算术运算

例 a=‘D’; /* a=68; */ x=‘A’+5; /* x=65+5; */ s=‘!’+‘G’ /* s=33+71; */

Page 19: 第 2 章  基本数据类型与常用库函数

2.4 2.4 输入输入 // 输出函数 输出函数

CC 语言无语言无 I/OI/O 语句,语句, I/OI/O 操作由函数实现操作由函数实现 如如 :scanf():scanf() 、、 printf()printf() 、、 putchar()putchar() 、、 getchagetcha

r()r() 、、 puts()puts() 、、 gets()gets() 等函数等函数使用时应在源文件中包含头文件使用时应在源文件中包含头文件 stdio.h stdio.h

#include <stdio.h>#include <stdio.h>

Page 20: 第 2 章  基本数据类型与常用库函数

2.4.1 2.4.1 格式化输入输出函数格式化输入输出函数 格 式:格 式: printf(“printf(“ 格式控制串”,输出表格式控制串”,输出表 ))功 能:功 能:按指定格式向显示器输出数据按指定格式向显示器输出数据返回值:返回值:正常,返回输出字节数;出错,返回正常,返回输出字节数;出错,返回 EOF(-1)EOF(-1)

输出表:要输出的数据(可以没有,多个时以“输出表:要输出的数据(可以没有,多个时以“ ,,”” 分隔)分隔)格式控制串:包含两种信息格式控制串:包含两种信息

• 格式说明:格式说明: %%[[修饰符修饰符 ]] 格式字符格式字符 ,用于指定输出格式,用于指定输出格式• 普通字符或转义序列:原样输出普通字符或转义序列:原样输出• 例:例: int a=1,b=2; int a=1,b=2;

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

运行结果:运行结果:a=1,b=2a=1,b=2

Page 21: 第 2 章  基本数据类型与常用库函数

说明说明• 格式字符要用小写格式字符要用小写• 格式字符与输出项个数应相同,按先后顺序一一对应格式字符与输出项个数应相同,按先后顺序一一对应• 输出转换输出转换 :: 格式字符与输出项类型不一致格式字符与输出项类型不一致 ,,自动按指定格自动按指定格式输出式输出

printf() 函数的格式说明符及其作用

十六进制无符号整数

不带符号十进制整数

十进制整数

指数形式浮点小数

单一字符字符串

八进制无符号整数

小数形式浮点小数e 和 f 中较短一种百分号本身

int a=567;printf ( “%d”,a);

int a=255;printf(“%x”,a);

int a=65;printf(“%o”,a);

int a=567;printf(“%u”,a);

char a=65;printf(“%c”,a);

printf(“%s”,“ABC”);

float a=567.789;printf(“%e”,a);

float a=567.789;printf(“%f”,a);

float a=567.789;printf(“%g”,a);

printf(“%%”);

567

ff

101

567

A

ABC

5.677890e+02

567.789000

567.789

%

d,ix,Xoucs

e,Efg

%%

例 main() { unsigned short int u=65535; printf(”u=%d\n",u); } 输出结果: u=-1

例 int a=3,b=4; printf(“%d %d\n”,a,b); printf(“a=%d , b=%d\n”,a,b);

例 int a=3,b=4; printf(“%d %d\n”,a,b); printf(“a=%d , b=%d\n”,a,b);输出结果 : 3 4 a=3, b=4

11 11 11 11 11 11 11 11 65535

Page 22: 第 2 章  基本数据类型与常用库函数

例例 2.3 2.3 分别用十、八、十六进制形式输出整型数据。分别用十、八、十六进制形式输出整型数据。

#include <stdio.h>#include <stdio.h>

void main()void main()

{ {

int a=27; int a=27;

printf("%d%o%x%u\n",a,a,a,a); // printf("%d%o%x%u\n",a,a,a,a); // 输出各数间无分隔符输出各数间无分隔符

printf(“%d,%o,%x\n”,a,a,a); // printf(“%d,%o,%x\n”,a,a,a); // 输出各数间用逗号分隔 输出各数间用逗号分隔

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

// %5d// %5d 指定指定 aa 的输出宽度占的输出宽度占 55列列

} } 程序执行:程序执行:27331b2727331b2727,33,1b27,33,1ba= 27,a= 33,a= 1ba= 27,a= 33,a= 1b

Page 23: 第 2 章  基本数据类型与常用库函数

程序执行:程序执行:a,97a,97a,97a,97b,98b,98A,65 A,65

例例 2.4 2.4 字符的输出。字符的输出。#include <stdio.h>#include <stdio.h>

void main()void main()

{ char c='a'; { char c='a';

int b=97; int b=97;

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

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

printf("%c,%d\n",c+1,c+1);printf("%c,%d\n",c+1,c+1); // // 计算计算 c+1c+1 的值为的值为 9898 ,即,即 bb

printf("%c,%d\n",c-32,c-32); printf("%c,%d\n",c-32,c-32); // // 将小写字母转换为大写字母将小写字母转换为大写字母

}}

Page 24: 第 2 章  基本数据类型与常用库函数

printf()printf() 的附加说明符及其意义 的附加说明符及其意义

.n对实数 , 指定小数点后位数 (四舍五入 )对字符串 , 指定实际输出位数

修饰符 功 能m 输出数据域宽 , 数据长度 <m,左补空格 ;否则按实际输出

输出数据在域内左对齐(缺省右对齐 )

-

指定在有符号数的正数前显示正号 (+)+

输出数值时指定左面不使用的空位置自动填 00

在八进制和十六进制数前显示前导 0 , 0x#

在 d,o,x,u 前,指定输出精度为 long 型在 e,f,g 前,指定输出精度为 double 型l

Page 25: 第 2 章  基本数据类型与常用库函数

例例 2.5 2.5 单、双精度实型数据的输出。单、双精度实型数据的输出。

#include <stdio.h>#include <stdio.h>

void main()void main()

{ float f=314.15; { float f=314.15;

double d=3.1415926;double d=3.1415926;

printf("f=%f, f=%e\n",f,f);printf("f=%f, f=%e\n",f,f);

printf("d=%f, d=%e\n",d,d);printf("d=%f, d=%e\n",d,d);

printf("d=%6.3f, d=%6.2f, d=%.3f\n",d,d,d); printf("d=%6.3f, d=%6.2f, d=%.3f\n",d,d,d);

}} 程序执行:程序执行:f=314.149994, f=3.141500e+002f=314.149994, f=3.141500e+002d=3.141593, d=3.141593e+000d=3.141593, d=3.141593e+000d= 3.142, d= 3.14, d=3.142d= 3.142, d= 3.14, d=3.142

Page 26: 第 2 章  基本数据类型与常用库函数

例例 2.62.6 输入一个整数,表示时间秒数,转换成时间格式输入一个整数,表示时间秒数,转换成时间格式 hhhh ::mmmm :: ssss 输出。输出。

#include <stdio.h>#include <stdio.h>

void main()void main()

{ int t,h,m,s;{ int t,h,m,s;

scanf("%d",&t); scanf("%d",&t);

h=t/3600; // h=t/3600; // 小时数,小时数, 11 小时合小时合 36003600秒秒 m=(t-h*3600)/60;m=(t-h*3600)/60; // // 分钟数,分钟数, 11 分钟合分钟合 6060秒秒 s=t-h*3600-m*60; // s=t-h*3600-m*60; // 秒数秒数 printf("%02d:%02d:%02d\n ",h,m,s);printf("%02d:%02d:%02d\n ",h,m,s);

}} 程序执行:程序执行:10000↙10000↙02:46:0502:46:05

Page 27: 第 2 章  基本数据类型与常用库函数

格 式格 式 : scanf(“: scanf(“ 格式控制串”,地址表)格式控制串”,地址表)功 能:功 能:按指定格式从键盘读入数据,存入地址表指定的按指定格式从键盘读入数据,存入地址表指定的 存储单元中存储单元中 ,, 并按回车键结束并按回车键结束返回值:返回值:正常,返回输入数据个数正常,返回输入数据个数

scanfscanf 函数函数

地址表地址表:变量的地址,常用取地址运算符:变量的地址,常用取地址运算符 &&

scanfscanf 函数从格式控制字符串的首字符开始输入,到格式控函数从格式控制字符串的首字符开始输入,到格式控制字符串尾部结束输入。制字符串尾部结束输入。遇非格式说明符则必须原样输入与之抵消。 遇非格式说明符则必须原样输入与之抵消。 遇格式说明符则以此格式输入数据存放到地址列表中对遇格式说明符则以此格式输入数据存放到地址列表中对应的变量内存单元中。应的变量内存单元中。

Page 28: 第 2 章  基本数据类型与常用库函数

scanf()scanf() 的格式说明符及其作用 的格式说明符及其作用

输入一个字符串,将输入的整个字符串存入到一个字符数组中。遇空格输入一个字符串,将输入的整个字符串存入到一个字符数组中。遇空格或回车键结束,并自动在最后加存一个’或回车键结束,并自动在最后加存一个’ \0’\0’ ,作为字符串的结束标志,作为字符串的结束标志

用来输入一个字符用来输入一个字符

格式说明符格式说明符 作作 用用

%d%d 输入一个十进制整数输入一个十进制整数

%I%I 或或 %i%i 用来输入一个整数,可以是十进制数、带前导用来输入一个整数,可以是十进制数、带前导 00 或或 0x0x 的的八进制或十六进制数八进制或十六进制数

%o%o 以八进制形式输入一个整数(可带前导以八进制形式输入一个整数(可带前导 00 ,也可不带),也可不带)

%x%x 以十六进制形式输入一个整数(可带前导以十六进制形式输入一个整数(可带前导 0x0x 或或 0X0X ,也,也可不带)可不带)

%u%u 输入一个无符号的十进制整数输入一个无符号的十进制整数

%c%c

%s%s

%f%f 或或 %e%e 两个格式相同,用来输入实数,可以以小数形式或指数两个格式相同,用来输入实数,可以以小数形式或指数形式输入形式输入

Page 29: 第 2 章  基本数据类型与常用库函数

例例 2.7 2.7 以以 hh:mm:sshh:mm:ss 形式输入当前时间,输出合时间秒数。形式输入当前时间,输出合时间秒数。

#include <stdio.h>#include <stdio.h>

void main()void main()

{ int t,h,m,s;{ int t,h,m,s;

scanf("%d:%d:%d",&h,&m,&s); scanf("%d:%d:%d",&h,&m,&s); // // 输入时间输入时间

t=h*3600+m*60+s; t=h*3600+m*60+s; // // 计算合时间秒数计算合时间秒数

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

} } 程序执行程序执行 11 ::8:10:12↙8:10:12↙ 2941229412程序执行程序执行 22 ::8 10 12↙8 10 12↙-858964708-858964708

Page 30: 第 2 章  基本数据类型与常用库函数

例例 2.8 2.8 整型数据的输入。整型数据的输入。

#include <stdio.h>#include <stdio.h>

void main()void main()

{ int a,b;{ int a,b;

scanf("%d%x",&a,&b);scanf("%d%x",&a,&b);

// // 分别以十进制、十六进制形式输入分别以十进制、十六进制形式输入 aa 、、 bb

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

}} 程序执行程序执行 11 ::27 27↙27 27↙a=27,b=39a=27,b=39程序执行程序执行 22 ::27,27↙27,27↙a=27,b=-858993460a=27,b=-858993460

Page 31: 第 2 章  基本数据类型与常用库函数

例例 2.92.9 字符型数据的输入。字符型数据的输入。

#include <stdio.h>#include <stdio.h>

void main()void main()

{ char c1,c2,c3;{ char c1,c2,c3;

scanf("%c%c%c",&c1,&c2,&c3); scanf("%c%c%c",&c1,&c2,&c3);

printf("%c,%c,%c\n",c1,c2,c3);printf("%c,%c,%c\n",c1,c2,c3);

}}程序执行程序执行 11 ::abc↙abc↙a,b,ca,b,c程序执行程序执行 22 ::a b c↙a b c↙a, ,ba, ,b

Page 32: 第 2 章  基本数据类型与常用库函数

例例 2.102.10 浮点型数据的输入。输入两个数,求它们的和。浮点型数据的输入。输入两个数,求它们的和。#include <stdio.h> #include <stdio.h>

void main()void main()

{ double x,y,sum;{ double x,y,sum;

printf("Input x y:\n");printf("Input x y:\n"); // // 输入提示输入提示 scanf("%lf%le",&x,&y);scanf("%lf%le",&x,&y);

// // 输入输入 doubledouble 类型数据要用格式符类型数据要用格式符 %lf%lf 或或 %le%le

sum=x+y;sum=x+y;

printf("sum=%.3f\n",sum);printf("sum=%.3f\n",sum);

}} 程序执行:程序执行:1.2345 6.789↙1.2345 6.789↙sum=8.024sum=8.024

Page 33: 第 2 章  基本数据类型与常用库函数

例 例 scanf(“%3c%2c”,&c1,&c2);scanf(“%3c%2c”,&c1,&c2);

输入 输入 abcde abcde

则‘则‘ a’a’c1, ‘d’ c1, ‘d’ c2c2

例 scanf(“%2d%*3d%2d”,&a,&b);� � 输入 1234567� � 则 12a, 67b

例 scanf(“%3d%*4d%6f”,&k,&f); 输入 12345678765.43 则 123k, 8765.4f

scanf()scanf() 的附加说明符及其意义的附加说明符及其意义

l

修饰符 功 能h

m

*

用于 d,o,x 前,指定输入为 short 型整数用于 d,o,x 前,指定输入为 long 型整数用于 e,f 前,指定输入为 double 型实数

指定输入数据宽度,遇空格或不可转换字符则结束抑制符,指定输入项读入后不赋给变量

例 例 scanf(“%4d%2d%2d”,&yy,&mm,&dd);scanf(“%4d%2d%2d”,&yy,&mm,&dd);

输入 输入 20090308 20090308 或 输入 或 输入 2009 3 8 2009 3 8

则则 20092009yy, 3 yy, 3 mm, 8 mm, 8 dddd

Page 34: 第 2 章  基本数据类型与常用库函数

例例 2.11 2.11 输入数据时规定域宽。输入数据时规定域宽。#include <stdio.h>#include <stdio.h>

void main()void main()

{ int a;{ int a;

double x; double x;

scanf("%3d%lf ",&a,&x);scanf("%3d%lf ",&a,&x);

printf("a=%d,x=%f\n",a,x);printf("a=%d,x=%f\n",a,x);

}}程序执行:程序执行:––1234 56.78↙1234 56.78↙a=-12,x=34.000000a=-12,x=34.000000

Page 35: 第 2 章  基本数据类型与常用库函数

scanfscanf 函数函数说明:说明:

用“用“ %c”%c” 格式符时,空格和转义字符作为有效字符输入格式符时,空格和转义字符作为有效字符输入输入的数据项先存放在内存输入缓冲区中,在按回车键输入的数据项先存放在内存输入缓冲区中,在按回车键后,才按输入格式从缓冲区依次读数据,多出数据留在后,才按输入格式从缓冲区依次读数据,多出数据留在缓冲区内,可被下一个输入语句使用 缓冲区内,可被下一个输入语句使用

输入数据时,遇以下情况认为该数据结束:输入数据时,遇以下情况认为该数据结束:•遇空格、遇空格、 TABTAB 、或回车、或回车•遇宽度结束遇宽度结束•遇非法输入遇非法输入

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

若输入 1234a123o.26

则 1234 a, ‘a’ b, 123 c

Page 36: 第 2 章  基本数据类型与常用库函数

2.4.2 2.4.2 单个字符的输入输出 单个字符的输入输出 字符输出函数字符输出函数 putcharputchar

格 式格 式 : putchar( c ): putchar( c )参 数参 数 : c: c 为字符常量、变量或表达式为字符常量、变量或表达式功 能:把字符功 能:把字符 cc 输出到显示器上输出到显示器上返回值:正常,为显示的代码值;出错,为返回值:正常,为显示的代码值;出错,为 EOF(-1)EOF(-1)

例 2.13 putchar() 函数的使用。#include <stdio.h>void main(){ char c='A'; putchar(c); putchar('A'); // 输出字符 A

putchar('\n'); // 输出一个回车换行符 putchar('\101'); // 输出 ASCII 码为 101( 八进制 ) 对应的字符 A

putchar(65); // 输出 ASCII 码为 65( 十进制 ) 对应的字符 A }

程序执行: 程序执行: AAAAAA AA

Page 37: 第 2 章  基本数据类型与常用库函数

2.2. 字符输入函数(字符输入函数( getchargetchar ))

格 式格 式 : getchar( ): getchar( )功 能:从键盘读一字符功 能:从键盘读一字符返回值:正常,返回读取的代码值;出错返回值:正常,返回读取的代码值;出错 ,, 返回返回 EOF(-1)EOF(-1)

例 2.14 getchar() 函数的使用。 #include <stdio.h>void main(){ char c1,c2,c3; c1=getchar(); // 输入一个字符赋值给变量 c1 c2=getchar(); c3=getchar(); putchar(c1); putchar(c2); putchar(c3);}

程序执行程序执行 11 ::abc↙abc↙abcabc程序执行程序执行 22 : : a b c↙a b c↙a ba b程序执行程序执行 33 : : a↙a↙b↙b↙aabb

Page 38: 第 2 章  基本数据类型与常用库函数

2.5 2.5 常用函数常用函数CC 语言处理程序提供的函数称为库函数。语言处理程序提供的函数称为库函数。用户使用库函数时只需将包含库函数执行所需信息的头文件包用户使用库函数时只需将包含库函数执行所需信息的头文件包

含到程序中即可使用它。含到程序中即可使用它。#include <#include < 头文件名头文件名 >>

例:例: #include <stdio.h>#include <stdio.h>

库函数名库函数名 (( 实参数表列实参数表列 ))

例:例: sin(0.5);sin(0.5);

函数原型函数原型•确定函数的实参类型及返回值类型确定函数的实参类型及返回值类型例:例: coscos 的函数原型是的函数原型是 double cos(double x)double cos(double x)

Page 39: 第 2 章  基本数据类型与常用库函数

例 2.15 输入一个正数,求它的平方根值。#include <stdio.h>#include <math.h>void main(){ double x,y; scanf(“%lf”,&x); x=fabs(x); // 调用函数求 |x| y=sqrt(x); // 调用函数求 printf(“%.4f\n”,y); }

文件包含预处理命令

变量定义输入数据

输出数据调用函数

运行结果:运行结果:3↙3↙1.73211.7321

x

Page 40: 第 2 章  基本数据类型与常用库函数

使用时,应在源文件中包含头文件使用时,应在源文件中包含头文件 math.hmath.h1.1.平方根函数平方根函数 sqrtsqrt 函数原型:函数原型: double sqrt(double x)double sqrt(double x) 功能:计算 。例:功能:计算 。例: sqrt(56.78);sqrt(56.78);2.2.绝对值函数绝对值函数 fabsfabs 函数原型:函数原型: double fabs(double x)double fabs(double x) 功能:计算功能:计算 |x||x| 。例:。例: fabs(-123.456);fabs(-123.456); 返回值为返回值为 123.456123.456 。。3.3. 指数函数指数函数 powpow 函数原型:函数原型: double pow(double x,double y)double pow(double x,double y) 功能:计算功能:计算 x x yy 。例:。例: pow(2.2,3.5); pow(2.2,3.5); 返回值为返回值为 2.22.23.53.5 。。4. 4. ee 的指数函数的指数函数 expexp 函数原型:函数原型: double exp(double x)double exp(double x) 功能:计算功能:计算 e e xx 。例:。例: exp(7.8); exp(7.8); 返回值为返回值为 ee7.87.8 。。5.5. 正弦函数正弦函数 sinsin

函数原型:函数原型: double sin(double x)double sin(double x)

例:例: sin(60*3.14159/180); sin(60*3.14159/180); 返回值为返回值为 6060°° 正弦值。正弦值。

2.5.1 2.5.1 常用数学函数常用数学函数

x

Page 41: 第 2 章  基本数据类型与常用库函数

使用时,应在源文件中包含头文件使用时,应在源文件中包含头文件 ctype.hctype.h1.1. 大写字母转换为小写字母函数大写字母转换为小写字母函数 tolowertolower

函数原型:函数原型: char tolower(char x)char tolower(char x)

返回值:返回值: xx 是大写字母时返回对应的小写字母,否则返回是大写字母时返回对应的小写字母,否则返回 xx 。。 例:例: tolower(‘D’)tolower(‘D’) 为为 dd , , tolower(‘#’)tolower(‘#’) 为为 # # 。。2.2.检查字母函数检查字母函数 isalphaisalpha

函数原型:函数原型: int isalpha(char x)int isalpha(char x)

返回值:返回值: xx 是字母时,返回非是字母时,返回非 00 ,否则返回,否则返回 00 。。 例:例: isalpha(‘x’)isalpha(‘x’) 为非为非 0 0 , , isalpha(48)isalpha(48) 为为 0 0 。 。 3.3.检查大写字母函数检查大写字母函数 isupperisupper

函数原型:函数原型: int isupper(char x)int isupper(char x)

返回值:返回值: xx 是大写字母时,返回非是大写字母时,返回非 00 ,否则返回,否则返回 00 。。 例:例: isupper(‘B’)isupper(‘B’) 为非为非 00 , , isupper(‘b’)isupper(‘b’) 为为 0 0 。。

2.5.2 2.5.2 常用字符函数 常用字符函数

Page 42: 第 2 章  基本数据类型与常用库函数

4.4.检查数字字符函数检查数字字符函数 isdigitisdigit

函数原型:函数原型: int isdigit(char x)int isdigit(char x)

返回值:返回值: xx 是数字字符时,返回非是数字字符时,返回非 00 ,否则返回,否则返回 00 。。

例:例: isdigit(‘7’)isdigit(‘7’) 为非为非 00 , , isdigit(‘\007’)isdigit(‘\007’) 为为 0 0 。。

5.5.检查字母、数字字符函数检查字母、数字字符函数 isalnumisalnum

函数原型:函数原型: int isalnum(char x)int isalnum(char x)

返回值:返回值: xx 是字母、数字时,返回非是字母、数字时,返回非 00 ,否则返,否则返回回 00 。。

例:例: isalnum(‘\X20’)isalnum(‘\X20’) 为为 0 0 , , isalnum(‘A’)isalnum(‘A’) 为非为非 0 0 , , isalnumisalnum (( 2727 )为)为 0 0 。。

2.5.2 2.5.2 常用字符函数 常用字符函数

Page 43: 第 2 章  基本数据类型与常用库函数

使用时,应在源文件中包含头文件使用时,应在源文件中包含头文件 stdlib.hstdlib.h

1.1. 随机数发生器函数随机数发生器函数 randrand

函数原型: 函数原型: int randint rand (( voidvoid ))

返回值:产生一个返回值:产生一个 00 ~~ 3276732767之间的随机整数。之间的随机整数。

例:例: rand()rand() 返回产生的随机数。 返回产生的随机数。

2.2. 初始化随机数发生器函数初始化随机数发生器函数 srandsrand

函数原型: 函数原型: void srandvoid srand (( unsigned aunsigned a ) )

功能:以给定数初始化随机数发生器。功能:以给定数初始化随机数发生器。

例:例: srand(time(0));rand(); srand(time(0));rand(); 以当前系统时间初始化随机数以当前系统时间初始化随机数发生器,再产生一个随机数。其中发生器,再产生一个随机数。其中 timetime 为系统库函数,对应为系统库函数,对应头文件为头文件为 time.htime.h ,它能得到当前的系统时间。,它能得到当前的系统时间。

2.5.3 2.5.3 其他常用函数其他常用函数

Page 44: 第 2 章  基本数据类型与常用库函数

例例 2.16 2.16 由计算机随机生成一道加法题目。由计算机随机生成一道加法题目。#include <stdio.h>#include <stdio.h>#include <stdlib.h>#include <stdlib.h>#include <time.h>#include <time.h>void main()void main(){{ int a,b;int a,b;

srand(time(0)); srand(time(0)); // // 第第 66 行行a=rand();a=rand();b=rand();b=rand();printf("%d+%d=\n",a,b);printf("%d+%d=\n",a,b);

}}

程序执行程序执行 11 ::28141+24840=28141+24840=程序执行程序执行 22 ::2591+11861=2591+11861=

Page 45: 第 2 章  基本数据类型与常用库函数

3. 3. 终止程序运行函数 终止程序运行函数 exitexit

函数原型: 函数原型: void exitvoid exit (( int aint a ) )

使用方式: 使用方式: exitexit (( aa ) )

功能:使程序立即正常地终止,功能:使程序立即正常地终止, aa 的值传给调用过程。的值传给调用过程。

例如:例如: exitexit (( 00 );立即终止程序的执行。);立即终止程序的执行。