第6章二维数组和字符数组_第1页
第6章二维数组和字符数组_第2页
第6章二维数组和字符数组_第3页
第6章二维数组和字符数组_第4页
第6章二维数组和字符数组_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、 C 语言程序设计进阶篇C语言程序设计进阶篇1 1二维数组的定义、二维数组的定义、引用、引用、初始化、在初始化、在计算机中的存储及其使用方法计算机中的存储及其使用方法。2 2字符串的输入输出操作及常用的字符字符串的输入输出操作及常用的字符串操作函数。串操作函数。C语言程序设计进阶篇1 1掌握二维数组的定义、初始化及其使用方法掌握二维数组的定义、初始化及其使用方法。2 2了解二维数组在计算机中的存储结构并对数据了解二维数组在计算机中的存储结构并对数据进行存储和管理。进行存储和管理。3 3掌握字符串的输入输出方法,熟悉常用的字符掌握字符串的输入输出方法,熟悉常用的字符串操作函数。串操作函数。4 4

2、学会使用数组解决实际问题的基本方法,能用学会使用数组解决实际问题的基本方法,能用一维数组和二维数组解决简单的实际问题。一维数组和二维数组解决简单的实际问题。C语言程序设计进阶篇6.1.1 6.1.1 二维数组的定义二维数组的定义一般形式:一般形式: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式11常量表达式常量表达式22其中常量表达式其中常量表达式1 1表示第一维下标的长度,常量表达式表示第一维下标的长度,常量表达式2 2 表示第二维下标的长度。表示第二维下标的长度。例如:例如: int a34;说明了一个三行四列的数组,数组名为说明了一个三行四列的数组,数组名为a a,其下标变量

3、的,其下标变量的类型为整型。类型为整型。 6.1 6.1 二维数组二维数组C语言程序设计进阶篇在一维线性内存空间中,如何在一维存在一维线性内存空间中,如何在一维存储器中存放二维数组?一种是按行排列,储器中存放二维数组?一种是按行排列, 即即放完一行之后顺次放入第二行。另一种是按列放完一行之后顺次放入第二行。另一种是按列排列,排列, 即放完一列之后再顺次放入第二列。即放完一列之后再顺次放入第二列。在语言中,二维数组是按行排列的。在语言中,二维数组是按行排列的。 上例中先存放上例中先存放a0a0行,再存放行,再存放a1a1行,最行,最后存放后存放a2a2行。行。 C语言程序设计进阶篇6.1.2 6

4、.1.2 二维数组元素的引用二维数组元素的引用二维数组的元素也称为双下标变量,其表二维数组的元素也称为双下标变量,其表示的形式为:示的形式为: 数组名数组名 下标下标下标下标 其中下标应为整型常量或整型表达式。其值是其中下标应为整型常量或整型表达式。其值是某一维的长度,即可取下标的最大值。某一维的长度,即可取下标的最大值。 C语言程序设计进阶篇输入数组的输入数组的1212个元素个元素for(i=0;i3;i+) for(j=0;j4;j+) scanf(%d,&aij); 例如有定义:例如有定义:int a34; 输出数组的输出数组的1212个元素个元素for(i=0;i3;i+) f

5、or(j=0;j4;j+) printf(%5d,aij); printf(n); C语言程序设计进阶篇6.1.3 6.1.3 二维数组的初始化二维数组的初始化按行分段赋值可写为按行分段赋值可写为: : int a53= 80,75,92,61,65,71, 59,63,70,85,87,90,76,77,85 ;按行连续赋值可写为按行连续赋值可写为: : int a53= 80,75,92,61,65,71, 59,63,70,85,87,90,76,77,85; 这两种赋初值的结果是完全相同的。这两种赋初值的结果是完全相同的。 C语言程序设计进阶篇对于二维数组初始化赋值还有以下说明:对于二

6、维数组初始化赋值还有以下说明:可以只对部分元素赋初值,未赋初值的元素自动可以只对部分元素赋初值,未赋初值的元素自动取取0 0值。值。 例如:例如: int a33=1,2,3;如对全部元素赋初值,则第一维的长度可以不给如对全部元素赋初值,则第一维的长度可以不给出出, , 但第二维的长度不能省略。但第二维的长度不能省略。 例如:例如: int a33=1,2,3,4,5,6,7,8,9; 可以写为:可以写为: int a3=1,2,3,4,5,6,7,8,9;C语言程序设计进阶篇【例例6.16.1】编程求一个编程求一个4 4行行4 4列矩阵的转置。列矩阵的转置。矩阵的转置是指矩阵的矩阵的转置是指

