资源描述
该怎么提高,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2021/5/12,Beijing Jiaotong U.,ACM-ICPC,&,Algorithm Club,新生第一讲,The,First Blood,of the new term,数组,是否能用基本数据类型解决所有问题?,概念引入,Boss,叫小明输入,60,个员工的勤奋值并依次输出,So Easy,!,数组,void fun(),int i;,int a;,for(i=0;i 60;i+),scanf(%d,printf(%dn,a);,从小到大输出,100000,个员工的勤奋值?,随时需要员工,ID,.xxx,的勤奋值?,数组,数组的概念,数组,是具有一定,顺序关系,的若干,相同类型变量的集合体,,组成数组的变量称为该数组的,元素,。,数组属于构造类型。,一维数组,定义和引用,一维数组的定义,类型说明符 数组名,常量表达式,;,例如:,int a10;,说明:,a,为整型数组名,它有,10,个元素:,a,0,.a,9,可以是,常量,和,符号常量,,不能用变量。,合法的标识符,存储顺序:,数组元素,在内存中顺次存放,它们的,地址是连续的,。,例如:,数组,a,,在内存中的存放次序如下:,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,a,数组,名字,是数组,首元素的内存地址,。,数组名是一个,常量,,不能被赋值。,数组,一维数组的引用,数组必须,先定义,,后使用。,数组元素的表示形式:数组名,下标,下标可以是整型常量或整型表达式例如:,a0=a5+a7-a2*3,数组下标范围:,0-(N-1)(N,为数组的长度,),,使用时注意防止下标越界。,可以在编译阶段使数组得到初值:,在定义数组时对数组元素全部赋以初值。例如:,int a10=0,1,2,3,4,5,6,7,8,9;,在对全部数组元素赋初值时,可以不指定数组长度。例如:,int a=1,2,3,4,5;,可以只给一部分元素赋初值。例如:,int a10=0,1,2,3,4;int b10=1,3,5;,数组的简单操作,1.,数组反转,Sample Input,:,1 2 3 4 5 6 7 8 9 10,Sample Output,:,10 9 8 7 6 5 4 3 2 1,数组的简单操作,void reverse_array(),int a20;,int Size,i,j;,scanf(%d,for(i=0;i Size;i+),scanf(%d,for(i=0,j=Size-1;i=j;i+,j-),ai=ai+aj;aj=ai-aj;ai=ai-aj;,for(i=0;i Size;i+),printf(%d ,ai);,puts();,数组的简单操作,2.,斐波那契数列构造,void fib(),int a30,i;,a0=a1=1;,for(i=2;i 20;i+),ai=ai-1+ai-2;,for(i=0;i 20;i+),printf(%d ,ai);,puts();,课后思考:,如何求数列,第,100000,位的数,mod 50,的值?,存储顺序:按行存放,二维数组,定义及引用,二维数组的定义,类型说明符 数组名,常量表达式,常量表达式,例如:,float a34;,a0a,00,a,01,a,02,a,03,a1a,10,a,11,a,12,a,13,a2a,20,a,21,a,22,a,23,a,可以理解为:,引用,例如:,b12=a23/2;,下标不要越界,二维数组,初始化,分行给二维数组赋初值,例如:,int a34=1,2,3,4,5,6,7,8,9,10,11,12;,将所有数据写在一个,内,按顺序赋值,例如:,int a34=1,2,3,4,5,6,7,8,9,10,11,12;,可以对部分元素赋初值,例如:,int a34=1,0,6,0,0,11;,二维数组操作,蛇形数字矩阵,蛇形数字矩阵是一种,NN,型的矩阵,,其数字安排如下:,二维数组操作,二维数组操作,二维数组操作,字符数组,定义和引用,例:,char str8=p,r,o,g,r,a,m,0;char str8=program;char str=program;,字符串,字符串常量,例如:,china,没有字符串变量,用字符数组来存放字符串,字符串以,0,为结束标志,字符数组的初始化,字符数组的输入和输出,输入:,char a20;,scanf(“%s”,a);,输出:,printf(“%s”,a);,注意:,若按此方法输入,则遇到空白符,(,空格,制表符,回车等,),就会中断获取!,字符串处理函数,puts,输出字符串,gets,输入字符串,(#include),strcat,字符串连接,strcpy,字符串复制,strcmp,字符串比较,strlen,字符串长度,(#include),字符数组操作,1.,从键盘输入字符串,,统计输入的数字,0,9,的个数。,思路:构造一个数组,digit10,digiti,表示统计到的数字,i,的个数,遇到一个数字,相应数组元素就加,1,注意:字符串中的数字其实是字符,转换方法:,ai 0,字符数组操作,void fun(),char a50;,int digit10=0;,int i;,gets(a);,int len=strlen(a);,for(i=0;i=0&ai=9),digitai-0+;,for(i=0;i 10;i+),printf(%d:%dn,i,digiti);,字符数组操作,2.,接受键盘输入的两个字符串,并将其首尾相接后输出。每个字符串内部不含空格,两个字符串之间以一个空格分隔。,思路:可以把第一个数组设置得足够长,获取第一个数组的长度后,继续,+length,,然后,array1length,开始接,array2,的元素,字符数组操作,void fun(),char a500;,char b100;,int i;,scanf(%s%s,a,b);,int len=strlen(a);,for(i=len;bi-len!=0;i+),ai=bi-len;,ai=0;,printf(%sn,a);,The end,Thanks for,Listening,!,
展开阅读全文