算法设计与分析C语言描述陈慧南版课后答案

算法设计与分析C语言描述陈慧南版课后答案
算法设计与分析C语言描述陈慧南版课后答案

算法设计与分析C语言描述陈慧南版课后答案集团标准化工作小组 [Q8QX9QT-X8QQB8Q8-NQ8QJ8-M8QMN]

第一章

1-3. 最大公约数为1。快1414倍。

主要考虑循环次数,程序1-2的while 循环体做了10次,程序1-3的while 循环体做了14141次(14142-2循环)

若考虑其他语句,则没有这么多,可能就601倍。

第二章

2-8.(1)画线语句的执行次数为log n ????。(log )n O 。划线语句的执行次数应该理解为一格整体。

(2)画线语句的执行次数为 111(1)(2)16

j n i i j k n n n ===++=

∑∑∑。3()n O 。 (3)画线语句的执行次数为

。O 。

(4)当n 为奇数时画线语句的执行次数为 (1)(3)4

n n ++, 当n 为偶数时画线语句的执行次数为 2

(2)4

n +。2()n O 。 2-10.(1) 当 1n ≥ 时,225825n n n -+≤,所以,可选 5c =,01n =。对于0n n ≥,22()5825f n n n n =-+≤,所以,22582()n n n -+=O 。

(2) 当 8n ≥ 时,2222582524n n n n n -+≥-+≥,所以,可选 4c =,08n =。对于0n n ≥,22()5824f n n n n =-+≥,所以,22582()n n n -+=Ω。

(3) 由(1)、(2)可知,取14c =,25c =,08n =,当0n n ≥时,有

22212582c n n n c n ≤-+≤,所以22582()n n n -+=Θ。

2-11. (1) 当3n ≥时,3log log n n n <<,所以()20log 21f n n n n =+<,

3()log 2g n n n n =+>。可选 212

c =,03n =。对于0n n ≥,()()f n cg n ≤,即()(())f n g n =O 。注意:是f (n )和g (n )的关系。

(2) 当 4n ≥ 时,2log log n n n <<,所以 22()/log f n n n n =<,

22()log g n n n n =≥。可选 1c =,04n =。对于 0n n ≥,2()()f n n cg n <≤,即 ()(())f n g n =O 。

(3)因为 log log(log )()(log )n n f n n n ==,()/log log 2n g n n n n ==。当 4n ≥ 时,log(log )()n f n n n =≥,()log 2n g n n n =<。所以,可选 1c =,04n =,对于0n n ≥,()()f n cg n ≥,即 ()(())f n g n =Ω。

第二章

2-17. 证明:设2i n =,则 log i n =。

当2n ≥ 时,()22log T n n n ≤。所以,()()2log T n n n =O 。

第五章

5-4. SolutionType DandC1(int left,int right)

