版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
项目6利用数组完善项目中数据的处理目标TARGET知识目标掌握一维数组的定义、初始化和引用方法掌握二维数组的定义、初始化和引用方法熟悉Visual理解字符数组与字符串的区别,掌握它们的使用方法目标TARGET技能目标能够利用一维数组知识解决批量数据问题,比如存储、排序、插入等能够利用二维数组处理类似行列式的问题能够使用字符数组处理字符串多个学生一门课程成绩的总成绩和平均成绩任务6.1多个学生多门课程成绩的总成绩和平均成绩任务6.2使用数组处理字符串任务6.3任务6.1多个学生一门课程成绩的总成绩和平均成绩
任务描述在学生成绩管理系统中,已知6名同学《C语言程序设计》课程的期末成绩分别为85、80、90、93、78、69,请问这6名同学《C语言程序设计》课程的总成绩是多少分,平均成绩是多少分?请编制一个程序。传统方案为:1)定义6个float变量。2)统计求和,并求出平均值。从算法分析中,我们可以看到传统的方案,当人数变多,定义的变量个数也随之变多,使用不灵活,累加的变量个数丢失时容易出现误差。为了满足大数量数据的计算需求,在C语言程序设计中提出了数组的概念。任务分析传统方案为:1)定义6个float变量。2)统计求和,并求出平均值。从算法分析中,我们可以看到传统的方案,当人数变多,定义的变量个数也随之变多,使用不灵活,累加的变量个数丢失时容易出现误差。为了满足大数量数据的计算需求,在C语言程序设计中提出了数组的概念。1一维数组的定义及其应用Part◎一维数组的引用◎一维数组的初始化◎一维数组的应用◎一维数组的定义6.1.1一维数组的定义
类型说明符表示数组中所有元素的数据类型;数组名就是这个数组型变量的名称;常量表达式指一维数组中元素的个数,即数组长度。数组:在程序设计中,一组具有相同数据类型的变量集合称为数组。一维数组:是只有一个下标的数组,它用来表示一组具有相同类型的数据。在C语言中,一维数组的定义方式如下所示:类型说明符数组名[常量表达式];6.1.2一维数组的引用
数组定义后,就可以引用数组中的任意一个元素了,引用形式如下:<数组名>[<下标表达式>];其中,
“下标表达式”表示数组中的某一个元素的顺序序号,
序号范围是“0-[数组长度-1]”。6.1.3一维数组的初始化
完成数组的定义后,只是对数组中的元素开辟了一块内存空间。这时,如果想使用数组操作数据,还需要对数组进行初始化。一维数组初始化的一般格式如下:<类型说明符><数组名>[常量表达式]={初值表};一维数组初始化的常见的方式有三种,具体如下:1)直接对数组中的所有元素赋值,例如:inti[6]={1,2,3,4,5,6};2)只对数组中的一部分元素赋值,例如:inti[6]={1,2,3};3)对数组全部元素赋值但不指定长度,例如:inti[]={1,2,3,4}。6.1.4一维数组的应用
例6-1案例:
在学生成绩管理系统中,已知6名同学《C语言程序设计》课程的期末成绩分别为85、80、90、93、78、69,请问这6名同学《C语言程序设计》课程的总成绩是多少分,平均成绩是多少分?请编制一个程序。6.1.4一维数组的应用
例6-1算法:1.定义一维数组result[6]、求和变量sum、求平均值变量ave、变量i。2.循环输入6名同学《C语言程序设计》的期末成绩。3.循环输出6名同学《C语言程序设计》的期末成绩,观察成绩在数组中的存储。4.求总成绩,存入变量sum中,并输出变量sum的值。5.求平均成绩,存入变量ave中,并输出变量ave的值。6.1.4一维数组的应用
例6-1流程图:6.1.4一维数组的应用
例6-1程序代码:#include"stdio.h"voidmain(){//定义一个数组floatresult[6],sum=0.0,ave=0.0;inti;printf("请输入已知的6名同学《C语言程序设计》课程的期末成绩:\n");for(i=0;i<6;i++){ scanf("%f",&result[i]); }//输出,并观察6名同学的成绩在以上数组中的存储printf("\n================\n");printf("\n分别输出6名同学的成绩:\n");for(i=0;i<6;i++){ printf("result[%d]=%.2f\n",i,result[i]); }//求总成绩printf("\n================\n");for(i=0;i<6;i++){ sum=sum+result[i]; }printf("6名同学的总成绩为:sum=%.2f\n",sum);//求平均成绩printf("\n================\n");ave=sum/6;printf("6名同学的平均成绩为:ave=%.2f\n",ave);}6.1.4一维数组的应用
例6-1程序执行结果:说明:(1)%.2f用在格式控制输入输出中,表示保留两位小数。(2)字符数组的输入输出都是通过循环实现的。注意:(1)数组的下标是用方括号括起来,不是圆括号,数组的下标是从0开始的,不是从1开始。(2)数组的命名同变量的命名规则相同。任务6.2多个学生多门课程成绩的总成绩和平均成绩
任务描述一个学习小组有4个人,每个人有相同三门课程的考试成绩。求组内每个人的总成绩、全组各科的总成绩和各科的平均成绩。请编制一个程序。传统方案为:1)定义6个float变量。2)统计求和,并求出平均值。从算法分析中,我们可以看到传统的方案,当人数变多,定义的变量个数也随之变多,使用不灵活,累加的变量个数丢失时容易出现误差。为了满足大数量数据的计算需求,在C语言程序设计中提出了数组的概念。任务分析1)定义一个四行三列的数组,每一行用于存放一名学生的三科成绩。2)通过遍历数组中的每一个元素,求组内每个人的总成绩、全组各科的总成绩和各科的平均成绩。2二维数组的定义及其应用Part◎二维数组的引用◎二维数组的初始化◎二维数组的应用◎二维数组的定义6.2.1二维数组的定义
其中,
“常量表达式1”表示数组的行数;
“常量表达式2”表示数组的列数。例如,intb[4][5];二维数组的定义格式为:<类型说明符><数组名>[<常量表达式1>][<常量表达式2>];6.2.2二维数组的引用
1、二维数组的引用方式同一维数组的引用方式一样,也是通过数组名和下标的方式来引用数组元素,引用形式为:<数组名>[<行下标>][<列下标>]2、二维数组中元素的存储和排列顺序:整体按行从上到下存储,行内又按从左到右存放,因此二维数组元素的个数等于行数与列数的乘积。3、二维数组的行下标和列下标都是从0开始编号。例如:intb[4][5];定义名为b的整型二维数组,数组分为4行5列,共20个元素,元素的排列顺序为:
b[0][0]b[0][1]b[0][2]b[0][3]b[0][4]b[1][0]b[1][1]b[1][2]b[1][3]b[1][4]b[2][0]b[2][1]b[2][2]b[2][3]b[2][4]b[3][0]b[3][1]b[3][2]b[3][3]b[3][4]6.2.3二维数组的初始化
完成二维数组的定义后,需要对二维数组进行初始化,二维数组初始化的一般格式如下:<类型说明符><数组名>[<常量表达式1>][<常量表达式2>]={初值表};初始化二维数组的方式有四种,具体如下:1)按行给二维数组赋初值
例如:inta[2][3]={{1,2,3},{4,5,6}};2)将所有的数组元素按顺序写在一个大括号内
例如:inta[2][3]={1,2,3,4,5,6};3)对部分数组元素赋初值
例如:intb[3][4]={{1},{4,3},{2,1,2}};4)对全部数组元素置初值,则第一个下标可省略
例如:inta[][3]={1,2,3,4,5,6};6.2.4二维数组的应用
例6-2案例:
一个学习小组有4个人,每个人有相同三门课程的考试成绩。请编制一个程序求组内每个人的总成绩、全组各科的总成绩和各科的平均成绩。6.2.4二维数组的应用
例6-2流程图:6.2.4二维数组的应用
例6-2程序代码:#include"stdio.h"voidmain(intargc){//定义一个四行三列数组存放张同学、王同学、李同学、赵同学四个人成绩intStuScore[4][3]={{88,70,90},{80,80,60},{89,60,85},{70,80,80}} intm=0,n=0;intnStuTotalScore;intnMathTotalScore=0;intnChineseTotalScore=0;intnEnglishTotalScore=0;printf("个人总成绩:\n");for(m=0;m<4;m++){nStuTotalScore=0;for(n=0;n<3;n++)
{nStuTotalScore+=StuScore[m][n];switch(n){case0:nMathTotalScore+=StuScore[m][0];break;case1:nChineseTotalScore+=StuScore[m][1];break;case2:nEnglishTotalScore+=StuScore[m][2];}}switch(m){case0:printf("张同学:%d\n",nStuTotalScore);break;case1:printf("王同学:%d\n",nStuTotalScore);break;case2:printf("李同学:%d\n",nStuTotalScore);break;case3:printf("赵同学:%d\n",nStuTotalScore);break;}}
printf("小组数学总分:%d 小组数学平均分:%.2f\n",nMathTotalScore,(double)nMathTotalScore/4);printf("小组语文总分:%d 小组语文平均分:%.2f\n",nChineseTotalScore,(double)nChineseTotalScore/4);printf("小组英语总分:%d 小组英语平均分:%.2f\n",nEnglishTotalScore,(double)nEnglishTotalScore/4);}6.2.4二维数组的应用
例6-2程序执行结果:说明:(1)其中,定了StuScore[4][3]四行三列数组存放学生成绩,每一行存放一名学生的三科成绩。(2)通过遍历列下标获取每个小组不同学科的总分,通过遍历行下标获取每个小组成员的总分,最后将小组不同学科的总分和平均分输出。(3)第一个switch分支case的0、1、2分别表示的是数学、语文、英语成绩。第二个switch分支case的0、1、2、3分别表示的是张同学、王同学、李同学、赵同学四个人的总成绩。注意:(1)数组的下标是用方括号括起来,不是圆括号,数组的下标是从0开始的,不是从1开始。(2)数组的命名同变量的命名规则相同。任务6.3使用数组处理字符串
任务描述已知两个数组str1和str2分别存放字符串“Hello”和“Word”,编写程序复制第1个字符串,并连接字符串1和字符串2,输出连接后的字符串及其长度。传统方案为:1)定义6个float变量。2)统计求和,并求出平均值。从算法分析中,我们可以看到传统的方案,当人数变多,定义的变量个数也随之变多,使用不灵活,累加的变量个数丢失时容易出现误差。为了满足大数量数据的计算需求,在C语言程序设计中提出了数组的概念。任务分析(1)定义3个字符数组str1、str2和str3,保证数组长度大于字符串的长度,将“Hello”存入数组str1中、将“Word”存入数组str2中。(2)通过字符串复制函数将“Hello”复制到数组str3中。(3)通过字符串连接函数和求字符串长度的函数分别求出连接后的字符串及其长度。3使用数组处理字符串Part◎字符串◎字符串处理函数◎字符数组的应用◎字符数组的定义、引用和初始化6.3.1字符数组的定义、引用和初始化
一、定义:字符数组就是数据元素为字符类型的数组,用来存放字符。字符数组的定义格式为:char数组名[常量表达式];6.3.1字符数组的定义、引用和初始化
二、引用:字符数组的引用和数值型数组一样,也是使用下标的形式,形式如下:<数组名>[<下标表达式>];6.3.1字符数组的定义、引用和初始化
三、初始化:字符数组的初始化,有如下几种方法:(1)逐个字符赋给数组中各元素,字符数组的长度也可用初值来确定。例如:charch[7]={'s','t','u','d','e','n','t'};(2)在定义字符数组时进行初始化,可以省略数组长度。例如:charstr[]={'a','b','c'};(3)利用字符串给字符数组赋初值,通常用一个字符数组来存放一个字符串。例如:charchArray[]={"Howareyou!"};
或将"{}"去掉,写成:charchArray[]="Howareyou!";6.3.2字符串
字符串实际上是使用null字符'\0'终止的一维字符数组。因此,一个以null结尾的字符串,包含了组成字符串的字符。因为字符串的本质就是字符数组,因此可以按照数组的方式遍历和访问某个元素即可。6.3.2字符串
C语言库函数提供以下两类字符串的输入/输出函数。(1)格式化的字符串输入/输出函数:scanf()/printf()。(2)非格式化的字符串输入/输出函数:gets()/puts(),格式如下:
gets(字符数组名)
功能:读入键盘输入的字符串,并存储在字符数组中。按回车键结束输入,系统自动在字符串末尾添加结束标志‘\0’。puts(字符数组名)
功能:将字符数组中的字符串输出在屏幕上。6.3.3字符串处理函数
C语言提供了一些字符串处理函数,这些函数的原型在头文件string.h中。字符串复制函数——strcpy()格式如下:
strcpy(目地字符数组名,源字符数组名);功能:把源字符数组中的字符串复制到目地字符数组中,串结束符'\0'也一同复制。例如:charstr1[12]="Hello",str2[12];strcpy(str2,str1);printf("strcpy(str2,str1):%s\n",str2);//"Hello"6.3.3字符串处理函数
2.求字符串长度函数——strlen()格式如下:strlen(字符数组名);功能:计算字符串的实际长度(不包括结束符'\0')。函数的返回值为字符串的实际长度。例如:charstr[80]="Iamastudent";//字符数组的长度为80printf("\n长度=%d",strlen(str));//输出结果:长度=146.3.3字符串处理函数
3.字符串连接函数——strcat()格式如下:
strcat(目地字符数组名,源字符数组名);功能:把源字符数组中的字符串连接到目地字符数组的后面,并删除目地字符数组中的字符串结束符'\0'。6.3.4字符数组的应用
例6-3案例:
有三个字符串,将字符串1复制到字符串3中,并输出;然后将字符串1和字符串2连接起来,并输出连接后的字符串及其长度。6.3.4字符数组的应用
例6-3流程图:开始定义数组str1、str2并初始化定义字符数组str3、变量len输出数组str3结束复制str1到str3输出str1长度求出str1长度输出数组str1连接str1到str26.3.4字符数组的应用
例6-3程序代码:#include<stdio.h>#include<string.h>voidmain(){ charstr1[12]="Hello"; charstr2[12]="World"; charstr3[12]; intlen; /*复制str1到str3*/ strcpy(str3,str1);//str3内容"Hello" printf("strcpy(str3,str1):%s\n",str3);//"Hello" /*连接str1和str2*/ strcat(str1,str2); printf("strcat(str1,str2):%s\n",str1);//"HelloWorld" /*连接后,str1的总长度*/ len=strlen(str1);// printf("strlen(str1):%d\n",len);//10 getchar();}6.3.4字符数组的应用
例6-3程序执行结果:说明:(1)#include<string.h>是字符串头文件,使用的字符串函数包含在其中。(2)程序中往往依靠检测'\0'的位置来判定字符串是否结束,而不是根据数组的长度来决定字符串长度。因此,字符串长度不会统计'\0',字符数组长度会统计。注意:(1)字符数组实际上是一系列字符的集合,也就是字符串(String)。在C语言中,没有专门的字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。(2)在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度,否则,在输出字符数组时可能出现未知字符。(3)定义字符数组时,如果给的字符个数比数组的长度小,则系统会默认将剩余的元素空间,全部设置为‘\0’,比如charstr[6]=“ab”,str内存布局就是[a][b][\0][\0][\0][\0]。拓展案例
例6-4案例:
在学生成绩管理系统中,经常会将学生的考试成绩保持在一个数组中,然后对成绩按从大到小的顺序排列。编写一个程序,使用冒泡排序法将学生成绩按照降序排列。拓展案例
例6-4流程图:开始定义数组array[COUNT]定义变量i,j,tempj>i循环输入学生考试成绩结束i=0i<COUNT-1输入数组元素arr[i]i++YNNY循环输出学生考试成绩j=COUNT-1j--交换array[j]和array[j-1]
array[j]>array[j-1]YN宏定义COUNT为10拓展案例
例6-4程序代码:#include<stdio.h>#defineCOUNT10voidmain(){ intarray[COUNT]; inti,j,temp; printf("请输入学生的考试成绩:"); for(i=0;i<COUNT;i++) { scanf("%d",&array[i]); } printf("学生的考试成绩是:"); for(i=0;i<COUNT;i++) { printf("%d",array[i]); } printf("\n"); for(i=0;i<COUNT-1;i++) { for(j=COUNT-1;j>i;j--) { if(array[j]>array[j-1]) { temp=array[j]; array[j]=array[j-1]; array[j-1]=temp; } } } printf("排序后的考试成绩是:"); for(i=0;i<COUNT;i++) { printf("%d",array[i]); } printf("\n");}拓展案例
例6-4程序执行结果:说明:(1)冒泡排序的基本思想是:【以降序排序为例】依次从后向前(从下标较大的元素开始)比较待排序相邻元素的值,若发现后面元素的值大于前面元素的值则交换,使值较大的元素逐渐从后向前移动,就像水底的气泡一样逐溅向上冒。(2)排序过程:①比较最后一个元素值与倒数第二个元素值,若a[9]>a[9-1],则交换;然后比较倒数第二个元素值与倒数第三个元素值;依次类推,直至第1个元素值和第2个元素值比较为完为止——第一趟冒泡排序,结果最大的数被安置在第一个元素位置上,如图6-5所示,为10个数的第一趟冒泡过程。②对后n-1个数进行第二趟冒泡排序,结果使次大的数被安置在
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学英语主题学习活动方案
- 内蒙古空调清洗合同模板
- 入股工地合同模板
- 宾馆被子采购合同模板
- 国家买卖房合同模板
- 工地买卖合同模板
- 公司旧车销售合同模板
- 三方经营地板协议合同模板
- 广西加盟行业合同模板
- 2024年健身房场地租赁协议
- 2024届东北师大附中重庆一中等六校化学高一第一学期期中检测试题含解析
- (完整版)医疗器械网络交易服务第三方平台质量管理文件
- 13G322-1~4《钢筋混凝土过梁(2013年合订本)》
- 关于幼儿园小班反邪教安全教案
- 某单位物业服务项目投标方案
- 35KV场内集电线路工程强条执行检查表
- 【多旋翼无人机的组装与调试5600字(论文)】
- 减速机知识及维修课件
- 内部项目跟投协议书(正)
- 一年级下册英语教学设计-Unit 4 food Lesson1- 人教新起点
- 5000头奶牛养殖场新建项目环境评估报告书
评论
0/150
提交评论