第5章数组(C++版)

合集下载

(完整版)C语言程序设计教程第五章练习题题目

(完整版)C语言程序设计教程第五章练习题题目
for (i = 0; i<4; i++)
printf("%3d", x[i][3 - i]);
下列选项中哪一项是正确的输出结果()
A.1 5 9 13
B.1 6 11 16
C.4 7 10 13
D.4 8 12 16
10、下列描述中不正确的是()。
A.字符型数组中可以存放字符串
B.可以对字符型数组进行整体输入、输出
{
int i;
int arr[8] = { 1, 0, 1, 0, 1, 0, 1, 0 };
for (i = 0; i < 8; i++)
{
;
printf("%d\n", arr[i]);
}
return 0;
}
3、请阅读下面的程序,分析程序是否能编绎通过并正确运行,如果不能,说明原因;如果能,请写出运行结果。
5、数组在初始化时不可以只赋值一部分,必须全部赋值初始化()。
6、对于一维数组,例如int arr[3];则arr[2]表示数组的第2个元素()。
7、数组的下标范围是0-[数组长度-1]()。
8、二维数组进行定义与初始化时,行下标与列下标均不能省略()。
9、在程序设计中,一组具有相同数据类型的变量集合称为数组()。
void main()
{
int i;
char arr[5] = { 'h', 'e', 'l', 'l', 'o' };
for (i = 0; i < 5; i++)
printf("%c", arr[i]);

C语言第五章习题带答案

C语言第五章习题带答案

练习5-1答案一、选择题1.合法的数组说明语句是( B )。

A.int a[]="string"; B.int a[]={0,1,2,3,4,5};C.char a="string"; D.char a[5]={'0', '1', '2', '3', '4', '5'};2.以下对一维整型数组a的说明正确的选项是( D )。

A.int a(10); B.int n=10, a[n]; C.int n; D.#define SIZE 10scanf("%d", &n); int a[SIZE];int a[n];3.:int a[10];,那么对a数组元素的正确引用是( D )。

A.a[10] B.a[3.5] C.a(5) D.a[10-10] 4.以下对一维数组a进行正确初始化的语句是( C )。

A.int a[10]=(0, 0, 0, 0, 0); B.int a[10]={};C.int a[]={0}; D.int a[2]={10, 9, 8};5.对以下说明语句的正确理解是( B )。

int a[10]={6, 7, 8, 9, 10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值的个数不相同,所以此语句不正确二、填空题6.求所有不超过200的N值,N的平方是具有对称性质的回文数。

所谓回文数就是将一个数从左到右与从右到左读都是一样的,例如:34543和1234321都是回文数。

例如:满足题意要求的数有:N=1,11*11=121;N=111,111*111=12321。

#include <stdio.h>main(){int m[16], n, i, t, count=0;long a, k;printf("Result is:\n");for (n=10; n<200; n++){ k=0;t=1;a=n*n;for (i=1; a!=0; i++){ ①;a/=10;}for (; i>1; i--){ k+=m[i-1]*t;②;}if ( ③ ) printf("%2d:%10d %10d\n", ++count, n, n*n);}}那么①为( m[i]=a%10; )、②为( t*=10; )、③为( k==n*n )。

C语言程序设计PPT课件 第5章 数组程序设计

C语言程序设计PPT课件 第5章 数组程序设计
C语言程序设计(第3版)张磊编著 清华大学出版社
5.1.4 数值型一维数组的初始化
例5-3 用一维数组生成Fibonacci数列的前20项,并输出。
#include<stdio.h> void main() {
long int fib[21]; int i; fib[1]=1; fib[2]=1; for(i=3;i<=20;i++)
{
if(str[i]>='0'&&str[i]<='9')
digital[j++]=str[i];
i++;
}
digital[j]='\0';
printf("Output: %s\n",digital);
}
C语言程序设计(第3版)张磊编著 清华大学出版社
/* program e5-6.c*/
5.2.1 字符##串iinncc的lluudd输ee<<入ssttrd输iniog出.h.h>>
}
for(i=0;i<N;i++) printf("%d ",a[i]);
}
C语言程序设计(第3版)张磊编著 清华大学出版社
5.1.4 数值型一维数组的初始化
数组的初始化,是在定义数组的时对数组的各个元素赋初值。 1. 全部元素的初始化 格式
数据类型 数组名[数组长度]={数组全部元素值表} 数据类型 数组名[]={数组全部元素值表} int a[6]={10,20,30,40,50,60}; float r[]={12.5,-3.11,8.6}; 2. 部分元素的初始化 格式 数据类型 数组名[数组长度]={数组前部元素值表} int b[10]={1,2,3}

