一个30岁半啃老的人记录一下自己的学习记录吧。人生已经过了一半了,却什么都不会,人生没有任何价值和追求,身体也不健康。开始第一天的人生从头再来的努力,希望可以坚持下去。
2021年6月20号。谭浩强第四版c语言程序设计第二章学习记录。
然后,7月4号了。才看完一章,真是太慢了。
有错误的地方请各位大佬一一指正。太感谢了。么么哒。
习题
1.什么是算法?试从日常生活中找到三个例子,描述他们的算法。
key:
对操作的描述。要求计算机进行操作的步骤,也就是算法。广义的说为解决一个问题而彩玉的方法和步骤成为算法。
例子一:从北京到天津开会,1-先买火车票,2-作地铁到北京站,3-登上火车,4-天津站下车,5-转车到会场,6-参加会议。
例子二:买电视机。1-挑选货物,2-给钱,3-抱着电视,4-回家
例子三:考大学。1-准备高考。2-填写诚信考试表。3去考场。4-参加高考。5考试结束。6-填写报名表。7-录取通知书。8-考上大学。
2.什么叫结构化的算法,为什么要提倡结构化的算法?
key:
由基本结构(顺序、选择、循环结构)所构成的算法属于结构化的算法,它不存在无规律的转向,只在本基本结构内才允许存在分支和向前向后的跳转。
由一些顺序、选择、循环等基本结构按照顺序组成,流程的转移至存在一一个基本的范围之内。
结构化算法便于编写,可读性高,修改和维护起来简单,可以减少程序出错的机会,提高了程序的可靠性,保证了程序的质量,因此提倡结构化的算法。
3.试述3种基本结构的特点,请另外设计两种基本结构,要符合基本结构的特点。
三种基本结构为顺序结构、选择结构、循环结构(当while型循环结构和直到until型循环结构)。顺序结构是一种线性、有序的结构,它依次执行各语句模块。选择结构:选择结构是根据条件成立与否选择程序执行的通路。循环结构是重复执行一个或几个模块,直到满足某一条件位置。
设计基本条件结构要满足一下提点:
只有一个入口;只有一个出口;结构内的每一部分都有机会被执行到;结构内不存在死循环。
4.用传统流程图表示求解一下问题的算法。
(1)有两个瓶子A和B,分别盛放醋和酱油,要求将他们互换。即A瓶原来盛酱油,现在放醋。B瓶反之。没有
(2)依次将10个数输入,要求输出其中最大的数
key:
将输入的第一个数赋值给max,依次输入的数都和max进行比较。大于max,将值赋给max,小于max不变。最后输出max。
(3)有三个数a,b,c,要求按大小顺序将他们输出。
(4)求1+2+3+……+100。
(5)判断一个数n能否同时被3和5整除。
(6)将100~200之间的素数输出。
(7)求两个数n和m的最大公约数。
key
辗转相除法
a.如果n大于m,交换m和n
b.循环进行以下操作:
m%n是否为0?是,则最大公约数为m,输出m结束。
否则,m%n结果给r,将n的值给m,将r的值给n,返回n==0判断
用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
订正图画错了,应该是输入m和n,如果n>m,就交换n和m的值。
(8)求方程式ax^2+bx+c=0的根。分别考虑:
有两个不相等的实根和有两个相等的实根。
5.用NS图表示第四题中各题的算法。
key:
鉴于本人从没有用过NS图,并且明确表示在以后的文章里都不会用的,所以,在这里我就不画NS了。如果以后我画了,我就接受自己的打脸。
6.用伪代码表示第四题中各题的算法。
第一题:
begin
a=醋
b=酱油
a=c
a=b
b=c
end
第二题:
begin
int a,b,c
b=0
c=0
while b<=10
{
输入整数 a
if a>c
{
c=a}
b+=1
}
print c
end
第三题:
begin
input a,b,c
if a<b
{
t=a
a=b
b=t
}
if a<c
{
t=a
a=c
c=t
}
if b<c
{
t=b
b=c
c=t
}
print a,b,c
end
第四题
begin
i=1
n=1
sum=0
while(n<=1000)
{
sum=sum+i
}
print sum
end
第五题
begin
input n
if (n%3==0)
{
if(n%5==0)
{
print("n能被3和5整除")
}
else
print("n不能被3和5整除")
}
else
print("n不能被3和5整除")
第六题
begin
t=100
n=2
if(t=100;t++;t<=200)
{
while(n<t)
{
r=t%n
if(r==0)
{
n=t
pirnt("t不是素数")
}
n+=1
}
}
第七题
begin
if (n>m)
{
a=m
m=n
n=a
}
if(n==0)
print("n是最大公约数")
else
{
r=m%n
while(r!=0)
{
m=n
n=r
r=m%n
}
print("n是最大公约数")
}
end
第八题
begin
input a,b,c
n=b*b-4*a*c
m=b*b+4*a*c
if(n>0)
{
print("x1=(-n)/(2a)")
print("x2=(-m)/(2a)")
}
if(n=0)
{
pirnt("x1=x2=(-n)/(2q)")
}
if(n<0)
{
print("没有实数根")
}
end
7.什么叫结构化程序设计?它的主要内容是什么?
key:
结构化的设计:是进行以模块功能和处理过程设计为主的详细设计的基本原则。结构化程序设计思想使程序执行效率提高,是软件发展的一个重要的里程碑。主要内容是把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。它的主要观点是采用自顶向下、逐步求精的程序设计方法;各个模块通过“顺序、选择、循环"的控制结构进行连接,并且只有一个入口,一个出口。
8.用自顶向下、逐步化的方法进行一下算法的设计:
(1)输出1900~2000年中是闰年的年份,符合能被4整除但不能被100整除;或能被100整除且被400整除两个条件之一的年份是闰年。
key:
设计一个1900-2000的循环
能整除4且不能被100整除或或能被100整除且被400整除
输出闰年
(2)求ax^2+bx+c=0的根。分别考虑d=b^2-4ac=大于零、等于零和小于零这3种情况。
key:
输入a,b,c的值
求d=b*b-4*a*c,n=b*b+4*a*c
如果,d>0,则有两个实根,x1=(-d)/(2a),x2=(-n)/(2a)
如果,d=0,则有一个实根,x=(-n)/(2a)
如果,d<0,则没有实根
(3)输入10个数,输出其中最大的一个数。
key:
max=第一个数
每输入一个数都与max相比,大了则赋值给max
输出max