7、矩阵的aijaij与与ajiaji元素进行交换,元素进行交换,即以对角线为轴的翻转:即以对角线为轴的翻转:C语言程序设计进阶篇#include “stdio.h”void main() int i,j,t,a44; printf(please enter 16 numbers:n); for(i=0;i4;i+) for(j=0;j4;j+) scanf(%d,&aij); printf(Before change:n); for(i=0;i4;i+) for(j=0;j4;j+) printf(%3d,aij); printf(n); C语言程序设计进阶篇C语言程序设计进阶篇该程序算

8、法可描述为:该程序算法可描述为: for(i=0;i3;i+)for(i=0;i3;i+) 找第找第i i行的最大值行的最大值maxmax; bi=maxbi=max; 而第而第i i行是一个一维数组,该问题即演化为求一维数组最行是一个一维数组,该问题即演化为求一维数组最大值的问题。大值的问题。【例例6.26.2】在二维数组在二维数组a a的各行中选出最大的元素的各行中选出最大的元素组成一个一维数组组成一个一维数组b b。C语言程序设计进阶篇#include “stdio.h”void main() int a34=3,16,87,65,4,32,11,108,10,25,12,27; int

9、 b3,i,j,max; for(i=0;i3;i+) / /* * 求每行的最大元素求每行的最大元素 * */ / max=ai0; / / bi=max; for(j=1;jmax) max=aij;C语言程序设计进阶篇 printf(narray a:n); for(i=0;i3;i+) for(j=0;j4;j+) printf(%5d,aij); printf(n); printf(narray b:n); for(i=0;i3;i+) printf(%5d,bi); printf(n);C语言程序设计进阶篇【例例6.36.3】设某班有设某班有M M个学生,每个学生有个学生,每个学生

10、有N N门门课程的成绩,求每门课程的平均成绩和每个课程的成绩,求每门课程的平均成绩和每个学生的平均成绩。学生的平均成绩。 程序分析:程序分析:数组每行的各个元素是每个学生的数组每行的各个元素是每个学生的N N门课程的成门课程的成绩,每列的各个元素是同一门课程里不同学生的成绩。绩,每列的各个元素是同一门课程里不同学生的成绩。所以,计算每门课程的平均成绩,即计算每列里各行所以,计算每门课程的平均成绩,即计算每列里各行元素的平均值,即第元素的平均值,即第j j列课程的平均成绩是列课程的平均成绩是(a0j+a1j+(a0j+a1j+ai+ai 1j)/i1j)/i;同理,计算每;同理,计算每个学生的平

11、均成绩,即计算每行里各列元素的平均值,个学生的平均成绩,即计算每行里各列元素的平均值,即第即第i i行学生的平均成绩是行学生的平均成绩是ai0+ai1+ai0+ai1+aij+aij 1)/j1)/j;可设一个二维数;可设一个二维数组组aM+1N+1aM+1N+1存放存放M M个学生、个学生、N N门课程的成绩。门课程的成绩。C语言程序设计进阶篇#include “stdio.h”#define M 3#define N 4void main() int i,j,sum=0,l, aM+1N+1; printf(please input students scoren); for(i=0;i3

12、;i+) / /* *给数组给数组a a赋初值赋初值* */ / for(j=0;j4;j+) scanf(%4d,&aij); printf(n); C语言程序设计进阶篇for(i=0;i3;i+) for(j=0;j4;j+) sum=sum+aij; aiN=sum/N; / /* *求每个学生的平均成绩求每个学生的平均成绩* */ / sum=0;for(j=0;j4;j+) for(i=0;i3;i+) sum=sum+aij; aMj=sum/M; / /* *求每门课程的平均成绩求每门课程的平均成绩* */ / sum=0;C语言程序设计进阶篇aMN=0; / /* *给

13、末知值的数组元素给末知值的数组元素aMNaMN赋赋0 0* */ / for(i=0;i=3;i+) for(j=0;j0) printf(st1st2n); if(k0) printf(st1st2n); C语言程序设计进阶篇6.6. 测字符串长度函数测字符串长度函数strlen()strlen() 格式:格式:strlen(strlen(字符数组名字符数组名) ) 功能:功能:测字符串的实际长度测字符串的实际长度( (不含字符串结束标志不含字符串结束标志 00) )并作为函数返回值。并作为函数返回值。 例如例如: : #includestring.h main() int k; char

14、st=C language; k=strlen(st); printf(The lenth of the string is %dn,k); C语言程序设计进阶篇 定义定义3 3个辅助变量个辅助变量m m、n n、k k,分别存放字符串中,分别存放字符串中数字字符、小写字符和大写字符的个数,初值置为数字字符、小写字符和大写字符的个数,初值置为0 0。用用gets()gets()函数输入一个字符串函数输入一个字符串chch,然后遍历字符串,然后遍历字符串中的每一个元素,判断其为哪种字符即可。循环结中的每一个元素,判断其为哪种字符即可。循环结束条件是束条件是chichi为为00,即遇到字符串结束标

