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 2 void main() { //计算每个学生的平均分函数 void averageGrade(float gradeStudent[NUM_STUDENT][NUM_COURSE]); float gradeStudent[NUM_STUDENT][NUM_COURSE]; int i,j; printf(“please input the 10 student's grade :“); //输入10个学生的5门课成绩 for(i=0;iNUM_STUDENT;i++) { for(j=0;jNUM_COURSE;j++) { scanf(“%f“, //调用函数 } },宏定义:定义符号常量,没有返回参数的函数调用的一般方式。,,//计算每个学生的平均分函数 void averageGrade(float gradeStudent[NUM_STUDENT][NUM_COURSE ]) { float sum=0,aver[NUM_STUDENT]={0}; int i,j; for(i=0;iNUM_STUDENT;i++) { for(j=0;jNUM_COURSE;j++) { sum=gradeStudent[i][j]+sum; } aver[i]=sum/NUM_COURSE; printf(“the %d student's average grade is the %5.2f .\n“,i,aver[i]); } },动手:计算每门课的平均分。,2.一维数组与指针,例 :输入信息0902班,学号为1~10的这些学生的C语言程序设计期末成绩; 在显示器上输出这10个学生的成绩; 找出其中的最高分及其对应学生的学号。 (1)问题分析 怎么去放这些成绩?如何查找最高分? (2)绘制流程图,用一维数组存放,用数组名和下标去查找。,(3)源代码 #include #define NUM_STUDENT 3 void main() { void maxGradeandStudent(float gradeStudent[NUM_STUDENT]);//找出最高的分数及对应学号 float gradeCProgramStudent[NUM_STUDENT]; int i; printf(“please input the 10 student's C program grade .\n“); //输入10个学生的C语言程序 for(i=0;iNUM_STUDENT;i++) { printf(“the %d student :“,i+1); scanf(“%f“,//调用函数 },调用函数的定义(数组作为传递的参数),void maxGradeandStudent(float gradeStudent[NUM_STUDENT])//找出最高的分数对应的学生 { int i; float max=gradeStudent[0]; int maxGradeStudent=0; for(i=1;imax) { max=gradeStudent[i]; maxGradeStudent=i; } } printf(“maxgrade=%5.2f, the student's number is %d .\n“,max,maxGradeStudent+1); },,引入另一种方法:指针操作打印输出部分。 #include #define NUM_STUDENT 3 void main() { float gradeCProgramStudent[NUM_STUDENT]; int i; float *p; p=gradeCProgramStudent; printf(“please input the 10 student's C program grade .\n“); //输入10个学生的C语言程序 for(i=0;iNUM_STUDENT;i++) { printf(“the %d student :“,i+1); scanf(“%f“, },有没有其他办法来实现打印输出和查找呢?,参数传递:指针作为函数参数(数组名与指针的关系),#include #define NUM_STUDENT 3 void main() { void maxGradeandStudent(float *);//找出最高的分数及对应学号 float gradeCProgramStudent[NUM_STUDENT]; int i; float *p; p=gradeCProgramStudent; printf(“please input the 10 student's 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 student's 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-%02d\n“,date1.year,date1.month,date1.day); time_t todaySystem; time( },struct date { int 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 gradeStudent[3][2]={80,87},{90,91},{76,78}};,gradeStudent[0],gradeStudent[1],gradeStudent[2],gradeStudent表示该二维数组的首地址; gradeStudent[i],表示为第i行的首地址。,gradeStudent,,以变量名和数组名作为函数参数的比较,,
展开阅读全文