《C语言程序设计高级篇.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计高级篇.ppt(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计高级篇第三讲 二维数组的回顾及应用、一维数组与指针的关系、数组与指针及函数的综合应用、结构体引入(全局变量与局部变量回顾)主要内容1.针对上机出现的一些问题进行分析讲解 引入:局部变量与全局变量,函数的返回值;2.电子成绩单部分功能:二维数组、一维数组与指针与函数的综合应用3.数字时钟系统程序设计:结构体数据定义及使用,时间函数的调用1.实验八上机出现的问题1.上交的作业:(1)只有三四个同学看清楚了题意,是要写函数;(2)16进制,与10进制的概念不清楚。2.实验八出现的问题:(1)二维数组的存放;(2)函数的返回值;(3)单步调试,只要这几个热键F9(设置断点);F10(不进
2、入函数内部的单步运行);F11(进入函数内部的单步运行)。2.电子成绩单部分功能:二维数组例:输入10个学生5门课的成绩,分别用函数实现下列功能:计算每个学生平均分。(1)问题分析 分析所需要的数据类型;(二维数组,双重循环)函数如何定义、传递什么样的参数等。(一般的参数传递,还是数组的参数传递等等)(2)算法流程图(3)源代码#include#define NUM_STUDENT 2#define NUM_COURSE 2void main()/计算每个学生的平均分函数算每个学生的平均分函数 void averageGrade(float gradeStudentNUM_STUDENTNUM
3、_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,&gradeStudentij);averageGrade(gradeStudent);/调用函数用函数宏定义:定义符号常量宏定义:定义符号常量没有返回参数的函数没有返回参数的函数调用的一般方式。调用的一般方式。/计算每个学生的平均分函数算每个学
4、生的平均分函数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班,
5、学号为110的这些学生的C语言程序设计期末成绩;在显示器上输出这10个学生的成绩;找出其中的最高分及其对应学生的学号。(1)问题分析怎么去放这些成绩?如何查找最高分?(2)绘制流程图用一维数组存放,用一维数组存放,用数组名和用数组名和下标去查找。下标去查找。(3)源代)源代码#include#define NUM_STUDENT 3void main()void maxGradeandStudent(float gradeStudentNUM_STUDENT);/找出最高的分数及找出最高的分数及对应学号学号float gradeCProgramStudentNUM_STUDENT;int i;
6、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,&gradeCProgramStudenti);printf(n);/在在显示器上打印出示器上打印出10个学生的个学生的C语言成言成绩for(i=0;iNUM_STUDENT;i+)printf(the%d students grade is%5.2f;,i+1,gradeCProgramStudenti);printf(n
7、);printf(n);maxGradeandStudent(gradeCProgramStudent);/调用函数用函数调用函数的定用函数的定义(数(数组作作为传递的参数)的参数)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 stud
8、ents 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
9、(the%d student:,i+1);scanf(%f,&gradeCProgramStudenti);printf(n);/在在显示器上打印出示器上打印出10个学生的个学生的C语言成言成绩for(p=gradeCProgramStudent;p(gradeCProgramStudent+NUM_STUDENT);p+)printf(the%d students grade is%5.2f;,i+1,*p);printf(n);printf(n);有没有其他办法来实现打印输出和查找有没有其他办法来实现打印输出和查找呢?呢?参数参数传递:指:指针作作为函数参数函数参数(数(数组名与指名与指针
10、的关系)的关系)#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
11、语言成言成绩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+
12、1);3.数字时钟系统(1)系统分析)系统分析时间显示:显示当前的时间年、月、日时间调节:可以根据不同的时区,来调节当前的时间。闹钟提醒:可以设置提醒时间:如一个小时提醒一下 选择不同的时区选择不同的时区北京时间北京时间东京时间东京时间巴西时间巴西时间美国时间美国时间显示时间显示时间设置闹钟设置闹钟 调整时区调整时区 输入命令输入命令判断闹钟时间是否到了判断闹钟时间是否到了提醒提醒(2)绘制基本流程图)绘制基本流程图struct date int year;int month;int day;struct 结构体名 成员列表 变量名列表;struct date int year;int mon
13、th;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(&todaySystem);struct tm *p;todaySystem-=24 *60 *60;p=localtime(&today
14、System);printf(%4d-%02d-%02dn,p-tm_year +1900,p-tm_mon +1,p-tm_mday);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,应输出字符串“
15、483”。N的位数不确定,可以是任意位数的整数。书203页8.17题。二维数组的存放例float gradeStudent32=80,87,90,91,76,78;808790917678gradeStudent0gradeStudent1gradeStudent2gradeStudent表示该二维数组的首地址;表示该二维数组的首地址;gradeStudenti,表示为第,表示为第i行的首地址。行的首地址。gradeStudent以以变量名和数量名和数组名作名作为函数参数的比函数参数的比较实参参类型型一般一般变量名量名数数组名名要求形参的要求形参的类型型变量名量名数数组名或指名或指针变量量传递的信息的信息变量的量的值实参数参数组首元素的地址首元素的地址通通过函数函数能否能否改改变实参的参的值不能不能能能