数据结构(c语言版)第五章答案

数据结构(c语言版)第五章答案

第五章1、设二维数组A【8】【10】是一个按行优先顺序存储在内存中的数组,已知A【0】【0】的起始存储位置为1000,每个数组元素占用4个存储单元,求:(1)A【4】【5】的起始存储位置。

A【4】【5】的起始存储位置为1000+(10*4+5)*4=1180;(2)起始存储位置为1184的数组元素的下标。

起始存储位置为1184的数组元素的下标为4(行下标)、6(列下标)。

2、画出下列广义表D=((c),(e),(a,(b,c,d)))的图形表示和它们的存储表示。

略,参考第5·2节应用题第5题分析与解答。

3、已知A为稀疏矩阵,试从时间和空间角度比较采用两种不同的存储结构(二维数组和三元组表)实现求∑a(i,j)运算的优缺点。

稀疏矩阵A采用二维数组存储时,需要n*n个存储单元,完成求∑ii a(1≤i≤n)时,由于a【i】【i】随机存取,速度快。

但采用三元组表时,若非零元素个数为t,需3t+3个存储单元(t个分量存各非零元素的行值、列值、元素值),同时还需要三个存储单元存储存稀疏矩阵A的行数、列数和非零元素个数,比二维数组节省存储单元;但在求∑ii a(1≤i≤n)时,要扫描整个三元组表,以便找到行列值相等的非零元素求和,其时间性能比采用二维数组时差。

4、利用三元组存储任意稀疏数组时,在什么条件下才能节省存储空间?当m行n列稀疏矩阵中非零元素个数为t,当满足关系3*t<m*n时,利用三元组存储稀疏数组时,才能节省存储空间。

5、求下列各广义表的操作结果。

(1)GetHead((a,(b,c),d))GetHead((a,(b,c),d))=a(2)GetTail((a,(b,c),d))GetTail((a,(b,c),d))=((b,c),d)(3)GetHead(GetTail((a,(b,c),d)))GetHead(GetTail((a,(b,c),d)))=(b,c)(4)GetTail(GetHead((a,(b,c),d)))GetTail(GetHead((a,(b,c),d)))=()第六章1、已知一棵树边的集合为{(i,m),(i,n),(e,i),(b,e),(b,d),(a,b),(g,j),(g,k),(c,g),(c,f),(h,l),(c,h),(a,c)}用树形表示法画出此树,并回答下列问题:(1)哪个是根结点?(2)哪些是叶结点?(3)哪个是g的双亲?(4)哪些是g的祖先?(5)哪些是g的孩子?(6)哪些是e的子孙?(7)哪些是e的兄弟?哪些是f的兄弟?(8)结点b和n的层次号分别是什么?(9)树的深度是多少?(10)以结点c为根的子树的深度是多少?(11)树的度数是多少?略。

C#教程——05第5章 数组

C#教程——05第5章 数组

本页已使用福昕阅读器进行编辑。

福昕软件(C)2005-2007,版权所有,仅供试用。

第5章数组如果需要使用同一类型的多个对象,就可以使用集合和数组。

C# 用特殊的记号声明和使用数组。

Array类在后台发挥作用,为数组中元素的排序和过滤提供了几个方法。

使用枚举器,可以迭代数组中的所有元素。

本章讨论如下内容:●简单数组●多维数组●锯齿数组●Array类●数组的接口●枚举5.1 简单数组如果需要使用同一类型的多个对象,就可以使用数组。

