基础篇 基础知识 —C语言程序设计 学习目标 掌握C语言中三种常见的基本类型及其使用方法 掌握常见的算术运算符和表达式的使用 掌握输入输出函数的使用 能够编写简单的顺序结构程序 第2章 数据类型 第3章 运算符和表达式 第4章 输入/输出函数
第二章 数据类型 程序=数据结构+算法 在程序中定义所要处理数据的类型和组织形式 对解题方法和解题步骤的描述 整 型 第二章 数据类型 程序=数据结构+算法 在程序中定义所要处理数据的类型和组织形式 对解题方法和解题步骤的描述 整 型 C中最常见的三种基本类型: 实 型 字符型
2.1 常量和变量 int a; a=3; a 3 变量:在程序运行过程中,其值可以改变的量。每个变量在计算机中对应相应长度的存储空间。 常量:在程序运行过程中,其值不变的量。
一、变量 例: 每个变量在使用之前必须确定其类型,并为 之取一个合适的名字。 age int age; float score; score char sex; sex a sex=‘a’; 定义变量类型的一般形式为: 类型标志符 变量名;
标志符的命名规则: (1)标识符只能由字母、数字、下划线组成,且 第一个字符不能为数字。 (2)C语言区分大小写。 定字相同。 (4)标识符的长度最好不要超过8个字符。 (5)标识符的命名最好做到见名知意。如age用 来表示年龄,number表示学号。
二、 常量 1、整型常量(整常数) 常见的常量如18, 65.5, 3.14159, ‘m’, ‘ding’ 1)、十进制形式表示:如25,65,23。 2)、八进制形式表示:以数字0开头,如025, 065。 3)、十六进制形式表示:以数字0x开头,如 0x25,0x65,0x1A。
2、实型常量(实数、浮点数) 十进制小数形式:10.25,-1.2314 指数形式表示: 如23500可以用指数形式表示为:2.35e4
3、字符型常量 1)、普通字符常量 2)、转义字符常量 常见的字符常量有:’a’, ‘A’, ‘F’, ‘*’, ‘■’, ‘▼ ‘ 如 ’\n’表示换行的意思 ‘\r’表示使光标回到本行的开头 ‘\b’表示使光标回到前一列
‘\t’表示使光标移到下一个Tab的位置 ‘\\’表示一个\ ‘\’’表示单撇号’ ‘\”’表示双撇号” ‘\ddd’表示一到三位八进制数所代表的字符 ‘\xdd’表示一到二位十六进制所代表的字符
4、字符串常量 例: 字符串常量就是由多个字符组成的字符序列,用 双撇号括起来 。 D a i C h u n m e I \0 $ 8 9 \0 “$89 ”
回顾 1、C语言中三种最基本的数据类型包括:( ) A、整型、实型、逻辑型 B、整型、实型、字符型 回顾 1、C语言中三种最基本的数据类型包括:( ) A、整型、实型、逻辑型 B、整型、实型、字符型 C、整型、字符型、逻辑型 D、整型、实型、逻辑型、字符型 2、在C语言中,下面哪一个不是整型常量( ) A、123 B、123L C、0x123 D、U123 3、在C语言中,下面哪一个不是字符型常量( ) A、‘a’ B、‘\81’ C、‘\0x41’ D、“a” E、‘\t’ 4、下列选项哪个选项不符合C语言中变量名的命名规则( ) A、age_1 B、1_age C、_1age D、age*1
2.2 整型变量 思考题:现在需要编写一个教师的工资管理 int T_age; 类 型 标 志 符 变 量 名 T_age 系统,其中涉及到一个变量,用来存放教师的 工龄。该如何定义。 int T_age; 类 型 标 志 符 变 量 名 T_age int型变量占2个字节的存储空间
一、整型数据在内存中的存储形式 补码表示,最高位表示符号位,正数用0表示,负 数用1表示。 假设使T_age=15, 则15在计算机中的存储形式为: 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 假设使T_age=-15, 则15在计算机中的存储形式为: 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 所以,int型数据存储范围为: -215 —— 215-1 -32768 32767
二、 整型变量的分类 int (基本整型) 整型 [signed] short [int] short int (短整型) unsigned short [int] int (基本整型) [signed] int 整型 unsigned [int] [signed] long [int] long int (长整型) unsigned long [int]
1、短整型( short 型)占小于或等于2个字节的存储空间,存储范围为: -215 —— 215-1 2、无符号短整型( unsigned short 型)占2个字节的存储空间,存储范围为: 0 —— 216-1 3、基本整型( int 型)占2个字节的存储空间,存储范围为: -215 —— 215-1 4、无符号基本整型( unsigned 型)占2个字节的存储空间,存储范围为: 0 —— 216-1
5、长整型( long 型)占4个字节的存储空间,存储范围为: -231 —— 231-1 6、无符号长整型( unsigned long型)占4个字节的存储空间,存储范围为: 0 —— 232-1
三、 整型变量的定义和使用举例 例: unsigned age; unsigned long telephone; main( ) unsigned long number; unsigned long telephone; age=23; number=33991024; telephone=7578827; printf("%u,%lu,%lu\n",age,number,telephone);}
2.3 实型变量 思考题:现在需要定义一个用来存放教师工资的变量,该将其定义为何种类型? float T_salary; 类 型 标 志 符 2.3 实型变量 思考题:现在需要定义一个用来存放教师工资的变量,该将其定义为何种类型? float T_salary; 类 型 标 志 符 变 量 名 T_salary float型变量占4个字节的存储空间
一、实型数据在内存中的存储形式 用小数部分和指数部分来表示,例如: 1 1100101 10 1 (-25.25)原=(-11001.01)B 1 1100101 10 1 尾数位 指数位
2.4 字符型变量 思考题:现在需要定义一个用来存放教师性别的变量,该将其定义为何种类型? char T_sex; 类 型 标 志 符 变 思考题:现在需要定义一个用来存放教师性别的变量,该将其定义为何种类型? char T_sex; 类 型 标 志 符 变 量 名 T_sex char 型数据占1个字节的存储空间
一、字符型数据在内存中的存储形式 例:字符’A’的ASCII代码是65, 存储形式如下: 制形式存放到内存中 例:字符’A’的ASCII代码是65, 存储形式如下: 0 1 0 0 0 0 0 1 例:字符’ ♥ ’的ASCII代码是3, 存储形式如下: 0 0 0 0 0 0 1 1
main( ) main( ) {int ch; {char ch; ch=97; ch=‘a’; printf(“%c”,ch);} 二、字符变量的定义和使用举例 例1:观看下面程序的输出结果是什么? 总结:整型数据和字符型数据之间通用,整型变量和字符型变量之间可以相互赋值;整数可以以字符型形式输出,字符型数据也可以以整数形式输出。 main( ) {int ch; ch=97; printf(“%c”,ch);} main( ) {char ch; ch=‘a’; printf(“%c”,ch);} ‘a’; 97; 思考题:当给字符型变量赋整型数值时,其值应该在0-255之间,您知道为什么吗?
字符型变量使用举例 例2:当从键盘输入字符‘b’时,输出结果是什么? main( ) {char c; scanf(“%c”,&c); printf(“%c”,c);}
三、变量赋初值 int a,b,c; a=4; b=4; c=4; int a,b,c; int a=b=c=4; a=b=c=4; 概念:在编写程序的时候,常常需要对变量预先设置一个值,称为变量赋初值 如: int number; number=21; int number=21; int a,b,c; a=4; b=4; c=4; int a,b,c; a=b=c=4; int a=b=c=4;
2.5各类型间的混合运算 整 型 三种基本类型 实型 字符型 int long double long double 短整型 short 2.5各类型间的混合运算 短整型 short int 整 型 基本整型 长整型 long 三种基本类型 单精度 float 实型 double 双精度 长双精度 long double 字符型 char
不同类型数据发生混合运算时的转换规则: 例如:1560+245.56+56325-’A’的结果是什么类型? float double 高 不同类型数据发生混合运算时的转换规则: float double 高 long unsigned char, short int 低 例如:1560+245.56+56325-’A’的结果是什么类型? 返回
第三章 运算符和表达式 当变量被定义为某一种类型后,即被分配相应的存储空间,此后并不能放置一旁而不用,还需要对其进行加工。 何谓加工?加工就是指运算, C中最常见的运算有加、减、乘、除等。 运算符就是用来表示运算的符号,如“+” 、“-”、“*”、“/” 。 参加运算的数据称为运算量,也就是运算对象。由运算符把运算对象连接起来的式子称为表达式,如“ sum=a+b;”就是一个表达式。
C语言中常见的运算符 3.1 算术运算符 3.2 赋值运算符 3.3 关系运算符 3.4 逻辑运算符 3.5 位运算符 3.6 逗号运算符 3.1 算术运算符 3.2 赋值运算符 3.3 关系运算符 3.4 逻辑运算符 3.5 位运算符 3.6 逗号运算符 3.7 求字节数运算符sizeof和强制类型转换运算符 3.8 复习
3.1 算术运算符和表达式 + - * / % 一、常见的算术运算符 + - * / % 当两个整数相除时,商的结果取整。如5/3的结果为1,-5/3的结果为-1。 当两个除数中有一个为实数时,结果为实数,如5/2.0=2.5。 实现两个整数的相除取余 ,结果的符号和被除数的符号相同。参加取余运算的两个数必须是整数。
++ - - 二、自增、自减运算符 1)自增运算符++: 使变量的值增1 例: i++; 表示使用完i之后,使i的值增1 2)自减运算符- -: 使变量的值减1 例: i--; 表示使用完i之后,使i的值减1 --i; 表示先使i的值减1,然后再使用i
例2: 例1: int a,b,c; int a,b,c; a=5; a=5; b=- -a; b=++a; c=b- -; c=a++;
思考题:表达式- -x-a*b/c++的结果值是多少? 三、算术运算符的优先级和结合性 思考题:表达式- -x-a*b/c++的结果值是多少? (假设x的值为3,a的值为5,b的值为2,c的值为3) 运算符的优先级: 运算符的优先次序 运算符的结合性: 当优先级相同时,是自左至右或是自右至左计算
- -x-a*b/c++ (- -x)-a*b/c++ ++、--、+(取正)、-(取负) 自右至左 自左至右 *、/、% +、- 自左至右 -1
3.2 赋值运算符和表达式 1、普通的赋值运算符 number=24; x*y; x+5; 赋值运算符 注意: 当赋值运算符右边的常量或表达式的类型和左边变量的类型不一致时,先将右边表达式的类型转换为和左边相同的类型,然后再赋值。 例: float x; X=3;
2、复合的赋值运算符 x=x+y; x+=y; 复合的赋值加运算符 常见的复合的赋值运算运算符 (1) += (2) -= (3) *= (4) /= (5)%= 例如: x的值为6, 则 x+=4 的结果是什么?
例: 3、赋值运算符的优先级和结合性 算术运算符 赋值运算符 结合性为自右而左 1、n=b+8; 2、n+=a*=2; 3、n=a=b; 已知a=5,b=8,n未知。求下列各表达式的值。 1、n=b+8; 2、n+=a*=2; 3、n=a=b;
3.3 关系运算符和表达式 1、常见的关系运算符 关系运算又称比较运算,就是对两个运算量进 行比较,判断其比较的结果是否符合给定的条件。 如果符合,则结果为“真”,用1表示;如果不符 合,则结果为“假”,用0表示。 1、常见的关系运算符 <(小于)、>(大于)、<=(小于或等于)、>=(大于或等于)、==(等于)、!=(不等于)
2、关系运算符的优先级和结合性 算术运算符 自左至右 关系运算符 自左至右 赋值运算符 自右至左
例:number1=25;判断下列表达式的值。 (6)n=number1>4; (7) number1>24>2; (8) number1+1==26;
实训 已知i=3,j=4,a=5,b=6,m为未知。求下列各式的值。 (1)++i+j---a (2)a+b-j*a/i (3)m=-j++
3.4 逻辑运算符和表达式 思考题:如何表示整数x既可以被5整除又可以被7 整除. 逻辑与(&&):一般形式: a && b; 只有当a和b都为真时,结果才为真. ( ) ( ) x%5==0 && x%7==0 逻辑运算符”逻辑与” 逻辑或(¦¦): 一般形式 a¦¦b, a和b中任一为真,结果为真. 逻辑非(!): 一般形式 !a, a为真,!a就为假; a为假,!a为真.
例:判断下列各逻辑表达式的值 假设a=5, b=6, c=3, d=10; (a>b) && (c>d); 3¦¦1 1 1
逻辑运算符的优先级和结合性 高 !(逻辑非) 算术运算符 关系运算符 &&和¦¦ 低 赋值运算符 自右至左 自左至右 高 !(逻辑非) 算术运算符 关系运算符 &&和¦¦ 低 赋值运算符 自右至左 自左至右 X=!a+2 ¦¦ x>y+2&&a==3,已知a=3,x=5,y=4,求x的值。
实训 1、若a=5,b=4,x=0,判断下面两个表达式的结果及x的值: (1) 0&&x=a>b (2) a>b ¦¦ ++x 2、要判别某一年是否闰年。闰年的条件是符合下面两个条件的其中一个就可以了: (1)能被4整除, 但不能被100整除; (2)能被4整除, 又能被400整除; (year%4==0&&year%100!=0) ¦¦(year%400==0)
3.5 位运算符和表达式 位运算:就是对二进制位进行的运算. C中常用的位运算符: &(按位与) ¦(按位或) ^(按位异或) ~(取反) >>(右移) <<(左移)
例: 求-1和5按位与的结果. 按位与的作用: 使一个存储单元清零 “按位与”运算符‘&’ “按位与”又称“按位乘”,即二进位相乘。 “按位与”的规则为: 0&0=0, 0&1=0, 1&0=0, 1&1=1 例: 求-1和5按位与的结果. -1的补码: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 5的补码: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 按位与的作用: 使一个存储单元清零
, 3.6 逗号运算符和表达式 逗号运算符 作用在于将若干个表达式连接起来。 逗号表达式的一般形式为: 表达式1,表达式2,表达式3,……,表达式n 整个逗号表达式的值就是最后的表达式n的值
实训 已知a=3,求下面逗号表达式的值。 (1)++a,a+5,a+6 (2)a=2*3,b=a-2,b-a,a+=2
功能: 求数据在存储器中所占的字节数 例: 3.7 sizeof运算符和强制类型转换运算符 一、求字节数运算符sizeof( ) 功能: 求数据在存储器中所占的字节数 例: sizeof( long double ); sizeof( x+y ); sizeof( 123456 );
二、强制类型转换运算符 思考:假设现在需要编写一个程序,判断一个实数x的整数部分是否为偶数, 要求x从键盘输入。 main( ) { float x; scanf(“%f”,&x); if( ) printf(“Yes!”); else printf(“No!”);
求(int)x+y 和 (int)(x+y)的值 强制类型转换运算符的一般使用形式: (类型名)(表达式); 希望转换的类型 希望被转换的对象 已知x=2.5, y=3.7, 求(int)x+y 和 (int)(x+y)的值
实训 1、求下列算术表达式的值 (1)a+b/2%3*(int)c/d*3 设a=3.5, b=11, c=5.7, d=2 (2)(int)x/y+(float)y%x 设x=8.3,y=3 (3)!(x+y)+z&&x*z-1 x的值为2,y的值为3,z的值为1
思考:求任一4位八进制所对应的十进制数 main( ) {int x1,x2,x3,x4,o_number,d_number; scanf( "%d", &o_number ); x1=o_number/1000; x2=o_number%1000/100; x3=o_number%100/10; x4=o_number%10; d_number =x1*8*8*8+x2*8*8+x3*8+x4; printf ("The decimal of %d is %d\n“ ,o_number,d_number); }
第四章 输入/输出函数 输入 输出 char a; 0 1 0 0 0 0 0 1 scanf (“ %c ”,&a ); 0 1 0 0 0 0 0 1 输入 输出 scanf (“ %c ”,&a ); printf (“ %c ”, a ); a=getch( ); putchar (a); gets( ); puts( ); #include “stdio.h ” 或 #include<stdio.h>
4.1 输出函数putchar( )和printf( ) 1、功能 输出一个字符 putchar (c); 2、一般形式 putchar (‘c’); putchar( c ); putchar (99); 可以是字符变量 putchar (c); 字符常量 putchar (‘\n’); 整型常量 整型变量 转义字符
例: 一、 格式输出函数printf( ) 1、功能 它可以将任意多个数据按各自指定的格式输出来。 int number=24; float score=95.5; char sex=‘m’; printf(“ number=%d, score=%f, sex=%c ”, number, score, sex); printf(“ %d, %f, %c ”,number, score, sex); 输出结果: number=24, score=95.000000, sex=m 输出结果: 24, 95.000000, m
二、一般形式 三、格式说明符 1、%d: printf(“格式控制”,输出表列); 用来输出十进制int型数据 %md:m是一个常数,用来限定输出数据所占的宽度。 %ld:以长整型形式输出数据。 下一页 上一页
2、%u格式符 3、%o格式符 4、%x格式符 输出十进制unsigned型数据。 以八进制无符号形式输出整数,输出时将符号位一起转化为八进制数值。 4、%x格式符 以十六进制无符号形式输出整数,输出时将符号位一起转化为十六进制数值。
实训 main( ) {int a=-1; printf(“%d,%o,%8o”,a,a,a);} a在计算机中的存储形式 7 1 1 1 1 1 1 1 1 7 输出结果:-1,177777, 177777
5、%c格式符 char ch; ch=‘a’; printf(“ %c ”, ch); %d int a; a=65; 以字符形式输出数据 例1 char ch; ch=‘a’; printf(“ %c ”, ch); 字符型数据可以以字符形式输出,也可以以整型形式输出。 %d 例2 int a; a=65; printf(“ %c ”, a); 整型数据(0—255)也可以以字符形式输出。
6、%f格式符 以实数形式输出数据 %f:输出带6位小数的实数。对于单精度实数,有效位数为7位 %m.nf:指定输出数据占m列,其中有n位小数 %.nf: 表示带n位小数,对列宽无限制。
实训 main( ) {float x=12345.1111001; printf(“%f\n”,x); printf(“%10.2f,%-10.1f,%.2f”,x,x,x);} 输出结果:12345.111328 12345.11 12345.1
printf(“%s”,”china”); 用来输出一个字符串 printf(“%s”,”china”); 8、%e格式符 以指数形式输出实数 printf(“%e”,123.456); 输出为:1.23456e+02。
4.2 输入函数getchar( )和scanf( ) 1、功能:从键盘输入一个字符 2、一般形式: 字符变量=getchar( ); 思考题:从键盘输入任一字符, 如果该字符是小写字符,将其转换为大写字符输出,否则不变输出。
实训1 #include ”stdio.h” main( ) {char ch; ch= ; if (ch<=‘z’&&ch>=‘a’) ch=ch-32; ;} getchar( ) putchar( )
二、 格式输入函数scanf( ) 思考1:如何实现向整型变量a中输入数据? scanf(“ %d ”,&a); 思考2:如何实现向实型变量b中输入数据? scanf(“ %f ”,&b); 思考3:如何实现向整型变量a和实型变量b中输入数据? scanf(“ %d %f ”,&a, &b);
scanf( “%d %d %d ”, &a, &b, &c); int a, b, c; scanf( “%d %d %d ”, &a, &b, &c); scanf( “%d ,%d ,%d ”, &a, &b, &c); scanf( “a=%d ,b=%d,c=%d ”, &a, &b, &c);