• 1. C语言程序设计 Program Design in C Language田 祎 Tel:13991408620 E-mail:ty2004@163.com QQ:472575637 WeChat:ian2004经济管理学院
    • 2. 《C语言程序设计》是计算机专业与非计算机专业进行程序设计的启蒙语言课程,它是继计算机文化基础课程之后,对提高学生掌握应用计算机能力的一门技术基础课程。 通过本课程的学习使学生更好地了解和应用计算机,培养应用计算机独立解决问题的能力,掌握一门计算机语言,为今后从事信息技术领域的工作奠定良好的、扎实的计算机语言编程基础和处理能力。你应该知道 本课程的性质、目的与任务
    • 3. 你应该知道 其主要内容包括算法、C语言的数据类型、基本语句及利用该语句进行程序设计的方法和技巧等。 本 课 程 主 要 讲 授 内容
    • 4. 你应该知道本 课 程 使 用 教材与参考教材 使用教材: 《C程序设计》 清华大学出版社 参考教材: 1.《THE C PROGRAMMING LANGUAGE》(Second Edition),(美)        Brian W.Kernighan,Dennis M.Ritchie, 北京:清华大学出版社,1996 2.《C语言大全》,(美)Herbert Schildt, 王子恢,戴健鹏等译, 北京: 电子工业出版社,2001 3.《C程序设计教程》,(美) H.M.Deitel, P.J.Deitel著,薛万鹏等译,        北京:机械工业出版社,2000 4.《C语言程序设计教程》,谭浩强等编, 高等教育出版社 ,1998 5.《C语言程序设计教程》 杨路明 编著 北京邮电大学出版社 6.《C语言程序设计上机指导与习题选解》 杨路明编著 北京邮电大学 7.《全国计算机等级考试二级考试参考书——C语言程序设计》,教育部 考试中心, 北京:高等教育出版社,2003
    • 5. 5教学要求达到三个层面的教学:掌握C语言的基本结构、各种数据类型和控制流程的语法、语义和语用。 学习运用计算机语言进行程序设计的思想和方法,初步受到程序设计方法、技巧、风格和素养的训练。 熟悉并掌握一些常用基本算法和C语言程序设计技术,培养利用C语言解决一般问题的程序设计能力。
    • 6. 6课时安排(32学时)第一章:C语言程序设计概述 2 课时 第二章:基本数据类型与表达式 2 课时 第三章:顺序程序设计 2 课时 第四章:选择结构程序设计 2 课时 第五章:循环结构程序设计 4 课时 第六章:数组 4 课时 第七章:函数与编译预处理 6 课时 第八章:指针 6 课时 第九章: 用户自定义数据类型 2 课时 第十章: 文件 2 课时
    • 7. 7课时安排(16学时)序号实验项目名称实验学时实验类型实验要求1熟悉C语言程序开发环境2验证必做2数据描述2验证必做3顺序结构程序设计3设计必做选择结构程序设计设计必做循环结构程序设计设计必做4函数和编译预处理2设计必做5数组2设计必做6指针3设计必做7文件2设计必做
    • 8. 学习方法:
    • 9. 9 1.1 程序与程序设计语言 1.2 算法及其描述 1.3 C语言的发展及特点 1.4 C语言程序的基本结构 1.5 C语言字符集、标识符与关键字 1.6 C语言程序的开发环境第 1 章 C语言程序设计概述
    • 10. 10教学目的和基本要求:要求了解程序语言及算法的概念,C语言特点,C程序开发过程,简单C程序结构。 教学重点:算法的概念、C程序开发过程、简单C程序结构。
    • 11. 1.1 程序与程序设计一、程序(Program)为使计算机完成一个预定的任务而设计的一系列语句或指令 main() { int a,b,c; a=100; b=200; c=a+b; printf(“sum=%d\n”,c); } stud.c
    • 12. 12一个程序应包括 两方面的内容数据类型(Data types) 数据结构(Data structure)数据结构+算法=程序1、对数据的描述算法(algorithm) 2、对操作的描述在程序中要指定用到哪些数据以及这些数据的类型和数据的组织形式即要求计算机进行操作的步骤著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式:
    • 13. main() { int a,b,c; a=100; b=200; c=a+b; printf(“sum=%d\n”,c); } 对数据 的描述 对操作 的描述
    • 14. 14一个程序应包括 两方面的内容1、对数据的描述2、对操作的描述一个程序除了算法和数据结构这主要要素外,还应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言表示 算法、数据结构、程序设计方法和语言工具是一个程序设计人员应具备的知识
    • 15. 二、程序设计(Programming)设计、书写及检查调试程序的过程。 数据结构 确定算法 编写代码 调试运行 整理结果 并攥写文档 程序=数据结构 +算法 +程序设计方法 +文档 分析问题
    • 16. EXAMPLE[1-1]:0021班 学生成绩表单姓 名英语高数总分春风8867夏天8079秋雨9283冬雪7690请计算下列给出的成绩表单中“春风”的总成绩
    • 17. 姓 名英语高数总分春风8867夏天8079秋雨9283冬雪7690 英语和高数成绩均用整型数据表示: int score1, score2, sum; 数据结构 确定算法sum=score1+score2 score1=88 score2=67 Beginsum=0score1=88 Score2=67sum=score1+score2输出sumEnd 分析问题对于接手的任务要进行认真的分析 研究所给定的条件 分析最后应达到的目标 找出解决问题的规律 选择解题的方法
    • 18. 姓 名英语高数总分春风8867夏天8079秋雨9283冬雪7690 编写代码 main() { int score1, score2,sum=0; score1=88; score2=67; sum=score1+score2; printf(“sum=%d\n”, sum); }Beginsum=0score1=88 Score2=67sum=score1+score2输出sumEnd 数据结构 确定算法 分析问题
    • 19. 姓 名英语高数总分春风8867夏天8079秋雨9283冬雪7690 数据结构 确定算法 编写代码 main() { int score1, score2,sum=0; score1=88; score2=67; sum=score1+score2; printf(“sum=%d\n”, sum); } 调试运行 整理结果 并攥写文档 程序名称:sum.c 程序员:李晓 程序功能:计算学生成绩 代码编写日期:2015年10月25日 该程序算法用下列程序流程图描述: …… 155 分析问题
    • 20. 20 三、程序设计语言自然语言: 人与人之间交流的工具,通过自然语言实现人与人之间的沟通,使别人能够明白的按照语言的表达来办事、工作。 如:汉语、英语、德语、法语、日语等。什么是语言?计算机语言:(又叫程序设计语言) 人与计算机之间交流的工具,通过计算机语言实现人与计算机之间的沟通,使计算机能够明白的按照语言的表达来办事、工作。 如:C语言、foxpro、basic、java、汇编语言、机器语言等。
    • 21. 21 计算机可以直接识别和执行的二进制语言。 如: 加法指令: 1 0 0 0 0 0 0 0 减法指令: 1 0 0 1 0 0 0 0 特点:计算机可以直接识别和执行,效率高, 节省内存;但难以阅读和记忆。 按照不同种计算机语言的语法编写的程序,我们把它称为某一种语言的程序。 用C语言编写的程序,我们称为C语言程序。类似的有机器语言程序、汇编语言程序、basic语言程序等。 程序设计语言的种类很多,从其发展历史以及功能情况来划分可以大致划分成五个阶段:(1)机器语言
    • 22. 22(2)汇编语言 用“助记符”来表示机器指令。 如: ADD A, B SUB A, B 计算机不能直接识别和执行用汇编语言编写的源程序,它必须经过一个叫汇编程序的系统软件翻译成机器语言程序(即目标程序)后才能执行。(3)算法语言 (又称为面向过程的语言) 即高级语言,不依赖于机器,降低了编程的难度。 如:C、PASCAL、FORTRAN等,用‘+’和‘-’来表示加减运算。 计算机也不能直接执行算法语言描述的源程序,必须先经过编译程序或解释程序翻译成目标程序后,才能由计算机执行。
    • 23. 23(4)面向任务的程序设计语言 是非过程化的语言,不需要知道问题是如何求解的。 例如:要从某学生表SS用数据库(SQL)查询语言获取表中记录的信息,采用SELECT语句,描述如下: SELECT SSNO,SSNAME,SSAGE,SSSEX FROM SS。(5)面向对象的程序设计语言 认为系统是由许多对象组成的,对象通过消息相互联系和相互作用,从而完成系统的功能。如C++,设计的程序更易懂, 更适合更大规模的程序开发。
    • 24. 1.2 算法与算法的描述一、算法 所谓“算法”,是指为解决一个问题所采取的方法和步骤。 100 1+2+3+……+100,即  n n=1
    • 25. 1+2+3+4+5+ … …+100 100+( 99 +1 )+(98+2) + … … +( 51+49)+50=100+50+49X100=5050 (1+3+5+ … …+99)+ (2+4+6+ … …+100)=5050 1+2+3+4+5+ … …+100=5050
    • 26. 完成一项工作设 计 算 法实现 算 法
    • 27. 27算法应当具备以下几个方面的特点: 1、一个算法必须保证执行有限步之后结束(有穷性); 2、算法的每一个步骤必须具有确切的定义(确定性); 3、应对算法给出初始量(有零个或多个输入); 4、算法具有一个或多个输出; 5、算法的每一步都必须是计算机能进行的有效操作(有效性)。 正确的语法+正确的算法=正确的程序
    • 28. 二、算法的描述工具描述工具 程序流程图 N-S图 PAD 图 伪代码 ……
    • 29. 流程图是用一些图框来表示各种操作 用图形表示算法,直观形象,易于理解1、程序流程图起止框输入输出框处理框判断框流程线连接点注释框x≧0Y……N……一个入口两个出口
    • 30. 2.4.2用流程图表示算法流程图是用一些图框来表示各种操作 用图形表示算法,直观形象,易于理解起止框输入输出框处理框判断框③①②①③②③位置不够防止交叉流程线连接点注释框
    • 31. Beginsum=0score1=88 Score2=67sum=score1+score2输出sumEnd 请用程序流程图描述求解 下列问题的算法姓 名英语高数总分春风8867EXAMPLE[1-2]:
    • 32. 32用程序流程图表示的三种基本结构ABC 顺序结构 AexpT 选择结构 ABexpTF
    • 33. 33 ……case expcase 1 case ncase 2 选择结构
    • 34. 34AexpTF循环结构 expTAF
    • 35. 设:a=100 b=200 现将a与b中的值互换。请用 程序流程图描述其互换过程EXAMPLE[1-3]:ab100200t100200 100 Begina=100 b=200t=aa=bb=t输出a,bEnd
    • 36. 36 现代社会是竞争时代,可以说是机遇与危机 并存,只要我们思路开阔,头脑灵活,就能够在 生活中把握机遇,铸造辉煌的人生。 ---- Og Mandino(美)
    • 37. 37 健康、青春和自由可以说是人生的三大财宝, 但当我们拥有它时,却毫无所觉,一旦丧失后,才 意识到它们的可贵。 ---- Arthur Schopenhauer(德)
    • 38. 输入a与b两个值,若a>b则 输出a。请用程序流程图描 述其执行过程。EXAMPLE[1-4]:BeginTF输入a,ba>b输出aEnd
    • 39. 输入a与b两个值,若a>b则 输出a,否则输出b。 请用程序流程图描述其执行 过程。EXAMPLE[1-5]:Begin输入a,ba>bTm=aFm=b输入a,bEnd
    • 40. BeginEnd 输入a,b,c 三个值,请 输出三个值中最大的一个。 请用程序流程图描述其执 行过程。输出 m输入a,b,ca>bTm=am=bFm>cm=cFTEXERCISES[1-5]:
    • 41. 输入a,b,c 三个值,请按 其值从大到小排序并输出。 要求用程序流程图描述其排 序过程。EXERCISES[1-6]:
    • 42. BeginEnd输出a,b,c输入a,b,ca>bTt=a a=b b=tFa>cFTt=a a=c c=tb>cFt=b b=c c=tT
    • 43. Beginsum=0 i=1sum=sum+i输出sumEnd请用程序流程图描述: sum=1+2+3+4+……+100 的计算步骤。 设:i 计数器:i=i+1 sum 为累加器:sum=sum+ii= i+1Ti>100FEXAMPLE[1-7]:
    • 44. 从键盘输入30名学生的高数成绩 并输出高数成绩小于60分的值,并统 计出小于60的有多少人。 要求用程序流程图描述其解决该 问题的算法。设:i 总人数计数器:i= i+1 (i<=30) g 为输入的成绩 num 记录不及格人数: num=num+1EXERCISES[1-8]:
    • 45. End输出 numYi<=30NBegini=0, num=0 g<60F输入 g输出 gTnum=num+1i= i+11122
    • 46. 46 顺序结构1973 年由美国学者 I.Nassi、B.Shneiderman A BT Fexp A B exp A 选择结构 循环结构2、N-S 图
    • 47. 描述计算: sum=1+2+3+4+……+100 sum=0, i=1 i 100 sum=sum+i i=i+1 输出 sum EXAMPLE[1-9]:
    • 48. 48如用N-S图来描述从a和b中找大数的问题。 有了正确的算法,我们就可以按照算法一步一步的转换成相应的程序语言语句。 上面的右图就是把“从a和b中找大数问题”的算法转换成了相应的C语言语句。 scanf(“%d,%d”,&a,&b); if(a>b) max=a; else max=b; printf(“%d”,max);输入a和b a>b maxa maxb 输出maxYN 常用的算法有:迭代法、枚举法、递归法、递推法等。
    • 49. 49结构化程序设计三种基本结构的共同点: 都是只有一个入口和一个出口; 结构内的每一个框都有机会被执行; 结构内没有死循环。结构化程序设计程序的三种基本结构 顺序结构程序:按照书写顺序依次执行语句 选择结构程序:按照条件判断选择执行语句 循环结构程序:通过条件控制循环执行语句
    • 50. 50结构化程序设计的基本原则:如果一个程序仅包含这三种基本结构(由这些基本结构顺序组成),则称为结构化程序。 结构化程序设计的基本原则: 采用自顶向下、逐步细化的方法进行设计; 采用模块化原则和方法进行设计。即将大型任务从上向下划分为多个功能模块,每个模块又可以划分为若干子模块,然后分别进行模块程序的编写; 每个模块都是用结构化程序实现,即都只能由三种基本结构组成,并通过计算机语言的结构化语句实现。
    • 51. 51B语言:Bell实验室,1970年在PDP机器上用其编写UNIX系统CPL语言:剑桥大学,1963年BCPL语言:剑桥大学,1967年C语言:Bell实验室,1972~1973年用其改写UNIX系统经简化进一步简化保持精练、接近硬件的优点,克服数据类型过少的不足1.3 C语言的发展及特点一、C语言的发展概况
    • 52. 52 产生背景 产生过程 时间:1972~1973 地点:美国贝尔实验室 目的:UNIX操作系统 设计人: Ken.Thompson和Dennis.M.Ritchie C标准 标准C: K&R合著《The C Programming Language》 ANSI C: 1983年 87 ANSI C: 1987年 1990年国际标准的ANSI CC语言的产生过程 目前在微型计算机上使用的有Microsoft C,Quick C,Turbo C等多种版本。
    • 53. 53>二、C语言的特点>>>>增加学习难度语言简洁,表达能力强,易于理解 只有32个关键字,9种控制语句 数据构造能力强 运算符丰富 程序书写格式自由 可直接访问物理地址,实现对硬件和低层系统软件的访问 语言生成的代码质量高 可移植性好
    • 54. 5432个关键字:(由系统定义,不能重作其它定义) auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef unsigned union void volatile while <
    • 55. 559种控制语句: if( )~else~ for( )~ while( )~ do~while( ) continue break switch goto return<
    • 56. 56例 C语言与Pascal语言比较 C语言 Pascal语言 含义 { } BEGIN….END 复合语句 if(e) s; IF(e) THEN s 条件语句 int i ; VAR i:INTEGER 定义i为整型变量 int a[10]; VAR a:ARRAY[1..10] OF INTEGER 定义整型数组a int f( ); FUNCTION f( ):INTEGER 定义f为返值整型的函数 int *p; VAR p:INTEGER 定义p为指向整型变量的指针 i+= 2; i=i+2 赋值i+2i i++,++i; i=i+1 i自增值 结论:C比 Pascal简练,源程序短。 <
    • 57. 5734种运算符: 算术运算符:+ - * / % ++ -- 关系运算符:< <= == > >= != 逻辑运算符:! && || 位运算符 :<< >> ~ | ^ & 赋值运算符:= 及其扩展 条件运算符:?: 逗号运算符:, 指针运算符:* & 求字节数 :sizeof 强制类型转换:(类型) 分量运算符:. -> 下标运算符:[] 其它 :( ) -<
    • 58. 58
    • 59. 59#include /*标准输入输出头文件*/ main() { int a,b,c,s; /*定义四个整型变量*/ scanf(“%d%d%d”,&a,&b,&c); /*变量赋值*/ s=a+b*c; /*算术运算并赋值*/ printf(“s=%d\n”,s); /*输出结果*/ }1.4 C语言程序的基本结构一、简单的C语言程序示例例1-1:从键盘输入三个任意值的整数a,b,c,按公式s=a+b×c计算s的值,并显示结果。
    • 60. 60⑸ 在C语言中区分大小写,如Main、MAIN、main、 maiN是不相同的。⑴ 一个完整的C程序由若干个函数组成,至少有且仅有一个main函数,每个函数包括: 函数说明部分 变量定义 函数体 语句部分⑵ 语句必须以分号(;)作结束标志;⑶ 由“/*”与“*/”之间的内容构成C语言程序的注释部分;⑷ 用预处理命令#include可以包含有关文件的信息。C语言程序的基本结构:
    • 61. 61一、C语言字符集 1、英文字母:大小写各26个,共计52个; 2、阿拉伯数:0~9共10个数字; 3、下划线: _ ; 4、特殊符号:通常指由1~2个符号组成的运算符。 算术运算符: + - * / % ++ -- 关系运算符: <  > >= <= == != 逻辑运算符: && || ! 位运算符: & | ~ ^ >> << 条件运算符: ?: 和赋值运算符: = 其他分隔符: ( ) [ ] { } . , ;1.5 C语言字符集、标识符与关键字
    • 62. 62 二、标识符 就是用来标识变量名、符号常量名、函数名、类型名、文件名等的有效字符序列。(类似于自然语言中各种事物的名字)C语言规定:标识符只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线。 例如: 合法标识符:_22A,lea_1,avg3,day,ABCde43xyw8 不合法标识符:M.J.YORK,$_238,#xy,a*b,8Tea 注意:在C语言中,大小写字母不等效。因此,a和A,I和i,Sum和sum,分别是两个不同的标识符
    • 63. 63 与程序控制结构有关的: do while for if else switch case default goto continue break return 三、关键字 就是具有特定含义的标识符,用户不能用来作自定义标识符。(类似于自然语言中的有特定意义的单词、词汇)由ANSI标准推荐的关键字有32个,常用的有:  与数据类型有关的: char int float double signed unsigned short long void struct union typedef enum sizeof 与存储类别有关的: auto extern register static
    • 64. 641.6 C语言程序的开发环境正确正确正确有错误有错误编辑 编译 运行C程序的计算机执行过程:C程序的上机过程:注意:编译只能发现语法错误,不能发现算法错误。说明:以上过程参见教材中图1.1,附录A中有Visual C++ 6.0中编辑、编译、连接和运行C程序的方法
    • 65. 65作业 P15 5、6 P36 4(5、6、8)
    • 66. 66本章结束再见!同学们:
    • 67. 67  PAD是问题分析图(Problem Analysis Diagram)的英文缩写,自1973年由日本日立公司发明以来,已经得到一定程度的推广。它用二维数形结构的图表示程序的控制流,将这种图转换为程序代码比较容易。   优点    1. 使用表示结构优化控制结构的PAD符号所设计出来的程序必然是程序化程序    2. PAD图所描述的程序结构十分清晰。图中最左边的竖线是程序的主线,即第一层控制结构。随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。PAD图中竖线的总条数就是程序的层次数;    3. 用PAD图表现程序逻辑,易读、易懂、易记。PAD图是二维数型结构的图形,程序从图中最左边上端的结点开始执行,自上而下,从左到右顺序执行;    4. 很容易将PAD图转换成高级程序语言源程序,这种转换可由软件工具自动完成,从而可省去人工编码的工作,有利于提高软件可靠性和软件生产率。    5. 既可用于表示程序逻辑,也可用于描述数据结构    6. PAD图的符号支持自顶向下、逐步求精方法的使用。开始时设计者可以定义一个抽象程序,随着设计工作的深入而使用“def”符号逐步增加细节,直至完成详细设计。    PAD图是面向高级程序设计语言的,为FORTRAN,COBOL和PASCAL等每种常用的高级程序设计语言都提供了一整套相应的图形符号。由于每种控制语句都有一个图形符号与之对应,显然将PAD图转换成与之对应的高级语言程序比较容易。    PAD是一种程序结构可见性好、结构唯一、易于编制、易于检查和易于修改的详细设计表现方法。用PAD可以消除软件开发过程中设计与制作的分离,也可消除制作过程中的“属人性”。虽然目前仍需要由人来编制程序,一旦开发的PAD编程自动化系统实现的话,计算机就能从PAD自动编程,到那时程序逻辑就是软件开发过程中人工制作的最终产品。显然在开发时间上大大节省,开发质量上将会大大提高。