C语言课件(第6章数组).ppt_第1页
C语言课件(第6章数组).ppt_第2页
C语言课件(第6章数组).ppt_第3页
C语言课件(第6章数组).ppt_第4页
C语言课件(第6章数组).ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章 数组 (书第七章),C程序设计,2,为什麽引入数组,数组可以实现 存储批量数据 体现数据间的关系 便于访问、处理,例:要读入某班全体50位同学某科学习成绩,然后进行简单处理(求平均成绩、最高分、最低分) 若用简单变量,需50个不同变量名,要用很多个scanf命令 int score1,score2,score50; scanf(“%d,%d,%d”, 而用数组,只需用一个scanf命令,并利用循环结构读取。,3,若干类型相同的相关数据凑到一起 定义 类型 数组名整型常数1整型常数2; int a64; int a10; 使用 a00、a12、a53或a0、 a8 每个元素都是一个普通变量 下标可以是任意整型表达式,数组(Array),4,int a10;(一维数组) 定义一个有10个元素的数组, 使用a0、a1、a2、a9这样的形式访问每个元素。可以像使用普通变量一样使用他们。 系统会在内存分配连续的10个int空间给此数组 直接对a的访问,就是访问此数组的首地址,a,数组首地址,a9,a8,a7,a1,a0,5,数组的定义与初始化,数组定义后的初值仍然是随机数,一般需要我们来初始化 int a5 = 12, 34, 56 ,78 ,9 ; int a5 = 0 ; int a = 11, 22, 33, 44, 55 ; 数组大小最好用常量来定义,以适应未来可能变化 #define SIZE 10 int aSIZE; 数组大小定义好后,将永远不变,6,错误: int n=5; int an;,正确: #define N 5 int aN;,正确: int a10,b54; char name8,ch23; static float x8*2+1,table234; #define NUM 40; int aNUM,bNUM+2;,7,数组的使用,数组的下标都是从0开始 对数组每个元素的使用与普通变量无异 可以用任意表达式作为下标,动态决定访问哪个元素 for (i=0; iSIZE; i+) ai = 2 * i; 下标越界是大忌! 使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,可能带来严重后果,8,只能逐个对数组元素进行操作(字符数组例外),输入方法:,int a10,i;,输入第i个数组元素:,scanf(“%d“,输入整个数组元素:,for (i=0;i10;i+) scanf(“%d“,输出方法:,输出第i个数组元素:,printf(“%d“,ai);,输出整个数组元素:,for (i=0;i10;i+) printf(“%d“,ai);,一维数组的输入和输出,9,#include main() int a10, i; for( i=0; i10; i+ ) ai=i; printf( %2d n, a5); for( i=0; i10; i+) printf( %2d ,ai); ,阅读下列程序,给出程序的执行结果:,练习求若干个数(不多于10个)的最大数、最小数 解源程序,10,二维数组的定义,数据类型 数组名常量表达式常量表达式,int a23;,行数,列数,11,二维数组的存储结构,short int a23;,a10,a11,a12,a00,a01,a02,存放顺序:按行存放 先顺序存放第0行的元素 再存放第1行的元素,12,二维数组的输入和输出,数组的输入和输出只能逐个对数组元素进行操作(字符数组例外),int a34,i,j;,13,程序运行情况: input array numbers: 1 2 3 4 5 6 7 8 9 10 11 12 output array numbers: 1 2 3 4 5 6 7 8 9 10 11 12,14,例6.2 打印最高分,从键盘输入学生人数n; 从键盘输入所有学生的学号和成绩分别存入数组num和score 假设其中的一个学生成绩为最高 maxScore = score0; 对所有学生成绩进行比较,即 for (i=1; i maxScore 则修改maxScore值为scorei 打印最高分maxScore,15, main() for (i=0; i maxScore) maxScore = scorei; printf(“maxScore = %.0fn“, maxScore); ,16,文曲星猜数游戏,由计算机随机生成一个各位相异的4位数字,由人来猜,每次提示:xAxB A前面的数字表示有几个数字猜对位置也对了 B前面的数字表示有几个数字猜对但位置不对 提示 用数组a存计算机随机生成的4位数 用数组b存人猜的4位数 对a和b的相同位置的元素进行比较,得到A前面的数字 对a和b的不同位置的元素进行比较,得到B前面的数字,17,随机生成一个各位相异的4位数字 srand(time(NULL); a0 = rand()%10; do a1 = rand()%10; while (a0 = a1 ); do a2 = rand()%10; while (a0 = a2 | a1 = a2); do a3 = rand()%10; while (a0 = a3 | a1 = a3 | a2 = a3);,18,统计数字和位置都猜对的个数,对a和b的相同位置的元素进行比较,得到A前面的数字 right = 0; for (j=0; j4; j+) if (aj = bj) right = right + 1; ,j=0,j=1,j=2,j=3,a,b,19,统计人猜对的数字个数,对a和b的不同位置的元素进行比较,得到B前面的数字 good = 0; for (j=0; j4; j+) for (k=0; k4; k+) if (ak = bj ) good = good + 1; good = good - right;,k=0,k=1,k=2,k=3,j=0,a,b,j=1,20,字符串(String)与字符数组,字符串 一串以0结尾的字符在C语言中被看作字符串 用双引号括起的一串字符是字符串常量,C语言自动为其添加0终结符 C语言并没有为字符串提供任何专门的表示法,完全使用字符数组和字符指针来处理 字符数组 每个元素都是字符类型的数组 char string80;,21,字符数组的初始化,用字符型数据对数组进行初始化 char str6 = C,h,i,n,a,0; 用字符串常量直接对数组初始化 char str6 = “China“; char str6 = “China“; Char weekday710=“Sunday”,”Monday”, ”tuesday”,”Wednesdat”,”Thursday”, ”Friday”,”Saturday” 与 Char weekday 10=“Sunday”,”Monday”, ”tuesday”,”Wednesdat”,”Thursday”, ”Friday”,”Saturday”,22,23,逐个输入输出,for (i=0; si!=0; i+) putchar(si); putchar(n);,scanf(“%s“,s); printf(“%s“,s);,char s10;,字符数组的输入输出,gets(s); puts(s);,一次性输入输出,24,scanf(),char str10; -不能读入带空格的字符串,gets()可以 这两种用法都不安全。当用户的输入多于10个(含10个),str数组将越界 现场编程做试验 scanf被公认为最易遭到黑客攻击的函数之一,25,#include #define LEN 80 main() char name1LEN; printf(“请输入一个姓名:“); scanf(“%s“,name1); printf(“n读入的名字是:%sn“,name1); ,请输入一个姓名:,于 航,读入的名字是:,于,26,gets(),调用格式: gets(字符数组名); 说明 1、该函数专用于输入字符串。 2、函数参数只能用数组名。 3、gets函数接收换行符之前所有的字符。 字符串输入函数gets()也没有提供限制输入字符串长度的方法,容易引起缓冲区溢出,给黑客攻击以可乘之机,27,#include #define LEN 80 main() char nameLEN; printf(“你好,请输入姓名:“); gets(name); printf(“ n%s:你的名字真n“,name); ,你好,请输入姓名:,于 航,于 航:你的名字真好,28,printf()、puts(),Printf:用printf函数加%s控制 char str =“This is a book.”; printf(“n%s“,str); puts调用格式: puts(参数); 说明参数可以是字符串常量/字符串变量,29,不同之处 1、puts()函数专门用于字符串输出 printf()函数用于各种类型数据输出 2、puts()函数输出后自动换行。 printf()函数必须用“n”强行换行。,建议:,多种类型的混合输入输出时,选用scanf和printf;,当大量文字信息输入输出时,使用gets和puts。,30,#include #define PR “这是预定义字符串“ main() char str =“这是初始化字符串“ puts(“这是直接使用字符串常量“); puts(PR); puts(str); ,输出:,这是直接使用字符串常量,这是预定义字符串,这是初始化字符串,31,字符串处理函数,在中定义了若干专门的字符串处理函数 strcpy: string copy strcpy(目的字符串,源字符串); strlen: string length strlen(字符串); 返回字符串的实际长度,不包括0 strcat: string combination strcat(目的字符串,源字符串); strcmp: string comparison strcmp(字符串1,字符串2); 当出现第一对不相等的字符时,就由这两个字符决定 所在字符串的大小,并返回其ASCII码比较的结果值,32,字符串处理函数(续),str1 = str2; /*错误*/ strcpy(str1,str2); /*正确*/ if (str1 str2) /*错误*/ if (strcmp(str1,str2) 0) /*正确*/,字符串不能直接整体复制!也不能用关系运算符 比较大小,33,例:密码检查程序,# include # include # define SIZE 80 # define PASSWORD “Wang“ # define TIMES 3,main() int try=0; char inputSIZ

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论