第6章 程序设计与算法分析(答案)
C语言程序设计第06章 数组

1 4 2 3 思考: 0 0 0 0 0 注意:在定义数组时,如果没有为数组变量 1、如果想使一个数组中全部10个元 赋初值,那么就不能省略数组的大小。而且 素值为0,可以怎样写? a数组不初始化,其数组元素为随机值。 1 4 0 2 3 0 0 0 0 100 2、如果想使一个数组中全部 个元 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 素值为1,又该怎样写? 例当对全部数组元素赋初值时,可以省略数组变量的大 char str[ ] = {'a', 'b', 'c', 'd', 'e' }; (5) 则数组str的实际大小为5。 小,此时数组变量的实际大小就是初值列表中表达式的个数。
//超出了数组的大小
(3) 表达式1是第1个数组元素的值,表达式2是第2个 数组元素的值,依此类推; 例 int a[5] = {0, 1, 2, 3, 4}; 经过以上定义和初始化后, a[0] = 0,a[1] = 1,a[2] = 2,a[3] = 3,a[4] = 4。
9
(4) 如果表达式的个数小于数组的大小,则未指定值的 数组元素被赋值为0; 例 int a[10] = {0, 1, 2, 3, 4};
7
<6>C语言中规定数组元素的下标总是从0开始, 例如int a[10];说明整型数组a,有10个元素。这10个
元素是: a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8], a
[9]; 注意最后一个元素是a[9],而不是a[10],该数 组不存在数组元素a[10]。 并且特别值得注意的是,C编译器对数组下标越 界不作检查。
C++程序设计 第六章 数组

C++程序设计第6章数组单个变量只能存放一个数据值。
当程序中要处理一组相同类型、彼此相关的一组数据时,单个变量就不适合了,就需要一种特殊的数据结构来处理,这就是数组。
数组(array)是一种派生类型。
一个数组能同时存放多个数据值,并能对每个数据进行访问。
本章将介绍一维数组、二维数组和字符数组的定义及使用。
6.1 一维数组一个数组(array)是由相同类型的一组变量组成的一个有序集合。
数组中的每个变量称为一个元素(element),所有元素共用一个变量名,就是数组的名字。
数组中的每个元素都有一个序号,称为下标(index)。
访问一个元素就可以用数组名加下标来实现。
数组必须先定义后使用。
6.1.1 一维数组的定义一维数组就是具有一个下标的数组。
定义一个数组有3个要素:类型、名称与大小。
语法格式为:<数据类型> <数组名> [<常量表达式>]其中,<数据类型>确定了该数组的元素的类型,可以是一种基本数据类型,也可以是已定义的某种数据类型。
<数组名>是一个标识符,作为数组变量的名字。
方括号中的<常量表达式>必须是一个正整型数据,其值为元素的个数,即数组的大小或长度。
注意这里的方括号[]表示数组,而不是表示可缺省内容。
例如,下面定义了三个不同类型的数组:int a[5]; //定义了一个int数组afloat b[20]; //定义了一个float数组bdouble c[5]; //定义了一个double数组c对于上面数组a,元素类型为int,a是数组名,方括号中的10表示数组的长度,即该数组包含了5个元素,分别是a[0]、a[1]、a[2]、a[3]、a[4]。
如果一个数组有n个元素,那么数组中元素的下标从0开始到n-1。
具有相同类型的数组可以在一条说明语句中定义。
例如:int a1[5], a2[4]; //同时定义两个整型数组具有相同类型的单个变量和数组也可以在一条语句中定义。
(陈慧南 第3版)算法设计与分析——第6章课后习题答案

