1、1计算任务的处理对象和处理规则的描述l低级语言(机器语言和汇编语言)程序是一组指令和相关数据l高级语言程序是一组说明和语句l高级语言程序设计编制说明和语言来描述计算任务的处理对象和处理规则(算法描述)2l诞生19721972年 BELL BELL 实验室 Dennis RitcheDennis Ritche为描述 UNIX UNIX 操作系统设计l重要特征高级语言的全部功能和汇编语言的部分功能l标准版本ANSI ANSI 标准 C C 语言l开发环境和专用版本TURBO CTURBO CVISUAL C/C+VISUAL C/C+GC / GCCGC / GCCFORTE C/C+FORTE
2、C/C+3l优点语言简洁、程序设计自由度大、可读性好运算丰富、数据结构使用灵活可直接描述硬件操作、可移植性好程序库支持十分丰富l缺点语义不严格、维护难度大编译提供的错误信息少、对程序员要求高4任务:打印输出文本“Welcome to C”Welcome to C”#include main( )printf( “Welcome to Cn” );字符串常数Welcom to C5n基本词汇(单词)名字(标识符),如:main, printfmain, printf常量,如:2323、2.32.3、“Welcome”Welcome”分割符,如: # #、( (、) )、 n严格的语法格式单词排列
3、规则如:主函数的程序结构main( ) main( ) 若干名字说明若干语句printf( );printf( ); 6l任务:求两个整数的和#include main( )int x, y, sum;printf( “请输入两个整数:”);scanf( “%d%d”, &x, &y );sum = x + y;printf( “和等于 %dn”, sum );说明变量 x,y,sum x,y,sum 是整数类型标准函数(输入用)计算和赋值请输入两个整数:23 98和等于 1217l头文件导入#include #include 引入标准库的函数说明(在文件stdio.hstdio.h中)l什么
4、是函数表示一个执行过程;用名字标识。l什么是语句表示一个执行步骤;通常以分号结尾。l什么是名字说明补充说明程序中使用的标识符包括:代表函数的函数名、代表数据对象的变量名8l标识符(名字)的组成首字符为字母或_,其余字符为数字字符或字母或_l使用原则:先说明、后引用适用于所有变量名、函数名l变量说明(数据对象说明)说明变量的数据类型格式:类型 变量名;例如:int x;x是整型变量char c,h;c和h是字符型变量l#include 将文件 stdio.h 插入stdio.h 中有函数 printf 和 scanf 的说明9l算术运算加减乘除x+y x-y xx+y x-y x* *y x/y
5、y x/y求余数x%yx%y以算术运算表达式的形式出现l赋值运算sum = x + ysum = x + y取出变量 x x 和 y y 的值,完成加法后;将结果存放到变量 sum sum (改变了其内容)等号 = = 代表赋值,而不是相等。10lscanf( “%d%d”, &x, &y )%d指示整数的输入输出IO(转换说明符)输入2个整数依次转换到变量 x 和 y 中用户在键盘输入回车(Enter)时开始读入lprintf( “和等于%dn”, x )输出指定的符号串,用变量 x 的值替换%d,n是转义字符,代表“回车符”(换行符)lscanf 和 printf 来自C语言的标准函数库是
6、预先准备好的程序模块,供直接使用11l程序中的变量:代表内存单元;变量说明语句为变量分配内存单元 int x, y;int x, y;各种类型需要的内存空间大小不同,表示范围和精度不同l变量的值相应的内存单元中的数据值,参与计算l赋值和读入数据的意义将数据保存到变量对应的内存空间,如:sum=x+ysum=x+yl程序只能访问分配给自己的内存单元12int x, y, sum;printf( “请输入两个整数:”);scanf( “%d%d”, &x, &y );sum = x + y;printf( “和等于 %dn”, sum );内存空间xysum982312148和等于12113l程序
7、变量的特征是存储单元,可以保存计算的结果赋值将改变其内容(= 表示赋值)l过程性语句的顺序执行计算结果(变量内容)和语句执行顺序有关l常用算术运算符+(加) -(减) *(乘) /(除) %(求余)14l综合开发环境文件名:TC.EXE在D:/TC目录下提供编辑(Edit)、编译(Compile)、运行(Run)、调试(Debug)功能l上机过程打开计算机、启动TC.EXE编辑源程序文本编译运行输入数据、查看结果如果有错误、重复以上过程;不断总结提高15l程序文本编辑命令进入编辑:Alt + E装入存在的文件:F3、输入文件名(*.C)保存编辑结果:F2、输入文件名(*.C)l编译运行命令生成
8、可执行文件(Make):F9编译后立即执行: Ctrl + F9系统将指示程序错误(在Message窗)或者:报告成功16编辑程序文本保存程序文本编译连接运行装入程序文本新建程序修改存在的程序编译报错结果有错结束17l无奈的选择Esc Esc 或连续按 F6 F6 (窗口切换)l菜单选择Alt + Alt + 首字符l跟踪命令(Trace)Trace): F7F7(单步跟踪)设置监视点(Watch):(Watch): Ctrl + F7Ctrl + F7输入变量名:messagemessage窗将显示变量值l退出TURBO CTURBO CAlt + XAlt + Xl环境配置Option O
9、ption Directory Directory 设置 includeinclude和 liblib文件目录18l编辑l编译l运行l跟踪19l应用问题根据不同条件,完成不同的计算处理l语言支持条件判断的支持关系运算选择结构l应用例要求:输入两个实数,进行比较;输出比较结果(“等于”,“大于”或“小于”)20#include main( ) float x, y; printf( “请输入两个实数:” ); scanf( “%f%f”, &x, &y ); if( x = y )printf( “X等于Yn” ); else if( x y )printf( “X大于Yn” );elsepri
10、ntf( “X小于Yn” ); 说明x x和y y是浮点数条件表达式条件分支(真、假)21l格式:if if ( 条件表达式 ) )语句/ /* *真分支* */ /elseelse语句/ /* *假分支* */ /l或者if ( if ( 条件表达式 ) )语句/ /* *真分支* */ /l关键字(保留字)系统已经使用的标识符,如:if else int float if else int float 常用关系运算符 等于 = = (双等号) 不等 !=!= 大于 小于 = 小于等于 =22lelse else 子句和最近的 if if 语句匹配l浮点数变量变量说明float x;floa
11、t x;转换说明符 %f%fl分程序结构(复合语句)用 和 包装的一组语句常用于条件分支的描述l程序书写格式(强烈推荐)每个语句占一行采用缩进格式描述条件分支和复合语句23l考虑计算任务从键盘读入5 5个整数,输出它们的和;l设计思路设置一个整型变量,保存整数的和设置另一个变量,保存刚读入的整数每读入一个整数,将它累加到整数和l实现需求为5 5个整数的处理提供循环控制24l为实现循环,设置变量 i i,保存循环次数(计数器)。lwhile while 语句检查条件i 5i 5控制循环终止l循环条件不成立时执行后面的语句#include main( ) int sum, x; int num;
12、/* 循环变量 */ sum = 0; /* scanf( “%d”, &num );*/while( num!=0 ) scanf( “%d”, &x );sum = sum + x;num= num- 1; printf( “sum = %dn”, sum );25l格式while ( while ( 条件表达式 ) ) 语句 / /* *循环体* */ /l控制逻辑表示为流程图l注释表示/ /* * 注释 * */ /条件表达式循环体成立不成立26l讨论内存空间的使用l实现1 1:3 3个整型变量l实现2 2:5 5个整型变量算法l实现1 1:存储概念l实现2 2:数学概念程序运行和数学
13、计算l区别:存储器和赋值的概念l提倡用实现1 1方法#include main( ) int x1, x2, x3, x4, x5; scanf( “%d%d%d%d%d”,&x1, &x2, &x3, &x4, &5 ); printf( “sum = %dn”, x1 + x2 + x3 + x4 + x5 );27l变量说明int int floatfloatcharcharl控制语句if if 语句while while 语句l算术运算(左结合)+ - + - * * / % / %加 减 乘 除 求余l关系运算 = != = = =等于 不等 大于 小于 大于等于 小于等于l格式转换
14、符%d %f %c%d %f %c整数 浮点数 字符28#include #include main( )int a, b, c;float t1, t2;scanf( “%d%d%d”, &a, &b, &c );t1 = b*b 4*a*c;if( t1 = 0 )printf( “x = %fn”, (float)b/-(2*a) );else if( t1 0 ) t2 = sqrt( t1 );printf( “x1=%f, x2= %fn”, (-b+t2)/(2*a), (-b-t2)/(2*a) ); elseprintf( “无解n” );强制类型转换数学函数说明求平方根29
15、 t1t2l一元二次方程aXaX2 2 + bX +c + bX +c求解过程l变量保存数学计算中的中间结果输入a,b,cb2-4act1t1=0YNt10输出b / 2a输出(b+t2)/2a(b-t2)/2a输出“无解”YN30l输入scanf( scanf( 格式说明,变量地址,变量地址 ); );按照指定格式从标准输入文件(键盘)读数据,写入指定的变量常用 & & 来获得变量地址(内存单元地址)l输出printf( printf( 格式说明,表达式,表达式 ); );按照指定格式将各个表达式的值写入标准输出文件(显示器)l常用格式转换符%d %d 整数%c %c 字符%f %f 浮点数
16、%s %s 字符串& & 并且31作业:1、自测:2.3,2.4,2.5,2.62、程序设计练习:2.19, 2.23,2.29 3.13, 3.27,3.293、上机作业:实验指导书2.2,2.3,2.4,2.532l算法解题过程的精确描述可完全精确执行、有确定结果的有穷指令序列l算法的控制结构选择结构(如:C C语言的 if if 语句)循环结构(如:C C语言的 while while 语句)顺序结构(语句组)3 3种结构可以满足各种算法的所有控制要求33l程序设计过程:算法设计 + + 程序实现算法描述:l描述解题逻辑,验证正确性l独立于程序设计语言程序实现:l利用程序设计语言的功能,
17、实现算法l熟悉语言的语法、语义、支撑环境l算法描述方法n流程图1.1.伪码34l数据对象考虑sum sum 保存已经输入的整数之和l算法描述:n赋值 0 0 sum sumn重复执行 5 5 次2.12.1 读入一个整数2.22.2 累加到 sumsumn输出整数和 sumsuml仅考虑主要数据对象和控制结构1.1.程序实现阶段考虑数据对象和控制结构的具体实现35l任务:输入某班级人数和某课程的考试成绩(100100分制),输出及格率(60)(60)和不及格率。l基本方法逐个输入成绩,判断及格否,统计及格人数和不及格人数l数据对象考虑班级人数numnum及格人数passpass不及格人数fai
18、lfail输入成绩scorescore36初值设置0 pass0 fail读入成绩 score读入学生人数 numnum = 0score 60fail 加一num 减一pass 加一num 减一计算及格率pass/(pass+fail)和不及格率fail/(pass+fail)并输出YNYN37l模拟算法的计算过程,跟踪数据的变化动作numnumpasspassfailfailscorescore初值设置0 00 0输入人数3 3输入分数2 21 16969输入分数1 11 15757输入分数0 02 28282输出38l流程图的结构从外层到内层顺序 循环 选择l程序结构复合语句 while
19、 while 语句 if if 语句while while 条件:num = 0num = 0if if 条件:score 60score 60l细节问题输出格式: 65.5%65.5%涉及浮点数的处理39#include main( ) int num, pass, fail, score; while( 0 != num ) printf( “输入分数:” );scanf( “%d”, &score );if( score 60 ) fail+=1;num-=1; else pass+=1;num-=1;num = pass + fail;printf( “passed %f%n”, (f
20、loat)pass/num*100 );printf( “failed %f%n”, (float)fail/num*100 );pass = fail = 0;printf( “请输入学生人数:”);Scanf(“%d”, &num );初值设置和输入学生人数输出及格率和不及格率输入分数统计及格人数和不及格人数40 赋值表达式 pass = (pass = (fail = 0fail = 0) ) 赋值运算符 = =右结合 简化赋值(自反运算) pass += 1pass += 1 等价于 pass =pass+ 1pass =pass+ 1 printf(“passed printf(“p
21、assed %d%n”,100%d%n”,100* *(float)pass/num);(float)pass/num); 强制类型变换 (类型名)表达式改变其数据类型 转义字符 % 用于输出 % %41 Programs=Algorithms+Data StructurePrograms=Algorithms+Data Structure 程序 = = 算法 + + 数据结构 程序设计过程 问题定义:输入输出要求(数据与格式) 数据结构:分析需要保存的信息,组织数据结构 算法设计:编制解题步骤 程序编码:选用程序设计语言,实现解题步骤 程序测试:排错和测试42l算法的学习(长期任务)利用变量
22、就是存储器的概念,考虑解题过程中必须保存的数据利用3 3种控制结构(顺序、选择、循环),考虑数据变化过程,设计处理过程应能够熟练地设计数据组织和简单的算法l程序设计语言的学习阅读程序实例,理解新的语言现象程序设计实践,上机排错调试对主要语言功能和上机编程操作应该达到十分熟练43l任务统计一行输入字符中每个数字字符的出现次数l数据对象考虑应保存1010个整数;设置数组 digits10digits10每个元素存一个数字的出现次数数字字符 a a 保存在 digitsa digitsa 中输入字符 chch44n设digitsdigits数组元素为0 0n读入一个字符 chchn如果chch不是换
23、行符,则3.13.1 如果chch是数字字符,则3.1.1 digitsch 3.1.1 digitsch 加一3.23.2 读入一个字符 chch3.33.3 重复处理3 3n输出digitsdigits数组45l设 digits 数组元素为 0n设循环变量 i 为 0n当 i 小于 10 时2.1 设 0 digits i 2.2 i 加一2.3 重复 2l输出 digits 数组n设循环变量 i 为 0n当 i 小于 10 时2.1 输出 digits i 2.2 i 加一2.3 重复 246l算法过程分析3 3个循环:主算法、2 2个细化算法l程序结构采用 while while 语句
24、循环控制:换行符检查、数组下标l数据结构一维整数数组下标问题:数字字符整数(利用ASCIIASCII值)47#include main( )int digits10, i = 0;char ch;while( i 10 )digits i+ = 0;scanf( “%c”, &ch );while( ch != n ) digits ch 0 += 1;scanf( “%c”, &ch );i = 0;while( i nm nmod(m, n) mod(m, n) 表示除法余数53l基本思路对于递归定义,采用循环结构完成一个迭代处理过程l数据对象考虑两个整数m, nm, n的保存,余数的保存
25、x x算法描述n输入2 2个整数m, nm, nn如果mn, mn, 则交换m, nm, n的内容nm m除以n n的余数x xn如果x x不等于0 0n4.14.1 n n m mn4.24.2 x x n nn4.34.3 重复执行3 3,4 41.1.输出x x54mnx1.输入9152.交换1593.求余64.判断、移动963.求余34.判断633.求余04.判断5.输出第3,4步:计算 gcd( m, n )每次迭代更新 m, n 后,计算 gcd( m, n )重复第 3,4 步55l算法过程分析选择结构 数据交换循环结构 递归计算l程序结构if if 语句控制数据交换while
26、while 语句实现循环结构l问题:循环结构出口不在头部终止条件:包括求余和比较方法:利用赋值表达式56#include #include main( )main( ) int m, n, x, t;int m, n, x, t;printf( “printf( “输入2 2个整数:” );scanf( “%d%d”, &m, &n );scanf( “%d%d”, &m, &n );if( m n ) if( m n ) t = m;t = m;m = n;m = n;n = t;n = t; while( 0 != (x = m%n) ) while( 0 != (x = m%n) ) m
27、 = n;m = n;n = x;n = x; printf( “gcd = %dn”, x );printf( “gcd = %dn”, x ); 变量t 用于数据交换求余数运算57l数据交换引入变量 t t;利用存储概念l循环结构的实现使用赋值表达式 x = m%n x = m%n 的值参加运算求余运算和比较运算 条件表达式l运算优先级附录 C C 详细列表,总结如下:算术运算 -优于- - 关系运算 -优于- - 逻辑运算 -优于- - 赋值运算单目运算-优于双目运算58lTURBO C TURBO C 跟踪调试F7F7单步跟踪设置监视点(Watch):(Watch):Ctrl + F7Ctrl + F7输入变量名l跟踪过程messagemessage窗将显示被跟踪变量的值59写在最后写在最后成功的基础在于好的学习习惯成功的基础在于好的学习习惯The foundation of success lies in good habits谢谢大家荣幸这一路,与你同行ItS An Honor To Walk With You All The Way讲师:XXXXXX XX年XX月XX日