欢迎进入程序世界 C语言程序设计 数学与信息学院 软件学院
C语言程序设计 教学要求 掌握程序设计语言的基本知识 了解常用算法 学习方法 培养自主学习 锻炼实践能力
如何尽快学会用C语言进行程序设计 从模仿开始 学会改写 然后是设计
本章要点 什么是计算机语言?什么是程序? C语言有哪些特点? C语言程序的基本组成? 什么是算法?如何描述简单的算法?
1.2 程序与程序设计语言 程序 人们为解决某种问题用计算机可以识别的代码编排的一系列加工步骤。 程序设计语言 提供了一种表达数据与处理数据的功能 要求程序员按照语言的规范编程
1.2 程序与程序设计语言 指令与程序 程序设计语言的功能 程序设计语言的语法 程序的编译与编程环境
程序与指令 指令:每一个指令完成一个最基本的功能 计算机的指令系统:计算机所能实现的指令的集合 拿到手,看上去就象一个清单 如实现一次加法运算 或实现一次两个数的大小判别 计算机的指令系统:计算机所能实现的指令的集合 拿到手,看上去就象一个清单 程序:一系列计算机指令的有序组合
程序与指令 虚拟的计算机指令系统(7条指令 ,看上去很象计算机最初始的语言,机器语言或汇编语言) 指令1:Input X 将当前输入数据存储到内存的X单元 指令2:Output X 将内存X单元的数据输出。 指令3:Add X Y Z 将内存X单元的数据与Y单元的数据相加并将结果存储到Z单元。 指令4:Sub X Y Z 将内存X单元的数据与Y单元的数据相减并将结果存储到Z单元。 指令5:BranchEq X Y P 比较X与Y,若相等则程序跳转到P处执行,否则继续执行下一条指令。 指令6:Jump P 程序跳转到P处执行。 指令7:Set X Y 将内存Y单元的值设为X。 讲清楚,了解计算机指令系统是编程的前提
程序与指令 输入3个数A, B和C,求A+B+C的结果 Input A; 输入第1个数据到存储单元A中 Input B; 输入第2个数据到存储单元B中 Input C; 输入第3个数据到存储单元C中 Add A B D; 将A、B相加并将结果存在D中 Add C D D; 将C、D相加并将结果存在D中 Output D; 输出D的内容
程序与指令 输入2个数A和B,求A*B的结果 1.Input A; 输入第1个数据到存储单元A中 2.Input B; 输入第2个数据到存储单元B中 3.Set 0 X; 将X设为0,此处X用以统计A累加的次数 4.Set 0 Z; 将Z设为0,此处Z用以存放A*B的结果 5.BranchEq X B 9; 判别X与B是否相等;若相等说明A已累加了B次,程序跳转到第9条指令,输出结果 6.Add Z A Z; Z = Z + A 7.Add 1 X X; X = X + 1 8.Jump 5; 程序跳转到第5条指令,继续循环执行第6条、7条指令 9.Output Z; 输出Z的值,该值等于A*B
一个C语言程序 输入 4 输出 24 例1-1求阶乘问题。输入一个正整数n,输出n!。 #include <stdio.h> /* 引用函数头文件stdio.h */ int main(void) /* 主函数 */ { int n; /* 定义变量*/ int factorial(int n); /* 函数声明 ,表明函数代码在主函数后面*/ scanf("%d", &n); /* 输入一个整数 */ printf(“%d\n”, factorial(n)); /* 调用函数factorial,计算阶乘并输出 */ return 0; } int factorial(int n) /* 自定义函数,计算 n! 的函数 */ int i, fact = 1; /* 定义函数变量 */ for(i = 1; i <= n; i++) /* 计算 n! */ fact = fact * i; return fact; /* 返回结果 */ 11
程序设计语言的语法 高级程序设计语言(例如C语言) ,指令增强了,但更强调语法,例如,如下循环语句 for(i=1;i<=100; i++) sum=sum+i; 源程序(源代码)是一个字符序列,这些字符序列包含了很多“单词”,一些“单词”的组合构成有意义的语法单位,最后一系列语法单位组合成程序。
程序设计语言的语法 C语言的主要“单词” (1)标识符: C语言的标识符规定由字母、数字以及下划线组成,且第一个字符必须是字母或下划线。 (3)自定义标识符: 包括在程序中定义的变量名、数据类型名、函数名以及符号常量名。有意义的英文单词 (4)常量: 常量是有数据类型的,如,123、12.34 (5)运算符。代表对各种数据类型实际数据对象的运算。如,+(加)、-(减)、*(乘)、/(除)、%(求余)、>(大于)
程序设计语言的语法 C语言的主要语法单位 (1)表达式: 运算符与运算对象组合就形成了表达试。如,2 + 3 * 4 (2)变量定义: 变量也有数据类型,所以在定义变量时要说明相应变量的类型。如: int i; (3)语句: 语句是程序最基本的执行单位,程序的功能就是通过对一系列语句的执行来实现的。 (4)函数定义与调用
程序设计语言的语法 其中,(3)语句: 表达式语句:表达式加分号“;” 分支语句:实现分支控制过程 循环语句:实现循环控制的过程 if (a > b) x = a; else x = b; 循环语句:实现循环控制的过程 sum = 0; /* 初始化sum和i */ i = 1; while (i <= 100) { /* while循环语句 */ sum = sum + i; i = i + 1; } 复合语句:用一对“{ }”,将若干语句顺序组合在一起就形成了一个程序段。
程序设计语言的语法 其中,(4)函数定义与调用 函数是完成特定任务的独立模块,函数的使用最主要涉及到函数的定义与调用。 C语言数据的输入输出用库函数printf、scanf等实现。
程序的编译与编程环境 程序的编译 编程环境 编译器 源代码 –––––计算机直接能理解的指令序列 编译器:对源程序进行词法分析、语法与语义分析,生成可执行的代码。 编程环境 包括编辑程序(Edit)、编译(Compile)、调试(Debug)等过程。
C 语言上机过程 源程序 test.cpp test.obj 可执行代码 test.exe 编译 连接 运行
1.3 C语言的发展历史与特点 历史 1972年:贝尔实验室的Dennis Ritchie在B语言的基础上设计并实现了C语言。 1978年:B.W.Kernighan和D.Ritchie(简称K & R)合著的《The C Programming Language》是各种C语言版本的基础,称之为旧标准C语言。 1983年:美国国家标准化协会(ANSI)制定了新的C语言标准,称ANSI C。
C语言的特点 1.C语言是一种结构化语言 2.C语言语句简洁、紧凑,使用方便、灵活 3.C语言程序易于移植 4.C语言有强大的处理能力 32个关键字,9种控制语句,程序书写形式自由。 3.C语言程序易于移植 C语言将与硬件有关的因素从语言主体中分离出来,通过库函数或其他实用程序实现它们。 4.C语言有强大的处理能力 5.生成的目标代码质量高,运行效率高
1.4 实现问题求解的过程 问题:求1~100间所有偶数的和。 1.问题分析与算法设计 1.4 实现问题求解的过程 问题:求1~100间所有偶数的和。 1.问题分析与算法设计 求在一定范围内(1~100)、满足一定条件(偶数)的若干整数的和,求累加和。 思路:设置一个变量(sum),其初值为0,然后在1~100的数中(i)寻找偶数,将它们一个一个累加到sum中。 一步累加:sum = sum + i; 重复累加,用循环语句实现,在循环过程中: (1) 判别 i 是不是偶数:用分支控制语句来实现。 (2) 对循环次数进行控制:通过 i 值的变化 如何教会大家使用编程工具,最好不过是举一个实际的例子 首先要了解,我们手上有好几种工具可供选择:Visual Studio系列、Code blocks、Eclispe C/C++等等
问题分析与算法设计 思路 –––––确定算法 算法:一组明确的解决问题的步骤,它产生结果并可在有限的时间内终止。 算法的描述: 自然语言 伪代码 流程图:算法的图形表示法
sum = 0 i = 1 i <= 100 sum=sum+i i=i+1 输出sum 真 假
实现问题求解的过程 2.编辑程序 生成程序的源文件,C语言源文件的后缀为 .c / .cpp #include <stdio.h> int main(void) { int i, sum = 0; for(i = 1; i <= 100; i++) if (i%2 == 0) sum = sum + i; printf("%d", sum); return 0; }
实现问题求解的过程 3.程序编译连接 编辑程序后,用该语言的编译程序对其进行编译,以生成二进制代码表示的目标程序(.obj),与编程环境提供的库函数进行连接(Link)形成可执行的程序(.exe)。 编译程序指出语法错误 语法错误VS逻辑错误
实现问题求解的过程 4.运行与调试 经过编辑、编译、连接,生成执行文件后,就可以在编程环境或操作系统环境中运行该程序。 如果程序运行所产生的结果不是你想要的结果,这是程序的语义错误(逻辑错误)。 调试:在程序中查找错误并修改错误的过程。 调试的方法 设置断点 单步跟踪 调试是一个需要耐心和经验的工作,也是程序设计最基本的技能之一。
C语言程序的调试、运行步骤 开始 结果 语法 错误 源程序 .c / .cpp 目标程序 .obj 可执行程序 .exe 编辑 编译 连接
结 束