⑥ 选择作业 1,则 X 6, 2,3,5,1 。将其按照期限 di 非减次序排列可
得:
ID
di
5
1
6
2
3
3
1
3
2
4
作业5
作业3 作业2
-1
0
1
2
3
4
作业6 作业1(冲突)
该集合无可行排序,因此 X 6, 2,3,5,1 不可行, X 6, 2,3,5 ;
3
⑦ 选择作业 0,则 X 6, 2,3,5, 0 。将其按照期限 di 非减次序排列
可得:
ID
di
5
1
0
1
6
2
3
3
2
4
作业5
作业3 作业2
-1
0
1
2
3
4
作业0(冲突)作业6
该集合无可行排序,因此 X 6, 2,3,5, 0 不可行,X 6, 2,3,5 ;
⑧ 选择作业 4,则 X 6, 2,3,5, 4 。将其按照期限 di 非减次序排列
可得:
ID
Hale Waihona Puke di516
12,5,8,32, 7,5,18, 26, 4,3,11,10, 6 。请给出最优存储方案。
解析:首先将这 13 个程序按照程序长度非降序排列,得:
程序 ID
9 8 1 5 12 4 2 11 10 0 6 7 3
程序长度 ai 3 4 5 5 6 7 8 10 11 12 18 26 32
根据定理可知,按照程序编号存放方案如下:
解析:已知 Prim 算法时间复杂度为 O n2 ,受顶点 n 影响;
Kruskal 算法时间复杂度为 O m logm ,受边数 m 影响;
第6章C语言程序设计(张曙光)教材各章习题解答

1.(1)数目固定、类型相同的数据(2)在内存中占有一段连续的存储空间(3)a[0]、a[1]、a[2]、a[3]、a[4](4)0 9(5)2(6)按行存放(7)m n m×n(8)7(9)实参数组名(地址)(10)引用了错误的数组元素a[10]2.(1)A)(2)C)(3)D)(4)B)(5)A)(6)D)(7)C)(8)C)(9)B)(10)C)3.(1)①&a[i] ②a[i](2)③t=0; ④(i=0;i<10;i++) ⑤(a[i]==x) ⑥t=1;(3)⑦&base ⑧n%base; ⑨n/base; ⑩i++; ⑾(num[j]<10) ⑿'A'+ (num[j]-10);(4)⒀s[i]>k ⒁findmax(a,N)4.(1)1638276(2)3,5,7,(3)s=18(4)16(5)5 3 3 5(6)0245.#include<stdio.h>#define M 4#define N 4int main(void ){ int a[M], b[N],c[M+N];int i=0, j=0 , k=0;for(i=0;i<M;i++)scanf("%d",&a[i]);for(j=0;j<N;j++)scanf("%d",&b[j]);i=j=0;while(i<M && j<N)if (a[i]<b[j]){ c[k] = a [i];i++; k++; }else{ c[k] = b [j];j++; k++; }while(i<M){ c[k] = a [i];i++; k++; }while(j<N){ c[k] = b [j];j++; k++; }for(i=0;i<M+N;i++)printf("%d,",c[i]);printf("\n");return 0;}6.#include <stdio.h>int main(void){ int k,i,t,n,num[50];printf("Input number n:");scanf("%d",&n);for(i=0;i<n;i++)num[i]=i+1; /*以1至n为序给每个人编号*/i=0; /*每次循环时的计数变量*/k=0; /*按1、2、3报数时的计数变量*/t=0; /* 退出人数*/while(t<=n-1) /*当退出人数比n-1少时(即未退出人数大于1时)执行循环体*/ { if(num[i]!=0) k++;if(k==3) /*将退出的人的编号置为0*/{ printf("%d,",num[i]);num[i]=0;k=0;t++;}i++;if(i==n) i=0; /*报数到尾后,i恢复为0*/ }return 0;}7.#include <stdio.h>int main(void){int a[3][4]={0};int i,j,max,max_i,max_j;printf("Please input a 3X4 matrix:\n");for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);max=a[0][0];max_i=max_j=0;for(i=0;i<3;i++)for(j=0;j<4;j++)if(a[i][j]>max){max=a[i][j];max_i=i;max_j=j;}printf("The max is %d,row %d,col %d\n",max,max_i,max_j);return 0;}8.#include <stdio.h>#define N 5int main(void){int a[N][N],b[N][N];int i,j;printf("Please input a matrix:\n");for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&a[i][j]);printf("Please input b matrix:\n");for(i=0;i<N;i++)for(j=0;j<N;j++)scanf("%d",&b[i][j]);for(i=0;i<N;i++){ b[i][0]=a[N-1][i];b[i][N-1]=a[0][i];}printf("b matrix:\n");for(i=0;i<N;i++){ for(j=0;j<N;j++)printf("%d\t",b[i][j]);printf("\n");}return 0;}9.#include <stdio.h>#define N 10void f(int a[],int n){int b[N],i,m=0;for(i=0;i<N;i++)if(a[i]%2==1){b[m]=a[i];m++;}for(i=0;i<m;i++)printf ("%5d",b[i]);}int main(void){int c[N];int i,j;printf("Please input c matrix:\n");for(i=0;i<N;i++)scanf("%d",&c[i]);f(c,N);return 0;}10.#include <stdio.h>#define M 10void sub(int a[ ], int t, int ix){int i;for( i=ix; i<t; i++) a[i-1]=a[i];}void main( ){int i,n, x[M];printf("输入数组:\n");for( i=0; i<M; i++) scanf("%d", &x[i] );printf("输入n:\n");scanf("%d", &n);printf("\n");sub(x, M, n);printf("输出数组从下标%d位置开始向前移动后的数据:\n",n);for( i=0; i<M-1; i++) printf("%d ", x[i] );printf("\n");}11.递归算法:#include "stdio.h"long fib( int n ){ if (n>2)return (fib(n-1)+fib(n-2));elsereturn ( 1 );}int main(void){ int i;for(i=1;i<=20;i++)printf(" %ld \n",fib( i ) );return 0;}非递归算法:#include "stdio.h"int main(void){long a[20];int i;a[0]=1;a[1]=1;for(i=2;i<20;i++)a[i]=a[i-1]+a[i-2];for(i=0;i<20;i++)printf("%ld\n",a[i]);return 0;}。
C语言程序设计(第3版)第6章习题参考答案

