当前位置:首页 >> 计算机软件及应用 >>

11.19 二维数组、字符数组


C语言程序设计实验作业

? 二维数组、字符数组

? 11月20日交 C语言期中考试题目编程 题的实验报告 ? 11月20日交 C语言教材P211实验5循 环控制(二)的上机编程题目4、5、6 、7四个题目的实验报告 ? 11月20日交上述两份实验报告的打印 稿,格式在上海电力学院实验报告的 格式邮箱:shiep_cyy@126.com密 码:jsjkxyjs

C语言测试及教师课外辅导 ? 计算机基础及C任课教师课外辅导 时间为每周一、三、四的7、8节 ,地点:6机房。每次有一名专业 老师给大家辅导上机,请大家务必 准时参加。除元旦(1月1日)。

C语言教学辅导系统
? ? ? ? 数组结束后还有一次测验,初步定为机考 C语言新系统:210.35.95.24/tcroot 大家可以登录本系统 登录的用户名和密码是学生的学号选择“ 课程作业”

4

C语言教学辅导系统

C语言教学辅导系统
? 大家可以完成章节作业和实验报告 ? 章节作业都是选择题

?题库就是考试的题库
? 大家做及格了可以看答案,可以重做 ? 在C语言网站上做题目的时候需要对浏览器 进行设置
5 6

1

7

8

C语言教学辅导系统
? 一定要设置浏览器,建议使用IE上面标出来 的两项都需要启用 ? 期末考试将在系统的“课程考试”下进行 ,现在进去是“模拟考试”模式 ? 大家要在课外完成章节作业和实验

利用数组处理批量数据
? 数组是一组有序数据的集合。数组中各数 据的排列是有一定规律的,下标代表数据 在数组中的序号 ? 用一个数组名和下标惟一确定数组中的元 素 ? 数组中的每一个元素都属于同一个数据类 型

?题库就是考试的题库
9

怎样定义一维数组
? 一维数组是数组中最简单的 ? 它的元素只需要用数组名加一个下标,就 能惟一确定 ? 要使用数组,必须在程序中先定义数组

怎样定义一维数组
? 定义一维数组的一般形式为: 类型符 数组名[常量表达式]; int a[4+6]; 合法 int n=10; int a[n];

不合法

2

怎样引用一维数组元素
? 在定义数组并对其中各元素赋值后,就可 以引用数组中的元素 ? 注意:只能引用数组元素而不能一次整体 调用整个数组全部元素的值

一维数组的初始化
? 在定义数组的同时,给各数组元素赋值
? int a[10]={0,1,2,3,4,5,6,7,8,9}; ? int a[10]={0,1,2,3,4};相当于 int a[10]={0,1,2,3,4,0,0,0,0,0}; ? int a[10]={0,0,0,0,0,0,0,0,0,0};相当于 int a[10]={0}; ? int a[5]={1,2,3,4,5};可写为 int a[ ]={1,2,3,4,5};

怎样定义和引用二维数组
队员1 队员2 队员3 队员4 队员5 1分队 2分队 3分队 2456 3045 1427 1847 2018 1175 1243 1725 1046 1600 2020 1976 2346 2458 1477 队员6 2757 1436 2018

怎样定义和引用二维数组
怎样定义二维数组 怎样引用二维数组的元素 二维数组的初始化 二维数组程序举例

float pay[3][6];

怎样定义二维数组
? 二维数组定义的一般形式为 类型符 数组名[常量表达式][常量表达式];
如:float a[3][4],b[5][10]; ? 二维数组可被看作是一种特殊的一维数组: 它的元素又是一个一维数组 ? 例如,把a看作是一个一维数组,它有3个元素: a[0]、a[1]、a[2] ? 每个元素又是一个包含4个元素的一维数组

怎样定义二维数组
a[0] a[1] a[2]
a[0][0] a[1][0] a[2][0] a[0][1] a[1][1] a[2][1] a[0][2] a[1][2] a[2][2] a[0][3] a[1][3] a[2][3]

3

