c语言程序设计-第八章优化学生成绩分析系统-指针概要

上传人:今*** 文档编号:107185227 上传时间:2019-10-18 格式:PPT 页数:75 大小:1.07MB
返回 下载 相关 举报
c语言程序设计-第八章优化学生成绩分析系统-指针概要_第1页
第1页 / 共75页
c语言程序设计-第八章优化学生成绩分析系统-指针概要_第2页
第2页 / 共75页
c语言程序设计-第八章优化学生成绩分析系统-指针概要_第3页
第3页 / 共75页
c语言程序设计-第八章优化学生成绩分析系统-指针概要_第4页
第4页 / 共75页
c语言程序设计-第八章优化学生成绩分析系统-指针概要_第5页
第5页 / 共75页
点击查看更多>>
资源描述

《c语言程序设计-第八章优化学生成绩分析系统-指针概要》由会员分享,可在线阅读,更多相关《c语言程序设计-第八章优化学生成绩分析系统-指针概要(75页珍藏版)》请在金锄头文库上搜索。

1、1,项目八 优化学生成绩分析系统-指针,2,【项目要求】,借助于指针对上一章的的学生成绩分析系统进行优化,对某班一门课的成绩进行分析,要求有如下功能: 1.查询全部成绩; 2.查询平均分; 3.查询不及格率; 4.查询最高分; 5.按成绩降序排列; 0.退出。,为了保存一个班的C语言成绩需要借助于一维数组,通过指针对其数据进行操作。将本项目分成两部分,首先借助于指针对一维数组进行访问,然后介绍一种新的排序算法选择排序。,【项目分析】,3,问题情境及实现,通过前面所学知道,可以通过下标法访问数组元素,数组名代表数组的首地址,即指针,我们亦可通过其对数组元素进行访问。 #define N 100

2、#include void main() int sN,n,*p; printf(“请输入该班人数“); scanf(“%d“, ,4,4,4,本讲主要内容,本讲小结,1. 指针与字符串,重点:指针与函数,5,1 指针与字符串(1),1.1 字符串的表示形式,用字符数组存放一个字符串,并输出该字符串。,main() char string =“I love China!“; printf(“%sn“,string); ,如果用字符指针,这段代码应如何修改?,6,1 指针与字符串(2),1.1 字符串的表示形式(续),用字符串指针指向一个字符串,main() char *string=“I lo

3、ve China!“; printf(“%sn“,string); ,7,1 指针与字符串(3),1.1 字符串的表示形式(续),例1 写出下面程序的运行结果,#include void main() char *ptr1,*ptr2; ptr1=ptr2=“abcde“; while(*ptr2!=0) putchar(*ptr2+); putchar(n); while(-ptr2=ptr1) putchar(*ptr2); putchar(n); ,运行结果: abcde edcba,8,1 指针与字符串(4),1.2 使用字符串指针变量与字符数组的区别,字符数组由若干元素组成,每个元素

4、中放一个字符,而字符指针变量中存放的是地址(字符串的首地址)。,赋值方式不同。对字符数组只能对各个元素赋值,不能用一个字符串给一个字符数组赋值,但对于字符指针变量可以用一个字符串给它赋值。,char str14; str=“ I love China”;,char *pstr; pstr=“ I love China”;,9,1 指针与字符串(5),1.2 使用字符串指针变量与字符数组的区别(续),例2 分析下面程序的运行结果,main() char *a=“I Love China!“; a=a+7; printf(“%sn“,a); ,运行结果: China!,10,1 指针与字符串(6)

5、,1.2 使用字符串指针变量与字符数组的区别(续),例3 分析下面程序的运行结果,main() char *a=“I Love China!“; int i; printf(“the sixth character is %cn“,a5); for(i=0;ai!=0;i+) printf(“%c“,ai); ,运行结果: the sixth character is e I Love China!,返回主菜单,11,2 指针与函数(1),2.1 指针变量作为函数参数,指针变量作为函数参数,实参变量和形参变量的传递方式为地址传递,void swap1(int x,int y) int z; z

6、=x; x=y; y=z; ,void swap2(int *x,int *y) int z; z=*x; *x=*y; *y=z; ,12,2 指针与函数(2),2.1 指针变量作为函数参数(续),例4 程序填空,然后分析运行结果。(输入5,6),运行结果: a=5 b=6 a=5 b=6 a=6 b=5,a,b,&a,&b,13,2 指针与函数(3),2.1 指针变量作为函数参数(续),例5 一个自然数是素数,且它的数字位置经过任意对换后仍为素数,则称为绝对素数,例如13,试求所有两位绝对素数。,解题思路,使用哪种类型的程序结构?,给出一个数,如何求任意数字位置对换后的数?,如何判断一个数

7、为素数?,例5 程序编写,思考:如果求所有三位绝对素数, 程序如何修改?,14,2 指针与函数(4),2.2 指向函数的指针变量,在语言中,一个函数占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数。然后通过指针变量就可以找到并调用这个函数。我们把这种指向函数的指针变量称为“函数指针变量”。,15,2 指针与函数(5),2.2 指向函数的指针变量(续),函数指针变量定义的一般形式为:,类型说明符 (*指针变量名)();,表示被指函数的返回值的类型,“*”后面的变量是定义的指针变量,指针变量所指的是一个函