数组是一种数据结构,可以包含同一类型的多个元素。

5.1.1 数组的声明在声明数组时,应先定义数组中元素的类型,其后是一个空方括号和一个变量名。

例如,下面声明了一个包含整型元素的数组:int[] myArray;5.1.2 数组的初始化声明了数组后,就必须为数组分配内存,以保存数组的所有元素。

数组是引用类型,所以必须给它分配堆上的内存。

为此,应使用new运算符,指定数组中元素的类型和数量来初始化数组的变量。

下面指定了数组的大小。

第5章数组提示:值类型和引用类型请参见第3章。

myArray = new int[4];,如图5-1所示。

在声明和初始化警告:在指定了数组的大小后,如果不复制数组中的所有元素,就不能重新设置数组的大小。

如果事先不知道数组中应包含多少个元素,就可以使用集合。

集合请参见第10章。

除了在两个语句中声明和初始化数组之外,还可以在一个语句中声明和初始化数组:int[] myArray = new int[4];还可以使用数组初始化器为数组的每个元素赋值。

数组初始化器只能在声明数组变量时使用,不能在声明数组之后使用。

int[] myArray = new int[4] {4, 7, 11, 2};如果用花括号初始化数组,还可以不指定数组的大小,因为编译器会计算出元素的个数:int[] myArray = new int[] {4, 7, 11, 2};使用C# 编译器还有一种更简化的形式。

Chapter05_数组和广义表_数据结构(C语言版)_严蔚敏_配套ppt课件

Chapter05_数组和广义表_数据结构(C语言版)_严蔚敏_配套ppt课件

M
1 1 2 3 3 4
1 5 3 1 2 4
3 7 -1 -1 -2 2
N
1 1 2 3 4 5
1 3 3 2 4 1
3 -1 -2 -1 2 7
行列下 标调换
1 5 3 1 2 4
1 1 2 3 3 4
3 7 -1 -1 -2 2
按行下 标排序
法1:
按照矩阵M的列序进行转置,即按三元组A的 第二个字段值(列下标)由小到大的顺序进行转置。 为了找到M中每一列中所有的非零元素,需要对其 三元组表a.data从第一行起整个扫描一遍,由于 a.data是以M的行序为主序来存放每个非零元素 的,对于M中具有相同列下标的非零元来讲,先扫 描到的非零元的行下标一定小于后扫描到的非零元 的行下标,由此得到的恰是b.data应有的顺序。
• 压缩的含义
– 为多个值相同的元素只分配一个存贮空间; – 零元素不分配或少分配存贮空间。
• 特殊矩阵:元素值相同或零元素分布有 一定规律的矩阵。 • 稀疏矩阵:元素值相同或零元素分布没 有规律的矩阵。 • 特殊矩阵的压缩存贮实际是将二维数组 的数据元素压缩到一维数组上。
特殊矩阵的压缩存储
特殊矩阵: 非零元在矩阵中的分布有一定规则
常用的稀疏矩阵的存储方法
三元组表示法 顺序存储 行逻辑联接的顺序表 带辅助行向量的二元组表示法 伪地址表示法 带行指针向量的单链表示法 链接存储 散列存储 行列表示法(十字链表) 多链表示法(正交表)
顺序存储
1、三元组表示法 用一个线性表来表示稀疏矩阵,线性表的每个 结点对应稀疏矩阵的一个非零元素。其中包括三个 域,分别为该元素的行下标、列下标和值。结点间 的先后顺序按矩阵的行优先顺序排列(跳过零元 素),将线性表用顺序的方法存储在连续的存储区 里。

C语言题库第5章 数组√

C语言题库第5章 数组√