怎样定义二维数组
逻辑存储
a[0][0] a[1][0] a[2][0] a[0][1] a[1][1] a[2][1] a[0][2] a[1][2] a[2][2] a[0][3] a[1][3] a[2][3]

怎样引用二维数组的元素
? 二维数组元素的表示形式为: 数组名[下标][下标] ? b[1][2]=a[2][3]/2 合法 ? for(i=0;i<m;i++) printf(“%d,%d\n”,a[i][0],a[0][i]);合法

内存中的存储顺序

二维数组的初始化
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int a[3][4]={{1},{5},{9}};等价于 int a[3][4]={{1,0,0,0},{5,0,0,0},{9,0,0,0}}; int a[3][4]={{1},{5,6}};相当于 int a[3][4]={{1},{5,6},{0}};

怎样引用一维数组元素
例 1 对10个数组元素依次赋值为0,1, 2,3,4,5,6,7,8,9,要求按逆序输出。 ? 解题思路:
? 定义一个长度为10的数组,数组定义为整型 ? 要赋的值是从0到9,可以用循环来赋值 ? 用循环按下标从大到小输出这10个元素

一维数组程序举例
例 2 用数组处理求Fibonacci数列问题
? 循环例子用简单变量处理的,缺点不能在内存中 保存这些数。假如想直接输出数列中第25个数, 是很困难的。

一维数组程序举例
例3 有10个地区的面积,要求对它们按由 小到大的顺序排列。 ? 解题思路:
? 排序的规律有两种:一种是“升序”,从小到 大;另一种是“降序”,从大到小 ? 把题目抽象为:“对n个数按升序排序” ? 采用起泡法排序

? 解题思路:
? 如果用数组处理,每一个数组元素代表数列中 的一个数,依次求出各数并存放在相应的数组 元素中

4

二维数组的初始化
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; 等价于: int a[ ][4]={1,2,3,4,5,6,7,8,9,10,11,12}; int a[][4]={{0,0,3},{ },{0,10}};合法

二维数组程序举例
例 4 将一个二维数组行和列的元素互换, 存到另一个二维数组中。

二维数组程序举例
? 解题思路:
? 可以定义两个数组:数组a为2行3列,存放指 定的6个数 ? 数组b为3行2列,开始时未赋值 ? 将a数组中的元素a[i][ j]存放到b数组中的b[ j][i] 元素中 ? 用嵌套的for循环完成

二维数组程序举例
void main() { int a[2][3]={{1,2,3},{4,5,6}}; int b[3][2],i,j; printf("array a:\n"); for (i=0;i<=1;i++) 处理a的一行中各元素 { for ( j=0;j<=2;j++) 处理a中某一列元素 { printf("%5d",a[i][ j]); 输出a的各元素 b[ j][i]=a[i][ j]; } a元素值赋给b相应元素 printf("\n"); }

二维数组程序举例
printf("array b:\n"); for (i=0;i<=2;i++) { for( j=0;j<=1;j++) printf("%5d",b[i][ j]); printf("\n"); } return 0; }

二维数组程序举例
例 5 有一个3×4的矩阵,要求编程序求出 其中值最大的那个元素的值,以及其所在 的行号和列号。 ? 解题思路:采用“打擂台算法”
? 先找出任一人站在台上,第2人上去与之比武 ,胜者留在台上 ? 第3人与台上的人比武,胜者留台上,败者下 台 ? 以后每一个人都是与当时留在台上的人比武, 直到所有人都上台比为止,最后留在台上的是 冠军

输出b的各元素

5

二维数组程序举例
例 5 有一个3×4的矩阵,要求编程序求出 其中值最大的那个元素的值,以及其所在 的行号和列号。 ? 解题思路:采用“打擂台算法”
? 先把a[0][0]的值赋给变量max ? max用来存放当前已知的最大值 ? a[0][1]与max比较,如果a[0][1]>max,则表 示a[0][1]是已经比过的数据中值最大的,把它 的值赋给max,取代了max的原值 ? 以后依此处理,最后max就是最大的值

