版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习目标案例目标
了解C语言对批量数据的存储和处理方法
掌握一维数组的定义、初始化和引用方法
熟练地使用数组进行程序设计,解决实际问题学习目标学习目标掌握一维数组的定义、初始化和引用方法
掌握二维数组的定义、初始化和引用方法
理解字符数组与字符串的区别,掌握它们的使用方法
较熟练地使用数组进行程序设计,解决实际问题从键盘接收10个数,求平均数很简单,可以采用边接收边求和的方法,最后求平均数;但是输出小于平均数的数就比较麻烦了,因为从键盘接收的10个数在求和以后没有保存起来,等再比较比平均数小的数就无法实现。
要解决此问题,必须使用数组来解决,先将10个数保存到数组中去,等求过平均数后再从数组里取出10个数进行比较。从键盘接收10个数,求平均数并输出小于平均数的数
【分析】案例输出所有比平均值小的数6.1.1
一维数组的定义
数据类型数组名[长度];
例如:
inta[5];
定义了一个一维整型数组,数组名为a,有5个数组元素。这5个元素分别为:
a[0]、a[1]、a[2]、a[3]、a[4]6.1一维数组(1)数组名与变量的命名方法相同。(2)方括号中的数字表示数组的长度,也即数组元素的个数。(3)数组元素的序号是从0开始。
【注意】6.1一维数组(4)同一数组中所有元素的数据类型都是相同的。下面是常见的一维数组的定义:inta[10];
/*定义整型数组a,它有10个元素*/charstr[20];
/*定义字符型数组str,它有20个元素*/floatb[5],c[10];
/*定义实型数组b和c,b有5个元素,c有10个元素*/
6.1一维数组6.1.2一维数组元素的引用
数组在定义之后即可引用其中的数组元素,其引用形式为:
数组名[下标]C语言中只能逐个引用数组元素,而不能一次引用整个数组。
6.1一维数组将数字0~9装入一个整型数组a中,并输出main(){inta[10];inti;for(i=0;i<10;i++){a[i]=i;printf("%d",a[i]);}}【例】6.1一维数组6.1.3一维数组的存储和初始化
对一维数组的初始化通常可以采用以下方式进行:
(1)对数组的全部元素赋初值例如:intnum[5]={1,2,3,4,5};(2)对数组的部分元素赋初值例如:intnum[5]={1,2,3};只给前3个元素赋初值,其余2个元素的值为0。(3)对全部数组元素赋初值时,可以不指定数组的长度。例如:intnum[]={1,2,3,4,5};
6.1一维数组一维数组的应用举例
【举例1】用数组求Fibonacci数列的前20项。
Fibonacci数列可按下式计算:
fi=fi-1+fi-2
初值f0=1,f1=1。6.1一维数组main(){inti;intf[20]={1,1};for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<20;i++){if(i%5==0)printf("\n");printf("%6d",f[i]);}}6.1一维数组【举例2】随机输入10个数,选出其中的最小数main()
{
inti,min,a[10];
printf("input10number:\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
min=a[0];
for(i=1;i<10;i++)
if(a[i]<min)
min=a[i];
printf("minnum=%d\n",min);
}6.1一维数组6.2.1
二维数组的定义
二维数组定义的一般形式为:数据类型数组名[长度1][长度2];例如:
inta[2][3];
/*定义a为2行3列的整型数组*/
charc[3][5];
/*定义c为3行5列的字符型数组*/
floatd[4][5];
/*定义d为4行5列的实型数组*/6.2二维数组6.2.2二维数组元素的引用数组名[行下标][列下标]
如:s[2][4]=15,这里下标用来标识数组元素在数组中的位置。
6.2二维数组main()
{
inti,j,k=0;
ints[3][4];
for(i=0;i<3;i++)/*变量i控制s数组的行下标*/
{
for(j=0;j<4;j++)/*变量j控制s数组的列下标*/
{s[i][j]=k;
printf("s[%d][%d]=%d\t",i,j,s[i][j]);
k++;
}
printf("\n");
}
}【例】数组元素引用的示范例题6.2二维数组6.2.3二维数组的初始化
(1)分行给多维数组赋初值。如:ints[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};(2)按行连续赋初值例如:ints[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};注意:(1)对全部元素赋初值,可以省略第一维的长度。如:ints[][4]={1,2,3,4,5,6,7,8,9,10,11,12};(2)可以只对部分元素赋初值,未赋初值的元素自动取0值如:ints[][4]={{1,2},{5},{9,10}};相当于:ints[][4]={{1,2,0,0},{5,0,0,0},{9,10,0,0}};6.2二维数组
【举例1】将N×N矩阵两条对角线元素置1,其它元素置0。分析:以6×6矩阵为例,将元素下标以行列式的形式列出,不难找到对角线元素下标的规则。000102030405101112131415202122232425303132333435404142434445505152535455二维数组的应用举例
主对角线上元素下标满足“行下标=列下标”的关系,反对角线上元素下标满足“行下标+列下标=5”的关系。用双重循环遍历每个数组元素,只要行、列下标满足其中一个关系,就将该元素赋值为1。000102030405101112131415202122232425303132333435404142434445505152535455#include<stdio.h>#defineN6voidmain(){inti,j,a[N][N]; for(i=0;i<N;i++)for(j=0;j<N;j++) { if((i==j)||(i+j==N-1))
a[i][j]=1; else a[i][j]=0; } for(i=0;i<N;i++)
{for(j=0;j<N;j++)printf("%d",a[i][j]); printf("\n");
}}将数组长度用符号常量表示,程序中凡用到数组长度的地方都用这个符号常量表示,便于修改数组长度。【举例2】main()
{
inti,j,row,col,max;
staticinta[3][4]={{3,5,1,8},{6,4,11,7},{9,3,10,2}};
max=a[0][0];
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(a[i][j]>max)
{max=a[i][j];
row=i;
col=j;
}
printf("max=%d,row=%d,col=%d\n",max,row,col);
}有一个3×4的矩阵,要求编程以求出其中值最大的那个元素,以及它所在的行号和列号。6.2二维数组【举例3】用冒泡法对10个数排序(从小到大)main()
{
inta[11];
inti,j,t;
printf(“Enter10numbers:\n”);
for(i=1;i<11;i++)
scanf(“%d”,&a[i]);
printf(“\n”);
for(j=1;j<=9;j++)/*10个数共循环9轮*/
for(i=1;i<=10-j;i++)/*每轮比较10-j次*/
if(a[i]>a[i+1])
{t=a[i];a[i]=a[i+1];a[i+1]=t;}
printf("Thesortednumbers:\n");
for(i=1;i<11;i++)
printf("%d",a[i]);
}6.2二维数组冒泡法37942t3794237942t37942t37942第1遍37942第2遍3742t3742t3742999第3遍3742t93742t9374293742t9第4遍37429字符数组字符串字符串的输入和输出字符串处理函数6.3字符数组与字符串存放字符数据的数组称为字符数组。字符数组中的每一个元素存放一个字符。字符数组的定义
eg:charch[10];
charcity[3][10];
6.3.1
字符数组的定义
6.3字符数组与字符串可以通过以下程序段实现对一维字符数组的键入和输出:
inti;charch[5];for(i=0;i<5;i++)scanf("%c",&ch[i]);for(i=0;i<5;i++) printf("%c",ch[i]);6.3.2
字符数组的引用
6.3字符数组与字符串字符数组的初始化
eg:charch[5]={'h','e','l','l','o'};
charch[7]={‘h’,‘e’,‘l’,‘l’,‘o’};
等价于
charch[7]={'h','e','l','l','o','\0','\0'};
6.3.3
字符数组的初始化
6.3字符数组与字符串字符串即是用双引号括起来的若干个字符。
eg:"Cprogram""123""张明"
注意:系统会在每个字符串常量的最后自动加入一个转义字符'\0'作为字符串的结束标志。
6.3.4
字符串
6.3字符数组与字符串字符串存放在字符数组中。
1.通常用初始化的方式将字符串整体赋给字符数组。
eg:charch[]={"Cprogram"};2.可以省略花括号。
eg:charch[]="Cprogram";
注意:以上两种方式下,数组ch实际长度为10,因为赋值号右边字符串的末尾,还有一个系统自动添加的‘\0’。ch数组的存储情况如下:Cprogram\0用字符串为字符数组初始化时,数组的长度至少比字符串中实际字符的个数多1。通常不指定数组长度,由系统自行处理。字符串的存储
1.在printf()、scanf()函数中使用格式符%s例如:charch[10];scanf(“%s”,ch);//ch代表数组的首地址
printf("%s\n",ch);
注意:(1)用%s输入字符串时,遇回车和空格均表示输入结束,系统会自动在串尾加上‘\0’。(2)输入字符串的字符个数不要超过数组长度减1。字符串的输入与输出6.3字符数组与字符串【举例1】:用printf()进行整串输出
#include<stdio.h>voidmain(){
charstr1[]="VisualC++6.0";charstr2[]=“Visual\0C++\06.0”;//遇第一个\0输出结束printf("%s\n",str1);printf("%s\n",str2);}6.3字符数组与字符串【举例2】:用scanf()进行整串输入
#include<stdio.h>voidmain(){charstr[20];printf("请输入编译环境:");scanf("%s",str);printf("您输入的编译环境为:");printf("%s\n",str);}遇回车和空格表示输入结束6.3字符数组与字符串
2.使用puts()和gets()函数
(1)使用puts()函数
puts()函数的调用形式为:
puts(字符串)
功能:将字符串中的字符依次输出,遇到第一个'\0'时结束输出,并将'\0'转换成'\n',即输完字符串后自动换行。其中字符串可以是字符串常量的形式,也可以用字符数组名表示。
6.3字符数组与字符串
2.使用puts()和gets()函数
(2)使用gets()函数
gets()函数的调用形式为:
gets(字符数组)
功能:从键盘输入一个字符串到字符数组,遇回车表示输入结束。字符数组一般用数组名表示。6.3字符数组与字符串【举例3】:用puts()和gets()函数改写前面两个案例。#include<stdio.h>voidmain(){charstr[20];puts("请输入编译环境:");gets(str);puts("您输入的编译环境为:");puts(str);}
和前两个例子的运行结果相比较,有两点不同:①运行结果分四行显示,而程序中并未出现'\n',因为puts()函数会将串尾的结束标志'\0'自动转换为换行符输出。②str数组中输出的字符串与输入的字符串是一致的,因为gets()函数仅以回车作为输入结束标志。6.3字符数组与字符串//【例6.11】输入一串字符,求出其长度。#include<stdio.h>voidmain(){ inti; charchStr[80]; printf("请输入一个字符串:"); gets(chStr); for(i=0;chStr[i]!='\0';i++)//用串结束标识'\0'控制循环终止
{ ; //循环体是空语句
} printf("字符串的长度=%d\n",i);}6.3字符数组与字符串字符串拷贝函数strcpy
字符串连接函数strcat
字符串比较函数strcmp
测字符串的长度函数strlen
6.3.5
字符串处理函数
6.3字符数组与字符串【注意】在使用这些函数时,须在程序前包含头文件“string.h”
1.测字符串长度函数strlen()strlen()函数的调用形式为:
strlen(字符串)
功能:测字符串中字符的实际个数(不含‘\0’标志)。
注意:字符串的长度,即字符串中有效字符的个数,是不包括串结束标志'\0'的。6.3字符数组与字符串【举例1】:测字符串长度#include<stdio.h>#include<string.h>//包含头文件"string.h"voidmain(){intlen1,len2;charstr[10]="Hello!";len1=strlen(str);len2=sizeof(str);printf("字符串长度:%d\n数组长度:%d\n",len1,len2);}6.3字符数组与字符串
2.字符串拷贝函数strcpy()strcpy()函数的调用形式为:
strcpy(字符数组,字符串)
功能:将字符串拷贝到字符数组中,字符串结束标志‘\0’也一同拷贝。
注意:
①字符串的赋值不能直接由赋值运算符实现,如str1="Java"或str1=str2都是不正确的。②使用strcpy()函数时,字符数组应有足够的存储空间来容纳要拷贝的字符串。6.3字符数组与字符串【举例】:字符串拷贝举例Java\0#include<stdio.h>#include<string.h>voidmain(){charstr1[5];charstr2[5];
strcpy(str1,"Java");
strcpy(str2,"C#");
strcpy(str1,str2);puts(str1);}C#\0\0\0C#\0a\0//str1的存储情况//str2的存储情况//str3的存储情况6.3字符数组与字符串
3.字符串连接函数strcat()strcat()函数的调用形式为:
strcat(字符数组,字符串)
功能:把字符串连接到字符数组中已有字符串的后面,在连接时,会自动覆盖字符数组中已有字符串的结束标志‘\0’。注意:字符数组应声明足够的长度,以容纳两串连接后的新字符串。6.3字符数组与字符串字符串连接举例#include<stdio.h>#include<string.h>voidmain(){charstr1[15]="Thank";charstr2[]="you!";strcat(str1,str2);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年期中重点测试题及答案
- 2026年选矿安全测试题及答案
- 2026年最强智商测试题及答案
- 法选环境试题及答案
- 01信息可视化设计与制作-3
- 剪板机巡检手册
- 2026年全国助理医师之中医助理医师考试专项特训题附答案504
- 购买商铺物业合同
- 购买农村墓地合同
- 学校购买鲜肉合同
- 小学2026年全国节能宣传周、全国低碳日主题德育活动方案
- 期末综合模拟卷(试卷)2025-2026学年五年级数学下册人教版(含答案)
- 叉车安全操作管理制度培训
- 2026年湖北省科技信息专业技术职务水平能力测试仿真试题及答案
- 广东省深圳市南山区南二外2026年初三二模数学试卷附答案
- 湖北省武汉市2026届高三年级五月供题地理+答案
- DL-T5440-2020重覆冰架空输电线路设计技术规程
- 仙剑三外传问情篇完美图文+支线+攻略
- 市中心血站实验室改扩建及能力提升工程可行性研究报告
- 电大信息技术应用终结性作业
- GB/T 9793-2012热喷涂金属和其他无机覆盖层锌、铝及其合金
评论
0/150
提交评论