15、志。,即遇到字符串结束标志。6.2.4 6.2.4 程序举例程序举例【例例6.116.11】编程统计一个字符串中数字字符、编程统计一个字符串中数字字符、小写字符和大写字符的个数。小写字符和大写字符的个数。C语言程序设计进阶篇#includevoid main() char ch80; int i=0, m=0, n=0,k=0; printf(请输入字符串请输入字符串:) ; gets(ch) ; while(chi!=0) if(chi=0 & chi=a & chi=A& chi=Z) k+ ; i+ ; printf(数字字符数数字字符数:%d,小写字符数小写字符

16、数:%d,大写字符数大写字符数%d:n,m,n,k) ;C语言程序设计进阶篇【例例6.126.12】输入五个国家的名称按字母顺序排列输入五个国家的名称按字母顺序排列输出。输出。 本题编程思路如下:本题编程思路如下: 五个国家名应由一个二维字符数组来处理。然而五个国家名应由一个二维字符数组来处理。然而语言规定可以把一个二维数组当成多个一维数组处语言规定可以把一个二维数组当成多个一维数组处理。因此本题又可以按五个一维数组处理,而每一个理。因此本题又可以按五个一维数组处理,而每一个一维数组就是一个国家名字符串。用字符串比较函数一维数组就是一个国家名字符串。用字符串比较函数比较各一维数组的大小,并排序

17、,输出结果即可。比较各一维数组的大小,并排序,输出结果即可。C语言程序设计进阶篇#include “stdio.h”#include “string.h”void main() char st20,cs520; int i,j,p; printf(please input countrys name:n); for(i=0;i5;i+) gets(csi); printf(n); printf(nthe countrys name is sorted n);C语言程序设计进阶篇 for(i=0;i5;i+) p=i; strcpy(st,csi); for(j=i+1;j5;j+) if(st

18、rcmp(csj,st)0) p=j; strcpy(st,csj); if(p!=i) strcpy(st,csi); strcpy(csi,csp); strcpy(csp,st); puts(csi); C语言程序设计进阶篇【例例6.136.13】 编程实现一个学生管理系统的登录界面。编程实现一个学生管理系统的登录界面。要求:进入系统时,需输入用户名和密码,若用户名和要求:进入系统时,需输入用户名和密码,若用户名和密码都正确,则提示欢迎信息,若用户名或密码错,密码都正确,则提示欢迎信息,若用户名或密码错,则提示错误信息,并要求重新输入,若输入则提示错误信息,并要求重新输入,若输入3 3次

19、仍然错次仍然错误,则退出系统。误,则退出系统。C语言程序设计进阶篇#include stdio.h#include string.hvoid main() int count=1; char user=usts; /* 初始设定的用户名初始设定的用户名 */ char pass=123456; /* 初始设定的密码初始设定的密码 */ char username20; /* 要求输入的用户名要求输入的用户名 */ char password10; /* 要求输入的密码要求输入的密码 */C语言程序设计进阶篇printf(请输入用户名请输入用户名:,username);gets(username

20、);while(strcmp(user,username)!=0&count3) count+; printf(用户名错误,请重新输入!用户名错误,请重新输入!n); printf(请输入用户名请输入用户名:,username); gets(username);if(count=3) printf(您的输入已达到您的输入已达到3次!次!); exit(0); C语言程序设计进阶篇 count=1; printf(请输入密码请输入密码:,password); gets(password); while(strcmp(pass,password)!=0&count3) count+

21、;printf(密码错误,请重新输入!密码错误,请重新输入!n);printf(请输入密码请输入密码:,password); gets(password); if(count=3) printf(您的输入已达到您的输入已达到3次!次!);exit(0); printf(欢迎进入学生管理系统欢迎进入学生管理系统n);C语言程序设计进阶篇#includevoid main() int a3=9,7,5,3,1,2,4,6,8; int i,j,s1=0,s2=0; for(i=0;i3;i+) for(j=0;j3;j+) if(i=j) s1=s1+aij; if(i+j=2) s2=s2+aij; printf(%dn%dn,s1,s2);课堂练习课堂练习1.下面程序的运行结果为下面程序的运行结果为 _运行结果运行结果: :1810C语言程序设计进阶篇课堂练习课堂练习2:下列程序的功能是输出一个下列程序的功能是输出一个5X5矩阵,使得上三角元素矩阵,使得上三角元素为为1,其余元素为,其余元素为0,请在空格处填写适当语句。,请在空格处填写适当语句。#includevoid main() int a55,i,j; for(i=0;i5;i+) for(j=0;j5;j+) if( ) aij=0; else ; for(i=0;i5;i+) for(j=0;jjC语言程序设计进阶篇3

温馨提示

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

评论

0/150

提交评论