8、数,如:int (*pf)();,16,2 指针与函数(6),2.2 指向函数的指针变量(续),用函数指针变量调用函数的一般形式为:,(*指针变量名)(实参表),17,2 指针与函数(7),2.2 指向函数的指针变量(续),例6 将给出的程序修改为使用函数指针变量定义的方式,main() int max(int,int); int a,b,c; scanf(“%d,%d“, ,int (*p)(); p=max;,18,2 指针与函数(8),2.2 指向函数的指针变量函数指针作为函数参数,例7 分析下面程序的执行过程,#include main() int add(int a,int b);

9、int sub(int a,int b); fun(int (*)p(),int a,int b); int (*ps)(),x,y,z; scanf(“%d,%d“, ,add(int a,int b) return (a+b); sub(int a,int b) return (a-b); ,fun函数如何定义?,fun(int (*pf)(),int a,int b) return (*pf)(a,b); ,19,2 指针与函数(9),2.2 指向函数的指针变量返回值为指针的函数,定义返回值为指针变量类型的函数的一般形式为:,类型符 *函数名(参数表),20,2 指针与函数(10),2.

10、2 指向函数的指针变量返回值为指针的函数,例8 分析给出程序的运行结果,#include int *f(int *x,int *y) if (*x*y) return x; else return y; void main() int a=17,b=18,*p,*q,*r; p= ,运行结果: 17,18,17,返回主菜单,21,3 指针数组 (1),3.1 指针数组,指针数组的定义形式为:,类型符 *指针数组名常量表达式;,课堂练习,分析下面语句的含义: int *p4; Int (*p)4;,22,3 指针数组 (2),3.1 指针数组(续),#include main() static

11、int a34=11,22,33,44,55,66,77,88,99,110,122,133; int *p3=a0,a1,a2; int i,j; for(i=0;i3;i+) for(j=0;j4;j+) printf(“a%d%d=%dt“,i,j,pij); printf(“n“); ,23,3 指针数组 (3),3.1 指针数组(续),#include main() static int a34=11,22,33,44,55,66,77,88,99,110,122,133; int *p3=a0,a1,a2; int (*q)4; int i,j; q=a; for(i=0;i3;i

12、+) for(j=0;j4;j+) printf(“a%d%d=%dt“,i,j,(*(q+i)j); printf(“n“); ,24,3 指针数组(4),P223 指向指针的指针 P224 main函数的参数 请同学们自学,返回主菜单,25,4 指针应用举例(1),例9 编写程序,利用系统提供的图形库函数在屏幕上画一个图形,方法是将一个半径为r1的圆周等分n份,再以每个等分点为圆心,以半径rs画n个圆,要求在命令方式下给出r1,rs的值及环的颜色值。,本例主要说明main函数参数的使用, 以及图形函数的使用,26,4 指针应用举例(2),例10 编写程序,采用冒泡法对一组整数进行升序或降序

13、排序,然后输出排序结果。要求:由计算机生成10100以内的随机整数50个,放入数组。通过函数指针,完成对数组的升序或者降序的排序。,本例主要说明指针作为函数参数, 及指针函数的使用,返回主菜单,27,27,27,本讲小结,掌握字符指针的使用 掌握指针作为函数参数的使用 了解指向函数的指针变量的使用 了解指针数据的使用,28,【项目要求】,借助于指针对上一章的的学生成绩分析系统进行优化,对某班一门课的成绩进行分析,要求有如下功能: 1.查询全部成绩; 2.查询平均分; 3.查询不及格率; 4.查询最高分; 5.按成绩降序排列; 0.退出。,为了保存一个班的C语言成绩需要借助于一维数组,通过指针对

14、其数据进行操作。将本项目分成两部分,首先借助于指针对一维数组进行访问,然后介绍一种新的排序算法选择排序。,【项目分析】,29,问题情境及实现,通过前面所讲可实现本系统的前4个功能,下面借助于指针实现数据的排序。采用简单选择排序方法进行,程序如下: #define N 100 #include #include void fselectsort(int *a,int n) int *p,*q,*pmax,t; for(p=a;pa+n-1;p+) pmax=p; for(q=p+1;qa+n;q+) if(*pmax*q) pmax=q; if(p!=pmax) t=*p;*p=*pmax;*p

15、max=t; ,30,相关知识:简单选择排序,简单选择排序的基本方法是:第一趟,从n个记录中找出关键字最小的记录与第一个记录交换;第二趟,从第二个记录开始的n-1个记录中再选出关键字最小的记录与第二个记录交换;如此,第i趟,则从第i个记录开始的 n-i+1个记录中选出关键字最小的记录与第i个记录交换,直到整个序列按关键字有序排列。,31,简单选择排序算法:,void selectsort(datatype r,int n) int i,j,t; for(i=1;irj) t=j; if(i!=t) r0=rt; rt=ri; ri=r0; ,32,对如下关键字(49,38,65,97,76,13,27,49)进行简单选择排序的过程见下图。,13 38 65 97 76 49 27 49,第一趟结果:,第二趟结果:,13 27 65 97 76 49 38 49,第三趟结果:,13 27 38 97 76 49 65 49,第四趟结果:,13 27 38 49 76 97 65 49,第五趟结果:,13 27 38 49 49 97 65 76,第六趟

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号