{

while(!Small(left,right)&&left

{

int m=Divide(left,right);

if(x

else if(x>P[m]) left=m+1;

else return S(P)

}

}

5-7. template

int SortableList::BSearch(const T&x,int left,int right) const

{

if (left<=right)

{

int m=(right+left)/3;

if (x

else if (x>l[m]) return BSearch(x,m+1,right);

else return m;

}

return -1;

}

第五章

9.

证明:因为该算法在成功搜索的情况下,关键字之间的比较次数至少为log n ????,至多为log 1n +????。在不成功搜索的情况下,关键字之间的比较次数至少为

log 1n +????,至多为log 2n +????。所以,算法的最好、最坏情况的时间复杂度为()log n Θ。 假定查找表中任何一个元素的概率是相等的,为

1n

,那么,

不成功搜索的平均时间复杂度为()()log 1

u E A n n n =

=Θ+, 成功搜索的平均时间复杂度为()()21log s I n E n n E A n n n n n

+-+===-=Θ。 其中,I 是二叉判定树的内路径长度,E 是外路径长度,并且2E I n =+。

当n=right-left+1>2时,程序执行下面的语句:

int k=(right-left+1)/3;

StoogeSort(left,right-k);

StoogeSort(left+k,right);

StoogeSort(left,right-k);

①首次递归StoogeSort(left,right-k);时,序列的前2/3的子序列有序。

②当递归执行StoogeSort(left+k,right);时,使序列的后2/3的子序列有序,经过这两次递归排序,使原序列的后1/3的位置上是整个序列中较大的数,即序列后1/3的位置上数均大于前2/3的数,但此时,前2/3的序列并不一定是有序的。 ③再次执行StoogeSort(left,right-k);使序列的前2/3有序。

经过三次递归,最终使序列有序。

所以,这一排序算法是正确的。

(2)最坏情况发生在序列按递减次序排列。 ()()010T =T =,()21T =,()2313n n ??T =T +

???

。 设322i n ??= ???,则log 1log31n i -=-。

冒泡排序最坏时间复杂度为()2n O ,队排序最坏时间复杂度为()log n n O ,快速排序最坏时间复杂度为()log n n O 。所以,该算法不如冒泡排序,堆排序,快速排序。

13. template

select (T&x,int k)

{

if(m>n) swap(m,n);

if(m+n

int *p=new temp[k];

int mid,left=0,right=n-1,cnt=0,j=0,r=0;

for(int i=0;i

{

while(k>0)

{

do

{

mid=(left+right)/2;

if(a[mid]

else if(a[mid]>b[i]) right=mid;

else {cnt=mid; break;}

}while(left

if(a[left]

else cnt=left-1;

if(k>cnt)

{

if(cnt>0)

{

for(j=0;j

{

temp[j]=a[r];

r++;

}

left=cnt;

k-=cnt;

}

else

{

temp[j]=b[i];

left=0;

k--;

}

}

else

{

for(j=0;j

{

temp[j]=a[r];

r++;

}

left=cnt;

k-=cnt;

return temp[k-1];

}

} }

}

第六章 1.由题可得:012345601234561051576183,,,,,,,,,,,,2357141p p p p p p p w w w w w w w ????= ? ???

??,

所以,最优解为()01234562,,,,,,,1,,1,0,1,1,13x x x x x x x ??= ???

, 最大收益为211051561835533

+?++++=。 8.

第六章

6-9.

普里姆算法。

因为图G 是一个无向连通图。

所以n-1<=m<=n (n-1)/2;

O(n)<=m<=O(n 2);

克鲁斯卡尔对边数较少的带权图有较高的效率,而()()1.992m n n =O ≈O ,此图边数较多,接近完全图,故选用普里姆算法。

6-10.

T 仍是新图的最小代价生成树。

证明:假设T 不是新图的最小代价生成树,T ’是新图的最小代价生成树,那么cost(T ’)

第七章

1. Bcost(1,0)=0;

Bcost(2,1)=c(1,1)+Bcost=5

Bcost(2,2)=c(1,2)+Bcost(1,0)=2

Bcost(3,3)=min{c(2,3)+Bcost(2,2),c(1,3)+Bcost(2,1)}=min{6+2,3+5}=8 Bcost(3,4)=c(2,4)+Bcost(2,2)=5+2=7

Bcost(3,5)=min{c(1,5)+Bcost(2,1),c(2,5)+Bcost(2,2)}=min{3+5,8+2}=8

Bcost(4,6)=min{c(3,6)+Bcost(3,3),c(4,6)+Bcost(3,4),c(5,6)+Bcost(3,5)}=mi n{1+8,6+7,6+8}=9

Bcost(4,7)=min{c(3,7)+Bcost(3,3),c(4,7)+Bcost(3,4),c(5,7)+Bcost(3,5)}=mi n{4+8,2+7,6+8}=9

Bcost(5,8)=min{c(6,8)+Bcost(4,6),c(7,8)+Bcost(4,7)}=min{7+9,3+9}=12 2.向后递推的计算过程如上题所示

向前递推过程如下:

cost(5,8)=0

cost(4,6)=7,cost(4,7)=3

cost(3,3)=min{1+cost(4,6),4+cost(4,7)}=7,

cost(3,4)=min{6+cost(4,6),2+cost(4,7)}=5

cost(3,5)=min{6+cost(4,6),2+cost(4,7)}=5

cost(2,1)=min{3+cost(3,3),3+cost(3,5)}=8

cost(2,2)=min{6+cost(3,3),8+cost(3,5),5+cost(3,4)}=10

cost(1,0)=min{5+cost(2,1),2+cost(2,2)}=12

所以,d(4,6)=d(4,7)=8, d(3,3)=d(3,4)=d(3,5)=7, d(2,1)=5, d(2,2)=4,

d(1,0)=2

从s到t的最短路径为 (0, d(1,0)=2, d(2,2)=4, d(3,4)=7, d(4,7)=8),路径长为12。

第七章

9. char A[8]={‘0’,’x’,’z’,’y’,’z’,’z’,’y’,’x’ }

B[8]={‘0’,’z’,’x’,’y’,’y’,’z’,’x’,’z’}

(a) c[i][j] (b)s[i][j]

所以,最长公共字串为 (x,y,z,z)。

第七章

11. void LCS::CLCS ( int i , int j )

{

if ( i = = 0 || j = = 0) return;

if (c[i][j] = = c[i-1][j-1]+1)

{

CLCS ( i-1,j-1);

Cout<

}

else if ( c[i-1][j]>=c[i][j-1]) CLCS (i-1,j);

else CLCS (i,j-1);

}

12. int LCS::LCSLength()

{

for ( int i =1; i<=m; i++) c[i][0]=0;

for (i =1; i<=n; i++) c[0][i]=0;

for (i =1; i<=m; i++)

for (int j =1; j<=n; j++)

if (x[i]= =y[j]) c[i][j]=c[i-1][j-1]+1;

else if (c[i-1][j]>=c[i][j-1]) c[i][j]=c[i-1][j];

else c[i][j]=c[i][j-1];

return c[m][n];

}

15. )}0,0{(1=-S , )}2,10{(01=S ,

)}2,10(),0,0{(0=S , )}7,25(),5,15{(11=S ,

)}7,25(),5,15(),2,10(),0,0{(1=S , )}15,31(),13,21(),10,16(),8,6{(21=S ,

)}15,31(),13,21(),10,16(),8,6(),0,0{(2=S

)}16,40(),14,30(),11,25(),9,15(),1,9{(31=S ,

8-1.

状态空间:描述问题的各种可能的情况,一种情况对呀状态空间的一个状态。 显示约束:用于规定每个xi 取值的约束条件称为显示约束

隐式约束:用于判定一个候选解是否为可行解的条件

问题状态:在状态空间树中的每个节点称为一个问题状态

解状态:如果从根到树中某个状态的路径代表一个作为候选解的元组,则该状态为解状态

答案状态:如果从根到树中某个状态的路径代表一个作为可行解的元组,则该状态为解状态。

活结点:回溯法从开始结点出发,以深度优先的方式搜索整个解空间,这个开始结点就成为一个活结点。未检测的结点称为活结点

扩展结点:算法从x 出发,访问x 的摸个后继结点y ,则x 被称为扩展结点

约束函数:一个约束函数是关于部分向量的函数Bk(x0,x1.....xk),它被定义为:如果可以判定Y 的子树上不含任何答案状态,则Bk(x0,x1.....xk)为false,否则为true.

剪枝函数:约束函数和限界函数的目的相同,都是为了剪去不必要搜索的子树,减少问题求解所需实际生成的状态节点数,他们统称为剪枝函数

8-2

bool place(int k,int ,I,int*x)

{

For(int j=0,j

If((x[j]==i)||(abs(x[j]-j)==abs(j-k)))

Return false;

Return true;

}

Void nqueens(int k,int n,int *x)

{

For(int i=0;i

If(place(k,I,x))

{

X[k]=I;

If(k= =n-1

{

For(i=0;i

Return;

}

Else nqueens(k+1,n,x)

}

}

Void nqueens(int n,int *x) {

Nqueens(0,n,x);

}

算法设计与分析王晓东

习题2-1 求下列函数的渐进表达式: 3n^2+10n; n^2/10+2n; 21+1/n; logn^3; 10 log3^n 。 解答:3n^2+10n=O(n^2), n^2/10+2^n=O(2^n), 21+1/n=O(1), logn^3=O(logn), 10log3^n=O(n). 习题2-3 照渐进阶从低到高的顺序排列以下表达式:n!,4n^2,logn,3^n,20n,2,n^2/3。 解答:照渐进阶从高到低的顺序为:n!、3^n、4n^2 、20n、n^2/3、logn、2 习题2-4 (1)假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。在某台计算机上实现并完成该算法的时间为t秒。现有另外一台计算机,其运行速度为第一台计算机的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题? (2)若上述算法的计算时间改进为T(n)=n^2,其余条件不变,则在新机器上用t秒时间能解输入规模多大的问题? (3)若上述算法的计算时间进一步改进为,其余条件不变,那么在新机器上用t秒时间能解输入规模多大的问题? 解答:(1)设能解输入规模为n1的问题,则t=3*2^n=3*2^n/64,解得n1=n+6 (2)n1^2=64n^2得到n1=8n (3)由于T(n)=常数,因此算法可解任意规模的问题。 习题2-5 XYZ公司宣称他们最新研制的微处理器运行速度为其竞争对手ABC公司同类产品的100倍。对于计算复杂性分别为n,n^2,n^3和n!的各算法,若用ABC公司的计算机能在1小时内能解输入规模为n的问题,那么用XYZ公司的计算机在1小时内分别能解输入规模为多大的问题? 解答:n'=100n n'^2=100n^2得到n'=10n n'^3=100n^3得到n'=4.64n n'!=100n!得到n'

《C语言程序设计》课后习题答案

第1章程序设计和C语言1 1.1什么是计算机程序1 1.2什么是计算机语言1 1.3C语言的发展及其特点3 1.4最简单的C语言程序5 1.4.1最简单的C语言程序举例6 1.4.2C语言程序的结构10 1.5运行C程序的步骤与方法12 1.6程序设计的任务14 1-5 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

2.1什么是算法16 2.2简单的算法举例17 2.3算法的特性21 2.4怎样表示一个算法22 2.4.1用自然语言表示算法22 2.4.2用流程图表示算法22 2.4.3三种基本结构和改进的流程图26 2.4.4用N S流程图表示算法28 2.4.5用伪代码表示算法31 2.4.6用计算机语言表示算法32 2.5结构化程序设计方法34 习题36 第章最简单的C程序设计——顺序程序设计37 3.1顺序程序设计举例37 3.2数据的表现形式及其运算39 3.2.1常量和变量39 3.2.2数据类型42 3.2.3整型数据44 3.2.4字符型数据47 3.2.5浮点型数据49 3.2.6怎样确定常量的类型51 3.2.7运算符和表达式52 3.3C语句57 3.3.1C语句的作用和分类57 3.3.2最基本的语句——赋值语句59 3.4数据的输入输出65 3.4.1输入输出举例65 3.4.2有关数据输入输出的概念67

C语言课后习题答案(最终)

第0章习题 1. 将下列十进制数分别转化为二进制数、八进制数和十六进制数: (1)128 (2)511 (3)1024 (4)65535 (5)1048575 答: (1)10000000、200、80 (2)111111111、777、1FF (3)10000000000、2000、400 (4)1111111111111111、177777、FFFF (5)11111111111111111111、3777777、FFFFF 2. 将下列二进制数转化为十进制数和十六进制数: (1)1100110101B (2)101101.1011B 答: (1)821、335 (2)45.6875、2D.B 3. 写出下列数的原码、反码、补码:15、-20、-27/32 答: (1)00001111、00000000、00001111 (2)10010100、11101011、11101100 (3)1.1101100、1.0010011、1.0010100 4. 16位无符号定点整数的数值表示范围为多少?8位补码的表示范围是多少?16位补码的表示范围是多少? 答: 0~65535、-128~127、-32768~32767 5.1968年Dijkstra提出结构化程序设计的思想的原因是什么?简要回答结构化程序设计的经典定义。 答: 结构化程序设计概念的提出主要是源于程序结构的层次性与模块化使得构造出来的软件具有良好的可理解性和可维护性,随着软件规模的扩大与复杂性的提高,程序的可维护性成为程序设计者们关注的重要问题之一。 如果一个程序的代码块仅仅通过顺序、选择和循环这3种基本控制结构进行连接,并且每个代码块只有一个入口和一个出口,则称这个程序是结构化的。 6.C程序在内存中存储在哪儿?计算机的内存空间是如何分区的?分区存放不同类型的数据的目的是什么? 答:

最新c语言课后习题答案汇总

c语言课后习题答案

第二章习题 2.什么叫做结构化算法?为什么要提倡结构化算法? 答:结构化算法是由一些基本结构顺序组成的。在基本结构之间不存在向前或向后的跳转,流程的转移只存在于一个基本的结构范围内。一个非结构化的算法可以用一个等价的结构化算法代替,其功能不变。 跟结构化算法比较起来,非结构化算法有以下缺点: 流程不受限制的随意转来转去,使流程图豪无规律使人在阅读的时候难以理解算法的逻辑.难以阅读,也难以修改,从而使算法的可靠性和可维护性难以保证。 4. 第三章习题 1.#include #include void main() { unsigned int n;

float p,p1,r=0.09; scanf("%u",&n); p=pow(1+r,n); p1=(p-1)*100; printf("%5.2f%%\n",p1); } 运行结果:输入,回车,见结果: 2.#include #include int main() { int bj=1000; float r1,r2,r3,r5,r0,lx1,lx2,lx3,lx4,lx5; r1=0.0414; r2=0.0468; r3=0.0540; r5=0.0585; r0=0.0072; lx1=bj*r5; lx2=bj*(1+r2)*r3; lx3=bj*(1+r3)*r2; lx4=bj*pow(1+r1,5); lx5=bj*r0*5; printf("lx1=%f lx2=%f lx3=%f lx4=%f lx=5%f\n",lx1,lx2,lx3,lx4,lx5); return 0; } 运行结果: 3.#include #include int main() { long d,p; d=300000; p=6000; double m,r=0.01; m=log(p/(p-d*r))/log(1+r); printf("%4.2f",m); return 0;

C语言课后习题答案(完整版)-第四版-_谭浩强

C语言课后习题答案-第四版- 谭浩强(1-7) 第一章 #include int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } #include int main() {int a,b,c,max; printf("please input a,b,c:\n"); scanf("%d,%d,%d",&a,&b,&c); max=a; if (max #include int main() {float p,r,n; r=0.1; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0; } #include #include int main()

{float r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次printf("p1=%f\n",p1); // 输出按第1方案得到的本息和 printf("p2=%f\n",p2); // 输出按第2方案得到的本息和 printf("p3=%f\n",p3); // 输出按第3方案得到的本息和 printf("p4=%f\n",p4); // 输出按第4方案得到的本息和 printf("p5=%f\n",p5); // 输出按第5方案得到的本息和 return 0; } #include #include int main() {double r5,r3,r2,r1,r0,p,p1,p2,p3,p4,p5; p=1000; r5=0.0585; r3=0.054; r2=0.0468; r1=0.0414; r0=0.0072; p1=p*((1+r5)*5); // 一次存5年期 p2=p*(1+2*r2)*(1+3*r3); // 先存2年期,到期后将本息再存3年期 p3=p*(1+3*r3)*(1+2*r2); // 先存3年期,到期后将本息再存2年期 p4=p*pow(1+r1,5); // 存1年期,到期后将本息存再存1年期,连续存5次 p5=p*pow(1+r0/4,4*5); // 存活期存款。活期利息每一季度结算一次printf("p1=%f\n",p1); // 输出按第1方案得到的本息和 printf("p2=%f\n",p2); // 输出按第2方案得到的本息和 printf("p3=%f\n",p3); // 输出按第3方案得到的本息和 printf("p4=%f\n",p4); // 输出按第4方案得到的本息和 printf("p5=%f\n",p5); // 输出按第5方案得到的本息和

C语言课后作业答案

3-5-1正确 大写字母转化成小写或者小写变大写 #include void main() { char ch; printf("请输入一个字符:"); scanf("%c",&ch); if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') { if(ch>='A'&&ch<='Z')ch=ch+32; else ch=ch-32; } else ch=ch; printf("%c\n",ch); } 3-5-2大写转化成小写或者小写变大写 #include void main() { char ch; printf("请输入一个字符:"); scanf("%c",&ch); ch=ch; { if(ch>='A'&&ch<='Z')ch=ch+32; else ch=ch-32; } printf("%c\n",ch); } 3-5-3大写转化成小写或者小写变大写 #include void main() { char ch; printf("请输入一个字符:"); scanf("%c",&ch); if(ch>='a'&&ch<='z') ch=ch-32; else if(ch>='A'&&ch<='Z') ch=ch+32; else ch=ch; printf("%c\n",ch); } 3-6-1正确分段函数

#include void main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x<=1) y=x; else { if(1 void main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x>=10) y=3*x-8; else if(x>1) y=2*x+1; else y=x; printf("x=%d,y=%d\n",x,y); } 3 -6 -3正确 #include void main() { int x,y; printf("请输入x:"); scanf("%d",&x); if(x<=1) y=x; else if(1=10) y=3*x-8; printf("x=%d,y=%d\n",x,y); } 计算器正确 #include void main() {

算法设计与分析第三版王晓东算法实现题部分答案_可复制编辑!

算法实现题3-7 数字三角形问题 问题描述: 给定一个由n行数字组成的数字三角形,如图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 编程任务: 对于给定的由n行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。 数据输入: 有文件input.txt提供输入数据。文件的第1行是数字三角形的行数n,1n<=100。接下来的n行是数字三角形各行的数字。所有数字在0-99之间。 结果输出: 程序运行结束时,将计算结果输出到文件output.txt中。文件第1行中的数是计算出的最大值。 输入文件示例输出文件示例 input.txt output.txt 5 30 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 源程序: #include "stdio.h" void main() { int n,triangle[100][100],i,j;//triangle数组用来存储金字塔数值,n表示行数 FILE *in,*out;//定义in,out两个文件指针变量 in=fopen("input.txt","r"); fscanf(in,"%d",&n);//将行数n读入到变量n中 for(i=0;i=0;row--)//从上往下递归计算 for(int col=0;col<=row;col++) if(triangle[row+1][col]>triangle[row+1][col+1]) triangle[row][col]+=triangle[row+1][col]; else triangle[row][col]+=triangle[row+1][col+1]; out=fopen("output.txt","w"); 振动时效设备https://www.360docs.net/doc/cc8146061.html,/

C语言课后答案

习题一 一、简答题 1.顺序结构、选择(分支)结构和循环结构。 2. (1)

(2)

3.编辑、编译、连接和运行 二、填空题 1. Ctrl+F9;Alt+F5;F2。 2. main(主) 3. main(主) 4. 任意 5. /* */ 不 6. ; 7.。 程序: include studio.h main{} /* this program prints the number of weeks in a year. /* ( int s s:=52; print(There are s weeks in a year"); 正确的为: #include main() /* this program prints the number of weeks in a year. */ { int s; s=52; printf("There are s weeks in a year"); }

习题二 一、选择题 1、C 2、B,D,F,G 3、C 4、A 5、C 6、B 二、填空题 1、声明;使用。 2、整型、浮点型(实型)、字符型。 3、hat_1,cat1,all, Dollar, piece_f, SIN, _ , FALSE. 4、'A'(字符),005(整型),3e0(整型),'\\'(字符),'\05'(字符), 1.2e+5(整型),0xf12(整型)。 5、(1)6+(4+5)*(4+5)/(2+3) (2)sin(a+b)*ain(a+b)/ (4*2)/(3*2)+2 三、读程题 1.若x为float型,其原值为5,a=2,b=4.7。写出下列表达式运算后x的值。 (1)x=(int)(b-a)%3*a/4-a (2)x=(x=b+1)+(int)(b)%10/2.0 (3)x+=x (4)x-=x (5)x*=x+x (6)x/=x+x (7)x+=x-=x*=x (8)x%=x (9)x=3*4,5*6 答案:(1)-1,(2)7.7,(3)10,(4)0,(5)50,(6)0.5,(7)0,(8)非法,(9)12。 2.写出下面程序的运行结果。 #include void main() { int a=2; printf("abcdefghijk\n"); printf("lmnop/n"); printf("I am a /n beginner of C !"); printf("I am a \n beginner of C !"); printf("%d + %d = %d",a,a,a); } 答案: abcdefghijk

《算法设计与分析》课程实验与设计 福州大学 王晓东

《算法设计与分析》课程实验与设计 福州大学王晓东 第1章算法引论 算法实现题1-1 统计数字问题 算法实现题1-2 字典序问题 算法实现题1-3 最多约数问题 算法实现题1-4 金币阵列问题 算法实现题1-5 最大间隙问题 第2章递归与分治策略 算法实现题2-1 输油管道问题 算法实现题2-2 众数问题 算法实现题2-3 邮局选址问题 算法实现题2-4 马的Hamilton周游路线问题 算法实现题2-5 半数集问题 算法实现题2-6 半数单集问题 算法实现题2-7 士兵站队问题 算法实现题2-8 有重复元素的排列问题 算法实现题2-9 排列的字典序问题 算法实现题2-10 集合划分问题 算法实现题2-11 集合划分问题2 算法实现题2-12 双色Hanoi塔问题 算法实现题2-13 标准2维表问题

算法实现题2-14 整数因子分解问题 算法实现题2-15 有向直线2中值问题 第3章动态规划 算法实现题3-1 独立任务最优调度问题 算法实现题3-2 最少硬币问题 算法实现题3-3 序关系计数问题 算法实现题3-4 多重幂计数问题 算法实现题3-5 编辑距离问题 算法实现题3-6 石子合并问题 算法实现题3-7 数字三角形问题 算法实现题3-8 乘法表问题 算法实现题3-9 租用游艇问题 算法实现题3-10 汽车加油行驶问题 算法实现题3-11 圈乘运算问题 算法实现题3-12 最少费用购物 算法实现题3-13 最大长方体问题 算法实现题3-14 正则表达式匹配问题 算法实现题3-15 双调旅行售货员问题 算法实现题3-16 最大k乘积问题 算法实现题3-17 最小m段和问题 算法实现题3-18 红黑树的红色内结点问题 第4章贪心算法 算法实现题4-1 会场安排问题 算法实现题4-2 最优合并问题 算法实现题4-3 磁带最优存储问题 算法实现题4-4 磁盘文件最优存储问题

C语言课后练习及答案

作业A: 一、单项选择题 1、如果要把常量327存入变量a中,a不能定义的类型是哪一个?() A)int B)char C)long D)float 2、若x 为unsigned int 型变量,则执行下列语句后x值为() x = 65535; printf(“%d\n”,x); A)65535 B)1 C)无定值D)-1 3、有以下程序 main() {int a=1,b=2,m=0,n=0,k;k=(n=b>a)||(m=a

C语言课后答案最新版本

第3章 三、编程题 1. 编写程序,输入一个非负数,输出以此数为半径的圆周长以及面积。 #include "stdio.h" #define PI 3.1415 void main() { float r,area,circumference; scanf("%f",&r); area=PI*r*r; circumference=2*r*PI; printf("area=%6.2f\ncircumference=%6.2f\n",area,circumference); } 2. 编写程序,输出下面结果,注意,双引号也要输出: “I'm a student!” #include void main() { printf("\"I\'m a student!\"\n"); } 3. 编写程序,输入一个小写字母,将其转换为大写字母输出。例如输入b ,则输出B 。提示:小写字母和 对应的大写字母的ASCII 码值相差32。 void main() { char ch; ch=getchar(); ch-=32; putchar(ch); //printf("%c",ch); } 4. 编写程序,输入一个华氏温度f ,输出其相应的摄氏温度c 。华氏温度和摄氏温度的转换公式为: )32f (95c -= #include void main() { float f,c; scanf(“%f ”,&f); c=5.0*(f-32)/9; printf(“华氏温度%5.2f 转换为摄氏温度为:%5.2f\n ”,f,c);

第4章 三、编程题 1.输入一个整数,判断这个整数是奇数还是偶数(提示:整数的奇偶性可以利用取余运算符%判定)。#include void main() { int a; scanf("%d",&a); if(a%2) printf("奇数\n"); else printf("偶数\n"); } 2.编写程序,输入一个24小时制的时间,转换为12小时制时间后进行输出。以13点15分为例,输入:13:15,则输出:下午1:15。 #include void main() { int hour,minute; scanf("%d:%d",&hour,&minute); if (hour>12) hour=hour-12; printf("%d:%d\n",hour,minute); } 3.输入年号,判断它是否是闰年(如果年号能被400整除,或能被4整除,而不能被100整除,则是闰年,否则不是)。 void main() { int year; scanf("%d",&year); if (year%400==0||(year%4==0&&year%100==0)) printf("%d是闰年\n",year); else printf("%d不是闰年\n",year); }

C语言课后习题答案

第1章C语言概述 一、选择题 答案: 1.A 2.B 3.C 4.C 5.D 6.B 7.D 8.B 二、填空题 答案: 1.函数2.目标3.编译程序4.分号 第2章数据类型、运算符和表达式 一、选择题 答案: 1.B 2.D 3.D 4.B 5.D 6.C 7.C 8.B 9.A 10.D 11.B 12.B 13.D 14.D 15.A 16.C 17.B 18.D 19.A 20.C 二、填空题 答案: 1.2 2.6,4,2 3.18 4.5 5.double或双精度 6.30 7.4,2 8.4 第3章顺序结构 一、选择题 答案: 1.C 2.C 3.C 4.A 5.A 6.A 7.D 8.D 9.C 10.D 二、填空题 答案: 1.scanf printf 2.顺序、选择、循环3.1 4.3 5.9,10 6.10,20 7.213 8.空格、Tab键、回车键 第4章选择结构 一、选择题 答案: 1.B 2.D 3.D 4.B 5.B 6.C 7.C 8.B 9.B 二、程序改错题 1.输入两个实数,在fun()函数中按数值由小到大输出它们。(保留2位小数)

答案: =======(答案1)======= float t; =======(答案2)======= if(a>b) =======(答案3)======= printf("%5.2f, %5.2f\n",a,b); 2.编写一个程序计算某年某月有几天。(注意要区分闰年) 答案: =======(答案1)======= switch(mm) =======(答案2)======= break; =======(答案3)======= default : 三、程序填空题 1.功能:输出a、b、c三个变量中的最小值。 答案: =======(答案1)======= &c =======(答案2)======= c:t1 四、程序设计题 1.功能:对任意输入的x,用下式计算并输出y 的值。说明:因为关于函数调用的知识在第7章讲解,所以在现阶段本程序的设计可以改用一个主函数来完成。 答案: int m; if(n<10) m=5; else if(n==10) m=0; else m=-5; return m; 或 int m; if(n>=10) if(n>10) m=-5; else m=0; else m=5; return m; 第5章循环结构 一、选择题

《C语言程序设计》课后习题答案(第四版)谭浩强

第1章程序设计和C语言1 什么是计算机程序1 什么是计算机语言1 语言的发展及其特点3 最简单的C语言程序5 最简单的C语言程序举例6 语言程序的结构10 运行C程序的步骤与方法12 程序设计的任务14 1-5 #include <> int main ( ) { printf ("**************************\n\n"); printf(" Very Good!\n\n"); printf ("**************************\n"); return 0; } 1-6#include <> int main() {int a,b,c,max; printf("please input a,b,c:\n");

scanf("%d,%d,%d",&a,&b,&c); max=a; if (max

数据类型42 整型数据44 字符型数据47 浮点型数据49 怎样确定常量的类型51 运算符和表达式52 语句57 语句的作用和分类57 最基本的语句——赋值语句59 数据的输入输出65 输入输出举例65 有关数据输入输出的概念67 用printf函数输出数据68 用scanf函数输入数据75 字符数据的输入输出78 习题82 3-1 #include <> #include <> int main() {float p,r,n; r=; n=10; p=pow(1+r,n); printf("p=%f\n",p); return 0;

C语言课后习题标准答案

C语言课后习题标准答案 第1章C语言概述 一、简答题 1.(1)语言简洁、紧凑,使用方便、灵活;(2)运算符丰富;(3)具有丰富的数据类型;(4)具有结构化的控制语句;(5)语法限制不太严格,程序设计自由度大;(6)C语言允许直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接访问硬件;(7)生成目标代码质量高,程序执行效率高;(8)用C语言写的程序可移植性好,基本上不作修改就能用于各种型号的计算机和各种操作系统。 2.顺序结构,分支结构,循环结构 3.所谓算法就是为解决一个问题而采取的方法和步骤。 算法的特性:有穷性、确定性、输入、输出、可行性。 表示算法的方式:(1)用自然语言表示;(2)用流程图表示;(3)用N—S流程图表示; (4)用伪代码表示;(5)用计算机语言表示。 二、算法 1.瓶子A里盛有醋 瓶子B里盛有酱油 那一个空瓶C 将A中的醋倒入C 将B中的酱油倒入A

将C中的醋倒入B 2.输入一个数放在a中max=a 以下步骤重复9次: 输入一个数放在a中 如果a>max,max=b 打印max的值 3.如果??a<b temp=a ?a=b ??b=temp 如果c>a ?temp1=a ??temp2=b a=c ?b=temp1 ?c=temp2 否则 ?如果?c>b ?temp=b ?b=c ?c=temp

打印a,b,c的值 4.i=1 sum=0 以下程序循环100遍: sum=sum+i ?i=i+1 打印sum的值 5.如果(n除以3的余数为0并且n除以5的余数为0)n能够同时被3和5整除 否则 ?n不能够同时被3和5整除 6.i=101 以下语句循环50遍: ?j=2 ?flag=1 ?当j<(i除以2的整数部分)时循环以下语句: ??如果i除以j的余数为零 ???flag=0 ???退出该循环 如果flag=1 ???打印i的值 ?i=i+1

C语言程序设计课后答案

2.2 #include main() { float x=2.5,y=2.5,z=2.5; printf("x=%f\n",x); printf("y=%f\n",y); printf("z=%f\n",z); } 3.1(1) #include main() { int a=12,b=3; float x=18.5,y=4.6; printf("%d\n",(float)(a*b)/2); printf("%d\n",(int)x%(int)y); } 3.2 #include main() { int x,b0,b1,b2,s; printf("Inputx:"); scanf("%d",&x); b2=x/100; b1=(x-b2*100)/10; b0=x%10; s=b0*100+b1*10+b2; printf("s=%d\n",s); } 3.3 #include #include main() { float rate=0.0225; float n,capital,deposit; printf("Input n,capital:"); scanf("%f,%f",&n,&capital); deposit=capital*pow(1+rate,n); printf("deposit=%f\n",deposit); } 3.4 #include #include main() { float a,b,c;

double x,y; printf("Inputa,b,c:"); scanf("%f,%f,%f",&a,&b,&c); x=(-b+sqrt(b*b-4*a*c))/(2*a); y=(-b-sqrt(b*b-4*a*c))/(2*a); printf("x=%f,y=%f\n",x,y); } 4.1(1) #include main() { char c1='a',c2='b',c3='c'; printf("a%cb%cc%c\n",c1,c2,c3); } 4.1(2) #include main() { int a=12,b=15; printf("a=%d%%,b=%d%%\n",a,b); } 4.1(3) #include main() { int a,b; scanf("%2d%*2s%2d",&a,&b); printf("%d,%d\n",a,b); } 4.2 #include main() { long a,b; float x,y; scanf("%d,%d\n",&a,&b); scanf("%f,%f\n",&x,&y); printf("a=%d,b=%d\n",a,b); printf("x=%f,b=%f\n",x,y); } 5.1 #include main() { float a; printf("Innputa:"); scanf("%f",&a); if(a>=0) {

《C语言程序设计》课后习题参考答案

高等院校计算机基础教育规划教材《C++程序设计》课后习题参考答案 ――武汉大学出版社 习题1参考答案 一、选择题 1. A 2. D 二、填空题 1. BASIC、FORTRAN、AL_GOL60和COBOL 2. 8 3. 关键字 4. 编辑、编译、链接和运行 三、简答题 1.答: (1)C语言具有结构化的控制语句。C语言提供了结构化程序所必需的基本控制语句,实现了对逻辑流的有效控制。 (2)C语言具有丰富的数据结构类型。C语言除提供整型、实型、字符型等基本数据类型外,还提供了用基本数据类型构造出的各种复杂的数据结构,如数组、结构、联合等。C语言还提供了与地址密切相关的指针类型。此外,用户还可以根据需要自定义数据类型。(3)C语言具有丰富的运算符。C语言提供了多达34种运算符,丰富的数据类型与丰富的运算符相结合,使C语言的表达力更具灵活性,同时也提高了执行效率。 (4)C语言简洁、紧凑,使用方便、灵活,程序书写自由,有9种控制语句。 (5)C语言既具有高级语言的功能,又具有低级语言的许多功能,通常被称为中级计算机语言。它既是成功的系统描述语言,又是通用的程序设计语言。 (6)C语言与汇编语言相比,可移植性好。 (7)功能强大。C语言具有低级语言的一些功能,所以,生成目标代码质量高,程序执行效率高。现在许多系统软件都用C语言来描述,可以大大提高了编程效率。 2.答:运行一个C语言程序,一般需要经过如下几个步骤:①上机输入并编辑源程序;②编译源程序;③与库函数连接;④生成可执行目标程序;⑤运行目标程序。 3.答: (1)操作系统的设计与实现。C语言是一种应用非常广泛的结构化高级程序设计语言,既适合编写应用软件,又适合编写系统软件。

C语言习题及解答

C 语言习题及解答 1、输入一个华氏温度,要求输出摄氏温度。公式 为#include void main( ) {float C,F; printf("Input F:"); scanf("%f",&F); C=5.0/9*(F-32); printf("C=%.2f\n",C);} 2、编写程序,从键盘输入一个大写字母,将它转换为对应的小写字母后输出。(提示:同一个字母的大写比小写小32) #include void main( ) { char ch; printf("Input ch:"); scanf("%c",&ch); ch=ch+32; printf(“ch=%c\n",ch);} 3、编写程序,输入梯形的上底、下底和高,计算 并输出梯形的面积。 #include void main( ) { float a,b,h,area; printf("Input a,b,h: "); scanf("%f%f%f", &a,&b,&h); area=(a+b)*h/2; printf("area=%.2f\n", area); } 4、编写程序,输入圆半径r ,求圆周长、圆面积、圆球表面积、圆球体积。 #include #define PI 3.1415926 void main( ) {float r,L,s1,s2,V; printf("Input r:"); scanf("%f", &r); L=2*PI*r; s1=PI*r*r; s2=4*PI*r*r; V=4.0/3*PI*r*r*r; printf("L=%.2f, s1=%.2f, s2=%.2f, V=%.2f\n", L,s1,s2,V); } 5、有三个电阻r1、r2、r3并联,编写程序计算并输出并联后的电阻r 。已知电阻并联公式为: #include void main( ) { float r,r1,r2,r3; printf("Input r1,r2,r3: "); scanf("%f%f%f", &r1,&r2,&r3); r=1/(1/r1+1/r2+1/r3); printf("r=%.2f\n", r); } 6、由键盘输入一个10-99之间的整数,将该数分解,分别输出其个位数字和十位数字。例如,输入85,输出:5,8。 提示:用算术运算中的整除和取余运算实现。 #include void main( ) {int x, a, b; scanf("%d", &x); a=x%10; b=x/10; printf(“a=%d, b=%d\n", a, b);} 7、编写程序,输入三角形的三条边,计算并输出三角形的面积。(注意输入的三条边必须要能构成一个三角形)求三角形的面积公式为 其中s=(a+b+c)/2。 #include #include void main( ) scanf("%f%f%f", &a,&b,&c); s= (a+b+c)/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("area=%.2f\n", area); 8、周期为T 秒的人造卫星离地面 的平均高度H 的计算公式为: 其中:M=6×1024kg 是地球质量,R=6.371×106m 是地球半径。 编写程序,输入人造卫星的周期T ,计算并输出人造卫星离地面的高度H 。 算法提示:求xy 结果的数学函数是pow(x, y) ()3295 -= F C 3 121111r r r r ++=()()() c s b s a s s area ---=R MT H -?=-32 2 1141067.6π

相关文档
最新文档