gets(stridiom1);
printf("\nplease input the second idiom: ");
gets(stridiom2);
fnConcat(stridiom1,stridiom2);
printf("\nthe result is: %s",stridiom1)=0;
while(b[j] != '\0') /*把第二个字符串的内容连接到第一个字符串的后面*/
{
a[i+j] = b[j];
j++;
}
a[i+j]= '\0'; /*添加字符串结束符*/
}
void main()
{ char stridiom1[80],stridiom2[80];
i++;
}
a[j]= '\0'; /*添加字符串结束符*/
}
void main()
{ char stridiom1[80];
printf("\nplease input the first idiom: ");
gets(stridiom1);
fnConvert(stridiom1);
printf("\nthe result is: %s",stridiom1);
scanf("%d",&n);
printf("%ld",fnF(n));
getch();
}
(4)编一函数判别某一数是否为素数,若是,返回值为1,否则,返回值为0。
第6章 算法与程序设计

教案讲稿第六章算法与程序设计[旧课复习]:复习内容:1.PowerPoint幻灯片的基本制作方法2.PowerPoint 幻灯片的动画设计复习目的:加强学生熟练掌握PowerPoint基本操作复习时长:大约5分钟[新课导入]:导入方式:展示一个自制应用程序导入目的:让学生初步了解程序设计的应用理念导入时长:大约5分钟[新课讲授]:重点:掌握算法的基本特征;掌握结构化程序设计方法。
难点:掌握选择结构、循环结构的特点。
方法:运用多媒体辅助教学,采用案例教学和任务驱动等教学法。
6.1 计算机求解问题的方法(1)界定问题。
(2)分析问题。
(3)建模。
(4)分析模型建立算法。
6.2 算法及算法的描述6.2.1 算法的定义算法(Algorithm)是指完成某一特定任务所需要的具体方法和步骤,是有穷规则的集合。
6.2.2 算法的基本特征算法是程序设计的“灵魂”,算法+数据结构=程序。
算法独立于任何具体的程序设计语言,一个算法可以用多种程序设计语言来实现。
算法具有以下基本特征。
(1)输入:一个算法有0个或多个输入,用以表征算法开始之前运算对象的初始情况。
(2)输出:一个算法必须有一个或多个输出,输出是算法计算的结果,没有任何输出的程序是没有意义的。
(3)确定性:算法对每一步骤的描述必须确切而无歧义,以保证算法的实际执行结果精确地符合要求或期望。
(4)有穷性:算法必须在有穷步骤内完成任务,并且每一步骤都可以在有穷时间内完成。
(5)可行性:算法中描述的操作都是可以通过已经实现的基本运算,执行有限次数来实现。
6.2.3 算法的评价对于算法的评价有两个基本标准:时间复杂度和空间复杂度。
所谓时间复杂度,即执行这个算法需要多少时间。
所谓空间复杂度,即执行这个算法需要占用多少资源(可以理解为占用了多少计算机存储单元)。
6.2.4 算法的描述计算机算法无非是将人脑抽象出的模型程序化,而求解问题的关键还是在于人类本身的思维。
算法的描述是基于一种形式地表达6.2.5 算法的表示常用的描述工具有:流程图、N-S图、PAD图、伪码等。
算法设计与分析智慧树知到答案章节测试2023年山东交通学院

