首页 cd-7

cd-7

举报
开通vip

cd-7nullnull共 53 页 第 * 页第七章C语言程序设计null共 53 页 第 * 页本章要点 1.建立数组的概念; 2.掌握一维数组和二维数组的定义、引用、存储结构和初始化方法; 3.掌握一维字符数组的输入输出; 4.掌握字符串处理函数的使用; 5.掌握用数组进行编程的技术。7.1 数组的概念共 53 页 第 * 页7.1 数组的概念如何处理一个班学生的学习成绩? 一行文字怎样存储? 一个矩阵怎样存储 ?...... 问题的提出: 一组具有相同数据类型的数据的 ...

cd-7
nullnull共 53 页 第 * 页第七章C语言程序 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 null共 53 页 第 * 页本章要点 1.建立数组的概念; 2.掌握一维数组和二维数组的定义、引用、存储结构和初始化方法; 3.掌握一维字符数组的输入输出; 4.掌握字符串处理函数的使用; 5.掌握用数组进行编程的技术。7.1 数组的概念共 53 页 第 * 页7.1 数组的概念如何处理一个班学生的学习成绩? 一行文字怎样存储? 一个矩阵怎样存储 ?...... 问题的提出: 一组具有相同数据类型的数据的 有序集合 这些数据的特点:1.具有相同的数据类型 2.使用过程中需要保留原始数据 C语言为这些数据提供了一种构造数据类型:数组。null共 53 页 第 * 页 数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。null共 53 页 第 * 页7.2 一维数组7.2.1 一维数组的定义和引用 1.一维数组的定义 类型说明符 数组名[正整型常量 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 达式] ;说明: 类型说明符:数组的类型。 数组名同变量名命名 规则 编码规则下载淘宝规则下载天猫规则下载麻将竞赛规则pdf麻将竞赛规则pdf 相同。 常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量,不能是变量。 例如: float mark[100]; char str[200]; int a[10];null共 53 页 第 * 页其中:mark、str、a 是数组名。 方括号内是数组的长度。 下标的个数称为数组的维数,mark、str是一维数组、a是二维数组。 数组的成员称为数组元素。 数组元素的类型称为该数组的基类型。数组mark的基类型是float,数组str的基类型是char。例如:存储学生成绩用实型数组 mark[100], 存储一行文字用字符数组 str[200], 存储一个4*6的矩阵用二维整型数组 a[4][6]。null共 53 页 第 * 页说明: (1)数组名后是用方括号而不是圆括号。 (2)数组定义中的常量表达式表示数组元素个数。必须是大于零的常量。 如: int a[0],d(6); /*错误*/ int b[-8]; /*错误*/ int c[2+3]; /*正确*/ (3) C语言中不允许对数组的大小作动态定义。 数组的说明语句必须在可执行语句之前。#define N 5 int a[N]; int n; scanf(“%d” , &n ); {int a[n];……} int n=10,a[n]; null共 53 页 第 * 页2. 一维数组的引用 C 语言规定,只能引用单个数组元素,不能一次引用整个数组。 数组元素的引用形式: 数组名[ 下标] 如a[3] 下标可以是整型常量、整型变量或整型表达式。 如: a[3]= a[0] + a[i+1]; 下标的值是数组元素的序号,且从0开始,直到n-1. int a[10], 说明数组a一共有10个元素,起始值是0。 数组a的10个元素分别是:a[0]、a[1]、…、a[9]。 注意区分数组的定义和数组元素的引用。 数组的输入输出应采用循环的方法. int a[10]; for ( i=0; i<10; i++ ) scanf(”%d”, &a[i]); 下标指出在数组中第几个元素null共 53 页 第 * 页数组中的每个元素在功能上等价于一个一般的变量。 例如:输入100个学生成绩,并求出总成绩。 引用数组元素的注意事项:8582856378906385 851488279501482263167950优点:数据重用 数据有序null共 53 页 第 * 页引用数组元素时,根据首地址和下标,自动计算出该元素的实际地址,取出该地址的 内容 财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容 进行操作。如引用 mark[2]: (1)计算 2000+2*4=2008 (2)取出2008的内容下标与地址的关系 [ ] 为下标运算符, 数组名、数组元素是两种不同性质的数据。 数组名是数组的首地址,是一个地址常量。 数组元素则是数值。null共 53 页 第 * 页7.2.2 一维数组的初始化和输入输出 在数组定义时为数组元素赋初值称为数组初始化.方法:将初值依次写在花括号{ }内。如: int a[5]={ 2 , 4 , 6 , 8 , 10 };存储单元null共 53 页 第 * 页 (1)给数组中部分元素赋初值,其他元素按零值处理。 如: int a[9]={1,2}; 则 a[0]= 1, a[1]= 2, a[2]~a[8]值全为0。(2) 对数组元素全部赋值可以不指定长度。 int a[]={0,1,2,3,5 }; 等价于:int a[5]={0,1,2,3,5 }; (4)初值的个数不能超过数组总元素的个数。 int a[3]={ 1, 2,3, 4 }; 语法错!说明:(3)对数组中间元素赋值必须指明位置。 int a[5]={ , , 2,3, 4 }; /*对第3-5个元素赋初值*/ null共 53 页 第 * 页数组元素在程序中赋值⑵为个别元素赋值 main() { char as[26]; as[0]='a'; …... }⑴利用循环为全部元素赋值 main() { char as[26],ch; for(ch='A';ch<='Z';ch++) as[ch-'A']=ch; …... }null共 53 页 第 * 页数组元素的输入输出⑵数组元素输出 main() { char as[26]; int i ; for(i=0; i<26; i++) printf("%c",as[i]); …... }⑴ 数组元素输入 main() { char as[26]; int i ; for(i=0; i<26; i++) scanf("%c",&as[i]); …... }null共 53 页 第 * 页7.2.3 一维数组应用举例[例1] 从键盘上输入10个实型数存入数组,然 后按输入顺序的逆序输出这10个数。#include main() { float a[10]; int i; for(i=0 ; i<10 ; i++) scanf("%f",&a[i]); for(i=9 ; i>=0 ; i--) printf("%10.2f",a[i]); }数组的引用离不开循环。将数组的下标作为循环变量,通过循环,就可以对数组的所有元素逐个进行处理。null共 53 页 第 * 页[例2] 从键盘上输入10个数,求出其中最大值并输出。#include main() { int a[10],i,max; for(i=0 ; i<10 ; i++) scanf("%d",&a[i]); max=a[0]; for(i=1 ; i<10 ; i++) if(a[i]>max) max=a[i]; printf("max=%d\n",max); }算法分析:采用打擂台的方法,先把10个数存在数组中,任意指定某数为擂主,然后擂主依次与其他数比较,若某数大于擂主,则该数为擂主。循环结束,擂主变量中一定是最大的数。null共 53 页 第 * 页[例3]从键盘上输入6个数存入数组中,再按输入顺序的逆序存放在该数组中并输出。#include main() { int a[6],i,j,k,t; for(i=0 ; i<6 ; i++) scanf("%d",&a[i]); k=6/2-1; for(i=0 ; i<=k ; i++) { j=6-i-1; t=a[j]; a[j]=a[i]; a[i]=t; } for(i=0 ; i<6 ; i++) printf("%3d",a[i]); }算法分析:采用循环设计。逆序操作可总结为: a[i]与a[j]进行交换,其中i=0,1,…n/2-1, j=n-i-1程序运行演示 null共 53 页 第 * 页[例4] 利用数组计算斐波那契数列的前20个数,并以每行5个输出。#include int main() { int i,f[20]={ 1, 1 }; for( i=2; i<20 ;i++) f[i]=f[i-1]+f[i-2]; for( i=0; i<20; i++) { if(i%5==0) printf("\n"); printf("%6d",f[i] ); } printf("\n"); return 0; }说明:斐波那契数列的前两个数是1,从第3个数开始,每个数是前两个数之和。即1,1,2,3,5,8,13……,满足关系式:f[0]=f[1]=1,f[n]= f[n-1]+f[n-2],2n19 运行结果:null共 53 页 第 * 页[例5] 用冒泡法对数据进行由小到大排序。 方法:将两个相邻数比较,小的调到前头。采用两重循环。 9 8 8 8 8 8 5 5 5 5 4 4 4 2 2 0 8 9 5 5 5 5 8 4 4 4 5 2 2 4 0 2 5 5 9 4 4 4 4 8 2 2 2 5 0 0 4 4 4 4 4 9 2 2 2 2 8 0 0 0 5 5 5 5 2 2 2 2 9 0 0 0 0 8 8 8 8 8 8 8 0 0 0 0 0 9 9 9 9 9 9 9 9 9 9 9由以上可推知:6 个数要比较5趟 第一趟中要进行两两比较5次 第二趟中比较 4次 ······ 若 有n个数,则要进行n-1趟比较 第 i趟比较中要进行n-i次两两比较。null共 53 页 第 * 页#include #define N 6 main( ) { int a[N], i, j, t ; for( i=0; ia[j]) {t=a[j-1]; a[j-1]= a[j];a[j]= t ;} printf("The sorted numbers: \n"); for( i=0; i #define N 5 main( ) { int a[N] ,i,j,k,t; printf("Input numbers:\n"); for( i=0; ia[j]) k=j; if(k!=i) {t=a[i]; a[i]=a[k];a[k]=t;} } printf("The sorted numbers: \n"); for( i=0; i 6 7 8 <回车> 10 11 12 <回车> 14 15 16 <回车> rotated a: 5 9 13 6 10 14 7 11 15 4 8 12 16转置部分还可改写如下: for(i=1;i<4;i++) for(j=0;j main( ) { int i, j, row=0, colum=0, max; int a[3][4]={{1,2,3,4},{9,7,4,6},{-1,2,0,8}}; max=a[0][0]; for( i=0; i<=2; i++) for(j=0; j<=3; j++) if( a[i][j]>max) { max=a[i][j]; row=i; colum=j;} printf("max=%d,row=%d,colum=%d\n",max, row,colum); }运行结果为: max=9,row=1, colum=0[例3] 求3×4矩阵中最大元素的值及其所在行和列号。null共 53 页 第 * 页将程序补充完整: #include "stdio.h" main( ) { }[例4]编写求整型矩阵A3*3的副对角线元素之积的程序。null共 53 页 第 * 页7.4 字符数组 7.4.1 一维字符数组的定义 用来存放字符数据的数组是字符数组。 C语言用字符数组存放字符串,字符数组中的各元素依次存放字符串的各字符。 格式:char 数组名[常量表达式] 强调:字符串实际占有单元的数量等于字符串长度+1。 定义时应注意考虑元素总个数应比实际长度多1。例如:char c[6], b[10]; C 数组具有6个元素,可以存放长度等于或小于5的字符串。null共 53 页 第 * 页1.用单个字符对字符数组初始化 例如:char ch[6]={‘C’,‘H’,‘I’,‘N’,‘A’,’\0’}; 把5个字符分别赋给ch[0]到c[4]. 在内存中存放情况:7.4.2 一维字符数组的初始化说明: (1)初值的个数不能超过数组元素的个数,否则语法错 (2) 初值的个数小于数组长度,系统自动添入结束符‘\0’ (3) 初值的个数与数组元素相等,定义时可省略长度 (4) 因字符串常量自动加\0,因此常人为地在字符数组后加一个\0。null共 53 页 第 * 页2. 用字符串常量对字符数组初始化: char ch[6]={"CHINA"}; char ch[6]="CHINA"; /* 省略 { } */ char ch[] ="CHINA"; /* 省略长度值 */ char d[12]="How are you" 与char d[]={‘H’,’o’.’w’,‘ ‘,’a’,’r’,’e’,‘ ‘,’y’,’o’,’u’,’\0’};等价将字符串存储到字符数组中,字符串和第一个 ’\0’构成有效字符串。对字符串的操作,就是对字符数组的操作。但是它和普通字符数组的操作不同。普通数组中的元素是确定的,一般用下标控制循环;而字符串使用结束符’\0’来控制循环。null共 53 页 第 * 页例如: char a[6]={'g', 'r', 'e', 'e', 'n', '\0'}; char b[5]="123"; a[2]='\0'; a[5]=b[1]; printf(“%c\n”,a[1]); 输出a数组的第2个字符 printf(“%s”,a); 输出整个字符数组 7.4.3 一维字符数组的引用null共 53 页 第 * 页 main() { int i; char a[3]; for (i=0;i<3;i++) scanf("%c",&a[i]); for (i=0;i<3;i++) printf("%c",a[i]); printf("\n"); } 输入数据顺序: dos 输出数据顺序: dos 7.4.4 字符数组的输入与输出1.单字符输入输出 (用格式符%c或字符输入函数) char a[3]; for (i=0;i<3;i++) a[i]=getchar(); for (i=0;i<3;i++) putchar(a[i]); printf("\n"); null共 53 页 第 * 页char a[7]; scanf("%s",a); 2. 字符串整体或部分输入输出 (用格式符%s) --输入输出项必须是以字符串的地址形式出现; 也可以是字符串常量: printf ( %s\n ,abcd ); --只能输入不包括空格、\t和\n的字符串; --若要输入空格,用gets函数; --数组名前不加 &符号。如:char a[10]; scanf("%s",a); printf("%s\n",a); 输入:How are you<回车> 输出: How空格、跳格和回车是输入数据的结束标志.null共 53 页 第 * 页 用%s输出字符串时,从输出项提供的地址开始输出,直到遇到字符串结束符\0 为止。 若字符串长度超过数组定义长度,则给出警告错误. 若字符串长度与数组定义长度相等,则字符串结束标志无法存储,输出字符串后继续输出后续存储单元内容。若:char b[3]="xyz",c='H',a[10]= "abcd\072"; printf("b=%s\n",b); printf("c=%c\n",c); printf("a=%s\n",a); 输出: b=xyz c=H a=abcd:null共 53 页 第 * 页#include main() { int i=0; char s1[80]; printf("Input string s1:\n"); gets(s1); while(s1[i]!=‘\0’) i++; printf("i=%d\n",i); } 例: 求给定字符串的长度。7.4.5 字符串处理函数共 53 页 第 * 页 strcat 字符串连接 strcpy 字符串复制 strcmp 字符串比较 strlen 字符串长度 strlwr 将字符串中的大写字符转换为小写字符 strupr 将字符串中的小写字符转换为大写字符 (使用时注意程序前边加: #include )7.4.5 字符串处理函数C函数库中提供一些用来处理字符串的函数: puts 输出字符串 gets 输入字符串 (使用时注意程序前边加: #include )null共 53 页 第 * 页(1) puts(字符数组) 将一个字符串输出到终端并换行。 (2) gets(字符数组) ~ 输入一个字符串到字符数组,该字符数组的起始地址为该函数值。 可以输入带空格的字符串,用scanf的%s格式不行.main() { char str[ ]=book; puts(str); }main() { char str[12]; gets(str); puts(str);}输入:How are you<回车> 输出:How are younull共 53 页 第 * 页(3)strcat(字符数组1,字符数组2) ~ 连接两个字符串,把字符数组2连到字符数组1上,该数值为字符数组1的地址。 如: char str1[40]= "C language "; char str2[ ]= "program"; printf("%s", strcat( str1, str2)); 输出: C language program(4) strcpy(字符数组1,字符数组2) ~ 将字符数组2拷贝到字符数组1中去。字符数组1的长度应大于字符串2的长度。 如:char str1[10], str2[ ]= "red flag"; strcpy(str1,str2); 不能用赋值形式 str1=str2null共 53 页 第 * 页(5) strcmp(字符串1,字符串2) ~ 两个串的比较;说明: 1)确定字符串大小的基本规则: 按照串中对应位置字符的ASCII码值的大小确定大小。 "abc" < "b" 因为字符 a < b "abc" > "abadef" 因为字符 c > a 2)比较结果由函数值带回(返回两个字符之差)。 例如: if(str1== str2) 错误 if( strcmp(str1,str2) == 0) 正确null共 53 页 第 * 页(6) strlen(字符数组) ~ 测试字符数组的长度(不包括\0”); 如:char str[10]= "yellow"; printf(“%d”, strlen(str)); 结果: (7) strlwr(字符串) ~ 将大写字符串变小写字符串。 (8) strupr(字符串) ~ 将小写字符串变大写字符串。null共 53 页 第 * 页[例1]:输出字符串中的数字字符。请完善程序。 #include "stdio.h" main() { char a[80]; int i=0; gets(a); while(a[i]!=' ') { if( ) putchar(a[i]); } }7.4.6 字符数组应用举例[例2]:从键盘输入一个字符串,复制到另一个字符数组后显示 共 53 页 第 * 页#include main() { char str1[20],str2[20]; int i=0; printf(" Input a string: "); scanf(" %s",str1); while(str1[i]!=‘\0’) { str2[i]=str1[i]; i++; } str2[i]='\0'; printf " %s",str2); }程序运行演示[例2]:从键盘输入一个字符串,复制到另一个字符数组后显示 将第一个字符串字符逐个添加到数组str2数组中。去掉第一个串的结束符‘\0’,添加第二个数组的结束符'\0'。添加结束符‘\0’输入字符串null共 53 页 第 * 页#include"stdio.h" main() { int nl=0; char c; while((c=getchar())!=EOF) if(c=='\n') nl++; printf("nl=%d\n",nl); }程序运行演示判断输入是否结束符[例3]:从键盘输入若干行文本,每行以回车结束,以EOF( ctrl+z) 作为输入结束符,统计输入行数。 分析:不必存储文本内容,只须定义一个字符变量暂存读入的字符。用 getchar() 函数读入字符,判断读入的是否回车符,定义一个整型变量计数回车符,以实现统计行数的功能。[[例4]:连接两个字符串。共 53 页 第 * 页#include "stdio.h" main() { char str1[50]={"abcdef"},str2[20]={"1234567"}; int i=0,j=0; while(str1[i]!='\0') i++; while((str1[i++]=str2[j++])!='\0') ; puts(str1); puts(str2); }程序运行演示[例4]:连接两个字符串。[例5]:输出若干个字符串中最短的字符串。共 53 页 第 * 页#include "stdio.h " #include “string.h” main() { char str1[80],min[80]; int k,len; printf("Input string str1:\n"); gets(str1); strcpy(min,str1); /*假定第一个字符串是最短字符串*/ len=strlen(min); /*最短字符串的长度记为len*/ gets(str1); while(str1[0]!=‘\0’) /*以空字符串为输入结束标记*/ {k=strlen(str1); if(k
本文档为【cd-7】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_027816
暂无简介~
格式:ppt
大小:1MB
软件:PowerPoint
页数:0
分类:理学
上传时间:2012-07-16
浏览量:17