第五章数组一、单项选择1.若要定义一个具有5个元素的整型数组,以下错误的定义语句是( C)2.下列选项中,能正确定义数组的语句是( D)3.下面是有关C语言字符数组的描述,其中错误的是( D)4.有以下程序,程序运行时若输入:how are you? I am fine<回车>则输出结果是( C)#include<stdio.h>int main(){ char a[30],b[30];scanf("%s",a);gets(b);printf("%s\n %s\n",a,b);return 0;}5.以下选项中正确的语句组是( D)6.若有定义语句:int m[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是( A )7.以下数组定义中错误的是( A)8.下列选项中,能够满足"若字符串s1等于字符串s2,则执行ST"要求的是 ( A )9.有以下程序,程序运行后的输出结果是( C)#include <stdio.h>#include <string.h>int main(){char x[]="STRING";x[0]='0';x[1]='\0';x[2]=0;printf("%d %d\n",sizeof(x),strlen(x));return 0;10.有以下程序,程序运行后的输出结果是( B )#include <stdio.h>#include <string.h>int main(){char a[20]=”ABCD\0EFG\0”,b[]=”IJK”;strcat(a,b); printf(“%s\n”,a);return 0;二、程序设计1./* 编写程序,实现矩阵(3行3列)的转置(即行列互换)。

第5章 数组(C++版) 第三节 字符数组和字符串类型02

第5章  数组(C++版)  第三节  字符数组和字符串类型02

【分析】 首先要将给定的原文保存在字符数组里。然后,在原文中,从头开始寻找字符A,找 到一个字符A,便将其替换成字符B;继续寻找下一个字符A,找到了就替换,……,直到 将原文都处理完。如下程序只能处理单个字符替换,无法处理单词替换,I U中间只能有 一个空格。getchar()输入的使用方法详见教材的第二章第四节,单词替换详见《信息学 奥赛一本通拓展教程》。 程序如下: #include<cstdio> #include<iostream> using namespace std; int main() { char st[200]; char A,B; int i,n=0; while((st[n++]=getchar())!='\n') //将原文存放在字符数组st中 A=getchar();getchar();B=getchar(); //读取A和B,中间getchar()读空格 for (i=0;i<n;i++) if (st[i]==A) cout<<B; else cout<<st[i]; cout<<endl; return 0; }
#include<iostream> #include<iomanip> using namespace std; int main() { for (char letter='a'; letter<='z'; letter+=2) cout<<setw(3)<<letter; cout<<endl; for (char letter='z'; letter>='a'; letter-=2) cout<<setw(3)<<letter; return 0; }
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