二维数组程序举例
max=a[0][0] for i=0 to 2 真 for j=0 to 3 a[i][j]>max 假

max=a[i][j] row=I colum=j

输出:max,row,colum

二维数组程序举例
int i,j,row=0,colum=0,max; int a[3][4]={{1,2,3,4},{9,8,7,6}, {-10,10,-5,2}}; 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\nrow=%d\n colum=%d\n",max,row,colum);

字符数组
怎样定义字符数组 字符数组的初始化 怎样引用字符数组中的元素 字符串和字符串结束标志 字符数组的输入输出 善于使用字符串处理函数 字符数组应用举例

怎样定义字符数组
? 用来存放字符数据的数组是字符数组 ? 字符数组中的一个元素存放一个字符 ? 定义字符数组的方法与定义数值型数组的 方法类似

怎样定义字符数组
char c[10]; c[0]=’I’; c[2]=’a’; c[4]=’ ’; c[6]=’a’; c[8]=’p’; c[1]=’ ’; c[3]=’m’; c[5]=’h’; c[7]=’p’; c[9]=’y’;

c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9] I a m h a p p y

6

字符数组的初始化
charc[10]={’I’,’’,’a’,’m’,’ ’,’h’,’a’,’p’,’p’,’y’}; c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9] I a m h a p p y

字符数组的初始化
char diamond[5][5]={{’ ’,’ ’,’*’}, {’ ’,’*’,’ ’,’*’}, {’*’,’’,’’,’ ’,’*’}, {’ ’,’*’,’ ’,’*’}, {’ ’,’ ’,’*’} };

charc[10]={’c’,’ ’,’p’,’r’,’o’,’g’,’r’,’a’,’m’} ; c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7]c[8]c[9] c p r o g r a m \0

怎样引用字符数组中的元素
例 6 输出一个已知的字符串。 ? 解题思路: ? 定义一个字符数组,并用“初始化列表 ”对其赋以初值 ? 用循环逐个输出此字符数组中的字符

怎样引用字符数组中的元素
#include <stdio.h> int main() { char c[15]={'I',' ','a','m',' ','a', ' ','s','t','u','d','e','n','t','.'}; int i; for(i=0;i<15;i++) printf("%c",c[i]); printf("\n"); return 0; }

怎样引用字符数组中的元素
例 7 输出一个菱形图。 ? 解题思路: ? 定义一个字符型的二维数组,用“初始 化列表”进行初始化 ? 用嵌套的for循环输出字符数组中的所有 元素。

怎样引用字符数组中的元素
#include <stdio.h> void main() { char diamond[][5]={{' ',' ','*'}, {' ','*',' ','*'},{'*',' ',' ',' ','*'}, {' ','*',' ','*'},{' ',' ','*'}}; int i,j; for (i=0;i<5;i++) {for ( j=0;j<5;j++) printf("%c",diamond[i][ j]); printf("\n"); }}

7

字符串和字符串结束标志
? 在C语言中,是将字符串作为字符数组来处 理的 ? 关心的是字符串的有效长度而不是字符数 组的长度 ? 为了测定字符串的实际长度,C语言规定了 字符串结束标志’\0’

字符串和字符串结束标志
? ’\0’代表ASCII码为0的字符 ? 从ASCII码表可以查到,ASCII码为0的字符 不是一个可以显示的字符,而是一个“空 操作符”,即它什么也不做 ? 用它作为字符串结束标志不会产生附加的 操作或增加有效字符,只起一个供辨别的 标志

字符串和字符串结束标志
char c[]={”I am happy”}; 可写成 char c[]=”I am happy”; 相当于 char c[11]={”I am happy”};

字符串和字符串结束标志
char c[10]={”China”}; 可写成 char c[10]=”China”; 从c[5]开始,元素值均为\0 只显示
C h i n a \0 \0 \0 \0 \0

printf(”%s”,c);

