资源描述
一、第七章习题7(p184p187),7、17、7全做,7、87、12中选做两道,要求给出程序执行结果。
71、
#include <stdio、h>
int Square(int i)
{
return i*i;
}
int main
{
int i=0;
i=Square(i);
for(; i<3;i++)
{
static int i=1;
i+=Square(i);
printf("%d,",i);
}
printf("%d\n",i);
return 0;
}
结果:
结果分析:
开头定义square函数
功能:计算一个数得平方
入口参数:整数x
返回值:i*i
主函数:i=0;进入循环:
静态变量i=1;
i=i+square(1)=2;
输出 2;
循环变量i=0+1=1;
i=1<3 成立
静态变量i=i+square(2)=2+4=6;
输出 6;
循环变量i=i+1=2;
I=2<3 成立
静态变量(i保持原值)i=6;
i=i+square(6)=6+36=42;
输出42;
循环变量i=i+1=3;
I=3<3不成立退出循环
输出循环变量i=3
72、
#include <stdio、h>
int hour,minute,second; /*定义全局变量*/
void update
{
second ++;
if(second == 60)
{
second=0;
minute++;
}
if(minute==60)
{
minute=0;
hour++;
}
if(hour==24)
hour=0;
}
void display
{
printf("%d : %d : %d\n",hour,minute,second);
}
void delay
{
int t;
for (t=0;t<100000000;t++); /*用循环体为空语句得循环实现延时*/
}
int main
{
int i;
second=0;
for(i=0;i<1000000;i++)
{
update; /*利用循环控制时钟运行时间*/
display; /*显示时,分,秒*/
delay; /*模一尺时间为1秒*/
}
return 0;
}
结果:
自动跳出时间
73、
#include <stdio、h>
/*max函数
功能:找两个数得最大值
入口参数:两个整数a,b
返回值:两数得最大值
*/
int max(int a, int b)
{
int max=0;
max = (a>b)?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 %d\n",m);
}
结果:
74
#include <stdio、h>
/*LCM函数
功能:计算两个整数得最小公倍数
入口参数:两整数a,b
返回值:最小公倍数
*/
int LCM(int a,int b)
{
int i=0; /*循环变量*/
int min=0; /*循环寻找范围得最小值*/
int max=0; /*循环寻找范围得最大值*/
min = (a>b)?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,&y);
}while(x<0 || y<0);
m = LCM(x,y);
printf("最小公倍数为:%d\n",m);
}
结果:
75、
#include <stdio、h>
long fact(int n);
void main
{
int i=0; /*循环变量*/
int n=0; /*输入得值*/
int m=0; /*接收fact函数得返回值*/
do{
printf("input n:");
scanf("%d",&n);
}while(n<0);
for(i=1; i<=n; i++)
{
m=fact(i);
printf("%d!=%ld\n",i,m);
}
}
/*fact函数
功能:计算n!
入口参数:n
返回值:n!
*/
long fact(int n)
{
static long p=1;
p=p*n;
return p;
}
结果:
76、
#include <stdio、h>
long fact(int n);
void main
{
int i=0; /*循环变量*/
int n=0; /*输入得值*/
int m=0; /*接收fact函数得返回值*/
long s=0; /*所求最终结果*/
do{
printf("input n:");
scanf("%d",&n);
}while(n<0);
for(i=1; i<=n; i++)
{
m=fact(i);
s=s+m;
}
printf("1!+2!+、、、+n! = %ld\n",s);
}
/*fact函数
功能:计算n!
入口参数:n
返回值:n!
*/
long fact(int n)
{
static long p=1;
p=p*n;
return p;
}
结果:
77、
(1)穷举法:
#include <stdio、h>
int Gcd(int a,int b);
void main
{
int x=0; /*键盘键入两个数*/
int y=0;
int m=0; /*接收Gcd得返回值*/
do{
printf("输入两个正数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
m = Gcd(x,y);
printf("最大公约数:%d\n",m);
}
/*Gcd函数
功能:计算两数得最大公约数
入口参数:两个正数a,b
返回值:最大公约数
*/
int Gcd(int a,int b)
{
int i=0;
int t=0;
t=(a<b)?a:b; /*t为a,b中得较小者*/
for(i=t; i>=1; i)
{
if(a%i==0 && b%i==0)
return i;
}
}
结果:
(2)欧几里得算法
#include <stdio、h>
int Gcd(int a,int b);
void main
{
int x=0; /*键盘键入两个数*/
int y=0;
int m=0; /*接收Gcd得返回值*/
do{
printf("输入两个正数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
m = Gcd(x,y);
printf("最大公约数:%d\n",m);
}
/*Gcd函数
功能:计算两数得最大公约数
入口参数:两个正数a,b
返回值:最大公约数
*/
int Gcd(int a,int b)
{
int r=0;
r=a%b;
if(r!=0)
{
do{
a=b;
b=r;
r=a%b;
}while(r!=0);
}
return b;
}
结果:
(3)递归方法:
#include <stdio、h>
int Gcd(int a,int b);
void main
{
int x=0; /*键盘键入两个数*/
int y=0;
int m=0; /*接收Gcd得返回值*/
do{
printf("输入两个正数:");
scanf("%d,%d",&x,&y);
}while(x<0 || y<0);
m = Gcd(x,y);
printf("最大公约数:%d\n",m);
}
/*Gcd函数
功能:计算两数得最大公约数
入口参数:两个正数a,b
返回值:最大公约数
*/
int Gcd(int a,int b)
{
if (a==b) /*递归出口*/
return a;
else
{
if(a>b)
return Gcd(ab,b);
else
return Gcd(b,ba);
}
}
结果:
79、
#include <stdio、h>
/*old函数
功能:计算第i个人得年龄
入口参数:人数i
返回值:年龄
*/
int old(int i)
{
if(i==1)
return 10;
else
return old(i1)+2;
}
void main
{
int x=5; /*人数为5*/
int y=0; /*接收old函数得返回值*/
y=old(x);
printf("第五个人得年龄为:%d\n",y);
}
结果:
710、
#include <stdio、h>
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 q=0; /*代表cab*/
int r=0; /*代表cba*/
int i=0; /*从100~999中找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) /*未找到说明计算错误*/
{printf("您算错了!");}
else
{printf("您想得数就是 %d %d %d \n",a,b,c);}
}
结果:
二、收集资料并整理,叙述结构化程序设计得基本思想;根据自己得编程,说说您对结构化程序设计得理解。
模块化程序设计:
1、定义:将系统划分为若干个子系统,任务划分为若干个子任务,本质思想就就是实现不同层次得数据或过程得抽象过程。
2、模块分解得基本原则
(1)、保证模块得相对独立性——高聚合、低耦合。
高聚合:模块内部得联系越紧密越好,就就是使模块得功能要相对独立与单一。
低耦合:模块之间得联系越松越好,就就是使模块之间得接口越简单越好。
(2)、模块得实现细节对外不可见——信息隐藏。
外部:关心做什么;内部:关心怎么做。
实质:把不需要调用者知道得信息都封装在模块内部,就是模块得实现细节对外不可见。
3、设计好模块接口
(1)、接口指罗列出一个模块得所有得与外部打交道得变量等
(2)、定义好后不要轻易改动。
(3)、在模块开头(文件得开头)进行函数声明。
4、结构化程序设计思想:
(1)、逐步求精:将一个完整得、较复杂得问题分解成若干个相对独立得、较为简单得子问题,若这些子问题还较为复杂可再分解它们,直到能够容易得用某种高级语言表达为止。
(2)、自底向上:先编写出基础程序段,然后再扩大、扩充与升级。
(3)、自顶向下:先写出结构简单得、清晰得主程序来表达整个问题;在此问题中包含得复杂子问题用子程序来实现;直到每个细节都可用高级语言表达为止。
总结:逐步求精技术就是一种由不断得自底向上修正得所补充得自顶向下得程序设计方法。 其特点:
<1>、程序结构清晰、容易阅读、容易修改
<2>、可简化程序得正确性验证,可减少程序调试得时间与复杂度。
5、用逐步求精实现技术求解问题得步骤为:
<1>、对实际问题进行全局性分析、决策,确定数学模型。
<2>、确定程序得总体结构,将整个问题分解成若干个相对独立得子问题。
<3>、确定子问题得具体功能及其相互关系。
<4>、在抽象得基础上,将整个问题逐一精细化,直到能用确定得高级语言描述为止。
我对结构化程序设计得理解:
1、由于将复杂程序分解,对每个子程序得检查可局限于内部,结构化设计可减少错误得发生,易寻找错误。
2、可精简程序设计得复杂程度,对一个特定得功能只需局限于一个相对独立得子程序得设计。
3、结构化程序设计也就是模块化程序设计得一种,增强可读性。
4、结构化设计要注意参数之间得传递,实际就是以参数得传递为纽带。
三、收集资料,简要叙述C语言编码中应注意得基本编码规范。
1、代码行:
(1)、一行内只写一条语句,一行代码只定义一个变量。容易阅读并且便于程序测试与写注释。
(2)、在定义变量时同时初始化该变量。可避免初始化被遗忘,或者引用未初始化得变量。
2、对齐与缩进:
(1)、程序得分界符{与}一般独占一行,且位于同一列,同时与应用她们得语句左对齐,这样便于查瞧{与}得配对情况
(2)、采用梯形层次对应好个层次,同层次得代码在同层次得缩进层上,即位于同一层{与}之内得代码在{右边数格出左对齐。
(3)、一般用设置为4个空格得Tab键缩进。
3、空行及代码行内得空格
(1)、在每个函数定义结束后加一空行,能起到就是程序布局美观、整洁与清晰得作用。
(2)、在一个函数体内,相邻得两组逻辑上紧密相关得语句块之间加空行。
(3)、关键字后加空格,用于突出关键字。列如:int 、float等后面至少加一个空格,if、for、while等后面加一个空格
(4)、函数名后面不加空格,一般与关键字区分开
(5)、赋值、算术、关系、逻辑等运算符得前后各加一个空格,但一元运算符前后不加。
(6)、对表达式较长得for、if语句,为了紧凑,可在适当得地方去掉一些空格。
(7)、左圆括号向后紧跟,右圆括号、逗号、分号向前进跟,紧跟处不留空格。
(8)、函数参数得逗号分隔符与for中得分号后面加一个空格,可增加单行得清晰度。
4、长行拆分
如果代码行太长,则要在适当得位置进行拆分,拆分出得新行要进行适当得缩进,使排版整齐。
5、程序注释:
(1)、在重要得程序文件得首部,对程序得功能、编程者、编程日期以及其她相关信息(如:版本号)加以注释说明
(2)、在用户自定义函数得前面,对函数接口加以说明
(3)、在一些重要得语句行得右方,如在定义一些非通用得变量、函数调用、较长得多重嵌套得语句块结束处加以说明。
(4)、在一些重要得语句块得上方,尤其就是在语义转折处,对代码得功能、原理进行解释。
成绩
批阅教师
批阅日期
展开阅读全文