哈工大轻松C语言
哈工大c语言课件7
–此话音落不久,诸葛亮果然病故于五丈原。
“事无巨细”,“事必躬亲”
–管理学的观点是极其排斥这种做法的,认为
工作必须分工,各司其职
–其中的思想,在程序设计里也适用
2019/7/25
5/78
2019/7/25
19/78
7.3.3函数封装与防御性程序设计
函数封装(Encapsulation)使得外界对函数的影响 仅限于入口参数,而函数对外界的影响仅限于一个 返回值和数组、指针类型的参数
【例7.1】
传入负数实参 会怎样?
2019/7/25
Why?
20/78
防御性程序设计(Defensive Programming)
2019/7/25
35/78
汉诺塔(Hanoi)问题
n=3
A
B
C
A→B,A→C,B→C, A→B,C→A,C→B,A→B
2019/7/25
36/78
汉诺塔(Hanoi)问题
n=3
A
B
n更大些 怎么办?
C
A→B,A→C,B→C, A→B,C→A,C→B,A→B
2019/7/25
37/78
汉诺塔(Hanoi)问题
函数是C语言中模块化编程的最小单位
– 可以把每个函数看作一个模块( Module )
如把编程比做制造一台机器,函数就好比其
零部件
–可将这些“零部件”单独设计、调试、测试好
,用时拿出来装配,再总体调试。
–这些“零部件”可以是自己设计制造/别人设
计制造/现成的标准产品
哈工大苏小红版C语言课件cha
C语言的特点和应用领域
系统软件
嵌入式系统
操作系统、编译器等核心软件都是用 C语言编写的。
在嵌入式系统中,C语言被广泛应用 于开发底层驱动程序和操作系统内核。
应用软件
数据库、游戏、图形界面等应用软件 也广泛使用C语言开发。
C语言的基本语法结构
数据类型
运算符
控制结构
包括整型、浮点型、字 符型、数组类型、结构
短整型通常占用2个字节,整型 占用4个字节,长整型占用8个 字节。
浮点型数据类型
浮点型数据类型用于 存储小数,包括单精 度浮点数和双精度浮 点数。
浮点型数据类型用于 存储实数,包括正实 数、负实数和零。
单精度浮点数通常用 float表示,双精度浮 点数通常用double 表示。
字符型数据类型
01
05 指针和内存管理
指针的定义和使用
01
02
03
04
指针是变量,用于存储 内存地址。
指针变量必须先定义后 使用。
使用指针前需要先赋值。
指针可以指向同类型的 变量或数组元素。
内存管理的基本概念
01
02
03
04
内存分为堆区和栈区。
堆区用于动态内存分配,由程 序员管理。
栈区用于存储局部变量,由系 统自动管理。
内存管理涉及内存的申请、使 用和释放。
动态内存分配和释放
使用`malloc()`函数在堆区分配内存。
使用`realloc()`函数调整已分配内存 的大小。
使用`calloc()`函数在堆区分配并初始 化内存。
使用`free()`函数释放已分配的内存。
06 文件操作
文件的打开和关闭
要点一
打开文件
哈工大c语言课件5
Step a
true
condition
false
Step x Step y
Step z
第21页/共55页
Step m Step n
21/56
if - else Statement
The structure is similar to double selection (flowchart)
生活中的问题求解:
Problem: 烤蛋糕(Baking a Cake)
How to solve:
1. Start 2. 将烤箱预热 3. 准备一个盘子 4. 在盘子上抹上一些黄油 5. 将面粉、鸡蛋、糖和香精混合在一起搅拌均匀 6. 将搅拌好的面粉团放在盘子上 7. 将盘子放到烤箱内
8. End
2024/6/18
_
2024/6/18
第20页/共55页
20/56
5.5用于双分支控制的条件语句 ( Double Selection)
Pseudocode Structure
Step a if <condition is true> start
Step m Step n end_if else start Step x Step y end_else Step z
–为解决一个具体问题而采取的、确定的、有限的
操作步骤,仅指计算机能执行的算法
– A specific and step-by-step set of instructions for
carrying out a procedure or solving a problem, usually with the requirement that the procedure terminate at some point
哈工大 C语言实验报告(答案)
实验1简单C 程序设计2、将下列由程序流程图描述的算法,转换为C 源代码并填写到图1-3b 框中,然后输入计算机并运行后并分析其运行结果(本小题2分)。
图1-3a 程序流程图图1-3bC 源程序3、项目编程(本小题12分)(1)请向计算机输入a,b,c 三个值,经过程序处理后,要求输出其中最大的一个。
/*C 语言源代码*/main(){}项目要求:①画出程序流程图;②根据流程图编写程序图1-4a 程序流程图图1-4b C 源程序(2)请向计算机输入a,b,c 三个值,经过程序处理后,要求按值从小到大输出。
项目要求:①画出程序流程图;②根据流程图编写程序/*输出最大值*/main(){}项目提示:①可采用if结构;②a,b,c由scanf函数输入程序流程图/*将a,b,c三个值由小到大输出*/main(){}1-5a程序流程图图1-5b C源程序(3)编程实现打印下列由字母组成的树形。
说明:本项目编程的知识点是让学生对双重循环语句结构的理解,清楚双重循环的特点(即当外循环变量中的值变化一次时,则内循环变量中的值要变化若干次)。
提示:可用外循环变量代表行数;内循环变量代表需打印字符的个数。
难点:①字符个数是按奇数变化递增②左右边界字符打印的位置图1-6a字母A-G组成的树形/*打印图形*/main(){}图1-6b C源程序(4)设计报选体育科目统计程序设某学校在新生入学时,需报选体育选修科目。
体育科目包括:篮球、排球、体操、兵乓球和网球。
请为某班级(30人)统计报选各体育科目人数。
项目要求:①画出程序流程图;②根据流程图编写源程序项目提示:可采用switch与for结构程序流程图C语言源代码main(){}图1-7a程序流程图图1-7b C 源程序实验2数组与排序五、项目编程(本题12分,每小题4分)1、将下列一组数读入到a 数组中,然后从a数组中找出其中最大的元素并与第一个数互换;然后从a数组中找出最小的元素并与最后一个数互换,而其余元素的位置不变。
哈工大C语言课件(全
➢ 计算机把机器代码读入到内存(Memory),由 CPU运行这些代码,读取输入(Input),产生输 出(Output),完成程序员预定的功能
第0章 绪论
1.6 高级语言的编译运行过程
C源代码的例子
编写程序代码
--用编辑器将编写的内容保存在一个被称为源程序
代码的文件(1.c)中。
#include <stdio.h>
3. 《 c 程序设计》;潭浩强编著,清华大学出版社出版
学习方法
强化实践 良好的编程习惯
第 0 章 绪论
哈尔滨工业大学计算机学院
2010年2月
第0章 绪论
1.1 计算机与人
计算机(Computer)
计算机是用来延伸人的能力的工具,需要人来 驾驭
– AI能实现吗?(AI,Artificial Intelligence, 人工智能)
success.
第0章 绪论
1.4 C语言简介
C程序设计语言
是一种高级语言
➢ 高级语言并不是“高级”,只是相对低级语言,在一个高 的级别上进行编程
历史悠久,战勋卓著
➢ 诞生于上世纪70年代初,成熟于80年代(C89),修订与 90年代(C99)
➢ 很多重量级软件都是用C写的
上天入地,无所不能
第0章 绪论
1.2 计算机与程序设计语言
程序设计语言(1)
计算1+1程序(用机器语言编写)
第0章 绪论
1.2 计算机与程序设计语言
程序设计语言(2)
计算1+1程序(用汇编语言编写)
MOV AX, 1
ADD AX, 1
第0章 绪论
1.2 计算机与程序设计语言
哈工大 C语言04_Function
结构化(Structural) 结构化(Structural) 面向对象(Object-Oriented) 面向对象(Object-Oriented) 面向组件(Component-Oriented) 面向组件(Component-Oriented) 面向智能体(Agent-Oriented) 面向智能体(Agent-Oriented) ……
C程序设计语言
第4章 函数与程序结构
孙志岗 sun@
大话三国
懿问曰:“孔明寝食及事之 懿问曰: 烦简若何? 烦简若何?” 使者曰: 丞相夙兴夜寐, 使者曰:“丞相夙兴夜寐, 罚二十以上皆亲览焉。所啖之食, 罚二十以上皆亲览焉。所啖之食, 日不过数升。 日不过数升。” 懿顾谓诸将曰: 懿顾谓诸将曰:“孔明食少 事烦,其能久乎? 事烦,其能久乎?”
power()
2011-5-13
Functions and Program Structure
6
函数的分类
函数生来都是平等的,没有高低贵贱之分,只 函数生来都是平等的,没有高低贵贱之分, main()稍微特殊一点点 有main()稍微特殊一点点 库函数 – ANSI C定义的标准库函数 C定义的标准库函数
函数出口 返回 值
Functions and Program Structure 8
2011-5-13
函数定义(definition) 函数定义(
函数是这样的一种运算: 函数是这样的一种运算: – 函数名说明运算规则 – 参数是运算的操作数 – 返回值是运算的结果 当函数执行到return语句或 语句或} 函数的运算停止。 当函数执行到return语句或}时,函数的运算停止。 程序从当次调用函数的地方继续执行 – 函数可以有多个return,但最好只有一个且是最后一行 函数可以有多个return, void定义返回值类型 用void定义返回值类型 – 函数没有运算结果,没有返回值 函数没有运算结果, – return语句之后不需要任何表达式 return语句之后不需要任何表达式 void定义参数 定义参数, 用void定义参数,表示没有参数 参数表里的参数(叫形式参数,parameter)也是函数 参数表里的参数(叫形式参数,parameter) 的语句块内的变量
哈工大c语言课件1
第26页/共26页
编辑(Edit)
– 扩展名为.c的文件(对C语言而言)
编码(Write) 设计(Design)
– How is it to be done?
需求分析(Analysis) – What is to be done?
11
第11页/共26页
开发C程序的步骤
1.设计算法 2. 编写程序源代码
–把自己的意图写入源代码 3. 编辑源程序 4. 编译和连接 5. 调试程序 直到改正了所有 的编译错误和运行错误 6. 运行程序
printf("Hello world!\n");
}
考考你: –如何把"Hello"和"world!"分别打印在两行?
24
第24页/共26页
如何学好编程?
多读 多写 擅于利用身边的工具与环境 Knowlegde, Practice, Skills
25
第25页/共26页
Questions and answers
12
第12页/共26页
C程序的编译环境
Visual C++ – Windows平台上最流行的C/C++集成开发环境之一
Code::Blocks(简称CB,) – 是近年出现并获得关注的C/C++开发环境 – CB的功能远远优于TC,也优于VC 6.0 – CB只是一个IDE(集成开发环境),没有内置的编译
C语言“好”吗?
C诡异离奇,缺陷 重重,并获得巨 大成功
6
第6页/共26页
C语言的爱与恨
爱 –信任程序员 –给程序员最大的
发挥空间
–运行效率高
哈工大C语言Struct
11/24/2019
Structures
6
struct类型的特点
一个普通的类型
– 所以可以定义该类型的变量、数组、指针…… – 它的成员可以是任意类型
– 可以基做本函类数型的、参E数数v组类a、l型指u针和at、返io结回n构值o…类…n型ly. eated wisthtrAucspt类os型e.的Sl变id量es for .NET 3.5 Client Profile 5.2.0
C程E序valu设atio计n on语ly. 言
eated with Aspose.Slides for .NET 3.5 Client Profile 5.2.0
Copyright 20第046-章201结1 A构spose Pty Ltd.
孙志岗 sun@
从基本数据类型、复合数据类型 到抽象数据类型
计算机本身是没有数据类型的概念的 – 内存里存储的内容,你认为它代表什么,它就代表什么
高级语言设计了基本数据类型:整型、浮点型、字符
型等。不同的语E言v也al会ua定ti义on不o同n的ly基. 本类型
– 基本数据类型并不能方便地解决所有问题
eated wi复th合A数sp据o类se型.S是li基de本s数fo据r 类.N型E迭T代3派.5生C而li来ent Profile 5.2.0 –C典o型p的yr代ig表h就t 是2“00结4构-2”0,1数1组A、s指po针s也e可P算ty作L此t类d.
–C常o用p类yr型ight 2004-2011 Aspose Pty Ltd.
基本数据类型、指针、数组、结构……
– 常见的需要类型的地方
定义变量 定义指针、数组和结构 函数参数和返回值
MOOC哈工大2020C语言程序设计精髓编程题第二周
MOOC哈⼯⼤2020C语⾔程序设计精髓编程题第⼆周1 输出逆序数(3分)题⽬内容:从键盘任意输⼊⼀个3位整数,编程计算并输出它的逆序数(忽略整数前的正负号)。
例如,输⼊-123,则忽略负号,由123分离出其百位1、⼗位2、个位3,然后计算3*100+2*10+1 = 321,并输出321。
提⽰:1. 从键盘输⼊数据可以使⽤函数scanf()。
例如,scanf("%d", &x); 表⽰从键盘输⼊整数并存⼊整形变量x中。
2. 利⽤取绝对值函数 fabs()忽略输⼊数据的负号。
fabs(x)表⽰计算变量x的绝对值。
3.使⽤数学函数,需要在程序开头加上编译预处理指令 #include <math.h>#include <stdio.h>#include <math.h>int main() {//⽤户输⼊的三位数int x;//逆序数int y;//获取键盘输⼊scanf("%d",&x);//转换成绝对值x = fabs(x);//判断是否为3位数if(100 <= x && x <= 999){int a,b,c;//百位a = x / 100;//⼗位b = x /10 %10;//个位c = x % 10;y = c * 100 + b * 10 + a;}printf("Input x:\n");printf("y=%d\n",y);return 0;}2 计算总分和平均分(3分)题⽬内容:⼩明本学期共有5门课程,分别是英语、语⽂、数学、历史和⾳乐。
5科的期中考试成绩分别是86分、74分、92分、77分、82分,期末考试成绩分别是81分、87分、90分、62分、88分。
已知期中和期末考试成绩分别占总成绩的30%和70%。
定义相应的变量存放各科成绩,并计算出⼩明5门课程的总分和平均分。
哈工大新版C语言程序设计课件
Turbo C 2.0
Turbo C & C++ 3.0
WIN-TC
Visual C++ 6.0 (可视化的)
编程语言的开展史——人与计算 机的对话
• 两个说不同母语的人的对话方式: • 一方学另一方的语言 • 双方都学习一种第三方语言 • 人与计算机的对话方式: • 计算机学习人的语言〔自然语言理解〕 • 人学习计算机的语言 • 学习第三方语言
第一章 简单C语言设计
简单的C程序实例
/* /*
pHII一uehh个rlaalpovv简oeeC单saaela的dd:nrrCIgee程uaahmmaa序gvett实ehh! aa例att
doo*nnr/eeeaddmaayy
I I
will will
be be
skillful in a famous
• (2) 变量初始化:通过 变量赋值或通过键盘输 入给出;
• (3) 输出结果:将结果 输出到屏幕或窗口;
• (4) 在对变量初始化时, 要保证作除法运算有意 义,即保证除数不为零;
• (5) 取余运算仅对于整 数有意义。
输出结果
结束
计算过程实现及分析
#include <stdio.h>
#include <stdlib.h>
交作业和实验报告〕
Hu r u?
• 用过计算机吗? • 用来干什么? • 学过编程吗?
–哪些语言?
课程特点
• 紧密围绕在以C语言为核心的课中央周围, 进行计算机科学的启蒙教育,重点在于程 序设计
哈尔滨工业大学c语言实验
哈尔滨工业大学计算机科学与技术学院苏小红sxh@主教材:苏小红等,《C语言大学实用教程》,电子工业出版社,2004,8苏小红等,《C语言大学实用教程(第2版)》,电子工业出版社,2007,2实验教材:苏小红等,《C语言大学实用教程习题与实验指导》,电子工业出版社,2004,8苏小红等,《C语言大学实用教程学习指导》,电子工业出版社,2007,4实验内容问题1:要使下面程序的输出语句在屏幕上显示1,2,34,则从键盘输入的数据格式应为以下备选答案中的哪一个?#include <stdio.h>main(){char a,b;int c;scanf("%c%c%d",&a,&b,&c);printf("%c,%c,%d\n",a,b,c);}A) 1 2 34 B) 1, 2, 34问题2:与上面程序的键盘输入相同的情况下,要使上面程序的输出语句在屏幕上显示1 2 34,则应修改程序中的哪条语句?怎样修改?#include <stdio.h>main(){char a,b;int c;scanf("%c%c%d",&a,&b,&c);printf("%c,%c,%d\n",a,b,c);}练习——键盘输入与屏幕输出练习问题3:要使上面程序的键盘输入数据格式为1,2,34,输出语句在屏幕上显示的结果也为1,2,34,则应修改程序中的哪条语句?怎样修改?#include <stdio.h>main(){char a,b;int c;scanf("%c%c%d",&a,&b,&c);printf("%c,%c,%d\n",a,b,c);}练习——键盘输入与屏幕输出练习问题4:要使上面程序的键盘输入数据格式为1,2,34,而输出语句在屏幕上显示的结果为’1’,’2’,34,则应修改程序中的哪条语句?怎样修改?–[提示:利用转义字符输出字符单引号字符。
哈工大C语言课程设计
H a r b i n I n s t i t u t e o f T e c h n o l o g y课程设计说明书(论文)课程名称: C语言课程设计设计题目:音乐程序与波特图院系:航天学院控制科学与工程系班级:设计者:学号:指导教师:设计时间:哈尔滨工业大学教务处哈尔滨工业大学课程设计任务书题目一1.1题目详细描述:播放音乐程序,实现了自选音乐曲目和直接使用键盘弹奏,而且可以在曲目播放结束后循环选择乐曲。
1.2程序设计思路及流程图:1.3#include <stdio.h>#include <dos.h>#include <stdlib.h>#include <time.h>#include <bios.h>#include <conio.h>#define N1 16#define N2 8#define N4 4#define N8 2#define N16 1#define END 0void playmusic(int n,int *c);void typemusic();enum NOTES{C10=131,D10=147,E10=165,F10=175,G10=196,A10=220,B10=247,C0=262,D0=296,E0=330,F0=349,G0=392,A0=440,B0=494,C1=523,D1=587,E1=659,F1=698,G1=784,A1=880,B1=988,C2=1047,D2=1175,E2=1319,F2=1397,G2=1568,A2=1760,B2=1976,S=10};typedef enum NOTES SONG;SONG song1[]={C0,N4+N2,E0,N4,G0,N2,G0,N2,A0,N1,G0,N1,E0,N4+N2,C0,N4,G0,N1/3,G0,N1/3,G0,N1/3,E0,N1,C0,N1,G10,N1/3,G10,N1/3,G10,N1/3,G10,N1/3,G10,N1/3,G10,N1/3,C0,N1,END,END};SONG song2[]={A0,N2,B0,N2,C1,N1+N2,B0,N2,C1,N1,E1,N1,B0,N1+N1,S,N1,E0,N1, A0,N1+N2,G0,N2,A0,N1,C1,N1,G0,N1+N1,S,N1,E0,N2,E0,N2,F0,N1+N2,E0,N2,F0,N1,C0,N1,E0,N1+N1,S,N1,C1,N2,C1,N2,B0,N1+N2,370, N2,F0,N1,B0,N1,B0,N1+N2,S,N1,A0,N2,B0,N2,C1,N1+N2,B0,N2,C1,N1,E1,N1,B0,N1+N2,END,END};int main(){int m,n,c=1;char b='y';while(b=='y'){printf("Hello,what do you want to do by this program?\n");printf("1.Listen to music.-------Press 1\n");printf("2.Play music by yourself.-------Press 2\n");scanf("%d",&m);while(m!=1&&m!=2&&m!=3) /*选择方式*/{printf("You typed wrong!Do not push me around.:(\n");scanf("%d",&m);}if(m==1){printf("I have two musics,choose one!(Press 1/2)\n");scanf("%d",&n);while(n!=1&&n!=2){printf("You typed wrong!Do not push me around.:(\n");scanf("%d",&n);}playmusic(n,&c);}else if(m==2){typemusic();}getchar();printf("Do you want to continue?(y/n)\n");scanf("%c",&b);}return 0;}void playmusic(int n,int *c){int note=0,fre,dur,control;char d;clock_t goal;if(n==1){while(song1[note]!=END){fre=*c*song1[note];dur=song1[note+1];if(kbhit()) break;if(fre){ /*若频率值fre非0*/outportb(0x43,0xb6); /*初始化2号定时器 */fre=(unsigned)(1193180L/fre); /*计算计数初值 */outportb(0x42,(char)fre); /*先写计数初值的低8位*/outportb(0x42,(char)(fre>>8)); /*再写计数初值的高8位*/control=inportb(0x61); /*读0x61的状态*/outportb(0x61,control|0x03); /*将第0位,第1位置1,使喇叭发声*/ }goal=(clock_t)dur+clock( );while(goal>clock( ));if(dur)outportb(0x61,control);note+=2;}}else{while(song2[note]!=END){fre=*c*song2[note];dur=song2[note+1];if(kbhit()) break;if(fre){ /*若频率值fre非0*/outportb(0x43,0xb6); /*初始化2号定时器 */fre=(unsigned)(1193180L/fre); /*计算计数初值 */outportb(0x42,(char)fre); /*先写计数初值的低8位*/outportb(0x42,(char)(fre>>8)); /*再写计数初值的高8位*/control=inportb(0x61); /*读0x61的状态*/outportb(0x61,control|0x03); /*将第0位,第1位置1,使喇叭发声*/ }goal=(clock_t)dur+clock( );while(goal>clock( ));if(dur)outportb(0x61,control);note+=2;}}getchar();printf("Do you want to raise/lower the frequency? Press r/l\nIf you do not want press n\n");scanf("%c",&d);if(d=='r')*c*=2;else if(d=='l')*c*=0.5;else if(d=='n')*c=*c;}void typemusic(){char ch;clock_t goal;int fre=0,control,dur=2;printf("Play your own music!\n(You can play on the keyboard by pressing Z-M,A-J,Q-U,1-7)\n"); printf("If you are bored press /\n");do{ch=getch();if(ch=='/');else{switch(ch){case 'z':fre=C10;break;case 'x':fre=D10;break;case 'c':fre=E10;break;case 'v':fre=F10;break;case 'b':fre=G10;break;case 'n':fre=A10;break;case 'm':fre=B10;break;case 'a':fre=C0;break;case 's':fre=D0;break;case 'd':fre=E0;break;case 'f':fre=F0;break;case 'g':fre=G0;break;case 'h':fre=A0;break;case 'j':fre=B0;break;case 'q':fre=C1;break;case 'w':fre=D1;break;case 'e':fre=E1;break;case 'r':fre=F1;break;case 't':fre=G1;break;case 'y':fre=A1;break;case 'u':fre=B1;break;case '1':fre=C2;break;case '2':fre=D2;break;case '3':fre=E2;break;case '4':fre=F2;break;case '5':fre=G2;break;case '6':fre=A2;break;case '7':fre=B2;break;default:printf("You typed wrong!Do not push me around.:(\n");}}if(fre){ /*若频率值fre非0*/outportb(0x43,0xb6); /*初始化2号定时器 */fre=(unsigned)(1193180L/fre); /*计算计数初值 */outportb(0x42,(char)fre); /*先写计数初值的低8位*/outportb(0x42,(char)(fre>>8)); /*再写计数初值的高8位*/control=inportb(0x61); /*读0x61的状态*/outportb(0x61,control|0x03); /*将第0位,第1位置1,使喇叭发声*/}goal=(clock_t)dur+clock( ); /* clock()是计时函数,而与其相关的数据类型是clock_t,返回当前程序占用的CPU时间,用clock()返回的值除于CLOCK_PER_SEC常量可以得到当前程序的运行时间,单位是秒 */ while(goal>clock( ));if(dur)outportb(0x61,control);}while (ch!='/');}1.4程序运行结果及自评:1.5程序调试中遇到过的问题及解决办法在编辑弹奏的程序时,没有弄明白延时函数,无法让按键发声,后来明白了延时函数的原理,把时长设成4,就可以了,还有就是按/时直接退出,后来把if放到前面,就解决了。
哈工大C语言课件
2024/4/5
main() { …① …
a 函数 {③ ②
b();
b函数 {
④ …
a(); ⑦
⑥… ⑤ …
return; return;
}
}
}
30/78
7.4 递归函数〔Recursive Function〕
递归问题的提出 经典的汉诺塔〔Hanoi〕问题 理解递归的概念 有人曾计算过,当n=64时,所需移动
计制造/现成的标准产品 Moe
Curly
2024/4/5
7/78
7.2 函数〔Function〕的定义
假设干相关的函数可以合并成一个“模块〞 一个C程序由一个或多个源程序文件组成 一个源程序文件由一个或多个函数组成
2024/4/5
8/78
函数的分类
函数生来都是平等的,互相独立的,没有 上下贵贱和附属之分 main()稍微特殊一点点 C程序的执行从main函数开始 调用其他函数后流程回到main函数 在main函数中结束整个程序运行
【例7.2】 计算整数n的阶乘n! 如何使函数具有遇到不正确使用或非法数据输入时 防止出错的能力,增强程序的健壮性? 在函数的入口处,检查输入参数的合法性
2024/4/5
20/78
防御性程序设计〔Defensive Programming〕
【例7.2】计算整数n的阶乘n! 如何使函数具有遇到不正确使用或非法数据输入时 防止出错的能力,增强程序的健壮性? 在函数的入口处,检查输入参数的合法性
2024结/4/5 构化〔Structural〕
6/78
7.2 函数〔Function〕的定义
函数是C语言中模块化编程的最小单位
可以把每个函数看作一个模块〔 Module 〕
哈工大C语言DNA实验报告
printf("苯丙氨酸");
}
else if((DNA[i]=='T')&&(DNA[i+1]=='T')&&(DNA[i+2]=='C'))
{
printf("苯丙氨酸");
}
else if((DNA[i]=='T')&&(DNA[i+1]=='C')&&(DNA[i+2]=='A'||'G'||'C'||'T'))
}
else if((DNA[i]=='T')&&(DNA[i+1]=='G')&&(DNA[i+2]=='T'))
{
printf("半胱氨酸");
}
else if((DNA[i]=='T')&&(DNA[i+1]=='G')&&(DNA[i+2]=='C'))
{
printf("半胱氨酸");
}
else if((DNA[i]=='T')&&(DNA[i+1]=='G')&&(DNA[i+2]=='A'))/**/
if((DNA[i]=='T')&&(DNA[i+1]=='T')&&(DNA[i+2]=='A'))/**/
哈工大c语言教学6-循环控制结构PPT课件
statement;
被当作一条语句看待
} 2021/3/11
8/63
start
i ← 0, sum ← 0
false
i< 5
true
input n
sum←sum+ n
i++
output sum
2021/3/11
end
for循环语句
int i, sum, n; sum = 0; for (i = 0; i < 5; i++) {
第6章 循环控制结构
.
1
本章学习内容
计数控制的循环 条件控制的循环 for语句,while语句,do-while语句 continue语句,break语句 嵌套循环 程序调试与排错
2021/3/11
2/63
Example:
问题的提出
Draw a flowchart for the following problem: 读入5个整数,计算并显示它们的和.
在for和while语句之后一般没有分号 有分号表示循环体就是分号之前的内容
– 空语句——表示循环体内什么都不做
while (i < 100); i++;
– 死循环
for (i = 0; i < 100; i++); printf("%d", i);
– 用于延时
2021/3/11
19/63
【例6.1】计算并输出1+2+3+…+n的值
do{ statement; statement;
Don’t forget the
semicolon!!
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
猜对: right并提示大小 猜错:wrong
12
学习方法
猜多个数 10次猜不对就 猜下一个数
最多猜10次 直到猜对为止 只猜1次
13
学习方法
• 学会基本的排错方法
–改错是个大悲大喜的过程,一天之内可以让人在 悲伤的低谷和喜悦的巅峰之间跌宕起伏。
–如果改过了成千上万个错误,…… –别人嚼过的馍不香
案完全一致
减少对记忆内容的考核,增加对应用能力的考核
24
C语言编程题考试自动评分系统简介
机上考试 自动评分
根据程序的结构 和语义,衡量实 现编程任务的正 确程度,更加符 合人工阅卷结果
将上机实验和考试有机结合,能真正测试能力
25
C语言编程题考试自动评分系统简介
程序运行 结果测试
程序结构 和语义分析
四级过滤
有语法错误 也能评分
采分点语句 匹配
教师 手工核26对
C语言编程题考试自动评分系统简介
方法可以用于作弊检测
27
C语言编程题考试自动评分系统简介
• 注意事项
• 使用规范的编程方法,不要滥用技巧—— 聪明反被聪明误
• 参考新版学习指导中的习题解答
– KISS (Keep It Simple Software)
– 附加的改错题不要改变原来数据输入输出格式及 提示信息
• 拷贝粘贴是最安全的方法
29
C语言编程题考试自动评分系统简介
• 注意事项 • 单项选择题
– 基本概念 – 看清题目要求
• 以下不能对二维数组a进行正确初始化的语句是
• 写出程序运行结果题
– 阅读程序能力 – 相当于英语中的阅读理解 – 不要忽略输出数据的格式(提示信息,换行等)
报告人 计算机科学与技术学院
教授,博士生导师 苏小红
sxh@
1
主要内容
• 教材简介 • 学习方法 • 机考系统简介
2
存在 问题
教材简介
只以讲述语法为主,应试教育
程序实例缺乏趣味性和实用性
理论和实践相脱节 重视“记忆”能力的考核 忽视“动手”能力的考核
3
把C
教学理念的更新
把学
• 学生设计的优秀案例(游戏程序)分析 • 常见错误案例分析
• 欢迎大家指出错误,提出修改建议!
7
教材简介
• 配套外版翻译教材
– C大学教程(第5版) – C How to program, Fifth Edition – P. J. Deitel, H.M. Deitel等 编著 – 苏小红等 翻译
语言
习C
从应
变应试为应用
语言
试课
以培养能力和
变成
程转
提高兴趣为目标
一件
变为 实践
以语法和结构为核心
很快 乐的
工具 以程序设计方法为主线
事情
以应用为背景 4
教材简介
5
教材简介
• 国内55所院校使用
6
新版增加的内容
• 强化知识点、算法、编程方法与技巧
– 【编程提示】
• 每章小结中增加常见错误的总结
验证 魔方 矩阵
20
教辅 系统
C语言编程题考试 自动评分系统简介
C语言编程题考试 自动评分系统
软件著作 权专利
C语言教学 题库与组卷系统
软件著作
权专利
21
C语言编程题考试自动评分系统简介
90
80 70
纸上谈兵
60
50 笔试
平时
40
机考
30
机上实战
20
10 0 04前 04~05 06年 07~08 09~10 未来
不断升级,无纸考试
传统的单一闭 小班机考 全校机考
卷笔试
试点三次 试点四次 22
C语言编程题考试自动评分系统简介
现有的其他系 统只能对客观 题型自动评分
机上考试
机上考试
自动评分 人工阅卷
减少对记忆内容的考核,增加对应用能力的考核
23
C语言编程题考试自动评分系统简介
机上考试 ACM自动评分
有语法错误不能评 分,不考察程序结构 和语义,仅凭运行结 果,要求程序输出结 果(文本)与标准答
• 世界上最好的调试工具是那些有经验的人 • 定位大致的范围:归纳、推理、二分、排除
19
学习方法
• 学会基本的排错方法
–粗分细找
–采用注释的办法切掉一些代码
• 减少有关的代码区域,调试无误后再将它们打开注 释,即采用分而治之的策略将问题局部化
–插入打印语句
• 观看屏幕输出结果
–缩减输入数据
• 设法找到能导致失败的最小输入
14
学习方法
• 学会基本的排错方法
–改错很像侦破案件,有坏事发生了,而仅有的信息 是它的确发生了。
–必须从结果出发,逆向思考 –教会?学会?练会? –只可“练”会,不可言传 – 学以致用 → 用以致学
–改错的第一步是找出错误的根源,然后对症下药 –寻找错误根源的过程,称为调试
15
学习方法
• 学会基本的排错方法
31
C语言编程题考试自动评分系统简介
• 注意事项 • 编程题
– 独立编写程序的能力 – 相当于英语中的作文 – 看清题目要求 – 灵活掌握,理解原理,不要死记硬背 – 万变不离其中
32
感谢同学们对我们工作的支持!预祝 同学们考试取得优异的成绩!
SuXiaoHong
33
• 语法 • 重视error,同样重视warning
–运行时错误比较隐蔽
• 逻辑、语义 • 如除0错,死循环,未初始化,下标越界,内存泄露,野
指针…
17
学习方法
• 在程序设计语言的发展中,一个重要的努力方向就是想 通过语言特征的设计帮助避免错误
– 如下标范围检查,受限制的指针甚至完全取消指针,内存回收, 强类型检查
读程序 写程序
10
学习方法
• 实践,实践,再实践
– 好问 → 善问
– 提出问题时,必须先给出对问题的思考
– 老师领进门,出徒在个人
– 学习中的循环程序
读程序
学生自学20%
写程序
教师上课教 20%
独立思考5%
教师答疑5%
上机编程实验50%
11
学习方法
循序渐进式编程方法——如猜数游戏
想一个1~100 之间的数
–难点: –症状和根源可能相隔很远
• 有人问阿凡提:“我肚子疼,该用什么药?”
–症状可能在另一个错误被纠正后暂时消失 –症状并不是某个程序错误引发的,如误差累积 –症状可能时隐时现,如“内存泄露” –很难产生完全一样的输入条件,难以恢复“错误的
现场”
16
学习方法
• 学会基本的排错方法
–编译错误不可怕
• Correct is better than fast
• Simple is better than complex
• Clear is better than cute
• Safe is better than insecure
• Short is better than long
• Flat is better than deep
• 但没有任何语言能防止我们犯错误,每个为预防某些问 题而设置的语言特征都会带给它自身额外的代价
• 作为程序员应知道所用语言中有潜在危险和引起错误倾 向的那些语言特征
– 如goto语句,全局变量,无限制的指针,自动类型转换
18
学习方法
• 学会基本的排错方法
–利用调试工具
• 单步运行,逐条语句跟踪
–粗分细找
28
C语言编程题考试自动评分系统简介
• 注意事项
• 要求程序输出结果(文本)与答案完全一致
– 包括提示信息的内容及格式和位置,以及格式字 符(空格和换行符)的位置和数量
– 严格按照题目要求的输入输出格式编写scanf 和 printf 语句
• 输出格式必须为"x = %d\n"
• 输入提示信息为"Input a,b,c:\n"
8
配套的教辅资源
教材 课程管理网站
/elite
在线教学网站
面向读者
面向教师
面向学生
9
学习方法
• 实践,实践,再实践
– 卖油翁的故事,熟能生巧
课外作业练习 课内实验练兵 机上考试实战 创新实践提高 循序渐进编程
• printf(“%6.2f\n”,sum);
30
C语言编程题考试自动评分系统简介
• 注意事项 • 程序填空题
– 阅读和编写程序的能力 – 相当于英语中的完形填空
• 程序改错题
– 调试错误程序的能力 – 笔试语法错误居多,机试运行时错误居多 – 每章后面的常见错误小结 – 学习指导中的错误案例分析