四、一维数组的初始化 数组的初始化可以在定义时一并完成。格式: 类型标识符 数组名[常量表达式]={值1,值2,…} 例如:
int a[5]={1,2,3,4,5} 说明:
(1)在初值列表中可以写出全部数组元素的值,也可以写出部分。例如, 以下方式可以对数组进行初始化:
int x[10]={0,1,2,3,4}; 该方法一次仅对数组的前5个元素依次进行初始化。 (2)对数组元素全部初始化为0,可以简写为:{0}。 例如: int a[5]={0}; 将数组a的5个元素都初始化为0。 (3)也可以先声明,后初始化
例5.5 输入十个正整数,把这十个数按由大到小的顺序排列。(选择排序 )
如对5个进行排序,这个五个数分别为8 2 9 10 5。 按选择排序方法,过程如下:
初始数据:8 2 9 10 5 第一循环:8 5 9 10 2 第二循环:8 10 9 5 2 第三循环:9 10 8 5 2 第四循环:10 9 8 5 2 对于十个数,则排序要进行9次。
第一节 一维数组
一、为什么要使用数组
例题:输入50个学生的某门课程的成绩,打印出低于平均分的学生序号与成绩。 如果,用简单变量a1,a2,…,a50存储这些数据,要用50个变量保存输入的数据,
程序片断如下: cin>>a1>>a2>>…>>a10; … cin>>a41>>a42>>…>>a50;
但不能是变量。
例如:
int E[10];
//数组a定义是合法的
int E[n];
//数组b定义是非法的
三、一组数组的引用 通过给出的数组名称和这个元素在数组中的位
置编号(即下标),程序可以引用这个数组中的任何 一个元素。
一维数组元素的引用格式: 数组名[下标]
例如:
int a[10]; 其中,a是一维数组的数组名,该数组有10个元 素,依次表示为: a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。 需要注意的是:a[10]不属于该数组的空间范围。
组中划去(筛掉),也就是给该元素值置 0; ⑷ 让p=p+1,重复执行第②、③步骤,直到
int a[5];
a[0]=1;
a[1]=2;
a[2]=3;
a[3]=4;
a[4]=5;
冒泡排序
比如:将9、8、5、4、2、0,按从小到大的顺序排好。
例5.6 编程输入十个正整数,然后自动按从大到小的顺序输出。 (冒泡排序) 【问题分析】
①用循环把十个数输入到A数组中; ②从A[1]到A[10],相邻的两个数两两相比较,即:
注意,如果真正要像上面这样编写程序,则上面的所有省略号必须用完整的语句写出 来。可以看出,这样的程序是多么繁琐。如果说处理的数据规模达到成千上万,上面 的例子单单读入就会异常复杂,电脑的优势没有得到体现。
选手们可能已经看出,我们需要把一大批具有相同性质的数据组合成一个新类型 的变量,可以用简单的程序(比如循环50次)对这个新变量的各个分量进行相同的处 理,每个分量仍然保留单个变量的所有性质(在上面的例子中,各分量是整型变量或 实型变量的性质)。
A[1]与A[2]比,A[2]与A[3]比,……A[9]与A[10]比。 只需知道两个数中的前面那元素的标号,就能进行与后一 个序号元素(相邻数)比较,可写成通用形式A[i]与A[i+1]比 较,那么,比较的次数又可用1~( n-i )循环进行控制(即循环 次数与两两相比较时前面那个元素序号有关) ; ③在每次的比较中,若较大的数在后面,就把前后两个对 换,把较大的数调到前面,否则不需调换位置。下标时,我们称这样的数组为
一维数组。 数组的定义格式如下: 类型标识符 数组名[数组大小] 比如:int a[50]; char b[20]; double c[20];
说明:
①数组名的命名规则与变量名的命名规则一致。
②常量表达式表示数组元素的个数。可以是常量和符号常量,
当在说明部分定义了一个数组变量之后,C++编译程序为所定义的数组在内存空 间开辟一串连续的存储单元。例如: 上例中的a数组在内存的存储如表所示:
a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
(1)下标可以是整型常量或整型表达式。如果使用表达式作为下标,就 要计算表达式的值以确定下标。
在这里引用了带下标的变量(分量变量称为数组元素)a[i]来代替 a1,a2…,a50,方括号中的i称为下标,当循环变量i=1时a[i]就是a[1];当i=2时a[i] 就是a[2]……;当i=50时a[i]就是a[50]。输入的时候,让i从1变化到50,循环 体内输入语句中的a[i]也就分别代表了a1,a2…,a50这50个带下标的变量。这 样上述问题的程序可写为:
(2)C++语言中,每个数组第一个元素的下标都是0,因此第一个元素 为第0个数组元素。
(3)C++语言只能逐个引用数组元素,而不能一次引用整个数组。 例如:int a[100],b[100]; a=b;这样的写法是非法的。
(4)数组元素可以像同类型的普通变量那样使用,对其进行赋值和运算 的操作,和普通变量完全相同。 例如: c[10]=34;实现了给c[10]赋值为34。
例5.7 用筛法求出100以内的全部素数,并按每行五个数显示。 【问题分析】
⑴ 把2到100的自然数放入a[2]到a[100]中(所放入的 数与下标号相同);
⑵ 在数组元素中,以下标为序,按顺序找到未曾找过
的最小素数minp,和它的位置p(即下标号); ⑶ 从p+1开始,把凡是能被minp整除的各元素值从a数
tot = 0; for (int i=1;i<=50;++i) {
cin>>a[i]; tot+=a[i]; } ave= tot/50; for (int i=1;i<=50;++i) if (a[i]<ave) cout<<"No. "<<i<<" "<<a[i];
要在程序中使用下标变量,必须先说明这些下标变量的整体为数组,即 数组是若干个同名(如上面的下标变量的名字都为a)下标变量的集合,这些 变量的类型全部一致。
相关文档
最新文档