《C语言程序设计》教案

C语言概述【教学目的】使学生对计算机语言有一定的认识,激发学生学习程序设计的兴趣教学重点】程序设计中的若干术语教学难点】理解程序设计中的若干术语教学方法】讲授式、讨论式、案例分析式新课内容】1、计算机语言2、计算机程序设计 什么是程序? 为了解决某一特定问题用某一种计算机语言编写的指令序列称为程序什么是程序设计? 程序是程序设计的结果,在执行程序前必须先排定程序,排定以时间为进程必须完成的各种操作叫程序设计用高级语言进行程序设计时要注意以下三个概念:语法,每种计算机语言都有自己的语法规则语义,即某一语法成分的含义 语用,即正确使用语言3、C语言的由来规模较大,难以实现无数据类型接近硬件,但过于简单,功能有限用其编写了UNIX操作系统功能更强大,面向对象功能更强大,面向对象4、C语言的特点语言简洁、紧凑,使用灵活运算符丰富丰富的数据类型结构化的控制语句语法限制不严格能进行位操作语言生成的代码质量高可移植性好 具有预处理功能5、简单C程序介绍main( ){int a,b,sum; a=123; b=456; sum=a+b; printf("Sum is %d\n",sum);}int max(int x,int y){int z; if(x>=y) z=x; else z=y; return(z);}main( ){int a,b,c; scanf("%d%d",&a,&b); c=max(a,b); printf(”max=%d\n",c); }6、作业 说明C语言的由来。
算法【教学目的】使学生对计算机算法有一定的认识,激发学生学习程序设计的兴趣教学重点】NS图的基本知识【教学难点】算法的特性与设计【教学方法】讲授式、讨论式、案例分析式新课内容】1、算法的概念广义地说,为解决一个问题采取的方法和步骤计算机算法分类数值算法求方程的根求函数的定积分非数值算法图书检索人事管理2、 简单算法举例求闰年的算法求素数的算法3、 算法的特性有穷性算法要包含有限的步骤确定性每一步必须明确有零个或多个输入需要从外界获取必要的信息有一个或多个输出需要把求得得解进行输出有效性每一步都能有效地执行4、 算法的表示方法设计算法自然语言传统流程图改进的流程图N-S图(盒图)伪代码实现算法计算机语言传统流程图优点:描绘直观,容易掌握缺点:对流程线没有严格控制三种基本结构N-S图(盒图)I.Nassi和B.Shneiderman提出取消流程线,不能任意转移控制使用N-S符号设计出来的程序必然是结构化程序容易表示嵌套关系容易确定局部和全局数据的作用域N-S的基本符号3.6 PDL(过程设计语言—伪码)用结构化程序设计语言的语法控制框架,在内部却可灵活使用自然语言来表示各种操作比流程图更灵活,可以使用普通的正文编辑程序进行修改可以作为注释直接插在源程序中,提高文档质量有自动处理程序存在,可以自动生成程序代码缺点:不如图形工具直观BEGINinput m,nif m 方法:自顶向下逐步细化模块化5、作业画简单程序的NS图和PDL代码数据类型【教学目的】使学生对程序设计数据类型的较全面而深入的掌握教学重点】数据类型的存储空间、长度【教学难点】常量与变量的概念【教学方法】讲授式、讨论式、读书指导案例分析式新课内容】1、基本类型整型字符型实型(浮点型)单精度、双精度构造类型数组类型结构体类型共用体类型指针类型空类型2、常量与变量符号常量用一个标识符代表一个常量 #define PI 3.14159 main( ) {float r,s,area; scanf("%f",&r); s=2*PI*r; area=PI*r*r; printf("s=%7.2f,area=%7.2f",s,area); }变量的概念程序运行过程中其值可以改变的量,系统为程序中的每一个变量开辟一个存储单元,如: main( ) { int a,b; a=2; printf("a=%d\n",a); b=4; printf(“b=%d\n",b); }变量名标识符:用来标识变量名、符号常量名、数组名、函数名、文件名的有效字符序列。 关键字预定义标识符用户定义标识符字母或下划线开头,后跟字母、数字和下划线组成变量要先定义后使用3、整型常量三种形式表示:十进制:如 123 -60 0八进制:以0开始,如 0123十六进制:以0x开始,如0x123 main(){ int a=0123; printf(“a=%d\n”,a);}整型变量分类int 整型short int(或short) 短整型 long int(或long) 长整型 unsigned int 无符号整型 unsigned short 无符号短整型unsigned long 无符号长整型各类型数据长度、取值范围 所占位数 取值范围 int 16 -32768~32767 short 16 -32768~32767long 32 -21亿~21亿unsigned int 16 0~65535 unsigned short 16 0~65535 unsigned long 32 0~42亿 4、整型变量的定义所有的变量需先定义类型int a,b,c; /*指定a,b,c为整型变量*/unsigned count; /*指定lower为无符号整型变量*/long s;有些变量可以预先设置初值:int a=0,b,c; /*指定a,b,c为整型变量,a的初值为0*/int a=0,b=0,c=0; /*指定a,b,c为整型变量,a、b、c的初值为0*/5、整型数据的溢出main(){ int a,b;a=32767;b=a+1;printf(“%d,%d\n”,a,b);}main(){ int a=70000;printf(“a=%d\n”,a);}整型常量的类型main(){ unsigned a;a=-1u;printf(“a=%u\n”,a);}6、作业计算正方形面积浮点等数据类型【教学目的】使学生对程序设计数据类型的较全面而深入的掌握。 教学重点】数据类型的存储空间、长度【教学难点】常量与变量的概念【教学方法】讲授式、讨论式、读书指导案例分析式新课内容】1、实型常量小数形式:如 123.0 .123 0.0 12.5指数形式:如123e2 123E2main(){ float a;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 long double长双精度 128 -1.2*10-4932 ~1.2*1049322、变量的定义float x,y; /*指定x,y为单精度实型变量*/double z; /*指定z为双精度实型变量*/3、字符型常量单引号括起来的一个字符如: ' a '字符常量可以象整数一样参与运算。 字符常量还有另外一种形式——转义字符形式转义字符 功能 转义字符 功 能 \a 响铃 \\ 反斜杠字符 \b 退一格 \' 单引号字符 \f 走纸换页 \" 双引号字符 \n 换行 \? 问号 \r 回车 \ooo 1~3位8进制数代表的字符 \t 横向跳格 \xhh 1~2位16进制数代表的字符 4、字符变量变量的定义char c1,c2; /*指定c1,c2为字符型变量*/2、字符型数据的存储以ASCII码存储,存储形式与整型一样,可以和整数进行运算main(){char c1,c2;c1=‘a’;c2=‘b’;c1=c1-32;c2=c2-32;printf(“%c,%c\n”,c1,c2);printf(“%d,%d\n”,c1,c2);}字符数据在内存中的存储形式及使用方法main(){ char c1,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、字符串常量双引号括起来的字符序列。 如"How are you","0"等字符串在存储时末尾被自动加上字符'\0'字符常量与只包含一个字符的字符串常量的区别例:不属于字符常量的是‘A’ “B”‘\n’‘\x72’例:合法的字符常量是“abc”‘\x43’‘ab’“\0”例:字符串“ab\n\012\\\””的长度是34612变量赋初值例:int a=3; float b=2.5; char c=‘a’;例:int a,b,c=5;7、作业计算圆的面积,PI=3.14159 各类数据间的混合运算【教学目的】掌握各种数据间混合计算类型转换的方法教学重点】强制类型转换【教学难点】转换优先级次序【教学方法】讲授式、讨论式、读书指导、案例分析式新课内容】1、C语言允许数据值从一种类型转换成另一种类型在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算转换的规则按图所示 高 double float long unsigned 低 int char, short 说明:横向向左的箭头表示当运算对象为不同类横向向左的箭头表示必定的转换,如字符型(char)数据和短整型(short)数据必定先转换成整型(int),以提高运算精度。 纵向的箭头表示当运算对象为不同类型时转换的方向型时转换的方向数据总是由低级别向高级别转换算术运算符和算术表达式基本算术运算符运算符的优先级和结合性自增、自减运算符算术运算符+(加法运算或正号运算符)-(减法运算或负号运算符)* (乘法运算符)/(除法运算符)% (求余运算符,或称模运算符)例:5%3 结果:22、运算符的优先级和结合性算术表达式用算术运算符和括号将运算量连接起来的式子称为算术表达式运算符有优先级和结合性在求表达式的值时,要按照优先级的高低依次计算如果运算符两侧优先级相同,则按规定的结合方向进行结合性例:main(){ int m=7,n=5;float a=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(){ float x=3.6;int a;a=(int)x;printf(“x=%f,a=%d\n”,x,a);}例:main(){ float x=2.6,y=3.5,z;int a;z=(int)x+y;a=(int)(x+y);printf(“z=%f,a=%d\n”,a,z);}4、 作业P66 3.9 3.10各运算符【教学目的】掌握各种运算符的使用方法。 教学重点】++与――运算符的使用【教学难点】复合赋值运算符【教学方法】讲授式、讨论式、读书指导、案例分析式新课内容】1、 自增、自减运算符++运算符的作用是使变量的值增1运算符的作用是使变量的值减1常见的用法有:++i , --i 在使用i前,使i的值加(减)1i++ , 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,doubleàint舍去小数部分,也不进行四舍五入。 例: int i=3.56;则i的值为32)intàfloat,double数值不变,但以浮点数形式存储例: float f=23; f的值为23.0000(3)doubleàfloat 截取其前面7位有效数字,但应该注意数值范围不能溢出 floatàdouble 数值不变,在内存中以64位存储4)charàint有两种情况:A:如果系统将字符处理为无符号数,或对unsigned char型变量赋值,则将字符的8位 放在int型的底8位,高8位为0例:main( ){ unsigned char c;c=‘\376’;printf(“%c,%d,%u\n”,c,c,c);}B. 如果系统将字符处理为带符号的量,若字符的最高位为0,则整型变量高8位补0;若字符最高位为1,则整型变量高8位补1 (即ASCII码在0~127之间,值不变;128~254之间,值为负值例:main( ){ char c;c=‘\376’;printf(“%c,%d,%u\n”,c,c,c);}(5)long,short,intàchar 只须将低8位原封不动送到char型变量main( ){ int i=289;char c=‘a’;c=i;printf(“%c,%d\n”,c,c);}(6)int à long intint 为正数时,long int 的高16位补0;int 为负数时,long int 的高16位补1;long int àint 则int只取长整型的低16位。 main( ){ int a;long int b=65536;a=b;printf(“a=%d\n”,a);}(7)unsigned int à long int 只需将高位补0,数值不变unsigned int à intunsigned long à longunsigned short à short因为字节数相同,所以内容原封不动不变;但应注意,当unsigned xx 型的最高位为1时,赋给xx型时,由于xx型的最高位为符号位,所以数据将变为负值main( ){ unsigned int a=32768;int b;b=a;printf(“b=%d\n”,b);}(8)int à unsigned intlong à unsigned longshort à unsigned short因为字节数相同,所以内容原封不动不变;但非unsigned型的符号位将做为unsigned型的数值计算main( ){ unsigned int a;int b=-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%34、赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式形式: 〈变量〉〈赋值运算符〉〈表达式〉 例如: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( ){ int a,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例:int n=3,m=3;执行语句 m=n++,m++,++n;后n的值---,m的值---34566、作业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( ){char ch1,ch2;ch1=‘A’; ch2=‘B’;putchar(ch1);putchar(ch2);putchar(‘\n’); }运行程序,运行结果为ABputchar( )函数也可以输出转义字符,如:putchar(‘\101’) 即输出字符‘A’字符输入函数格式:getchar( )、功能: 从标准设备(一般是键盘)输入一个字符字符输入函数没有参数,函数值就是从设备输入的字符应注意空格和回车符也是字符,也可以被接受例:#include #include "stdio.h" main( ){char c1,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位小数;对字符串,表示截取的字符个数 — 输出的数字或字符在域内向左靠例:main( ){ int a,b;a=3;b=4;printf(“a=%d b=%d\n”,a,b);printf(“a=%d,b=%d\n”,a,b);printf(“%d,%d\n”,a,b);printf(“%d%d\n”,a,b);}例:main( ){ int a=123;b=4567;printf(“%d%d\n”,a,b);printf(“%2d%2d\n”,a,b);printf(“%4d%6d\n”,a,b);printf(“%-4d,%6d\n”,a,b);printf(“%-4d,%-6d,\n”,a,b);}除了X、E、G外,其它格式字符要求小写例:main( ){ int a=-654;printf(“|%6D|\n”,a);printf(“|%6d|\n”,a);}例:main( ){ int a=97;char b=‘b’;printf(“%%d a=%d\n%%c a=%c\n”,a,a);printf(“%%d b=%d\n%%c b=%c\n”,b,b);printf(“%%3c b=%3c\n”,b);}%d a=97%c a=a%d b=98%c b=b%3c b= b例4main( ){int a,b; float x; char c; a=123; b=-1; x=3.14; c ='A';printf("%d,%4d\n",a,a);printf("%d,%x,%o,%u\n",b,b,b,b);printf("%c,%d\n",c,c);printf("%f,%6.1f\n",x,x);}4、格式输入函数格式:scanf(格式控制,地址表列)功能:scanf函数可以从标准输入设备输入任意类型的多个数据(一般为显示器)。 注意:输入数不能规定精度当输入一串数据时,系统如何区分每个数据呢?(1)根据格式字符的含义分隔字符 sacnf("%d%c%f",&a,&b,&c);若输入数据: 120a45.6则 a=120,b='a',c=45.6(2) 系统按格式串指定的长度截取所需的数据 scanf("%3d%2d",&a,&b);输入数据 12345 则 a=123,b=45例:main( ){ int a;char b,c;scanf(“%3d%c%c”,&a,&b,&c);printf(“a=%d b=%c c=%c\n”,a,b,c);}例:main( ){ char a,b;scanf(“%3c%3c”,&a,&b);printf(“%3c%3c\n”,a,b);}(3) 用隐含的分隔符在输入数据中用空格或换行符分隔数据 scanf("%d%d%d",&a,&b,&c);输入数据 3 4 5或输入 3 4(回车) 5(回车)则a=3,b=4,c=5 (4) %后的“*”附加说明符,用来表示跳过它相应的数据。 scanf("%d,%*d,%d",&a,&b);如果输入 3,4,5则 a=3,b=5,第二个数据跳过不赋给任何变量5) 使用显示分隔符在格式说明符中还可以有其它字符,在输入字符时应输入与这些字符相同的字符 scanf("%d,%d,%d",&a,&b,&c);输入数据 3,4,5 scanf(”a=%d,b=%d,c=%d",&a,&b,&c);输入数据 a=3,b=4,c=5(6)用“%c”格式输入字符时,空格字符和转义字符都作为有效字符输入:scanf("%c%c%c",&c1,&c2,&c3);如果输入a b c则字符‘a’送给c1,空格送给c2,字符’b’送给c3注意:(1)输入时不能规定精度,如 scanf(“%6.1f”,&a)是不合法的2)格式控制之后是地址表列而不是变量表列scanf(“%d,%d”,&a,&b);是正确的,而scanf(“%d,%d”,a,b);是错误的6、作业P88 4.4 4.6 4.9 4.10选择结构程序设计【教学目的】掌握选择结构程序设计的方法。