第1章 程序设计和C语言.docx
- 文档编号:11211598
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:79
- 大小:678.42KB
第1章 程序设计和C语言.docx
《第1章 程序设计和C语言.docx》由会员分享,可在线阅读,更多相关《第1章 程序设计和C语言.docx(79页珍藏版)》请在冰豆网上搜索。
第1章程序设计和C语言
第1章程序设计和C语言
教学时数:
2学时
重点难点:
1.C语言的特点。
2.TC的运行环境。
教学要求:
1.了解C语言的发展历史和特点。
2.理解C程序的构成及C函数的组成。
3.掌握C程序的上机步骤。
教学内容:
一、什么是计算机程序
程序:
一组计算机能识别和执行的指令或具有某种功能的指令集合。
二、什么是计算机语言
1.计算机语言:
人和计算机交流信息的、计算机和人都能识别的语言。
2.计算机语言发展阶段
(1)低级语言或机器语言(由0和1组成的指令)。
(2)中级语言或符号语言(用助记符号表示指令)。
(3)高级语言(接近于人的自然语言和数学语言)。
三、C语言的发展及其特点
1.C语言的发展
C语言是在BCPL(basiccombinedprogramming)基础语言(取第一个字母故而称为B语言的基础上发展起来的。
因为B语言过于简单、功能有限,在七十年代贝尔实验室的D.M.Ritchie设计出更精练并接近于B语言优点的BCPL的C语言(取第二个字母故而称为C语言)。
后来又经过多次改进成为今天广泛流行的、适合大学诸多专业的教学语言。
它既可用来编写系统软件,也可用来编写应用软件。
2.C语言的特点
(1)语言凑简、语法限制不太严格、程序设计自由度大
C语言有37个关键字;对数组下标越界不做检查,整型与字符型可通用;程序书写格式自由,一行可写多条语句,一条语句也可写入多行。
(2)算符丰富、数据类型丰富、具有结构化的控制语句
C语言有34种运算符;类型且多样化(有基本类、构造类、指针类和空类型);9中控制语句,如if…else语句、while语句、do…while语句、switch语句、for语句,用函数作为程序的模块单位,便于实现程序的模块化。
(3)允许直接访问物理地址、能对位和对硬件直接操作
C语言具有高级语言的功能和低级语言的许多功能,可用来编写系统软件这种双重性,使它既是成功的系统描述语言,又是通用的程序设计语言。
(4)可移植性好、生成目标代码质量和程序执行效率高
用C语言编写好的程序基本不做源代码修改就可在各种型号的计算机都能运行;生成目标代码质量仅低于汇编语言的10—20%。
四、最简单的C语言程序
例1.3:
求两个整数中的较大者。
#include
intmain()
{intmax(intx,inty);
inta,b,c;
scanf(”%d,%d”,&a,&b);
c=max(a,b);
printf("max=%d\n",c);}
intmax(intx,inty)
{intz;
if(x>y)z=x;
elsez=y;
return(z);}
1.最简单的C语言程序举例
2.C语言程序的结构
C程序是由一个或多个函数构成的。
函数由函数首部和函数体部构成,而函数体部又由声明部分和执行部分组成。
一个C程序有仅能有一个主函数main,但可有其他函数多个。
因此,函数是C语言程序的基本单位。
程序总是从main函数开始执行。
五、运行C程序的步骤与方法
1.运行C程序的步骤
编辑(.c文件)——编译(.obj文件)——连接(.exe文件)——运行程序
2.运行C程序的方法
File——new——编辑源程序——Ctrl+F9——输入数据——Alt+F5
第2章算法
教学时数:
2学时
重点难点:
1.算法的概念、思想。
2.流程图以及N-S图。
教学要求:
1.了解算法的不同表示方法。
2.理解算法的概念和特性。
3.理解算法的N-S流程图表示法。
教学内容:
一、什么是算法
广义地说,为解决一个问题而采取的方法和步骤称为“算法”。
对同一个问题,可以有不同的解题方法和步骤。
计算机算法可分为两大类别:
数值运算算法(其目的是求数值解)和非数值运算算法(包括的面十分广泛,最常见的是用于事务管理领域)。
二、简单的算法举例
例2.3:
判定2000—2500年中的闰年,并将结果输出。
闰年必须同时满足的两个条件:
(1)能被4整除,但不能被100整除的年份都是闰年;
(2)能被400整除的年份是闰年。
其中的算法:
步骤1:
year=2000。
步骤2:
若year能被4整除,不能被100整除;同时,若year能被400整除,则输出year的值和“是闰年”。
然后转到步骤4执行。
步骤3:
否则,其他情况输出year的值和“不是闰年”。
步骤4:
year=year+1。
步骤5:
当year<=2500时,转到步骤2继续执行,否则停止。
例2.5给出一个大于或等于3的正整数,判断它是不是一个素数。
分析所谓素数:
是指除了1和该数本身之外,不能被其他任何整数整除的数
步骤1:
输入n的值。
步骤2:
i=2(i作为除数)。
步骤3:
n被i除,得余数r。
步骤4:
若r=0,则n能被i整除,输出n“不是素数”,算法结束;否则执行步骤5。
步骤5:
i=i+1。
步骤6:
如果i<=n-1,返回步骤3;否则输出n“是素数”,然后结束。
三、算法的特性
(1)有穷性。
一个算法应包含有限的操作步骤,而不能是无限的。
(2)确定性。
算法中的每一步都应当是确定的,而不能是含糊的。
(3)有零个或多个输入。
执行算法时需要从外界取得必要的信息。
(4)有一个或多个输出。
算法的目的是为了求解,就是输出信息。
(5)有效性。
算法中的每一步都应当能有效地执行,确定的结果。
四、算法的表示
1.用自然语言表示算法
用自然语言写算法通俗易懂,但文字冗长,容易出现歧义且包含分支和循环的算法,不很方便,除了简单的问题外,一般不用自然语言。
2.用流程图表示算法
流程图是用一些图框来表示各种操作,用图形表示算法,直观形象,易于理解。
但传统流程图用流程线指出各框的执行顺序,对流程线的使用没有严格限制使用者可以毫不受限制地使流程随意地转来转去,使人难以理解算法的逻辑。
例2.6:
将例2.1求1×2×3×4×5的算法用流程图表示。
例2.8:
将例2.3判定2000—2500中闰年的算法用流程图表示。
例2.9:
将例2.4求1-1/2+1/3-1/4+…+1/99-1/100的算法用流程图表示。
4.用N-S流程图表示算法
例2.11:
将例2.1求1×2×3×4×5的算法用N-S图表示。
例2.12:
求50名学生中成绩高于80分者的学号和成绩输出的算法用N-S图表示。
例2.16:
求1×2×3×4×5的算法用伪代码表示。
begin(算法开始)
t=1
i=2
whilei≤5
{t=t*i
i=i+1}
printt
end(算法结束)
5.用伪代码表示算法
伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法,用伪代码写算法并无固定的、严格的语法规则,可以用英文,也可以中英文混用。
6.用计算机语言表示算法
要完成一项工作,包括设计算法和实现算法两个部分。
设计算法的目的是为了实现算法。
例2.18:
将例2.16求1×2×3×4×5的算法用C语言表示。
#include
intmain()
{inti,t;t=1;i=2;
while(i<=5)
{t=t*i;i=i+1;}
printf("%d\n",t);}
五、结构化程序设计方法
结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构。
其基本思路是把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。
采取以下方法保证得到结构化的程序:
(1)自顶向下;
(2)逐步细化;
(3)模块化设计;
(4)结构化编码。
第3章最简单的C程序设计
教学时数:
4学时
重点难点:
1、数据的输入和输出。
2、printf();scanf()。
教学要求:
1.了解各种类型的C语句。
2.理解程序执行的顺序性。
3.掌握数据输入/输出的函数的使用方法。
教学内容:
一、顺序程序设计举例
例3.1:
有人用温度计测量出用华氏法表示的温度(如f,今要求把它转换为以摄氏法表示的温度(如c)。
解题思路:
找到二者间的转换公式c=5/9(c-32)。
c代表摄氏温度,f代表华氏温度。
#include
intmain()
{floatf,c;f=64.0;c=(5.0/9)*(f-32);
printf("f=%f\nc=%f\n",f,c);}
例3.2:
计算存款利息。
有1000元,想存一年。
有三种方法可选:
(1)活期,年利率为r1;
(2)一年期定期,年利率为r2;(3)存两次半年定期,年利率为r3。
请分别计算出一年后按三种方法所得到的本息和。
解题思路:
确定计算本息和的公式。
从数学知识可知:
若存款额为p0,则:
活期存款一年后本息和为:
p1=p0(1+r1);一年期定期存款,一年后本息和为:
p2=p0(1+r2);两次半年定期存款,一年后本息和为:
p3=p0(1+r3/2)(1+r3/2
#include
intmain()
{floatp0=1000,r1=0.0036,r2=0.0225,r3=0.0198,p1,p2,p3;
p1=p0*(1+r1);p2=p0*(1+r2);p3=p0*(1+r3/2)*(1+r3/2);
printf(”%f\n%f\n%f\n”,p1,p2,p3);}
二、数据的表现形式及其运算
1.常量:
在程序运行过程中,其值不能被改变的量称为常量。
(1)整型常量:
如10020,12345,0,-3452
(2)实型常量:
十进制形式(如0.34,-56.79,0.0);指数形式(如12.34e3)
(3)字符常量:
如’?
’;字符串常量:
如”boy”;转义字符:
如’\n’;符号常量:
#definePI3.1416
2.变量:
在程序运行过程中,其值可以被改变的量称为变量。
变量必须先定义(定义变量时指定该变量的名字和类型),后使用。
变量名(字母、数字和下划线三者的组合,但数字不能开头)实际上是以一个名字代表的一个存储地址,从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。
3.数据类型:
4.运算符和表达式
(01)算术运算:
+、-、*、/(舍去小数部分后“向零取整”即取整后向零靠拢的整数商)、%(求余数运算,要求运算符两边的运算数为整数,结果也是整数)。
(02)关系运算符:
><==>=<=!
=
(03)逻辑运算符:
!
&&||
(04)位运算符:
<<>>~|∧&
(05)自增、自减运算符:
++i,--i:
在使用i之前,先使i的值加(减)1、i++,i--:
在使用i之后,使i的值加(减)1
(06)赋值运算符:
=及其扩展赋值运算符
(07)条件运算符:
?
:
(如max=(a>b)?
a:
b;)
(08)逗号运算符:
,
(09)指针运算符:
*和&
(10)求字节(长度)数运算符:
sizeof
(11)强制类型转换运算符:
(类型名)(表达式)
(12)成员运算符:
.->
(13)下标运算符:
[]
(14)其他:
如函数调用运算符()
例3.5求ax2+bx+c=0方程的根。
设b2-4ac>0,其中a、b、c由键盘输入。
#include
#include
intmain()
{doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);x1=p+q;x2=p-q;
printf("x1=%7.2f\nx2=%7.2f\n",x1,x2);}
5.C语句(的作用和分类)
(1)控制语句:
if、switch、for、while、do…while、continue、break、return、goto等
(2)函数调用语句
(3)表达式语句
(4)空语句
(5)复合语句
(6)赋值语句(最常用的语句)
(7)输入输出语句
6.有关数据输入输出的概念
C语言本身不提供输入/出语句,输入/出操作是由C标准函数库中的函数来实现的,格式输入输出函数(用这两个函数时,必须指定格式)printf和scanf不是C语言的关键字,而只是库函数的名字。
在使用输入输出函数时,要在程序文件的开头用预编译指令#include
(1)用printf函数输出数据及常用格式字符:
printf(格式控制,输出表列),例如:
printf(”i=%d,c=%c\n”,i,c);
①d格式符。
用来输出一个有符号的十进制整数,可以在格式声明中指定输出数据的域宽printf(”%5d%5d\n”,12,-345);%d输出int型数据,%ld输出long型数据。
②c格式符。
用来输出一个字符。
③s格式符。
用来输出一个字符串。
④f格式符。
用来输出实数,以小数形式输出.
ⅰ不指定数据宽度和小数位数,用%f。
ⅱ指定数据宽度和小数位数。
用%m.nf。
ⅲ输出的数据向左对齐,用%-m.nf。
⑤e格式符。
指定以指数形式输出实数.
(2)用scanf函数输入数据及常用格式字符:
scanf(格式控制,地址表列),含义同printf函数。
可以是变量的地址,或字符串的首地址。
格式声明与printf函数中的格式声明相似以%开始,以一个格式字符结束,中间可以插入附加的字符。
例如:
scanf("a=%f,b=%f,c=%f",&a,&b,&c);。
(3)用getchar函数输入一个字符。
getchar函数的一般形式为:
getchar()。
(4)用putchar函数输出一个字符。
putchar函数的一般形式为:
putchar()。
例3.9:
从键盘输入BOY三个字符,然后把它们输出到屏幕。
#include
intmain()
{chara,b,c;
a=getchar();b=getchar();c=getchar();
putchar(a);putchar(b);putchar(c);
putchar('\n');}
第4章选择结构程序设计
教学时数:
4学时
重点难点:
1.关系运算符与关系表达式。
2.逻辑运算符与逻辑表达式。
3.if和switch语句的用法。
教学要求:
1.理解关系运算和逻辑运算及用法。
2.掌握if语句三种形式和switch语句的用法。
3.理解if语句和switch语句的嵌套。
4.掌握分支结构程序设计的基本方法。
教学内容:
一、选择结构和条件判断
1.if语句,实现两个分支的选择结构
2.switch语句,实现多分支选择结构
例4.1:
在例3.5的基础上对程序进行改进。
题目要求求ax2+bx+c=0方程的根。
由键盘输入a,b,c。
假设a,b,c的值任意,并不保证b2-4ac>0。
需要在程序中进行判别,如果b2-4ac>0,就计算并输出方程的两个实根,否则就输出“方程无实根”的信息。
#include
#include
intmain()
{doublea,b,c,disc,x1,x2,p,q;
scanf("%lf%lf%lf",&a,&b,&c);
disc=b*b-4*a*c;
if(disc<0)printf(“hasnotrealroots\n”);
else{p=-b/(2.0*a);q=sqrt(disc)/(2.0*a);
x1=p+q;x2=p-q;
printf(“realroots:
\nx1=%7.2f\n,x2=%7.2f\n”,x1,x2);}
二、用if语句实现选择结构
1.if语句的一般形式
(3)if(表达式)语句1
elseif(表达式2)语句2
elseif(表达式3)语句3
┆
elseif(表达式m)语句m
else语句n
(在else部分又嵌套了多层的if语句)
if(number>500)cost=0.15;
elseif(number>300)cost=0.10;
elseif(number>100)cost=0.075;
elseif(number>50)cost=0.05;
elsecost=0;
等价于
if(number>500)cost=0.15;
else
if(number>300)cost=0.10;
else
if(number>100)cost=0.075;
else
if(number>50)cost=0.05;
elsecost=0;
3.选择结构的嵌套
在if语句中又包含一个或多个if语句称为if语句的嵌套:
(2)第二种嵌套:
if()
{if()语句1}
else语句2
内嵌if。
{}限定了内嵌if范围
例4.5:
有一函数:
编一程序,输入x值,则输出相应的y值。
解题思路:
用if语句检查x的值,根据x的值决定赋予y的值,由于y的可能值不是两个而是三个,因此不可能只用一个简单的(无内嵌if)的if语句来实现。
(1)先后用3个独立的if语句处理:
scanf("%d",&x);
if(x<0)y=-1;
if(x==0)y=0;
if(x>0)y=1;
printf("x=%d,y=%d\n",x,y);
(2)用一个嵌套的if语句处理:
scanf("%d",&x);
if(x<0)y=-1;
else
if(x==0)y=0;
elsey=1;
printf("x=%d,y=%d\n",x,y);
三、用switch语句实现多分支选择结构
switch语句的一般形式:
switch(表达式)
{case常量1:
语句1
case常量2:
语句2
┇
case常量n:
语句n
default:
语句n+1}
switch语句的作用是根据表达式的值,使流程跳转到不同的语句。
其(表达式)只能是整数类型(包括字符型)。
例4.6:
要求按照考试成绩的等级输出百分制分数段,A等为85分以上,B等为70~84分,C等为60~69分,D等为60分以下。
成绩的等级由键盘输入。
#include
intmain()
{chargrade;
scanf("%c",&grade);
switch(grade)
{case'A':
printf("85~100\n");break;
case'B':
printf("70~84\n");break;
case'C':
printf("60~69\n");break;
case'D':
printf("<60\n");break;
default:
printf("enterdataerror!
\n");}}
如果用switch语句只进行一次检查。
如果用if语句,至少要用3层嵌套的if,进行3次检查判断即可得到结果。
例4.8:
写一程序,判断某一年是否闰年。
用变量leap代表是否闰年的信息。
若闰年,令leap=1;非闰年,leap=0。
最后判断leap是否为1(真),若是,则输出“闰年”信息。
#include
intmain()
{intyear,leap;
scanf("%d",&year);
if(year%4==0)
if(year%100==0)
if(year%400==0)leap=1;
elseleap=0;
elseleap=1;
elseleap=0;
if(leap)printf("%dis",year);
elseprintf("%disnot",year);
printf("aleapyear.\n");}
例4.10:
运输公司对用户计算运输费用。
路程s(km)越远,每吨·千米运费越低。
标准如下:
s<250没有折扣
250≤s<5002%折扣
500≤s<10005%折扣
1000≤s<20008%折扣
2000≤s<300010%折扣
3000≤s15%折扣
解题思路:
设每吨每千米货物的基本运费为p,货物重为w,距离为s,折扣为d,总运费f的计算公式为f=p×w×s×(1-d)。
折扣的“变化点”都是250的倍数在横轴上加一种坐标c,c的值为s/250。
c代表250的倍数。
当c<1时,表示s<250,无折扣
1≤c<2时,表示250≤s<500,折扣d=2%;
2≤c<4时,d=5%;4≤c<8时,d=8%;
8≤c<12时,d=10%;c≥12时,d=15%。
#include
intmain()
{intc,s;floatp,w,d,f;
scanf("%f,%f,%d",&p,&w,&s);
if(s>=3000)c=12;
elsec=s/250;
switch(c)
{case0:
d=0;break;case1:
d=2;break;
case2:
case3:
d=5;break;
case4:
case5:
case6:
case7:
d=8;break;
case8:
case9:
case10:
case11:
d=10;break;
case12:
d=15;break;}
f=p*w*s*(1-d/100);
printf(“freight=%10.2f\n”,f);}
第5章循环结构程序设计
教学时数:
4学时
重点难点:
1.循环的基本概念。
2.while循环;dowhile循环;for循环。
3.循环的嵌套。
教学要求:
1.了解goto、do…while语句及其构成的循环。
2.理解循环的要素和控制方法。
3.掌握while语句的用法。
4.熟练掌握FOR语句的用法。
5.掌握循环的嵌套。
6.理解break语句和continue语句的用法。
教学内容:
一、为什么需要循环控制
例如,全班有50个学生,统计各学生三门课的平均成绩。
输入学生1的三门课成绩,并计算平均值后输出
scanf(“%f,%f,%f”,&s1,&s2,&s3);
aver=(s1+s2+s3)/3;
printf(“aver=%7.2f”,aver);
输入学生2的三门课成绩,并计算平均值后输出
scanf(“%f,%f,%f”,&s1,&s2,&s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第1章 程序设计和C语言 程序设计 语言