C语言程序设计高级篇.ppt
C语言程序设计高级篇,第三讲 二维数组的回顾及应用、一维数组与指针的关系、数组与指针及函数的综合应用、结构体引入(全局变量与局部变量回顾),主要内容,1.针对上机出现的一些问题进行分析讲解 引入:局部变量与全局变量,函数的返回值;2.电子成绩单部分功能:二维数组、一维数组与指针与函数的综合应用3.数字时钟系统程序设计:结构体数据定义及使用,时间函数的调用,1.实验八上机出现的问题,1.上交的作业:(1)只有三四个同学看清楚了题意,是要写函数;(2)16进制,与10进制的概念不清楚。2.实验八出现的问题:(1)二维数组的存放;(2)函数的返回值;(3)单步调试,只要这几个热键F9(设置断点);F10(不进入函数内部的单步运行);F11(进入函数内部的单步运行)。,2.电子成绩单部分功能:二维数组,例:输入10个学生5门课的成绩,分别用函数实现下列功能:计算每个学生平均分。(1)问题分析 分析所需要的数据类型;(二维数组,双重循环)函数如何定义、传递什么样的参数等。(一般的参数传递,还是数组的参数传递等等)(2)算法流程图,(3)源代码#include#define NUM_STUDENT 2#define NUM_COURSE 2void main()/计算每个学生的平均分函数 void averageGrade(float gradeStudentNUM_STUDENTNUM_COURSE);float gradeStudentNUM_STUDENTNUM_COURSE;int i,j;printf(please input the 10 students grade:);/输入10个学生的5门课成绩for(i=0;iNUM_STUDENT;i+)for(j=0;jNUM_COURSE;j+)scanf(%f,/调用函数,宏定义:定义符号常量,没有返回参数的函数调用的一般方式。,/计算每个学生的平均分函数void averageGrade(float gradeStudentNUM_STUDENTNUM_COURSE)float sum=0,averNUM_STUDENT=0;int i,j;for(i=0;iNUM_STUDENT;i+)for(j=0;jNUM_COURSE;j+)sum=gradeStudentij+sum;averi=sum/NUM_COURSE;printf(the%d students average grade is the%5.2f.n,i,averi);,动手:计算每门课的平均分。,2.一维数组与指针,例:输入信息0902班,学号为110的这些学生的C语言程序设计期末成绩;在显示器上输出这10个学生的成绩;找出其中的最高分及其对应学生的学号。(1)问题分析怎么去放这些成绩?如何查找最高分?(2)绘制流程图,用一维数组存放,用数组名和下标去查找。,(3)源代码#include#define NUM_STUDENT 3void main()void maxGradeandStudent(float gradeStudentNUM_STUDENT);/找出最高的分数及对应学号float gradeCProgramStudentNUM_STUDENT;int i;printf(please input the 10 students C program grade.n);/输入10个学生的C语言程序for(i=0;iNUM_STUDENT;i+)printf(the%d student:,i+1);scanf(%f,/调用函数,调用函数的定义(数组作为传递的参数),void maxGradeandStudent(float gradeStudentNUM_STUDENT)/找出最高的分数对应的学生 int i;float max=gradeStudent0;int maxGradeStudent=0;for(i=1;imax)max=gradeStudenti;maxGradeStudent=i;printf(maxgrade=%5.2f,the students number is%d.n,max,maxGradeStudent+1);,引入另一种方法:指针操作打印输出部分。#include#define NUM_STUDENT 3void main()float gradeCProgramStudentNUM_STUDENT;int i;float*p;p=gradeCProgramStudent;printf(please input the 10 students C program grade.n);/输入10个学生的C语言程序for(i=0;iNUM_STUDENT;i+)printf(the%d student:,i+1);scanf(%f,有没有其他办法来实现打印输出和查找呢?,参数传递:指针作为函数参数(数组名与指针的关系),#include#define NUM_STUDENT 3void main()void maxGradeandStudent(float*);/找出最高的分数及对应学号float gradeCProgramStudentNUM_STUDENT;int i;float*p;p=gradeCProgramStudent;printf(please input the 10 students C program grade.n);/add code 输入10个学生的C语言程序/add code 在显示器上打印出10个学生的C语言成绩maxGradeandStudent(p);/调用函数,void maxGradeandStudent(float*pgradeStudent)/找出最高的分数对应学号int maxGradeStudent=0;float max,*p_i;max=*pgradeStudent;for(p_i=pgradeStudent+1;p_imax)max=*p_i;maxGradeStudent=p_i-pgradeStudent;printf(maxgrade=%5.2f,the students number is%d.n,max,maxGradeStudent+1);,3.数字时钟系统,(1)系统分析时间显示:显示当前的时间年、月、日时间调节:可以根据不同的时区,来调节当前的时间。闹钟提醒:可以设置提醒时间:如一个小时提醒一下,(2)绘制基本流程图,struct date int year;int month;int day;,struct 结构体名 成员列表 变量名列表;,struct date int year;int month;int day;date1;,struct date date1;,(3)时间结构体,(4)结构体应用:实现电子时钟部分功能,#include#include void main()date date1;date1.year=2010;date1.month=05;date1.day=28;printf(%4d-%02d-%02dn,date1.year,date1.month,date1.day);time_t todaySystem;time(,struct dateint year;int month;int day;,/显示日期,实验九,1.用指针方法处理:输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:输入10个数;查找及对换处理输出10个数。(书278页10.3题)2.用结构体实现电子时钟部分功能:显示时间;-3.学生成绩管理系统的部分功能实现:书中202页8.14题(1),(3);4.用递归法将一个整数n转换成字符串。例如:输入483,应输出字符串“483”。N的位数不确定,可以是任意位数的整数。书203页8.17题。,二维数组的存放,例float gradeStudent32=80,87,90,91,76,78;,gradeStudent0,gradeStudent1,gradeStudent2,gradeStudent表示该二维数组的首地址;gradeStudenti,表示为第i行的首地址。,gradeStudent,以变量名和数组名作为函数参数的比较,