《c语言第七章课后题.doc》由会员分享,可在线阅读,更多相关《c语言第七章课后题.doc(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、一、第七章习题7(p184-p187),7.1-7.7全做,7.8-7.12中选做两道,要求给出程序执行结果。7-1、#include int Square(int i)return i*i;int main()int i=0;i=Square(i);for(; i3;i+)static int i=1;i+=Square(i);printf(%d,i);printf(%dn,i);return 0;结果:结果分析:开头定义square()函数 功能:计算一个数的平方 入口参数:整数x 返回值:i*i主函数:i=0;进入循环: 静态变量i=1; i=i+square(1)=2; 输出 2; 循
2、环变量i=0+1=1; i=13 成立 静态变量i=i+square(2)=2+4=6; 输出 6; 循环变量i=i+1=2; I=23 成立 静态变量(i保持原值)i=6; i=i+square(6)=6+36=42; 输出42; 循环变量i=i+1=3; I=33不成立退出循环 输出循环变量i=37-2、#include int hour,minute,second; /*定义全局变量*/void update()second +;if(second = 60)second=0;minute+;if(minute=60)minute=0;hour+;if(hour=24)hour=0;vo
3、id display()printf(%d : %d : %dn,hour,minute,second);void delay()int t;for (t=0;t100000000;t+); /*用循环体为空语句的循环实现延时*/int main()int i;second=0;for(i=0;i1000000;i+)update(); /*利用循环控制时钟运行时间*/display(); /*显示时,分,秒*/delay(); /*模一尺时间为1秒*/return 0;结果:自动跳出时间7-3、#include /*max()函数 功能:找两个数的最大值 入口参数:两个整数a,b 返回值:两
4、数的最大值*/int max(int a, int b)int max=0;max = (ab)?a:b;return max;void main()int x=0; /*输入的两个数x,y*/int y=0;int m=0; /*m用于接收max()函数的返回值*/printf(input two integer numbers:);scanf(%d,%d,&x,&y);m=max(x,y);printf(the max number is %dn,m);结果:7-4#include /*LCM()函数 功能:计算两个整数的最小公倍数 入口参数:两整数a,b 返回值:最小公倍数*/int L
5、CM(int a,int b)int i=0; /*循环变量*/int min=0; /*循环寻找范围的最小值*/int max=0; /*循环寻找范围的最大值*/min = (ab)?a:b; /*最小值为a,b中的最大值*/max = a*b; /*最大值为a*b*/for (i=min; i=max; i+) if(i%a=0 & i%b=0)return i;void main()int x; /*键盘输入两整数x,y*/int y; int m; /*m用于接收LCM()函数的返回值*/do /*输入整数的合法数据*/printf(输入两个正整数:);scanf(%d,%d,&x,&
6、y);while(x0 | y0);m = LCM(x,y);printf(最小公倍数为:%dn,m);结果:7-5、#include long fact(int n);void main()int i=0; /*循环变量*/int n=0; /*输入的值*/int m=0; /*接收fact()函数的返回值*/doprintf(input n:);scanf(%d,&n);while(n0);for(i=1; i=n; i+)m=fact(i);printf(%d!=%ldn,i,m);/*fact函数 功能:计算n! 入口参数:n 返回值:n!*/long fact(int n)stati
7、c long p=1;p=p*n;return p;结果:7-6、#include long fact(int n);void main()int i=0; /*循环变量*/int n=0; /*输入的值*/int m=0; /*接收fact()函数的返回值*/long s=0; /*所求最终结果*/doprintf(input n:);scanf(%d,&n);while(n0);for(i=1; i=n; i+)m=fact(i);s=s+m;printf(1!+2!+.+n! = %ldn,s);/*fact函数 功能:计算n! 入口参数:n 返回值:n!*/long fact(int
8、n)static long p=1;p=p*n;return p;结果:7-7、(1)穷举法:#include int Gcd(int a,int b);void main()int x=0; /*键盘键入两个数*/int y=0;int m=0; /*接收Gcd的返回值*/doprintf(输入两个正数:);scanf(%d,%d,&x,&y);while(x0 | y0);m = Gcd(x,y);printf(最大公约数:%dn,m);/*Gcd()函数 功能:计算两数的最大公约数 入口参数:两个正数a,b 返回值:最大公约数*/int Gcd(int a,int b)int i=0;i
9、nt t=0;t=(a=1; i-)if(a%i=0 & b%i=0)return i;结果:(2)欧几里得算法#include int Gcd(int a,int b);void main()int x=0; /*键盘键入两个数*/int y=0;int m=0; /*接收Gcd的返回值*/doprintf(输入两个正数:);scanf(%d,%d,&x,&y);while(x0 | y0);m = Gcd(x,y);printf(最大公约数:%dn,m);/*Gcd()函数 功能:计算两数的最大公约数 入口参数:两个正数a,b 返回值:最大公约数*/int Gcd(int a,int b)
10、int r=0;r=a%b;if(r!=0)doa=b;b=r;r=a%b;while(r!=0);return b;结果:(3)递归方法:#include int Gcd(int a,int b);void main()int x=0; /*键盘键入两个数*/int y=0;int m=0; /*接收Gcd的返回值*/doprintf(输入两个正数:);scanf(%d,%d,&x,&y);while(x0 | yb) return Gcd(a-b,b);elsereturn Gcd(b,b-a);结果:7-9、#include /*old()函数 功能:计算第i个人的年龄 入口参数:人数i
11、 返回值:年龄*/int old(int i)if(i=1)return 10;elsereturn old(i-1)+2;void main()int x=5; /*人数为5*/int y=0; /*接收old()函数的返回值*/y=old(x);printf(第五个人的年龄为:%dn,y);结果:7-10、#include void main()int flag=0; /*设置标志变量*/int a=0; /*百位*/int b=0; /*十位*/int c=0; /*个位*/int m=0; /*代表acb*/int n=0; /*代表bac*/int p=0; /*代表bca*/int
12、 q=0; /*代表cab*/int r=0; /*代表cba*/int i=0; /*从100999中找abc*/int sum=0; /*观众计算得结果*/printf(说出你的计算结果:);scanf(%d,&sum);for(i=100;i=999;i+)a=i/100;b=i/10%10;c=i%10;m=a*100+c*10+b;n=b*100+a*10+c;p=b*100+c*10+a;q=c*100+a*10+b;r=c*100+b*10+a;if (m+n+p+q+r)=sum)flag=1; /*一旦找到就退出循环*/break;if(flag=0) /*未找到说明计算错误
13、*/printf(你算错了!);elseprintf(你想的数是 %d %d %d n,a,b,c);结果:二、收集资料并整理,叙述结构化程序设计的基本思想;根据自己的编程,说说你对结构化程序设计的理解。模块化程序设计:1、定义:将系统划分为若干个子系统,任务划分为若干个子任务,本质思想就是实现不同层次的数据或过程的抽象过程。2、模块分解的基本原则(1)、保证模块的相对独立性高聚合、低耦合。 高聚合:模块内部的联系越紧密越好,就是使模块的功能要相对独立和单一。 低耦合:模块之间的联系越松越好,就是使模块之间的接口越简单越好。(2)、模块的实现细节对外不可见信息隐藏。外部:关心做什么;内部:关心
14、怎么做。实质:把不需要调用者知道的信息都封装在模块内部,是模块的实现细节对外不可见。3、设计好模块接口(1)、接口指罗列出一个模块的所有的与外部打交道的变量等 (2)、定义好后不要轻易改动。(3)、在模块开头(文件的开头)进行函数声明。4、结构化程序设计思想:(1)、逐步求精:将一个完整的、较复杂的问题分解成若干个相对独立的、较为简单的子问题,若这些子问题还较为复杂可再分解它们,直到能够容易的用某种高级语言表达为止。(2)、自底向上:先编写出基础程序段,然后再扩大、扩充和升级。(3)、自顶向下:先写出结构简单的、清晰的主程序来表达整个问题;在此问题中包含的复杂子问题用子程序来实现;直到每个细节
15、都可用高级语言表达为止。总结:逐步求精技术-是一种由不断的自底向上修正的所补充的自顶向下的程序设计方法。 其特点: 、程序结构清晰、容易阅读、容易修改 、可简化程序的正确性验证,可减少程序调试的时间和复杂度。5、用逐步求精实现技术求解问题的步骤为: 、对实际问题进行全局性分析、决策,确定数学模型。 、确定程序的总体结构,将整个问题分解成若干个相对独立的子问题。 、确定子问题的具体功能及其相互关系。 、在抽象的基础上,将整个问题逐一精细化,直到能用确定的高级语言描述为止。我对结构化程序设计的理解:1、由于将复杂程序分解,对每个子程序的检查可局限于内部,结构化设计可减少错误的发生,易寻找错误。2、
16、可精简程序设计的复杂程度,对一个特定的功能只需局限于一个相对独立的子程序的设计。3、结构化程序设计也是模块化程序设计的一种,增强可读性。4、结构化设计要注意参数之间的传递,实际是以参数的传递为纽带。三、收集资料,简要叙述C语言编码中应注意的基本编码规范。1、代码行: (1)、一行内只写一条语句,一行代码只定义一个变量。容易阅读并且便于程序测试和写注释。 (2)、在定义变量时同时初始化该变量。可避免初始化被遗忘,或者引用未初始化的变量。2、对齐与缩进: (1)、程序的分界符和一般独占一行,且位于同一列,同时与应用他们的语句左对齐,这样便于查看和的配对情况 (2)、采用梯形层次对应好个层次,同层次
17、的代码在同层次的缩进层上,即位于同一层和之内的代码在右边数格出左对齐。(3)、一般用设置为4个空格的Tab键缩进。3、空行及代码行内的空格 (1)、在每个函数定义结束后加一空行,能起到是程序布局美观、整洁和清晰的作用。 (2)、在一个函数体内,相邻的两组逻辑上紧密相关的语句块之间加空行。 (3)、关键字后加空格,用于突出关键字。列如:int 、float等后面至少加一个空格,if、for、while等后面加一个空格 (4)、函数名后面不加空格,一般与关键字区分开 (5)、赋值、算术、关系、逻辑等运算符的前后各加一个空格,但一元运算符前后不加。 (6)、对表达式较长的for、if语句,为了紧凑,
18、可在适当的地方去掉一些空格。 (7)、左圆括号向后紧跟,右圆括号、逗号、分号向前进跟,紧跟处不留空格。 (8)、函数参数的逗号分隔符和for中的分号后面加一个空格,可增加单行的清晰度。4、长行拆分如果代码行太长,则要在适当的位置进行拆分,拆分出的新行要进行适当的缩进,使排版整齐。5、程序注释: (1)、在重要的程序文件的首部,对程序的功能、编程者、编程日期以及其他相关信息(如:版本号)加以注释说明 (2)、在用户自定义函数的前面,对函数接口加以说明(3)、在一些重要的语句行的右方,如在定义一些非通用的变量、函数调用、较长的多重嵌套的语句块结束处加以说明。(4)、在一些重要的语句块的上方,尤其是
19、在语义转折处,对代码的功能、原理进行解释。成绩批阅教师批阅日期16 日教成释行原、代对义在尤的语重些明以处句语多长调、变通义在右行要一说以数对的义户在 说注)版如关他期编、能的对的序要、释序齐版排进适行新拆行置适则太拆行长度清行可空个后中 符号参、格格处跟向分号圆跟紧圆)格些去的在凑为句 较达、加后符一但一后符等辑、值)分分关,加面函 空一面 格空少后 、 如列关于空字、 行加之句相紧逻邻体函在用的清、观序到能一结数函、空空码行进缩 格为设一齐左出代之同于上的层代层,好次层、(情对和查于齐句们应同列位行占符的程 进与量变初引者遗始避量化时量义)释注测程并易。变定代句一内一)行码代范码本意码语述
20、简集带为传以际,之意计设性可,种计块是设构计的程独相限需的特对度复程简误找易的误计化部于可序个对序复解解设化止述描的用直,逐问,础抽 题子独个若分整构总的定型学定决、性进实、 为骤问求技步逐度复时试少,验正化可 修容读容清程 点其 法设的自充正修的不一-技步止达语用节每;实子题复包中;个达程晰的简出先顶级和充再后序出编向、止达表级用够直它再复较问若题单较的独干解题复的个精逐想思程化明声行开文开在、动动要义、 道打外的块列口、接好见不节实块,模封信道者不做做:;做关藏息可对现的、好单简接模就越系间块耦 一一立能的是好越越部:聚 合耦、高独的模保原本的程过的据次不实思本子若分,系若为统计序解的序化
21、你,编己;本设程结叙整集果;, 的 ;错你 *明找* )= *循出到/ =+ ( 0 0 0 = + 0 +*0 +*0 =0 0 /00=+ 0 () ,%():算你说 *得观;0 * 找 0从 0 * 表 ;= *代/ =* 表 = * 代/;= * 代 0 *位 0 *十* =*百/0 *变置/ = ( 0果),%年人第 ) *回数) * 0 * ; ( + 0 ( *年:数:参年人第计函 . *出归 )( ( *约公:, 正数约大数算函 ),%约最 ) )0| ( )&, % ):正输( *回 *; 0=*个键盘 0 ( ) , ( 法方果 ) = 0= %0 , *约公:,数两数约大
22、数两函函) :约 ),( )|0( )& % )正输 *回 收/; 0=*数键* ; ( ) , 算得果 0=%&=% -; *小中 * ;?0 0 , *约公值, 个数约公的算函函) %约最 ),( ) 0 ) , ):个入 *回 收接 = 0=*键* ; ( ) . 法举 果 ( * 值:参 计函 )% !. ! )( + ()( )& ) *求/; *回数( 收 0 *的输/= * = ( ) ( 果 * = ( * :数口 算函 )=% )( =+ )0 ) ) ( *回数( 收 ; *入 = *量循/= ( ) 果) :数小 ), )0|0( ; )整两 *数法入* *回数( 于*
23、*, 入* ( 0= &=% +; ; * * ;* *大的,为/ ? *值围找循 0 *小的找环/0 *循 0 , *倍倍值,整口倍公的个计函 -果) ) )& ,% ): *回数) 接 /; 0=*,个入/ = ( : (=0 *大的:值,数个数口大最个:函 . 时时跳果0 * 时模 *秒,* ; *钟制环* ) +000=00 ( *环句语环/;+ 00 ;( ( ) , :% ( 0 = (+ 0 00= + 00 00= (+ ( *变全/ , . =量循循出立 量循 )( 原持量 成成 =变循 出 =( =变 成 =0量循 =变 环环;=*:返数整数平数算:函) 析果0 ) ( ),% ) + + )( 0 ( ( 果行序给,两 - 全 题习