字符数组的输入输出
? 字符数组的输入输出可以有两种方法: ? 逐个字符输入输出(%c) ? 整个字符串一次输入输出(%s) ? 输出的字符中不包括结束符’\0’ ? 用%s输出字符串时,printf函数中的输出 项是字符数组名,不是数组元素名

字符数组的输入输出
? 如果一个字符数组中包含多个’\0’,则 遇第一个’\0’时输出就结束 ? 可以用scanf函数输入一个字符串 ? scanf函数中的输入项c是已定义的字符数 组名,输入的字符串应短于已定义的字符 数组的长度

8

字符数组的输入输出
char c[6]; scanf(”%s”,c); China↙ 系统自动在China后面加一个’\0’

字符数组的输入输出
char str1[5],str2[5],str3[5]; scanf(”%s%s%s”,str1,str2,str3); Howareyou?↙
str1 str2 str3 H a y o r o w e u \0 \0 ? \0 \0 \0

C语言程序设计实验作业
? 11月20日交 C语言期中考试题目编程 题的实验报告 ? 11月20日交 C语言教材P211实验5循 环控制(二)的上机编程题目4、5、6 、7四个题目的实验报告 ? 11月20日交上述两份实验报告的打印 稿,格式在上海电力学院实验报告的 格式邮箱:shiep_cyy@126.com密 码:jsjkxyjs

C语言测试及教师课外辅导 ? 计算机基础及C任课教师课外辅导 时间为每周一、三、四的7、8节 ,地点:6机房。每次有一名专业 老师给大家辅导上机,请大家务必 准时参加。除元旦(1月1日)。

C语言教学辅导系统
? ? ? ? 数组结束后还有一次测验,初步定为机考 C语言新系统:210.35.95.24/tcroot 大家可以登录本系统 登录的用户名和密码是学生的学号选择“ 课程作业”

54

9


赞助商链接
相关文章:
二维数组元素及地址的输出
二维数组元素及地址的输 出 #include<stdio.h> void main( {int i,j,a[3][4]={{1,3,5,7},{9,11,13,1 5},{17,19,21,23}}; ) printf("%x...
数组练习及答案
{1,2,3,4,5,6,7,8,9,10,11,12,13,14,...A) 字符数组可以存放字符串 B) 字符数组中的字符...A) aa 是个二维数组,可以存放 2 个 19 个字符...
第07部份 数组
一维数组的初始化; 难度系数:1; 答案:C ) 11. ...二维数组的初始化; 难度系数:1; 答案:D ) 19. ...( 知识点:字符数组的定义; 难度系数:1; 答案:D ...
Java 数组练习题目
10) 数组最小的下标是。 11) arraycopy()的最后...19) 二维数组的行的长度不同。 20) 数组创建后其...下列初始化字符数组的语句中,正确的是___ A. char...
实验6 一维数组和二维数组
{3,5,4,11},{12,8,1,13},{21,33,64,25}},i,j,m; m=0; for ...? } 4 .已知一个二维数组:{{14,26,18,17},{24,37,21,8},{19,31,...
第4章数组练习题
17) 对象型数组的默认值是 null 19) 二维数组的...下列初始化字符数组的语句中,正确的是_C___ A. ...( T ) 11.Java 语言中的数组元素下标总是从 0 ...
习题五--数组
11、有一个3x4矩阵,求出最大元素,以及其所在的...16、编写一个程序,将字符数组 S2 中的全部字符拷贝...2、输入一个 4x5 的二维数组,请编程实现如下转换...
数组
若输入17、 5则输出19、23、29、31、3726.输入...的二维数组,使数组左下三角元素中的值乘以n69.NxN...为11.53.s所指的字符串放入形参a所指的字符数组...
选择题--数组
( 2*10);; 3、以下对二维数组 a 进行正确初始...A) 10 B) 11 C) 8 D) 不定 22、以下程序的...A) 测字符数组 ch 的长度 B) 将数字字符串 ch ...
数组
二维数组 a 中主对角线上的元素之和 #include<...("\n"); } } 第十题:将字符数组 a[6]={‘...#include "stdio.h" main( ) { int a[11]={...
更多相关标签: