Download presentation
Presentation is loading. Please wait.
1
C卓越工程师班 授课老师:龚涛 信息科学与技术学院 2016年10月 教材:《C程序员成长攻略》 网络课程网址:
2
第3章 兴趣 尝试动画和小游戏的编写 进一步学习数组 进一步学习指针 C语言编程新天地——图形界面绘制 课程设计小案例—屏幕打飞字
课程设计大案例:移动十五的实现 东华大学信息科学与技术学院 龚涛
3
第3章 兴趣 尝试 动画 3.1 进一步学习数组 数组是数字元素的有序集合,用下标表示其数字元素的位置,C程序的下标从0开始逐一增加计数。
第3章 兴趣 尝试 动画 3.1 进一步学习数组 数组是数字元素的有序集合,用下标表示其数字元素的位置,C程序的下标从0开始逐一增加计数。 所谓顺序数组是指这个数组中的各个数按照下标的递增逐渐增大(升序)或逐渐减小(降序)。本实例程序假设合并两个升序数组,数组如下: a[10]={10,15,23,30,35,37,41,48,50,65}; b[10]={7, 9, 14,25,32,33,34,35,36,39}; 要合并到数组c[20]中来,且使合并后的c[20]也是一个升序数组。 东华大学信息科学与技术学院 龚涛
4
第3章 兴趣 尝试 动画 3.1 进一步学习数组 【例2-14】合并两个升序数组 main() {
第3章 兴趣 尝试 动画 3.1 进一步学习数组 【例2-14】合并两个升序数组 main() { int a[10]={10,15,23,30,35,37,41,48,50,65}, b[10]={7, 9, 14,25,32,33,34,35,36,39}, c[20]; int i, pa=0, pb=0,pc=0; while(pa<10 && pb<10) { if(a[pa]<=b[pb]) c[pc++]=a[pa++]; else c[pc++]=b[pb++]; } while(pa<10) c[pc++]=a[pa++]; while(pb<10) c[pc++]=b[pb++]; for(i=0;i<20;i++) printf(" %d",c[i]); 4 东华大学信息科学与技术学院 龚涛 4
5
第3章 兴趣 尝试 动画 3.2 进一步学习指针 (1)概念 指针实际上是一个特殊的变量,它所存储的是一个内存地址值,而不是具体的数据。简单点说,指针存储的是一个指定数据在内存中存放的地址。 对于任意一个指针变量,它们本身的类型就是指针类型,它们的值都是一个内存地址值。而它们所指向的类型则是指该指针值所代表的内存地址上存放的数据的类型。例如对于一个指针声明: int *p; p本身为指针类型,但它所指向的类型是整型。事实上,对于变量p,它可以指向任何一个整型变量(如果指向一个其他类型的变量,那么程序照样可以运行,但会产生一个警告: Non-portable pointer assignment in function …。而这种警告在某种情况下则会引起不可预料的后果)。因此,也可以将p称为整型指针。但要牢记的是,所谓整型指针、符点型指针等,这些都是说明该指针可以指向的数据类型,而该指针本身只是指针类型。 5 东华大学信息科学与技术学院 龚涛 5
6
第3章 兴趣 尝试 动画 3.2 进一步学习指针 (2)指针的初始化
第3章 兴趣 尝试 动画 3.2 进一步学习指针 (2)指针的初始化 一个指针可以在声明的时候同时初始化,也可以在之后再对它赋值以初始化。指针初始化的过程包括两个方面,一是系统给指针本身分配存储空间,二是将指针所指向的变量的地址放到这个存储空间中来。 如果一个指针在声明后没有被赋值,那么它的内容将会是一个随机的值。 (3)指针的加减运算 指针的加减运算一般用在数组或字符串的情况下。一个指针可以加上或减去一个整数。但指针的这种运算和通常的数值加减运算的含意是不同的,它表示该指针所指向的地址向高地址方向或低地址方向移动了一个偏移量。这个偏移量的大小则与该指针所指向的类型有关。 6 东华大学信息科学与技术学院 龚涛 6
7
第3章 兴趣 尝试 动画 3.2 进一步学习指针 (例2-20) switch(select) {
第3章 兴趣 尝试 动画 3.2 进一步学习指针 (例2-20) switch(select) { case 1: p=add; break; case 2: p=sub; break; case 3: p=mul; break; case 4: p=div; break; default: printf("Error Selection\n"); return; } printf("The result is %d\n",(*p)(a,b)); main() int select,a,b; int (*p)(); clrscr(); printf("Please input two integer number:\n"); scanf("%d%d",&a,&b); printf("Please select an operation:\n"); printf(" Add Sub Multipl Divide\n"); scanf("%d",&select); GetOper(select,a,b,p); getch(); int add(int a,int b) { return (a+b); } int sub(int a,int b) return (a-b); int mul(int a,int b) return a*b; int div(int a,int b) if(b==0) printf("Divide 0 Error!\n"); return -1; return a/b; void GetOper(int select,int a,int b,int (*p)()) 7 东华大学信息科学与技术学院 龚涛 7
8
第3章 兴趣 尝试 动画 3.3 C语言编程新天地——图形界面绘制 C语言图形系统 为什么要进行图形系统初始化? 图形函数
第3章 兴趣 尝试 动画 3.3 C语言编程新天地——图形界面绘制 C语言图形系统 进入图形系统编程的概要框架可分为三个部分: 一、图形系统初始化 二、进行图形显示及相关操作 三、退出图形系统 为什么要进行图形系统初始化? 因为微机显示系统由显示器和显示卡来共同完成。微机对显示屏幕的所有操作都是通过显示卡来实现的。因此要进行图形显示 ,首先要确定计算机上安装的是何种显示卡,进而选择该显卡的显示模式,即确定显示卡支持的分辨率与相应的颜色配置。最后进行图形显示。这些工作都可以调用图形功能函数来完成。图形系统初始化的实质就是把适合于显示卡的图形驱动程序装入内存。如果图形驱动程序未能装入内存,那么图形函数就不能操作。 图形函数 案例:绘制坦克,绘制QQ表情(笑脸) 8 东华大学信息科学与技术学院 龚涛 8
9
第3章 兴趣 尝试 动画 3.4 课程设计小案例—屏幕打飞字 题目 案例设计
第3章 兴趣 尝试 动画 3.4 课程设计小案例—屏幕打飞字 题目 在大学的编程语言课程的最后课程设计题目中,屏幕打字恐怕是最常见的一个题目。 案例设计 想法:此程序总体的构想是对它的打字游戏功能进行简单的模仿,每次从屏幕上方只掉下一个字符。当屏幕连续掉下三个字符而无键盘反应时,或者按ESC键,则退出游戏,且统计时间和命中率。若击键正确,则从屏幕下方飞出同样一个字符与掉下来的字符相撞,并产生击毁的效果。 在程序设计过程中,采取自底向下的设计思路,即先将所想到的主要功能细化为一个个小的问题,一一解决,然后将它们与图形界面结合起来,成为一个完整的程序。因此,下面先将程序分成单个的几个模块来解决几个主要问题,并将每个模块编成完整的程序来进行测试成功后,再将它们进行整合。其中涉及一些细节的处理,则需要在上机反复调试过程中来体会。 9 东华大学信息科学与技术学院 龚涛 9
10
第3章 兴趣 尝试 动画 3.5 课程设计大案例:移动十五的实现
第3章 兴趣 尝试 动画 3.5 课程设计大案例:移动十五的实现 所谓移动十五,可以看作将拼图上的图案用一些连续的数字代替。将这些排列得杂乱无章的数字通过一个空格来排列成有规律可寻的数字阵,或者排列成某一预定的目标数字阵。一般有9方格8个数的情况和16方格15个数的情况。此课题就是针对后一种情况来进行的研究。如下图所示,初始状态a图是一个随意的数字方阵,而目标状态b图则是一个排列有序的数字方阵。将从初始状态a一步步移动直到到达目标状态b的移动过程叫做路径。移动的次数即为路径长度。此课题的主要目的就是要写出一种寻求最短路径的算法,并通过“移动十五”来演示这种算法。一般的,把最短路径叫做“最优路径”。 10 东华大学信息科学与技术学院 龚涛 10
11
答疑联系信息 手机:18201798064 QQ:5763698 E-mail:taogong@dhu.edu.cn
办公室地址:2号学院楼518 上机机房:7号机房 课程网址 东华大学信息科学与技术学院 龚涛
Similar presentations