1.85k likes | 1.97k Views
一、教学对象 计算机科学与技术系新生 ( 第二学期) 二、教学目标 程序设计的重要性 程序设计的基本概念与基本方法 编程解题的思路与典型方法 数学模型简介 算法及算法步骤 程序结构与相应语句 编码与上机调试. 绪论. 三、教学重点 1. 程序设计的基本概念,基本方法; 2. 在 C 语言的环境下,学会如何针对问题进行分析,得出数学模型,理出算法并编程实现; 3. 有条有理有根有据的编程实践; 4. 养成良好的编程风格与习惯;
E N D
一、教学对象 • 计算机科学与技术系新生(第二学期) • 二、教学目标 • 程序设计的重要性 • 程序设计的基本概念与基本方法 • 编程解题的思路与典型方法 • 数学模型简介 • 算法及算法步骤 • 程序结构与相应语句 • 编码与上机调试 • 绪论
三、教学重点 • 1. 程序设计的基本概念,基本方法; • 2.在 C语言的环境下,学会如何针对问题进行分析,得出数学模型,理出算法并编程实现; • 3.有条有理有根有据的编程实践; • 4.养成良好的编程风格与习惯; • 5.重在思维方法的学习,鼓励创新。 • 绪论
四、指导思想1. 立足改革,以培养高素质有创造精神的人才为这门课的教学目标。2. 以学生为中心,采用与现实生活贴切和具有趣味性的实例进行讲解,有利于调动学生学习的积极性,引导学生主动学习。 • 3. 强化实践,这门课主张程序设计是高强度的脑力劳动,不是听会的、也不是看会的,而是练会的。引导学生在解题编程的实践中探索其中带规律性的认识。将感性认识升华到理性高度。 • 绪论
五、学习方法 1.动手动脑,理论指导下的实践 有条有理的实践。 2.在编写大量程序之后,才能感到运用自如。 • 绪论
六、教学内容安排 1. 简单C程序设计; 2. 分支结构程序设计; 3. 循环结构程序设计; 4. 数组; 5. 函数; 6. 递归及其实现方法 7. 指针; 8. 结构体与链表。 • 绪论
1.1 认识C语言程序 1.程序实例 #include <stdio.h> //预编译命令,将标准输入输出函数 //作为头文件包扩到用户源文件中 #include <math.h> //预编译命令,将系统提供的数学函数 //作为头文件包扩到用户源文件中 main( ) //主函数,名为main, { //函数体.开始 float a,b,c; //声明部分.定义变量类型 b=30.0; //执行部分.赋值语句 a=sin(b*3.14159/180); //执行部分.赋值语句 printf(“%f\n”,a); //执行部分.输出语句 } //函数体.结束 第一讲 简单的C程序设计
1.2 实例总结 • 1.C程序结构 第一讲 简单的C程序设计 预编译命令 主函数 main( ) { 函数体开始 声明部分 执行部分 } 函数体结束
2.变量的类型 • 整型:int 长整型:long • 浮点型:float • 双精度型:double • 字符型:char • 用户自定义类型 第一讲 简单的C程序设计
3.声明的作用 • 为变量分配内存单元,变量名作为内存单元的符号地址,这件事是在程序编译链接时完成的。 • 4. 变量 • 其值可以改变的量,是内存单元的符号地址。 • 通过符号b可以找到相应的存储单元地址,假设为1000。 • 语句 • b=30.0; • 是将值30.0存放在地址为1000的存储单元。 第一讲 简单的C程序设计
5.对变量的赋值 • 赋值符号“=” • <变量>=<表达式> • b = 30.0; // 读作将表达式的值30.0赋给变量b • a=sin(b*3.14159/180); • // 读作将表达式(正弦函数)的值赋给变量a 第一讲 简单的C程序设计
6.变量赋值特点 • (1)先定义,后使用 • int d,e,f; 定义三个变量为整数类型 • 如未定义,则在编译时被查出,认为非法 • (2)变量未被赋值前,值为未知 • (3)对变量赋值过程是“覆盖”过程,用新值去替换旧 • (4)读出变量的值,该变量保持不变 • (5)参与表达式运算的所有变量都保持原来的值不变 第一讲 简单的C程序设计
-123497 234316 0 7 234316 0 7 7 0 7 7 14 8 7 14 • 变量赋值过程 • d e f • 未赋值前 • 执行d=7 • 执行 e=d • 执行 f=d+e • 执行 d=d+1 000 第一讲 简单的C程序设计
7. 输出语句 • printf函数(格式输出函数) • 一般形式为 • printf(参数1,参数2,参数3,……,参数n) • 其中参数1——格式控制 • 参数2,参数3,……,参数n——输出表列 • 举例: float a; • int b; • a = 85.56; • b = 100; • printf("%f %d", a, b); 第一讲 简单的C程序设计
格式控制是用双引号括起来的字符串,称“转换控制字符串”格式控制是用双引号括起来的字符串,称“转换控制字符串” • %f —— 第一个输出表列的格式说明,以小数形式输出单、双精度实数,隐含输出6位小数 • %d —— 第二个输出表列的格式说明,以带有符号的十进制形式输出整数(正数不输出符号) • 显然,%f是控制实数a的;%d是控制整数b的 第一讲 简单的C程序设计
为了醒目,格式控制项中除格式说明之外可以有为了醒目,格式控制项中除格式说明之外可以有 • 普通字符 • 例: printf(“a=%f b=%d", a, b); • 输出结果为: • a=85.560000 b=100 • 换行符号 • 例: printf(“a=%f\nb=%d”,a,b); • 输出结果为: • a=85.560000 • b=100 • 域宽和精度 • 例:printf(”%5.3f”,a); 第一讲 简单的C程序设计
8. 数学函数 • sin(x) x为弧度,double x,double sin(x) • cos(x) cos(x) • exp(x) ex • log(x) logex • log10(x) log10x • fabs(x) x • fmod(x,y) 整除x/y的余数 • floor(x) 求不大于x的最大整数 • pow(x, y) xy • sqrt(x) x1/2 第一讲 简单的C程序设计
9. 算术运算符 • +加 • -减 • * 乘 • / 除 • % 模(取余数) 第一讲 简单的C程序设计
1.3 作业 第一讲 简单的C程序设计
我们在日常生活中经常需要处理具有两个分支的问题,例我们在日常生活中经常需要处理具有两个分支的问题,例 • 如,如果明天下雨,则在教室内组织活动,否则去野游。 • 在C语言中,这类问题需要使用if语句解决,而判断操 • 作通常使用关系运算符。 • 关系运算符和关系表达式 • > 大于 • < 小于 • >= 大于等于 • <= 小于等于 • == 等于 • != 不等于 第二讲 分支结构
2.1 掌握if语句的使用方法 • 【实例】编写程序,判断输入的整数是否为6,若是,显示“Right!”和“Great!”,否则显示“Wrong!”和“Sorry!”。 • 1.编程思路: • 要显示“Right!”和“Great!”,应执行两条语句“printf(”Right!\n“);”和“printf(”Great!\n“);”,要显示“Wrong!”和“Sorry!”,执行两条语句“printf(”Wrong! \n“);”和“printf(”Sorry!\n“);”。本题需要根据所输入的值(假设赋给a)是否为6来选择执行相应的两条语句。 • 在C语言中判断a中的值是否为6,使用“if(a==6)”形式。 第二讲 分支结构
开始 输入a值 真 a==6 假 显示“Right!” 显示“Wrong!” 显示“Great!” 显示“Sorry!” 结束 • 本实例的流程图如图所示 第二讲 分支结构
输入a的值 a==6 显示“Right!” 显示“Wrong!” 显示“Great!” 显示“Sorry! ” • 本实例的N-S流程图如图所示 第二讲 分支结构
2.程序代码: • #include <stdio.h> • main() • { int a=0; • printf("Input a:"); scanf("%d",&a); • printf("a=%d\n",a); • if(a==6) /* if语句开始 */ • {printf("Right!\n"); • printf("Great!\n"); } • else • {printf("Wrong!\n"); • printf("Sorry!\n");} /* if语句结束 */ • } 第二讲 分支结构
3.运行结果: • 第1次运行结果: • Input a:6<回车> • a=6 • Right! • Great! • 第2次运行结果: • Input a:5<回车> • a=5 • Wrong! • Sorry! 第二讲 分支结构
4.归纳分析: • (1)程序中的“a==6”是关系表达式。 • 用关系运算符把两个C语言表达式连接起来的表达式称为关系表达式。关系运算的判断结果只有“真”或“假”两种可能,关系成立时为“真”,不成立时为“假”。 • 关系表达式的值只能是1或0,当关系运算的判断结果为“真”时,关系表达式的值为 1,否则,关系表达式的值为0。例如,当a的值为6时,关系表达式“a==6”的值为1,当a的值为5时,关系表达式“a==6”的值为0。 第二讲 分支结构
(2)程序中的“if(a==6)”是if语句的开始部分。(2)程序中的“if(a==6)”是if语句的开始部分。 • 本例题需要根据“a==6”是否为“真”来选择执行不同的两个输出语句。处理两个分支的问题时常使用if语句。if语句根据其后面括号中表达式的结果,选择执行某个分支程序段。 • if语句的一般形式如下: • if(表达式) • { 语句组1 } • else • { 语句组2 } • “if”和“else”是关键字。当表达式结果为“真”(即不等于0)时,执行语句组1,表达式结果为“假”(即等于0)时,执行语句组2。在语句组1和语句组2中只能选择执行一组,而后执行整个if语句后面的语句。 第二讲 分支结构
(3) C语言中允许程序中的if语句不带else部分。 • 省略else的if语句一般形式如下: • if(表达式) • {语句组} • 此if语句的执行过程: • 当表达式结果为“真”时,执行语句组,表达式结果为“假”时,不处理。 第二讲 分支结构
2.2学会使用逻辑运算符 • 处理问题时经常需要同时判断多个条件。例如,在某学生数学和英语成绩中判断是否至少有一门课程是不及格。这时使用逻辑运算符。 • 逻辑运算符共有三种: • && 逻辑与 • || 逻辑或 • ! 逻辑非 • 这3个运算符按高到低的优先级顺序是“!”、“&&”、“||” • 一般而言,单目运算符优先级较高,赋值运算符优先级低。 • 算术运算符优先级较高,关系和逻辑运算符优先级较低。 第二讲 分支结构
输入体重w的值 w >=50 && w<=55 显示“Ok” 显示“No” • 【实例】编写程序,判断某人的体重是否在50公斤至55公斤之间,若在此范围之内,显示“Ok”,否则显示“No”。 • 1.编程思路: • 先将体重存放在变量w中,要使w的值在50至55范围内,应同时满足“w>=50”和“w<=55”。在C语言中用“w>=50 && w<=55”表示w的值是否同时满足“w>=50”和“w<=55”。 第二讲 分支结构
2.程序代码: • #include <stdio.h> • main() • { float w=0.0; • printf("Input w:"); • scanf("%f",&w); • printf("w=%.1f\n",w); • if(w>=50&&w<=55) • printf("Ok\n"); • else • printf("No\n"); • } 第二讲 分支结构
3.运行结果: • 第1次运行结果: • Input w:53.5<回车> • w=53.5 • Ok • 第2次运行结果: • Input w:60.7<回车> • w=60.7 • No 第二讲 分支结构
4.归纳分析: • 程序中的“w>=50 && w<=55”是逻辑表达式。 • 用逻辑运算符把两个C语言表达式连接起来的表达式称为逻辑表达式。逻辑运算的判断结果也只有“真”或“假”两种可能,逻辑运算的规则如下: • 逻辑与:1&&1=1,其它为0 • 逻辑或:0||0=0,其它为1 • 逻辑非:!0为1,!1为0,!2为0,!a为0(当a不为0时) • 逻辑表达式的值也只能是1或0,当逻辑运算的判断结果为“真”时,逻辑表达式的值为 1,否则,逻辑表达式的值为0。 第二讲 分支结构
2.3 学会使用嵌套的if语句 • 有些问题必须在满足某种条件后,再继续分支处理。例如,某单位男职工60岁退休,女职工55岁退休,为了判断某职工是否应退休,首先要判断该职工是男职工还是女职工,然后再根据职工性别判断年龄是否到规定年龄。这时需要使用嵌套的if语句。 第二讲 分支结构
【实例】编写程序,判断若输入的体重大于0且小于200,再判断该体重是否在50公斤至55公斤之间,若在此范围之内,显示“Ok”,否则显示“No”;若所输入的体重不大于0或不小于200,则显示“Data over!”。 • 1.编程思路: • 在上实例中,输入w的值后立刻用if语句实现选择执行“printf(“Ok\n");”或“printf("No\n");”的功能,但由于本题目是在w的值大于0且小于200的情况下,才能执行此if语句,所以在此if语句外面还需要套另一个if语句。 第二讲 分支结构
开始 输入w值 真 w>0且w<200 假 真 w≥50且w≤55 假 显示“Data over!” 显示“Ok” 显示“No” 结束 • 本实例的程序流程图: • 课堂作业:请根据此图画出其N-S流程图。 第二讲 分支结构
2.程序代码: • main() • { float w=0.0; • printf("Input w:"); • scanf("%f",&w); • printf("w=%.1f\n",w); • if(w>0 && w<200) /* 外嵌if语句开始 */ • if(w>=50 w<=55) /* 内嵌if语句开始 */ • printf(“Ok\n"); • else • printf("No\n");/* 内嵌if语句结束 */ • else • printf("Data over!\n");/* 外嵌if语句结束 */ • } 第二讲 分支结构
3.运行结果: • 第1次运行结果: • Input w:53.5<回车> • w=53.5 • Ok • 第2次运行结果: • Input w:60.7<回车> • w=60.7 • No • 第3次运行结果: • Input w:201.7<回车> • w=201.7 • Data over! 第二讲 分支结构
4.归纳分析: • (1)本程序在一个if语句中包含了另一个if语句。 • 在if语句的语句组1或语句组2中又包含另一个分支结构的if语句称为嵌套的if语句。 • (2)本程序中出现了两次else。 • C语法规定,在if语句中,若多次出现else,则每一个else总是与前面最近的if配对,所以本例题中第一个else与内嵌的if配对,第二个else与最上面的if配对。程序中由于采用了缩进格式,if与else的配对关系一目了然。 第二讲 分支结构
0 (x<0) x+2 (0≤x<5) y= x2-3 (5≤x<10) 10 (x≥10) • 2.4学会使用if-else if形式的嵌套if语句 • 【实例】编写程序,求下面分段函数的值,要求x的值从键盘输入。 第二讲 分支结构
开始 输入x值 真 x<0 假 y=0 真 x<5 假 真 x<10 假 y=x+2 y=x2-3 y=10 显示x和y的值 结束 • 1.编程思路: 第二讲 分支结构
2.程序代码: • #include <stdio.h> • main() • { float x=0,y=0; • printf("Input x:"); • scanf("%f",&x); • if(x<0) y=0; • else • if(x<5) y=x+2; • else • if(x<10) y=x*x-3; • else y=10; • printf("x=%f,y=%f\n",x,y); • } 第二讲 分支结构
2.5 switch语句 • 在日常生活中经常遇到菜单选择操作,例如,用ATM自动取款机取钱时,从菜单中可以选择语种、取款额;用自动服务系统给手机充值时,可以选择查余额还是充值,对本机充值还是对其他号码充值等。这些问题一般使用switch语句解决。 • 总之,这些问题都是多分支情况。 第二讲 分支结构
【实例】编写程序,在如下菜单中选择一个运算类型,并进行相应的运算。如选择了加法,则进行求和运算。【实例】编写程序,在如下菜单中选择一个运算类型,并进行相应的运算。如选择了加法,则进行求和运算。 • Please choose • + : addition • - : subtraction • * : multiplication • / : division 第二讲 分支结构
1.程序代码: • #include <stdio.h> • main() • {float a=5.0,b=2.0,c=0.0; • char sym='\0'; • printf("Please choose\n"); • printf("+ : addition\n"); • printf("- : subtraction\n"); • printf("* : multiplication\n"); • printf("/ : division\n"); • sym=getchar(); • printf("%f%c%f=",a,sym,b); /* 显示算式 */ 第二讲 分支结构
switch(sym) /* 计算算式 */ • {case '+': c=a+b; break; • case '-': c=a-b; break; • case '*': c=a*b; break; • case '/': c=a/b; break; • } • printf("%f\n",c); /* 显示结果 */ • } 第二讲 分支结构
2.运行结果: • Please choose • + : addition • - : subtraction • * : multiplication • / : division • /<回车> • 5.000000/2.000000=2.500000 第二讲 分支结构
3.归纳分析: • switch语句的一般形式为: • switch(表达式) • { case 表达式1: 语句组1 break; • case 表达式2: 语句组2 break; • …… • case 表达式n: 语句组n break; • default: 语句组n+1 break; • } • 其中switch、case、default和break是关键字,所有表达式均为整型或字符型。在表达式1、表达式2、…、表达式n中只能出现常量和运算符,而且每个表达式的值不能相等。 第二讲 分支结构
2.6 条件运算符及其表达式 • C语言中条件运算符由“?”和“:”组成,例如“a>b ? a : b”。 • 条件表达式的一般形式为: • 表达式1 ?表达式2 :表达式3 • 当表达式1的值为非0时,以表达式2的值作为条件表达式的值,否则,以表达式3的值作为条件表达式的值。例如,当a>b成立时,条件表达式“a>b ? a : b”的值为a中的值,否则为b中的值。 • 使用条件表达式也可以实现分支结构。 第二讲 分支结构
课堂讨论:谁做的好事? • 忻州师院有四位同学中的一位做了好事,不留名,表扬信来了之后,校长问这四位是谁做的好事。 A说:不是我。 B说:是C。 C说:是D。 D说:C胡说。 已知三个人说的是真话,一个人说的是假话。现在要根据这些信息,找出做了好事的人。画出N-S流程图并写出程序。 第二讲 分支结构
1、编程思路: • 如何找到该人,一定是“先假设该人是做好事者,然后到每句话中去测试看有几句是真话”。“有三句是真话就确定是该人,否则换下一人再试”。 • 比如,先假定是A同学,让 thisman='A'; • 代入到四句话中 • A说:thisman!=‘A’; ‘A’!=‘A’假,值为0。 • B说:thisman==‘C’; ‘A’==‘C’假,值为0。 • C说:thisman==‘D’; ‘A’==‘D’假,值为0。 • D说:thisman!=‘D’; ‘A’!=‘D’真,值为1。 • 显然,不是'A'做的好事(四个关系表达式值的和为1) 第二讲 分支结构