r=m%n;
while(r!
=0)
{m=n;n=r;r=m%n;}
printf(“n=%d”,n);
}
4、结构化程序设计方法
原理:
用三种基本控制结构,通过组合和嵌套可实现任何单入口、单出口的程序。
方法:
自顶向下
逐步细化
模块化
5、作业
画简单程序的NS图和PDL代码。
数据类型
【教学目的】
使学生对程序设计数据类型的较全面而深入的掌握。
【教学重点】
数据类型的存储空间、长度
【教学难点】
常量与变量的概念
【教学方法】
讲授式、讨论式、读书指导案例分析式。
【新课内容】
1、基本类型
整型
字符型
实型(浮点型)
单精度、双精度
构造类型
数组类型
结构体类型
共用体类型
指针类型
空类型
2、常量与变量
符号常量
用一个标识符代表一个常量
#definePI3.14159
main()
{floatr,s,area;
scanf("%f",&r);
s=2*PI*r;
area=PI*r*r;
printf("s=%7.2f,area=%7.2f",s,area);
}
变量的概念
程序运行过程中其值可以改变的量,系统为程序中的每一个变量开辟一个存储单元,如:
main()
{inta,b;
a=2;printf("a=%d\n",a);
b=4;printf(“b=%d\n",b);
}
变量名
标识符:
用来标识变量名、符号常量名、数组名、函数名、文件名的有效字符序列。
关键字
预定义标识符
用户定义标识符
字母或下划线开头,后跟字母、数字和下划线组成。
变量要先定义后使用
3、整型常量
三种形式表示:
十进制:
如123-600
八进制:
以0开始,如0123
十六进制:
以0x开始,如0x123
main()
{inta=0123;
printf(“a=%d\n”,a);}
整型变量
分类
int整型
shortint(或short)短整型
longint(或long)长整型
unsignedint无符号整型
unsignedshort无符号短整型
unsignedlong无符号长整型
各类型数据长度、取值范围
所占位数取值范围
int16-32768~32767
short16-32768~32767
long32-21亿~21亿
unsignedint160~65535
unsignedshort160~65535
unsignedlong320~42亿
4、整型变量的定义
所有的变量需先定义类型
inta,b,c;/*指定a,b,c为整型变量*/
unsignedcount;/*指定lower为无符号整型变量*/
longs;
有些变量可以预先设置初值:
inta=0,b,c;/*指定a,b,c为整型变量,a的初值为0*/
inta=0,b=0,c=0;/*指定a,b,c为整型变量,a、b、c的初值为0*/
5、整型数据的溢出
main()
{inta,b;
a=32767;
b=a+1;
printf(“%d,%d\n”,a,b);
}
main()
{inta=70000;
printf(“a=%d\n”,a);
}
整型常量的类型
main()
{unsigneda;
a=-1u;
printf(“a=%u\n”,a);
}
6、作业
计算正方形面积
浮点等数据类型
【教学目的】
使学生对程序设计数据类型的较全面而深入的掌握。
【教学重点】
数据类型的存储空间、长度
【教学难点】
常量与变量的概念
【教学方法】
讲授式、讨论式、读书指导案例分析式。
【新课内容】
1、实型常量
小数形式:
如123.0.1230.012.5
指数形式:
如123e2123E2
main()
{floata;
a=123e3;
printf(“a=%e\n”,a);
}
实型变量
1、分类所占位数取值范围
float单精度32-3.4*10-38~3.4*1038
double双精度64-1.7*10-308~1.7*10308
longdouble长双精度128-1.2*10-4932~1.2*104932
2、变量的定义
floatx,y;/*指定x,y为单精度实型变量*/
doublez;/*指定z为双精度实型变量*/
3、字符型常量
单引号括起来的一个字符。
如:
'a'
字符常量可以象整数一样参与运算。
字符常量还有另外一种形式
——转义字符形式。
转义字符功能转义字符功能
\a响铃\\反斜杠字符
\b退一格\'单引号字符
\f走纸换页\"双引号字符
\n换行\?
问号
\r回车\ooo1~3位8进制数代表的字符
\t横向跳格\xhh1~2位16进制数代表的字符
4、字符变量
变量的定义
charc1,c2;/*指定c1,c2为字符型变量*/
2、字符型数据的存储
以ASCII码存储,存储形式与整型一样,可以和整数进行运算
main()
{charc1,c2;
c1=‘a’;c2=‘b’;
c1=c1-32;c2=c2-32;
printf(“%c,%c\n”,c1,c2);
printf(“%d,%d\n”,c1,c2);
}
字符数据在内存中的存储形式及使用方法
main()
{charc1,c2;
c1=97;c2=98;
printf(“%c,%c\n”,c1,c2);
printf(“%d,%d\n”,c1,c2);
c2=c2+1;
printf(“%c,%d\n”,c2,c2);
5、字符串常量
双引号括起来的字符序列。
如"Howareyou","0"等
字符串在存储时末尾被自动加上字符'\0'
字符常量与只包含一个字符的字符串常量的区别
例:
不属于字符常量的是
‘A’
“B”
‘\n’
‘\x72’
例:
合法的字符常量是
“abc”
‘\x43’
‘ab’
“\0”
例:
字符串“ab\n\012\\\””的长度是
3
4
6
12
变量赋初值
例:
inta=3;
floatb=2.5;
charc=‘a’;
例:
inta,b,c=5;
7、作业
计算圆的面积,PI=3.14159
各类数据间的混合运算
【教学目的】
掌握各种数据间混合计算类型转换的方法。
【教学重点】
强制类型转换
【教学难点】
转换优先级次序
【教学方法】
讲授式、讨论式、读书指导、案例分析式。
【新课内容】
1、C语言允许数据值从一种类型转换成另一种类型。
在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。
转换的规则按图所示。
高doublefloat
long
unsigned
低intchar,short
说明:
横向向左的箭头表示当运算对象为不同类横向向左的箭头表示必定的转换,如字符型(char)数据和短整型(short)数据必定先转换成整型(int),以提高运算精度。
纵向的箭头表示当运算对象为不同类型时转换的方向型时转换的方向。
数据总是由低级别向高级别转换。
算术运算符和算术表达式
基本算术运算符
运算符的优先级和结合性
自增、自减运算符
算术运算符
+(加法运算或正号运算符)
-(减法运算或负号运算符)
*(乘法运算符)
/(除法运算符)
%(求余运算符,或称模运算符)
例:
5%3结果:
2
2、运算符的优先级和结合性
算术表达式
用算术运算符和括号将运算量连接起来的式子称为算术表达式。
运算符有优先级和结合性
在求表达式的值时,要按照优先级的高低依次计算
如果运算符两侧优先级相同,则按规定的结合方向进行。
结合性
例:
main()
{intm=7,n=5;
floata=49,b=10,x;
x=m/2+n*a/b+1/2;
printf(“x=%f\n”,x);
}
3、C语言提供一种“强制类型转换”运算符,将一个类型的变量强制转换为另一种类型。
一般形式为:
(类型标识符)(表达式)
例如:
k=(int)((int)x+(float)i)/*得到整型数*/
(float)(x=85)/*得实型单精度数*/
例:
main()
{floatx=3.6;
inta;
a=(int)x;
printf(“x=%f,a=%d\n”,x,a);
}
例:
main()
{floatx=2.6,y=3.5,z;
inta;
z=(int)x+y;
a=(int)(x+y);
printf(“z=%f,a=%d\n”,a,z);
}
4、作业
P66 3.93.10
各运算符
【教学目的】
掌握各种运算符的使用方法。
【教学重点】
++与――运算符的使用
【教学难点】
复合赋值运算符
【教学方法】
讲授式、讨论式、读书指导、案例分析式。
【新课内容】
1、自增、自减运算符
++运算符的作用是使变量的值增1。
--运算符的作用是使变量的值减1。
常见的用法有:
++i,--i在使用i前,使i的值加(减)1
i++,i--在使用i后,使i的值加(减)1
已知i=5
(1)j=i++;
例
i=3;
j=-i++;
注意:
1)、自增和自减运算符只能用于变量,表达式
(x+y)++是不合法的。
2)、自增和自减运算符的结合方向是“自右向左”。
如表达式-i++等价于-(i++)。
3)、(i++)+(i++)+(i++)结果?
4)、(++i)+(++i)+(++i)结果?
5)、i+++j是(i++)+j还是i+(++j)?
6)、printf(“%d”,i,i++)结果
例:
i=3;j=4;k=5;
m=(++i)+(--j)+(k--);
2、赋值运算符和赋值表达式
赋值运算符
复合的赋值运算符
赋值表达式
赋值运算符
简单的赋值就是把一个表达式的值赋给一个变量。
例如:
i=5
j=i+1
类型转换
(1)float,doubleint
舍去小数部分,也不进行四舍五入。
例:
inti=3.56;则i的值为3。
(2)intfloat,double
数值不变,但以浮点数形式存储。
例:
floatf=23;f的值为23.0000
(3)doublefloat
截取其前面7位有效数字,但应该注意数值范围不能溢出。
floatdouble
数值不变,在内存中以64位存储。
(4)charint
有两种情况:
A:
如果系统将字符处理为无符号数,或对unsignedchar型变量赋值,则将字符的8位
放在int型的底8位,高8位为0。
例:
main()
{unsignedcharc;
c=‘\376’;
printf(“%c,%d,%u\n”,c,c,c);
}
B.如果系统将字符处理为带符号的量,若字符的最高位为0,则整型变量高8位补0;若字符最高位为1,则整型变量高8位补1。
(即ASCII码在0~127之间,值不变;128~254之间,值为负值。
)
例:
main()
{charc;
c=‘\376’;
printf(“%c,%d,%u\n”,c,c,c);
}
(5)long,short,intchar
只须将低8位原封不动送到char型变量。
main()
{inti=289;
charc=‘a’;
c=i;
printf(“%c,%d\n”,c,c);}
(6)intlongint
int为正数时,longint的高16位补0;
int为负数时,longint的高16位补1;
longintint
则int只取长整型的低16位。
main()
{inta;
longintb=65536;
a=b;
printf(“a=%d\n”,a);
}
(7)unsignedintlongint
只需将高位补0,数值不变。
unsignedintint
unsignedlonglong
unsignedshortshort
因为字节数相同,所以内容原封不动不变;
但应注意,当unsignedxx型的最高位为1时,赋给xx型时,由于xx型的最高位为符号位,所以数据将变为负值。
main()
{unsignedinta=32768;
intb;
b=a;
printf(“b=%d\n”,b);
}
(8)
intunsignedint
longunsignedlong
shortunsignedshort
因为字节数相同,所以内容原封不动不变;
但非unsigned型的符号位将做为unsigned型的数值计算。
main()
{unsignedinta;
intb=-1;
a=b;
printf(“b=%d\n”,a);
}
3、复合的赋值运算符
在赋值符“=”之前加上其它运算符,可以构成复合的运算符。
例如:
i+=2等价于i=i+2
a*=b+5等价于a=a*(b+5)
x%=3等价于x=x%3
4、赋值表达式
由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。
形式:
〈变量〉〈赋值运算符〉〈表达式〉
例如:
x=3
y=x+3
对赋值表达式求解的过程是:
将赋值运算符右侧的表达式的值赋给左侧的变量。
赋值表达式的值就是被赋值的变量的值。
结合性
注意:
一般形式的赋值表达式中的“表达式”又可以是一个赋值表达式。
如:
a=b=8按照从右到左的结合性等价于a=(b=8)
赋值表达式也可以包含复合的赋值运算符。
设a的值为6,计算a+=a-=a*a
先进行a*a的计算,结果为36
再进行a-=36的计算,相当于a=a-36=-30
最后进行a+=-30的计算,相当于a=a-30=-60
例:
main()
{inta,b,c,d,e;
a=b=c=d=e=5;
b+=a+3*a;
c%=a-3;
e=d*=a+3;
a-=a*=a;
printf(“a=%d,b=%d,c=%d,d=%d,e=%d\n”,a,b,c,d,e);
5、逗号运算符和逗号表达式
在逗号表达式中,逗号是一种运算符。
形式如下
表达式1,表达式2
由逗号隔开的一对表达式从左向右进行计算,其求解过程为:
先求解表达式1,再求表达式2,整个逗号表达式的值是表达式2的值。
逗号运算符是所有运算符中级别最低的。
例如
a=4*6,a+5
整个逗号表达式的值为29。
注意
一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,例如:
(a=4*6,a+5),a+6
整个表达式的值为30。
例:
intn=3,m=3;执行语句m=n++,m++,++n;
后n的值---,m的值---。
3
4
5
6
6、作业
P67 3.11 3.12
顺序程序设计
【教学目的】
掌握顺序程序设计的方法
【教学重点】
格式化输入与输出
【教学难点】
格式化输入的使用方法
【教学方法】
讲授式、讨论式、读书指导、案例分析式。
【新课内容】
1、赋值语句
由赋值表达式加上一个分号构成,作用是将一个确定的值赋给一个变量。
格式:
变量名=表达式;
说明
先计算,后赋值。
赋值语句中的“=”是赋值号而不是数学意义上的等号。
赋值号两侧的内容不能任意调换。
2、字符数据的输入输出
字符输出函数
格式:
putchar(c)
功能:
将c值所对应的字符输出到标准输出设备上(一般为显示器)。
c可以是整型或字符型。
一次只能输出一个字符,也可以输出控制符,如
putchar('\n')输出一个换行符,即光标移到下一行。
例:
putchar(‘a\n’);错
改为putchar(‘a’);putchar(‘\n’);
putchar(a,b);错
改为putchar(a);putchar(b);
例:
#include"stdio.h"
main()
{charch1,ch2;
ch1=‘A’;ch2=‘B’;
putchar(ch1);putchar(ch2);
putchar(‘\n’);
}
运行程序,运行结果为
AB
putchar()函数也可以输出转义字符,如:
putchar(‘\101’)即输出字符‘A’
字符输入函数
格式:
getchar()、功能:
从标准设备(一般是键盘)输入一个字符。
字符输入函数没有参数,函数值就是从设备输入的字符。
应注意空格和回车符也是字符,也可以被接受
例:
#include
main()
{chara,b,c,d;
a=getchar();b=getchar();
c=getchar();d=getchar();
putchar(a);putchar(b);
putchar(c);putchar(d);
}
例3从键盘输入三个大写字母,将其转换成小写字母输出。
#include"stdio.h"
main()
{charc1,c2,c3;
c1=getchar();c2=getchar();c3=getchar();
c1=c1+32;c2=c2+32;c3=c3+32;
putchar(c1);putchar(c2);putchar(c3);
}
3、格式输入输出
1、格式输出函数
格式:
printf(格式控制,输出表列)
功能:
printf函数可以将任意类型的多个数据输出到标准输出设备上(一般为显示器)。
格式字符含义
d十进制形式输出带符号整数(正数输出不带符号)
o八进制形式输出无符号整数(不输出前导0)
x十六进制形式输出无符号整数(不输出前导0x)
u十进制形式输出无符号整数
c输出一个字符
s输出一个字符串
f小数形式输出单、双精度实数(隐含输出6位小数)
e指数形式输出单、双精度实数(数字部分有6位小数)
g当指数小于-4或大于给定的精度时用%e格式,否则用%f格式。
附加格式说明符
格式字符含义
字母l用于长整型,可加在格式符d,o,x,u之前
m(整数)数据最小宽度
.n(整数)对实数,表示输出n位小数;对字符串,表示截取的字符个数
—输出的数字或字符在域内向左靠
例: