第02章 算法——程序的灵魂

合集下载

《C语言》章节列表

《C语言》章节列表

第1章程序设计和C语言1第2章算法——程序的灵魂16第3章最简单的C程序设计——顺序程序设计第4章选择结构程序设计85第5章循环结构程序设计114第6章利用数组处理批量数据1426.1怎样定义和引用一维数组1426.1.1怎样定义一维数组1436.1.2怎样引用一维数组元素1446.1.3一维数组的初始化1456.1.4一维数组程序举例1466.2怎样定义和引用二维数组1486.2.1怎样定义二维数组1496.2.2怎样引用二维数组的元素1506.2.3二维数组的初始化1516.2.4二维数组程序举例1526.3字符数组1546.3.1怎样定义字符数组1546.3.2字符数组的初始化1556.3.3怎样引用字符数组中的元素1556.3.4字符串和字符串结束标志1566.3.5字符数组的输入输出1596.3.6使用字符串处理函数1616.3.7字符数组应用举例165习题168第7章用函数实现模块化程序设计1707.1为什么要用函数1707.2怎样定义函数1727.2.1为什么要定义函数1727.2.2定义函数的方法1737.3调用函数1747.3.1函数调用的形式1747.3.2函数调用时的数据传递1757.3.3函数调用的过程1777.3.4函数的返回值1787.4对被调用函数的声明和函数原型1797.5函数的嵌套调用1827.6函数的递归调用1847.7数组作为函数参数1927.7.1数组元素作函数实参1937.7.2数组名作函数参数1947.7.3多维数组名作函数参数1977.8局部变量和全局变量1997.8.1局部变量1997.8.2全局变量2007.9变量的存储方式和生存期2047.9.1动态存储方式与静态存储方式2047.9.2局部变量的存储类别2057.9.3全局变量的存储类别2087.9.4存储类别小结2127.10关于变量的声明和定义2147.11内部函数和外部函数2157.11.1内部函数2157.11.2外部函数215习题218第8章善于利用指针2208.1指针是什么2208.2指针变量2228.2.1使用指针变量的例子2228.2.2怎样定义指针变量2238.2.3怎样引用指针变量2248.2.4指针变量作为函数参数2268.3通过指针引用数组2308.3.1数组元素的指针2308.3.2在引用数组元素时指针的运算2318.3.3通过指针引用数组元素2338.3.4用数组名作函数参数2378.3.5通过指针引用多维数组2458.4通过指针引用字符串2558.4.1字符串的引用方式 2558.4.2字符指针作函数参数2598.4.3使用字符指针变量和字符数组的比较263 8.5指向函数的指针2668.5.1什么是函数指针2668.5.2用函数指针变量调用函数2668.5.3怎样定义和使用指向函数的指针变量268 8.5.4用指向函数的指针作函数参数2708.6返回指针值的函数2748.7指针数组和多重指针2778.7.1什么是指针数组 2778.7.2指向指针数据的指针2808.7.3指针数组作main函数的形参2828.8动态内存分配与指向它的指针变量2858.8.1什么是内存的动态分配2858.8.2怎样建立内存的动态分配2858.8.3void指针类型 2878.9有关指针的小结288习题291第9章用户自己建立数据类型2939.1定义和使用结构体变量2939.1.1自己建立结构体类型2939.1.2定义结构体类型变量 2959.1.3结构体变量的初始化和引用2979.2使用结构体数组3009.2.1定义结构体数组3009.2.2结构体数组的应用举例3019.3结构体指针3039.3.1指向结构体变量的指针3039.3.2指向结构体数组的指针3049.3.3用结构体变量和结构体变量的指针作函数参数306 9.4用指针处理链表3099.4.1什么是链表 3099.4.2建立简单的静态链表3109.4.3建立动态链表3119.4.4输出链表3159.5共用体类型3179.5.1什么是共用体类型3179.5.2引用共用体变量的方式3189.5.3共用体类型数据的特点3199.6使用枚举类型3239.7用typedef声明新类型名326习题330第10章对文件的输入输出33110.1C文件的有关基本知识33110.1.1什么是文件33110.1.2文件名33210.1.3文件的分类33210.1.4文件缓冲区33310.1.5文件类型指针33310.2打开与关闭文件33510.2.1用fopen函数打开数据文件33510.2.2用fclose函数关闭数据文件33710.3顺序读写数据文件33810.3.1怎样向文件读写字符33810.3.2怎样向文件读写一个字符串34110.3.3用格式化的方式读写文件34410.3.4用二进制方式向文件读写一组数据34510.4随机读写数据文件34910.4.1文件位置标记及其定位34910.4.2随机读写 35210.5文件读写的出错检测353习题354第11章常见错误分析355附录370附录A在Visual C++ 6.0环境下运行C程序的方法370附录B常用字符与ASCII代码对照表377附录CC语言中的关键字378附录D运算符和结合性378附录EC语言常用语法提要380附录FC库函数384参考文献390第4章选择结构程序设计854.1选择结构和条件判断854.2用if语句实现选择结构874.2.1用if语句处理选择结构举例874.2.2if语句的一般形式 894.3关系运算符和关系表达式914.3.1关系运算符及其优先次序914.3.2关系表达式924.4逻辑运算符和逻辑表达式924.4.1逻辑运算符及其优先次序934.4.2逻辑表达式944.4.3逻辑型变量964.5条件运算符和条件表达式974.6选择结构的嵌套1004.7用switch语句实现多分支选择结构1024.8选择结构程序综合举例106习题112第5章循环结构程序设计1155.1为什么需要循环控制1155.2用while语句实现循环1165.3用do…while语句实现循环1185.4用for 语句实现循环1215.5循环的嵌套1255.6几种循环的比较1265.7改变循环执行的状态1265.7.1用break语句提前终止循环1275.7.2用continue语句提前结束本次循环1285.7.3break语句和continue语句的区别1295.8循环程序举例132习题141第6章利用数组处理批量数据1436.1怎样定义和引用一维数组1436.1.1怎样定义一维数组1446.1.2怎样引用一维数组元素1456.1.3一维数组的初始化1466.1.4一维数组程序举例1476.2怎样定义和引用二维数组1496.2.1怎样定义二维数组1506.2.2怎样引用二维数组的元素1516.2.3二维数组的初始化1526.2.4二维数组程序举例1536.3字符数组1556.3.1怎样定义字符数组1556.3.2字符数组的初始化1566.3.3怎样引用字符数组中的元素156 6.3.4字符串和字符串结束标志1576.3.5字符数组的输入输出1606.3.6使用字符串处理函数1626.3.7字符数组应用举例166习题169第7章用函数实现模块化程序设计171 7.1为什么要用函数1717.2怎样定义函数1737.2.1为什么要定义函数1737.2.2定义函数的方法1747.3调用函数1757.3.1函数调用的形式1757.3.2函数调用时的数据传递1767.3.3函数调用的过程1787.3.4函数的返回值1797.4对被调用函数的声明和函数原型181 7.5函数的嵌套调用1837.6函数的递归调用1857.7数组作为函数参数1937.7.1数组元素作函数实参1937.7.2数组名作函数参数1957.7.3多维数组名作函数参数1987.8局部变量和全局变量2007.8.1局部变量2007.8.2全局变量2017.9变量的存储方式和生存期2057.9.1动态存储方式与静态存储方式205 7.9.2局部变量的存储类别2067.9.3全局变量的存储类别2097.9.4存储类别小结2137.10关于变量的声明和定义2157.11内部函数和外部函数2167.11.1内部函数2167.11.2外部函数216习题219第8章善于利用指针2218.1指针是什么2218.2指针变量2238.2.1使用指针变量的例子2238.2.2怎样定义指针变量2248.2.3怎样引用指针变量2258.2.4指针变量作为函数参数2278.3通过指针引用数组2328.3.1数组元素的指针2328.3.2在引用数组元素时指针的运算2338.3.3通过指针引用数组元素2348.3.4用数组名作函数参数2398.3.5通过指针引用多维数组2478.4通过指针引用字符串2578.4.1字符串的引用方式 2578.4.2字符指针作函数参数2618.4.3使用字符指针变量和字符数组的比较265 8.5指向函数的指针2688.5.1什么是函数指针2688.5.2用函数指针变量调用函数2688.5.3怎样定义和使用指向函数的指针变量270 8.5.4用指向函数的指针作函数参数2728.6返回指针值的函数2768.7指针数组和多重指针2798.7.1什么是指针数组 2798.7.2指向指针数据的指针2828.7.3指针数组作main函数的形参2848.8动态内存分配与指向它的指针变量2878.8.1什么是内存的动态分配2878.8.2怎样建立内存的动态分配2878.8.3void指针类型 2898.9有关指针的小结290习题293第9章用户自己建立数据类型2959.1定义和使用结构体变量2959.1.1自己建立结构体类型2959.1.2定义结构体类型变量 2979.1.3结构体变量的初始化和引用2999.2使用结构体数组3029.2.1定义结构体数组3029.2.2结构体数组的应用举例3049.3结构体指针3059.3.1指向结构体变量的指针3059.3.2指向结构体数组的指针3069.3.3用结构体变量和结构体变量的指针作函数参数3089.4用指针处理链表3119.4.1什么是链表 3119.4.2建立简单的静态链表3129.4.3建立动态链表3139.4.4输出链表3179.5共用体类型3199.5.1什么是共用体类型3199.5.2引用共用体变量的方式3209.5.3共用体类型数据的特点3219.6使用枚举类型3259.7用typedef声明新类型名328习题332第10章对文件的输入输出33310.1C文件的有关基本知识33310.1.1什么是文件33310.1.2文件名33410.1.3文件的分类33410.1.4文件缓冲区33510.1.5文件类型指针33510.2打开与关闭文件33710.2.1用fopen函数打开数据文件33710.2.2用fclose函数关闭数据文件33910.3顺序读写数据文件34010.3.1怎样向文件读写字符34010.3.2怎样向文件读写一个字符串34310.3.3用格式化的方式读写文件34610.3.4用二进制方式向文件读写一组数据34710.4随机读写数据文件35110.4.1文件位置标记及其定位35110.4.2随机读写 35410.5文件读写的出错检测355习题356第11章常见错误分析374附录390附录A在Visual C++ 6.0环境下运行C程序的方法390 附录CC语言中的关键字398附录D运算符和结合性398附录EC语言常用语法提要400附录FC库函数404参考文献410。

c语言程序设计教程第二版课后习题答案

c语言程序设计教程第二版课后习题答案

c语言程序设计教程第二版课后习题答案【篇一:c语言程序设计教程_李含光_郑关胜_清华大学出版社习题答案习题答案[完美打印版]】1.单项选择题(1)a (2)c(3)d (4)c (5)b 2.填空题(1)函数(2)主函数(main)(3)printf() , scanf()第2章习题参考答案1.单项选择题1-5 cbccc 6-10 cdcdc 11-13 dbb 2.填空题(1)1(2)26 (3)6 , 4 , 2 (4)10 , 6(5)3.000000 (6)双精度(double)(7)9 (8)字母,数字,下划线(9)13.700000 (10)11(11)((m/10)%10)*100+(m/100)*10+m%10(12)0 (13)10 ,9 ,11(15)(x0y0)||(x0z0)||(y0||z0)(16)double (17)x==0(18)sqrt(fabs(a-b))/(3*(a+b))(19)sqrt((x*x+y*y)/(a+b))第3章习题参考答案1.单项选择题1-5 cccdd 6-10 bcdbc11-15 bcbbb16 a 2.填空题(1)用;表示结束(2){ }(3)y=x0?1:x==0?0:-1(4)y%4==0y%100!=0||y%400==0(5)上面未配对(6)default 标号(7)while , do while , for(8)do while(9)本次(10)本层 3.阅读程序,指出结果(1)yes(2)*(3)abother(4)28 70(5)2,0(6)8(7)36 (8)1(9)3,1,-1,3,1,-1(10)a=12 ,y=12(11)i=6,k=4 (12)1,-2 4.程序填空(1)x:y , u:z(2)m=n , m!=0,m=m/10(3)teps , t*n/(2*n+1) , printf(“%lf\n”,2*s) (4)m%5==0 ,printf(“%d\n”,k) (5)cx=getchar() , cx!=front , cx(6)double s=0, 1.0/k , %lf (7)s=0 , sgmin, 5.编程题(1). #include stdio.h int main() {double x,y; scanf(%lf,x); if(x1) y=x;else if(x=1.0x10) y=2*x-11; elsey=3*x-11;printf(%lf\n,y); return 0; } (2).#include stdio.h int main() {double x,y,z,min;scanf(%lf%lf%lf,x,y,z); if(xy) min=y; else min=x; if(minz)min=z;printf(min=%lf\n,min); return 0; } (3).#include stdio.h int main() {int y,m,d,flag,s=0,w,i;scanf(%d%d%d,y,m,d);flag=(y%4==0y%100!=0||y%400==0);w=((y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400)%7;for(i=1;i=m;i++) {switch(i) {case 1:s=d;break; case 2:s=31+d;break; case 3:s=59+d;break; case 4:s=90+d;break; case 5:s=120+d;break; case6:s=151+d;break; case 7:s=181+d;break; case8:s=212+d;break; case 9:s=243+d;break; case10:s=273+d;break; case 11:s=304+d;break; case12:s=334+d;break;} }s=(w+s)%7; if(s==0)printf(星期日\n); elseprintf(星期%d\n,s); return 0; }(4).#include stdio.h int main() {float p,r;scanf(%f,p); if(p=10) r=p*0.1;else if(p10p=20) r=10*0.1+(p-10)*0.075; else if(p20p=40)r=10*0.1+10*0.075+(p-20)*0.05; else if(p40p=60)r=10*0.1+10*0.075+20*0.05+(p-40)*0.03;else if(p60p=100)r=10*0.1+10*0.075+20*0.05+20*0.03+(p-60)*0.015; else if(p100)r=10*0.1+10*0.075+20*0.05+20*0.03+40*0.015+(p-100)*0.01; printf(%f\n,r); return 0; } (5).#include stdio.h int main() {char c;while((c=getchar())!=\n) {if(c=ac=z) c=c-32; putchar(c);}return 0; } (6).#includestdio.h int main() {int m,k=2;printf(输入一个正整数:\n); scanf(%d,m); while(km) if(m%k==0) {printf(%4d,k); m=m/k; } else k++;printf(%4d\n,m); return 0; } (7).#includestdio.h int main() {int a,n,s=0,p=0,i;scanf(%d %d,n,a); for(i=1;i=n;i++) {p=p*10+a; s=s+p; }printf(%d\n,s); return 0; } (8).#includestdio.h int main(){int i,j,k;for(i=1;i=9;i++) for(j=0;j=9;j++) for(k=0;k=9;k++)printf(%5d,100*i+10*j+k); return 0; }(9).#includestdio.h #includemath.h int main() {float a=-10,b=10,x,f1,f2,f; f1=(((2*a-4)*a+3)*a)-6; f2=(((2*b-4)*b+3)*b)-6; do {x=(a+b)/2;f=(((2*x-4)*x+3)*x)-6; if(f*f10) { b=x; f2=f; } else { a=x;f1=f; }}while(fabs(f)=1e-6); printf(%6.2f\n,x); return 0; }(10).#includestdio.h#includemath.h int main() {int n=2;double eps,t,s=0,x;scanf(%lf %lf,x,eps); t=x; s=t;while(fabs(t)=eps) {t=-t*(2*n-3)*x*x/(2*n-2); s=s+t/(2*n); n++; }printf(%d,%lf\n,n,s); return 0; }(11).#includestdio.h int main() {unsigned long s,t=0,p=1; scanf(%u,s); while(s!=0) {if((s%10)%2!=0) {t=t+(s%10)*p; p=p*10; }s=s/10; }printf(%u\n,t); return 0; }第4章习题参考答案1.单项选择题1-5 dddbd 6-10 badcd 11-14 bdab 2.填空题(1)2(2)嵌套,递归(3)全局变量,局部变量,静态变量,动态变量(4)auto , static , register , extern (5)外部变量(6)编译,运行 3.阅读程序,指出结果(1)15(2)5(3)5,4,3 (4)i=5 i=2 i=2 i=4 i=2(5)求水仙花数(6)-5*5*5(7)30 (8)0 10 1 11 2 124.程序填空(1)float fun(float , float) , x+y,x-y, z+y,z-y (2)x , x*x+1 (3)s=0 , a=a+b 5.编程题(1).while(s!=0) #includestdio.h { unsigned int fun(unsigned int);p=p+s%10; int main() s=s/10; { } unsigned int s; return p; scanf(%u,s); } printf(%u\n,fun(s)); (2). return 0;#includestdio.h } #includestdlib.h unsigned int fun(unsignedint s) #includemath.h { void f1(float,float,float,float); unsigned int p=0; void f2(float,float,float,float);【篇二:《c语言程序设计》课后习题答案(第四版)谭浩强】t>1.1什么是计算机程序11.2什么是计算机语言11.3c语言的发展及其特点31.4最简单的c语言程序51.4.1最简单的c语言程序举例61.4.2c语言程序的结构101.5运行c程序的步骤与方法121.6程序设计的任务141-5 #include stdio.hint main ( ){ printf (**************************\n\n);printf( very good!\n\n);printf (**************************\n);return 0;}1-6#include stdio.hint main(){int a,b,c,max;printf(please input a,b,c:\n);scanf(%d,%d,%d,a,b,c);max=a;if (maxb)max=b;if (maxc)max=c;printf(the largest number is %d\n,max);return 0;}第2章算法——程序的灵魂162.1什么是算法162.2简单的算法举例172.3算法的特性212.4怎样表示一个算法222.4.1用自然语言表示算法222.4.2用流程图表示算法222.4.3三种基本结构和改进的流程图262.4.4用n?s流程图表示算法282.4.5用伪代码表示算法312.4.6用计算机语言表示算法322.5结构化程序设计方法34习题36第章最简单的c程序设计——顺序程序设计37 3.1顺序程序设计举例373.2数据的表现形式及其运算393.2.1常量和变量393.2.2数据类型423.2.3整型数据443.2.4字符型数据473.2.5浮点型数据493.2.6怎样确定常量的类型513.2.7运算符和表达式523.3c语句573.3.1c语句的作用和分类573.3.2最基本的语句——赋值语句593.4数据的输入输出653.4.1输入输出举例653.4.2有关数据输入输出的概念673.4.3用printf函数输出数据683.4.4用scanf函数输入数据753.4.5字符数据的输入输出78习题823-1 #include stdio.h#include math.hint main(){float p,r,n;r=0.1;n=10;p=pow(1+r,n);printf(p=%f\n,p);return 0;}3-2-1#include stdio.h#include math.hint 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); // 存活期存款。

C语言程序设计(谭浩强版)第二章

C语言程序设计(谭浩强版)第二章
奇妙的输出结果。并且,处理出错的方法
不应是中断程序的执行,而应是返回一个
表示错误或错误性质的值,以便在更高的
抽象层次上进行处理。
算法设计的原则
4.高效率与低存储量需求
通常,效率指的是算法执行时间; 存储量指的是算法执行过程中所需 的最大存储空间, 两者都与问题的规模有关。
算法设计的原则
算法的时间复杂度
第二章 程序的灵魂——算法
2.1 算法的概念 2.2 算法的简单举例
2.3 算法的特性 2.4 怎样表示一个算法 2.5 结构化程序设计方法
算法的概念
计算机应用: 提取数学模型—设计算法— 编程—测试—应用
程序设计=数据结构+算法
数据结构:对数据的描述 算法:对操作的描述 除此之外程序设计还包括:程序设计方法, 和程序设计语言
怎样表示一个算法
例4的伪代码表示法如下 开始 读入整数n 置sum的初值为0 置k的初值为1 执行下面的操作: 如果k为奇数,置item=1/k 如果k为偶数,置item=-1/k sum=sum+item 直到k>n 打印sum的值 结束
算法设计的原则
算法设计的原则
设计算法时,通常应考虑达到以下目标: 1.正确性 2.可读性 3.健壮性 4.高效率与低存储量需求
从算法中选取一种对于所研究的问题 来说是 基本操作 的原操作,以该基 本操作 在算法中重复执行的次数 作 为算法运行时间的衡量准则。
结构化程序设计方法
采用结构化算法写成的计算机程序是结构 化程序。要编写出结构化程序,经常采用 的方法是结构化程序设计方法。这种方法 的基本思路是: 把给定的问题按层次(纵方向)、分阶段 (横方向)分解为一系列易于编程解决的 小问题,然后对应着这些分解的小问题, 设计结构化的算法,最后采用语言将算法 描述出来。这样一种程序设计方法就是结 构化程序设计方法。

算法---程序的灵魂

算法---程序的灵魂

一个程序除了算法和数据结构这主要要素 外,还应当采用结构化程序设计方法进行 程序设计,并且用某一种计算机语言表示 算法、数据结构、程序设计方法和语言工 具是一个程序设计人员应具备的知识
算法是解决“做什么”和“怎么做”的问 题 程序中的操作语句,是算法的体现 不了解算法就谈不上程序设计
year不能 被4整除 非闰年 闰年
year被100 整除,又能 被400整除
year被4整 除,但不能 被100整除 闰年 逐渐缩小判 断的范围
其他 非闰年
例2.4 求 规律:
1 1 1 1 1 1 2 3 4 99 100
①第1项的分子分母都是1 ② 第2项的分母是2,以后每一项的分母子都是前 一项的分母加1 ③ 笫2项前的运算符为“-”,后一项前面的运算 符都与前一项前的运算符相反
11
例2.2 有50个学生,要求将成绩在80分以上 的学生的学号和成绩输出。
用ni代表第i个学生学号,gi表示第i个学生成绩 S1:1i S2:如果gi≥80, 则输出ni和gi,否则不输出 S3:i+1i S4:如果i≤50,返回到步骤S2,继续执行,否则, 算法结束
例2.3 判定2000—2500年中的每一年是否 闰年,并将结果输出。 闰年的件:
2.1 什么是算法 2.2 简单的算法举例 2.3 算法的特性 2.4 怎样表示一个算法 2.5 结构化程序设计方法
2.1 什么是算法
广义地说,为解决一个问题而采取的方 法和步骤,就称为“算法” 对同一个问题,可以有不同的解题方法 和步骤 为了有效地进行解题,不仅需要保证算 法正确,还要考虑算法的质量,选择合 适的算法
2.2简单的算法举例 若求1×3×5×7×9×11

C语言第1章 程序设计和C语言

C语言第1章 程序设计和C语言

00000101
00000001
00000000
能直接被机器识别和执行的用二进制代码描述的指令称
为机器指令,机器指令的集合称为机器语言。由于它更靠 近机器,也称为低级语言
早期编程语言只有机器语言,由于它难于记忆和掌握, 因此少数人能参与到编程的工作中。
目前我们主要使用高级语言编程,但也必须翻译为机器 语言才能被机器识别和执行整。理课翻件 译工作由编译软件实现。
➢ 不同的部分是本程序的精华处 ➢ 解题思路:
设置3个变量 ➢ a和b用来存放两个整数
printf(”sum is %d\n”,sum); ➢ sum用来存放和数
return 0;
用赋值运算符“=”把结果传
}
送给sum
整理课件
一个C程序概貌
1.每个C程序前面都有一些固定语句,暂且称 为程序头
#include <stdio.h> //预处理命令
来 每个C语言程序应该至少有一个主函数,也就是有一个名 称为main的函数
#include <stdio.h> int main( ) { 主函数类型
printf (”This is a C program.\n”); return 0; }
整理课件
理解3:
C程序的细胞是函数,每个函数都有函数的类型,函数的 名称和函数体,函数体放在一对{ ...函数体...}中间定界起
#include <stdio.h>
int main( )
{ int a,b,sum; a = 123; b = 456;
变量a,b,sum的声明 提供数据
变量为数据 提供在内存 存储的空间
sum = a + b; 数据处理

第二章程序的灵魂——算法

第二章程序的灵魂——算法

S1: 1 i;
S2: 如果gi80,则打印ni和gi,否则不打印。 S3: i+1 i; S4: 如果i50,返回s2,继续执行,否则算法结束。 本例中,变量i作为下标,用它来控制序号(第几个
学生,第几个成绩)。当 i超过50时,表示已对50 个学生的成绩处理完毕,算法结束。
例4
判断2000年---2500年中的每一年是否闰 年,将结果输出。
束。最后得到的p就是5!的值。
例2.求1×3×5×7×9 ×11
• 如果题目改为求1×3×5×7×9 ×11。 上述算法稍作改动: s1: 1 p; s2: 3 i; s3: p ×i p; s4: i+2 i s5: 若i11,返回s3;否则,结束。
求1×3×5×7×9 ×11
可以看出,用这种方法表示的算法 具有通用性、灵活性。S3到s5 组成一个 循环,在实现算法时,要反复多次执行 s3、s4、s5等步骤,直到某一时刻,执 行s5步骤时经过判断,乘数i已超过规定 的数值而不返回s3步骤为止。
•N-S流程图适于结构化程序设计
顺序结构程序设计
•依次顺序执行程序语句 执行a块 执行b块
先执行a操作,再执行b操作
判别选择结构程序设计
满足条件否
满足
不满足
执行a块 执行b块
•当条件成立,执行a操作,当条件不成立,执行b操作。 a,b操作允许空操作,即什么都不做。注意选择结构 是一个整体,代表一个基本结构。
买电视机的步骤:
选好货物 开票 付款
拿发票
取货
回家
考大学上大学的步骤
填报名单 交报名费
拿准考证
参加考试
报到注册
得到录取通知书
2.2、 简单算法举例

C程序设计第四版谭浩强完整版课后习题答案

C程序设计第四版谭浩强完整版课后习题答案

C程序设计(第四版)(谭浩强)第一章课后习题答案#include<>代码均调试成功,若有失误大多不是代码问题.自已找找.int main(){printf("Welcome to \n");return 0; }#include<>int main(){int a,b,sum;a=5;b=4;sum=a+b;printf("The sum is %d .\n",sum);return 0;}P008 调用函数比较两个数的大小.#include<>int main(){int max(int x,int y); int a,b,c;scanf("%d,%d",&a,&b); c=max(a,b); printf("The max is %d .\n",c);return 0;}int max(int x,int y) {int z; if (x>y)z=x;elsez=y;return(z); }P015 三个数的大小.(数字0表示课后练习题)#include<>int main(){int a,b,c,d; int max(int x , int y , int z); printf("Please input 3 numbers :\n");scanf("%d %d %d",&a,&b,&c);d=max(a,b,c); printf("The max is :%d .\n",d); }int max(int x , int y , int z){int m;if (x>y && x>z) m=x;if (y>x && y>z)m=y;if (z>y && z>x)m=z;return (m); }C程序设计(第四版)(谭浩强)第2章课后习题答案算法——程序的灵魂P017 计算机1-5相乘的积.#include<>int main(){int i,s=1; for(i=1;i<6;i++) {s=s*i; n",s);return 0;}#include<> int main(){int i,s=1; for(i=1;i<12;i++) 可以是i=i+2{if(i%2!=0) s=s*i;elsecontinue; }printf("The sum is %d .\n",s);return 0;}暂时没法做.年的概念是地球围绕太阳一周的时间(所谓公转周期)称为一年,这个周期是相当稳定的,很长时间也不会变动1秒,但是真正的一年是天(目前)。

c语言程序设计第2章(谭浩强)

c语言程序设计第2章(谭浩强)

第2章程序的灵魂——算法1. 概念:为解决某一特定问题而采取的具体工作步骤和方法。

2. 举例◆计算1+2+3+……+100的值◆计算1×2×3×……×1000的值◆有50个学生,要求输出他们之中成绩在80分以上的学号和成绩◆判定2000-2500年中的每一年是否闰年3. 算法的表示(1) 自然语言(2) 流程图表示法(3) 伪代码表示法(4) 计算机语言表示法(2) 流程图表示法顺序结构、选择结构和循环结构流程图这三种基本结构有以下共同的特点:1. 只有一个入口;2. 只有一个出口;3. 结构中的每一部分都有被执行到的机会;4. 结构内没有死循环。

用上述基本结构的顺序组合可以表示任何复杂的算法结构,但是基本结构中的流程线使流程图显得较乱,于是1973年美国学者提出了一种新的流程图形式。

在这种流程图中,完全去掉了带箭头的流向线,全部算法写在一个矩形框内。

下面是三种控制结构的N-S图。

例1 求四个数的和算法一:在内存中设一累加用的存储单元S。

第1步:将存储单元S清零。

第2步:输入第1个数a1。

第3步:把a1加到存储单元S中。

第4步:输入第2个数a2。

第5步:把a2加到存储单元S中。

第6步:输入第3个数a3。

第7步:把a3加到存储单元S中。

第8步:输入第4个数a4。

第9步:把a4加到存储单元S中。

第10步:把存储单元S中的结果输出。

算法二:在内存中设一累加用的存储单元S和一计数用的单元I。

第1步:将累加单元S清零。

第2步:将计数单元I清零。

第3步:输入一个数A。

第4步:把A加到累加单元S中。

第5步:计数单元I的值增加1,即I+1=>I。

第6步:若I<4则转去执行第3步,否则,继续执行第7步。

第7步:输出存储单元S中的结果。

开始结束S+A=>S 0=>S 0=>I 输入A I+1=>I I<4输出S 0=>s0=>I输入A S+A=>S I+1=>I 直到I=4输出结果S N-S 图Y例2 求5!开始结束T*i=>t 1=>t 2=>i i+1=>i i>5输出S N例3 将50名学生中成绩在80分以上练习1:交换两个单元的内容。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
13
分支结构
经过条件判断,然后确定下一步操作。 单分支结构举例:
普通流程图例
步骤n-1 条件 N 步骤n+1
2012年02月
对应NS流程图
步骤n-1
Y
步骤n
N
条件
步骤n 步骤n+1
Y
14
分支结构
双分支结构举例:
普通流程图例 步骤n-1 步骤n1 Y 对应NS流程图
步骤n-1
条件
步骤n+1
2012年02月
22
算法NS图第一层
输入年份n
求得n年份是否为闰年的信息r
输出信息r
2012年02月
23
算法细化(算法简单、速度慢)
输入年份n
Y n%4==0 && n%100!=0 n%400==0 r=1 Y N N
r=1
r=0
输出信息r
2012年02月 24
算法改良(算法复杂、速度快)
输入年份n
第02章 算法——程序的灵魂
一个程序应该包含的两方面
对数据的描述 对操作的描述 沃思公式(原始公式): 程序=数据结构+算法 沃思公式(修正后公式):程序=数据结构+算法 +程序设计方法+语言工具和环境
2.1 算法的概念
算法=为解决一个问题而采取的方法和步骤
2012年02月
2
2.2 简单算法举例
2012年02月
4
例:求n!的一种算法
S1:求1*2,得到2; S2:求2*3,得到6; S3:求6*4,得到24; S4:求24*5,得到120; ………… Sn-1:求?*n,得到?? Sn:输出?? 算法似乎结束。 注意:算法中包含了省略号,即算法不确定,当n值不相同时, 算法不同。这样的算法几乎没有实用价值,考试中得分只能 为0。
2.5 用NS图表示上述各题的算法。
本章作业不要求上机验证(无法上机),但要求下次上机时带去,以备老 师检查。
2012年02月 27
例1:求5!。算法如下: S1:求1*2,得到2; S2:求2*3,得到6; S3:求6*4,得到24; S4:求24*5,得到120; S5:输出120。(书上没有这一步,不完整) 算法结束
2012年02月 3
例1:求5!的另一种算法
S1:p=1(符号=为C语言中赋值之意,下同) S2:i=2 S3:p=p*i S4:i=i+1 S5:判断i值若小于等于5,返回S3,否则下一步 S6:输出p的值 算法结束
在一个完整的流程中,第一步没有入口、末尾 一步没有出口,其他步骤都有且仅有入口、 出口各一个。
2012年02月 20
2.5 结构化程序设计方法
自顶向下 逐步细化 模块化设计 结构化编码
2012年02月
21
例 判别是否闰年
题目要求:输入一任意年份,输出该年份是 不是闰年的信息。 已知判别年份是否为闰年的数学方法为:年 份能被4整除且不能被100整除的,是闰年; 年份能被400整除的也是闰年;否则都不是 闰年
2012年02月
17
当型循环
普通流程图例 对应NS流程图 条件
条件 Y 循环体
N
循环体
2012年02月
18
直到型循环
普通流程图例 对应NS流程图
循环体
循环体 条件 Y 条件 (书上说法容易造成误解)
19
N前面Biblioteka 过完全相同的图2012年02月
三种基本结构的共同特点
只有一个入口 只有一个出口 结构内的每一部分都有机会被执行到 结构内不存在死循环
2012年02月 11
算法的(程序的)三种基本结构
顺序结构 分支结构 循环结构 ——大结构内可以包含数个小的结构
2012年02月
12
顺序结构
执行顺序与语句顺序完全相同,无需特地 控制语句的执行顺序
普通流程图例
步骤n-1 步骤n 步骤n+1
2012年02月
对应NS流程图
步骤n-1 步骤n 步骤n+1
S0:输入n的值 S01:判断n的值,若n小于或等于1返回S0,否则下一步 S1:p=1 S2:i=2 S3:p=p*i S4:i=i+1 S5:判断i值若小于或等于n,返回S3,否则下一步 S6:输出p值 算法结束(只能计算2及其以上整数的阶乘)
2012年02月
7
例:求n!的比较完美的算法
S0:输入整数n的值 S01:判断n的值,若n小于0返回S0,否则下一步 S1:p=1 S2:i=1 S3:判断i值若小于或等于n,则p=p*i、i=i+1、返 回S3 ;否则下一步 S4:输出p值 算法结束(可以计算0及所有正整数的阶乘)
2012年02月
8
例2.4 求1-1/2+1/3-……-1/100的 值
符号=1 (此处“=”不是相等之意,而是赋值,下同) 和=1 分母=2 S4: 符号=-符号 项=符号/分母 和=和+项 分母增1 若 分母小于或等于100,返回步骤S4,否则下一步 输出和 ——算法结束
2012年02月
9
2.3 算法的特性
Y n%4!=0 Y r=0 r=1 N n%4==0 && n%100!=0 n%400==0 Y N N
r=1
r=0
输出信息r(1:闰年,0:平年)
本章重点
算法概念 算法特性 算法的三种基本结构 算法的NS流程图表示
2012年02月
26
本章作业
2.4 1. 2. 3. 4. 5. 6. 7. 8. 使用普通流程图表示出下列题目的算法: 有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换。 依次将10个数输入,要求将其中最大的数输出。 有三个数A、B、C,要求按由小到大的顺序将它们输出。 求 1+2+3+…+100。 判断一个数n能否同时被3和5整除。 将100~200之间的素数输出。 求两个数m和n的最大公约数。 求方程ax2+bx+c=0的根。
2012年02月
5
例:求n!的另一种算法
S0:输入n的值 S1:p=1 S2:i=2 S3:p=p*i S4:i=i+1 S5:判断i值若小于或等于n,返回S3,否则下一步 S6:输出p值 算法结束(只能正确计算2及其以上整数的阶乘,当n为其他数值时, 产生错误结果)
2012年02月
6
例:求n!的第三种算法
N
步骤n2
Y
条件
N
步骤
步骤n1 n2
步骤n+1
15
2012年02月
分支结构
分支结构达到循环功能举例(算法质量不 好):
普通流程图例
步骤n-1 条件 N 步骤n+1
2012年02月
对应NS流程图
Y
无。 因为这样的算法是非 结构化的。
16
循环结构
当型循环(当循环):先判别条件,条件满 足时执行循环体,执行完毕回到判别条件; 若条件不满足,则循环结束。 直到型循环:先执行循环体,后判别条件, 条件满足时回到执行执行循环体;若条件不 满足,则循环结束。 (循环体即一步或多步操作)
有穷性(例:不能出现……) 确定性(要求计算机做什么,必须明确) 有0个或多个输入 有1个或多个输出 有效性(例:分母不能为0) ——补充:一个程序,可以有多种正确的算 法,但是质量有高低
2012年02月 10
2.4 怎样表示一个算法
自然语言表示法 流程图表示法 普通流程图(起止框、输入输出框、判断框、 处理框、流程线、连接点、注释框) N-S流程图 流程图的三种基本结构 用伪代码表示算法 用计算机语言表示算法
相关文档
最新文档