版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
做事要有序—数组的应用C语言程序设计第六章本章目录01.一维数组的定义和应用02.二维数组的定义和应用03.字符数组的定义和应用04.趣味实例6.1一维数组的定义和应用存储一组相同类型的数据一维数组的定义一般形式类型说明符数组名[常量表达式];类型说明符:指定元素数据类型(如int,float,char)。数组名:遵循变量命名规则,代表数组的标识。常量表达式:用方括号括起,指定数组长度(元素个数),必须是常量。示例inta[6];//整型数组a,含6个元素floatb[6],c[8];//浮点型数组b,含6个元素;浮点型数组c,有8个元素。注意事项1)数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。2)数组名的书写规则应符合标识符的书写规定。3)数组名不能与其他变量名相同。4)方括号中常量表达式表示数组元素的个数,其下标从0开始计算。结构、参数说明一维数组的引用一般形式
数组名[下标];例如:score[0]避坑指南:下标越界(补充)C语言不检查下标越界。若使用score[10](数组长度为10),程序可能编译通过但运行时崩溃。
数组的主要目的是处理批量数据,数组元素是组成数组的基本单元。数组元素也是一种变量,其标识方法为数组名后跟一个下标。下标表示元素在数组中的顺序号。其中下标只能为整型常量或整型表达式。如为小数时,C编译将自动取整。以下都是合法的数组元素:a[10]a[2+8]a[2*5]起始值:从0开始,而非1范围:长度为n的数组,合法下标为0~n-1一维数组的初始化
数组的初始化实际上是对数组元素的初始化。给数组赋值的方法除了用赋值语句对数组元素逐个赋值外,还可采用初始化赋值和动态赋值的方法。
数组初始化赋值指在数组定义时给数组元素赋予初值。这种赋值方式简洁高效,能一次性为多个元素赋初值,避免了后续逐个赋值的繁琐操作。初始化赋值的一般形式为:
类型说明符数组名[常量表达式]={值,值,……,值};其中,在{}中的各数据值即为各元素的初值,各值之间用逗号间隔。例如:inta[10]={0,1,2,3,4,5,6,7,8,9};相当于:a[0]=0、a[1]=1、…、a[9]=9。一维数组的初始化C语言对数组的初始化赋值还有以下几点规定:1)可以只给部分元素赋初值。当{}中值的个数少于元素个数时,只给前面部分元素赋值。例如“inta[10]={0,1,2,3,4};”,表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。2)只能给元素逐个赋值,不能给数组整体赋值。例如:给5个元素全部赋1值只能写为:inta[5]={1,1,1,1,1};而不能写为:inta[5]={1};3)初始化省略长度。如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。例如“inta[5]={1,2,3,4,5};”可写为:inta[]={1,2,3,4,5};4)数组动态赋值是指在程序执行过程中,用循环语句配合scanf()函数对数组元素逐个赋值。实例体验例6-1:用for循环为数组赋值并逆序输出#include<stdio.h>main(){inti,a[10];for(i=0;i<=9;i++)
a[i]=i;for(i=9;i>=0;i--)
printf("%d",a[i]);}例6-2:垃圾分类统计与宣传问题描述:垃圾分类统计随着城市化进程的加快,垃圾处理已成为不容忽视的社会问题。垃圾分类不仅有助于资源回收利用,还能减少环境污染,是实现可持续发展的重要举措。近年来,我国大力推进垃圾分类政策,倡导全民参与。某社区积极响应政策,将垃圾分为四类:可回收垃圾、有害垃圾、厨余垃圾和其他垃圾。为深入了解居民的垃圾分类情况,社区计划统计一周内每天各类垃圾的投放量。一维数组应用实例例6-2:垃圾分类统计与宣传for(i=0;i<7;i++){printf("第%d天:",i+1);scanf("%d%d%d%d",&recyclable[i],&hazardous[i],&kitchen[i],&other[i]);totalRecyclable+=recyclable[i];totalHazardous+=hazardous[i];totalKitchen+=kitchen[i];totalOther+=other[i]; }printf("\n一周内各类垃圾的总投放量:\n");//输出一周各类垃圾的总投放量printf("可回收垃圾:%dkg\n",totalRecyclable);例6-2:垃圾分类统计与宣传printf("有害垃圾:%dkg\n",totalHazardous);printf("厨余垃圾:%dkg\n",totalKitchen);printf("其他垃圾:%dkg\n",totalOther);//比较一周可回收垃圾与其他垃圾的占比if(totalRecyclable>totalOther){printf("\n恭喜!可回收垃圾占比高于其他垃圾,环保工作做得很好!\n");}else{printf("\n注意!可回收垃圾占比低于其他垃圾,需要加强垃圾分类意识。\n");}printf("\n垃圾分类,人人有责!保护环境,从我做起!\n");}6.2二维数组的定义和应用存储表格形式的数据二维数组的定义一般形式类型说明符数组名[常量表达式1][常量表达式2];常量表达式1(行数):定义二维数组包含的一维数组个数。(第一维下标长度)常量表达式2(列数):定义每个一维数组元素包含的变量个数。(第二维下标长度)示例inta[3][4];//3行4列,共12个元素二维数组本质上是“数组的数组”。a[3][4]可视为包含3个元素的一维数组。其中每个元素(a[0],a[1],a[2])又是一个包含4个整型元素的一维数组。通常可用矩阵表示如下:参数说明二维数组的引用二维数组的元素也称为双下标变量,二维数组元素的引用方式为:数组名[行下标][列下标];其中,下标应为整型常量或整型表达式。例如“a[3][4];”,表示数组a有3行4列的元素。内存存储机制采用“按行优先顺序”连续存储。存储逻辑:先存第一行所有元素,再存第二行,依此类推。下标从0开始。二维数组的初始化方式1:按行全部初始化--分段初始化inta[2][3]={{1,2,3},{4,5,6}};最清晰的方式,外层大括号内的每一对内层大括号对应一行的初始化值,可读性强。方式3:按行全部初始化--连续初始化inta[2][3]={1,2,3,4,5,6};将所有元素的值按行的顺序依次列出来,效果与按行分段初始化完全相同。方式2:按行部分初始化inta[2][3]={{1,2},{4}};只对部分元素赋值,未赋值的元素自动初始化为0。例如:120/400。方式3:省略行长度(列不可省)inta[][3]={1,2,3,4,5};系统根据数据个数和列长度自动计算行数。如示例中5个数据,列数3,则行数为2。实例体验:例6-3一个学习小组有5个人,每个人有3门课的考试成绩,求全组分科的平均成绩和各科总平均成绩。分
析:可设一个二维数组a[3][5]存放5个人3门课的成绩。再设一个一维数组v[3]存放所求的各分科平均成绩,设变量average为全组各科总平均成绩。
程序代码#include<stdio.h>main(){inti,j;floats=0.0,average,v[3],a[3][5];printf("inputscore\n");for(i=0;i<3;i++){for(j=0;j<5;j++){scanf("%f",&a[i][j]);s=s+a[i][j];}程序代码v[i]=s/5;s=0;}average=(v[0]+v[1]+v[2])/3;printf("Math_average:%.2f\nChina_average:%.2f\nEnglish_average:%.2f\n",v[0],v[1],v[2]);printf("total_average:%.2f\n",average);}实例体验:问题描述:学生课堂表现评分统计为深入了解学生的学习态度和课堂表现,某班级开展课堂表现评分工作。评分包括三个方面:积极参与、认真听讲和作业完成情况。通过统计每个学生的综合评分,教师可以更好地了解学生的学习情况,并给予针对性的指导。例6-4学生课堂表现评分统计。分析:本例可借助一个二维数组来存储每个学生的3个评分项(积极参与、认真听讲和作业完成情况),并通过循环一次性输入这些数据。随后,计算每个学生的综合评分(3个评分项的平均值)。最后,把每个学生的综合评分输出显示。实例体验程序代码:#include<stdio.h>main(){intstudents=5;//假设有5名学生intcriteria=3;//3个评分项:积极参与、认真听讲、作业完成floatscores[students][criteria];//二维数组存储每个学生的评分floattotalScore,averageScore;//输入每个学生的课堂表现评分
printf("请输入每个学生的课堂表现评分(积极参与、认真听讲、作业完成,用空格分隔):\n");for(inti=0;i<students;i++){
printf("学生%d:",i+1);
for(intj=0;j<criteria;j++){scanf("%f",&scores[i][j]);}}//计算并输出每个学生的综合评分
printf("\n每个学生的综合评分:\n");for(inti=0;i<students;i++){totalScore=0;for(intj=0;j<criteria;j++){totalScore+=scores[i][j];}averageScore=totalScore/criteria;printf("学生%d的综合评分:%.2f\n",i+1,averageScore);}}6.3字符数组的定义和应用存储和处理字符串字符数组的定义与引用一般形式与普通一维数组类似,类型说明符为char。语法格式如下:char数组名[常量表达式];示例:chara[10];//定义了一个包含10个字符元素的数组元素引用通过下标访问单个字符,赋值与输出示例:str[0]='H';str[1]='i';//输出结果为"Hi"printf("%c%c\n",str[0],str[1]);重要提示:单纯的字符集合≠字符串。C语言字符串需要特殊的结束标志。字符数组的初始化方式一:逐个字符初始化charstr[5]={'H','e','l','l','o'};与普通一维数组初始化方式一致,需手动指定每个元素。方式二:字符串常量初始化charstr[6]="Hello";系统自动添加结束符'\0',数组长度需预留位置。方式三:省略数组长度(自动计算)charstr[]="Hello";编译器自动计算长度并包含结束符,此处str长度为6。推荐在不确定长度时使用此方式。字符数组的输入与输出字符串输出方法1.printf函数(%s格式符)charstr[]="Hello";printf("%s\n",str);//输出直到遇到'\0'结束2.puts函数puts(str);//自动添加换行符,使用更简洁字符串输入方法1.scanf函数(%s格式符)charstr[20];scanf("%s",str);⚠注意:遇空格/回车停止,无法读取含空格字符串2.gets函数(读取整行)gets(str);//读取整行,包括空格⚠警告:存在缓冲区溢出风险,建议使用fgets例6-5:输出字符串练习#include<stdio.h>main(){chara[26]="Ilikeplayingbasketball";inti;for(i=0;i<26;i++)printf("%c",a[i]);
}例6-6:输入字符串“abcdefghi”输出#include<stdio.h>main(){
charstr[10];scanf("%s",str);printf("%s",str);
}实例体验例6-7:getchar
putchar练习#include<stdio.h>main(){charc1,c2,c3;c1=getchar();c2=getchar();c3=getchar();putchar(c1);putchar(c2);putchar(c3);}例6-8:不同格式字符串输出#include<stdio.h>main(){
charstr1[20];charstr2[5][10];gets(str1);for(inti=0;i<3;i++){
gets(str2[i]);
}
puts(str1);for(inti=0;i<3;i++){
puts(str2[i]);
}}实例体验实例体验例6-9:用字符数组探索《静夜思》用字符数组探索《静夜思》问题描述:唐诗宋词作为中华民族传统文化的瑰宝,承载着深厚的文化底蕴和艺术价值。这些经典作品以简洁精妙的语言、和谐优美的韵律以及深远独特的意境,展现了古代文人的卓越智慧和丰富情感,宛如中华文化长河中璀璨夺目的明珠。接下来,我们将用C语言的字符数组来统计唐诗《静夜思》的长度,并且输出前10个字符。程序代码#include<stdio.h>#include<string.h>main(){
//定义并初始化字符数组,存储古诗词
charpoem[100]="床前明月光,疑是地上霜。举头望明月,低头思故乡。";
printf("古诗词内容为:\n%s\n",poem);//计算并输出古诗词的长度(不包括结尾的'\0')intlen=strlen(poem);
printf("古诗词的长度为:%d\n",len);//使用字符串处理函数实现特定功能
charsubStr[20];
strncpy(subStr,poem,10);//复制前10个字符到subStr
subStr[10]='\0';//添加字符串结束符
printf("复制的前10个字符为:%s\n",subStr);}6.4趣味实例—“狼追兔子”问题综合运用数组和循环趣味实例实训目的1.了解数组的基本用法。2.熟悉数组的定义、引用和初始化。3.了解数组在编程中的注意事项。实训内容基础训练:用C语言解决“狼追兔子”的问题一只兔子躲进了10个环形分布的洞的某一个,狼在第1个洞没有找到兔子,就隔
一个洞,到第3个洞去找,也没有找到,就隔两个洞,到第6个洞去找,以后每次多隔一个洞去找兔子……这样下去,结果一直找不到兔子(设寻找的最大次数为100),请问:兔子可能躲在哪个洞中?实训流程知识准备设计算法基础训练1)编写程序2)上机验证编程提示数据表示:数组a[10]标记洞的访问状态(0/1)位置计算:n+=(i+1)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年甘孜县带编教师招聘笔试模拟试题及答案解析
- 2026年申扎县带编教师招聘考试备考题库及答案解析
- 2026年墨玉县带编教师招聘笔试备考试题及答案解析
- 2026年临朐县带编教师招聘考试备考试题及答案解析
- 2026年会东县带编教师招聘考试参考题库及答案解析
- 2026年大悟县带编教师招聘笔试参考题库及答案解析
- 2026年定日县带编教师招聘考试备考试题及答案解析
- 2026年安泽县带编教师招聘笔试参考题库及答案解析
- 2026年布拖县带编教师招聘笔试模拟试题及答案解析
- 2026年青阳县带编教师招聘考试备考试题及答案解析
- 智慧公路交通讲座-日本的智能交通与智慧公路
- 2024年新北师大版一年级上册数学全册课件(2024年新教材)
- 基于PLC的点胶机的控制系统设计
- 法律顾问服务投标方案(完整技术标)
- 多维阅读第13级-A-Big-Mistake-大错特错
- 陕22N1 供暖工程标准图集
- 湖南高速铁路职业技术学院单招职业技能测试参考试题库(含答案)
- 大运河-我们身边的世界文化遗产课件
- 茶文化与茶艺(高职)全套教学课件
- 季度GDP统一核算方法解读
- 员工手册(员工管理手册)
评论
0/150
提交评论