第一章测试1.解决一个问题通常有多种方法。
若说一个算法“有效”是指( )A:这个算法能在人的反应时间内将问题解决B:(这个算法能在一定的时间和空间资源限制内将问题解决)和(这个算法比其他已知算法都更快地将问题解决)C:这个算法能在一定的时间和空间资源限制内将问题解决D:这个算法比其他已知算法都更快地将问题解决答案:B2.农夫带着狼、羊、白菜从河的左岸到河的右岸,农夫每次只能带一样东西过河,而且,没有农夫看管,狼会吃羊,羊会吃白菜。
请问农夫能不能过去?()A:不一定B:不能过去C:能过去答案:C3.下述()不是是算法的描述方式。
A:自然语言B:程序设计语言C:E-R图D:伪代码答案:C4.有一个国家只有6元和7元两种纸币,如果你是央行行长,你会设置()为自动取款机的取款最低限额。
A:40B:42C:29D:30答案:D5.算法是一系列解决问题的明确指令。
()A:对B:错答案:A6.程序=数据结构+算法()A:错B:对答案:B7.同一个问题可以用不同的算法解决,同一个算法也可以解决不同的问题。
()A:错答案:B8.算法中的每一条指令不需有确切的含义,对于相同的输入不一定得到相同的输出。
( )A:错B:对答案:A9.可以用同样的方法证明算法的正确性与错误性 ( )A:对B:错答案:B10.求解2个数的最大公约数至少有3种方法。
( )A:错B:对答案:A11.没有好的算法,就编不出好的程序。
()A:对B:错答案:A12.算法与程序没有关系。
( )A:错B:对答案:A13.我将来不进行软件开发,所以学习算法没什么用。
( )A:对B:错答案:B14.gcd(m,n)=gcd(n,m m od n)并不是对每一对正整数(m,n)都成立。
( )A:错B:对答案:A15.既然程序设计语言可以描述算法,所以算法就是程序。
( )A:错B:对答案:A第二章测试1.并不是所有的算法,规模更大的输入需要更长的运行时间。
( )A:对答案:B2.算法效率分析框架主要关心一个算法的基本操作次数的增长次数,并把它作为算法效率的主要指标。
大学_计算机算法设计与分析第4版(王晓东著)课后答案下载

计算机算法设计与分析第4版(王晓东著)课后答
案下载
计算机算法设计与分析第4版内容简介
第1章算法概述
1.1 算法与程序
1.2 算法复杂性分析
1.3 NP完全性理论
算法分析题1
算法实现题1
第2章递归与分治策略
2.1 递归的概念
2.2 分治法的基本思想
2.3 二分搜索技术
2.4 大整数的乘法
2.5 Strassen矩阵乘法
2.6 棋盘覆盖
2.7 合并排序
2.8 快速排序
2.9 线性时间选择
2.10 最接近点对问题
第3章动态规划
第4章贪心算法
第5章回溯法
第6章分支限界法
第7章随机化算法
第8章线性规划与网络流
附录A C++概要
参考文献
计算机算法设计与分析第4版目录
本书是普通高等教育“十一五”__规划教材和国家精品课程教材。
全书以算法设计策略为知识单元,系统介绍计算机算法的设计方法与分析技巧。
主要内容包括:算法概述、递归与分治策略、动态规划、贪心算法、回溯法、分支限界法、__化算法、线性规划与网络流等。
书中既涉及经典与实用算法及实例分析,又包括算法热点领域追踪。
为突出教材的`可读性和可用性,章首增加了学习要点提示,章末配有难易适度的算法分析题和算法实现题;配套出版了《计算机算法设计与分析习题解答(第2版)》;并免费提供电子课件和教学服务。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第6章程序设计与算法分析
习题(答案)
一、选择题
1. A
2. D
3. A
4. C
5. D
6. B
7. B
8. D
9. ABCD 10. D
11. C 12. A 13. B 14. D 15. A
二、简答题
1.简述程序的概念。
答:一个程序就是能够实现特定功能的一组指令序列的集合。
或者表示为:程序=算法+数据结构。
2.结构化程序设计的思想是什么?
答:结构化程序设计的基本思想就是采用自上而下、逐步求精的设计方法和单入口单出口的控制结构。
3.结构化程序设计的原则是什么?
答:结构化程序设计的原则是:
(1) 使用顺序、选择、循环3种基本控制结构表示程序逻辑。
(2)程序语句组织成容易识别的语句模块,每个模块都是单入口、单出口。
(3)严格控制GOTO语句的使用。
4.结构化程序设计语言采用自顶向下的方法进行程序设计的特点是什么?
答:利用结构化程序设计语言采用自上而下的方法进行程序设计的特点是:
(1) 问题分解成子问题的结构必须与3种基本程序结构之一相对应。
(2) 问题的划分决定了程序的结构。
一方面,子问题的划分决定了这一层次的程序是3种基本结构中的哪一种结构;另一方面,一个问题该如何划分成子问题是灵活的,并不是只有一种分解方法。
分解的好坏就决定了设计的质量,也决定了程序的不同结构。
(3) 问题的边界应该清晰明确。
只有这样才能精确地解决这些子问题,否则就会模棱两可,无从下手。
5.简述面向对象和结构化程序设计的区别。
答:面向对象是从本质上区别于传统的结构化方法的一种新方法、新思路。
它吸收了结构化程序设计的全部优点,同时又考虑到现实世界与计算机之间的关系,认为现实世界是由一系列彼此相关并且能够相互通信的实体组成,这些实体就是面向对象方法中的对象,每个对象都有自己的自然属性和行为特征,而一类相似对象的共性的抽象描述,就是面向对象方法中的核心——类。
6.什么是数据结构?数据的物理结构有哪些?
答:数据结构是指数据元素之间的相互关系的集合,包括了数据的逻辑结构、物理结构以及数据的运算。
数据的物理结构主要有四种,分别是顺序结构、链表结构、索引结构及散列结构。
(1) 顺序结构:是把所有元素存放在一片连续的存储单元中,逻辑上相邻的元素存储在物理位置相邻的存储单元中,由此得到的存储表示称为顺序存储结构。
(2) 链表结构:对逻辑上相邻的元素不要求其物理位置相邻,元素间的逻辑关系通过附设的指针域来表示,由此得到的存储表示称为链式存储结构。
(3) 索引结构:每个数据结构建立索引表,每个数据元素占用表中的一项,每个表项通常包含关键字和地址指针。
其中的关键字是能够惟一标志一个数据元素的数据项。
(4) 散列结构:通过构造相应的散列函数,由散列函数的值来确定元素存放的地址。
7.什么是算法,算法的特性有哪些?
答:算法(Algorithm)是一组明确的、可以执行的步骤的有序集合,它在有限的时间内终止并产生结果。
算法的特性有:
(1) 有穷性(可终止性):一个算法必须在有限个操作步骤内以及合理的有限时间内执行完成。
(2) 确定性:算法中的每一个操作步骤都必须有明确的含义,不允许存在二义性。
(3) 有效性(可执行性):算法中描述的操作步骤都是可执行的,并能最终得到确定的结果。
(4) 输入及输出:一个算法应该有零个或多个输入数据、有1个或多个输出数据。
8.什么是算法的时间复杂度和空间复杂度,如何表示?
答:时间复杂度是与求解问题规模、算法输入相关的函数,该函数表示算法运行所花费的时间。
记为:T(n),其中,n代表求解问题的规模。
算法的空间复杂度(Space complexity)度量算法的空间复杂性、即执行算法的程序在计算机中运行所占用空间的大小。
简单讲,空间复杂度也是与求解问题规模、算法输入相关的函数。
记为:S(n),其中,n代表求解问题的规模。
时间复杂度和空间复杂度同样,引入符号“O”来表示T(n)、S(n)与求解问题规模n之间的数量级关系。
9.用图示法表示语言处理的过程。
答:语言处理的过程如图所示:
10.简述编译程序的概念。
编译程序是把高级语言程序(源程序)作为一个整体来处理,在应用源程序执行之前,就将程序源代码“翻译”成目标代码(机器语言),编译后与系统提供的代码库链接,形成—个完整的可执行的机器语言程序(目标程序代码)。
11.用图示法表示编译程序的框架。
答:编译程序的框架如图所示:
12.词法分析的任务是什么?
答:作为编译过程的第一个阶段,其任务是从左到右一个字符,一个字符地对源程序进行扫描,读入源程序,对构成源程序的字符流进行扫描和分解,通过词法分析从而识别出一个个单词(也称单词符号或符号)。
13.语法分析的任务是什么?
答:语法分析是编译过程的第二个阶段,任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”、“语句”、“表达式”等等。
14.简述语义处理的功能。
答:编译过程中的语义处理实现两个功能:
(1) 审查每个语法结构的静态语义,即验证语法结构合法的程序是否真正有意义,有时把这个工作称为静态语义分析或静态审查。
(2) 如果静态语义正确,则语义处理要执行真正的翻译,要么生成程序的一种中间表示形式(中间代码),要么生成实际的目标代码。
15.简述中间代码的概念。
答:所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。
16.目标代码生成阶段的任务是什么?
答:目标代码生成阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。
这是编译的最后阶段,它的工作与硬件系统结构和指令含义有关,这个阶段的工作很复杂,涉及到硬件系统功能部件的运用、机器指令的选择、各种数据类型变量的存储空间分配以及寄存器和后援寄存器的调度等。
三、讨论题
1.作为一个计算机专业的学生,程序设计是大学学习的重要内容之一,程序设计的内容很多,语言的更新也很快,如何才能更好地掌握程序设计?如何利用语言编程?怎样才能克服害怕编程的思想?
答案略。
2.算法是程序设计的基础,没有好的算法,就不可能写出好的程序,但是,学习算法涉及到很多交叉学科的知识,怎样才能把这些知识融会贯通,写出优秀的程序?
答案略。