C语言程序设计(第四版)课后习题答案 第2章

1.什么是算法?

答:解决一个问题而采取的方法和步骤。

2.什么叫结构化的算法?为什么要提倡结构化算法?

答:

3.试述3种基本结构的特点,请另外设计两种基本结构(要符合节本结构的特点)。

答:3种结构的共同特点:
(1)只有一个入口。
(2)只有一个出口。
(3)结构内每一部分都有机会被执行。
(4)结构内不存在“死循环”(无终止的循环)。
设计两种结构如下:

4.用传统流程图表示求解一下问题的算法。

>(1)有两个瓶子A和B,分别盛放醋和酱油,要求将它们互换(即A瓶原来盛醋,现改盛酱油,B瓶则相反)。
(2)依次将10个数输入,要求输出期中最大的数。
(3)有3个数a,b,c,要求按大小顺序把他们输出。
(4)求1+2+3+…+100。
(5)判断一个数n能否同时别3和5整除。
(6)将100~200之间的素数输出。
(7)求两个数m和n的最大公约数。
(8)求方程ax2+bx+c=0的根,分别考虑:有两个不等实根,有两个相等实根。

答:略

5.用N-S图表示第4题中各题算法。

答:略

6.用伪代码表示第4题中各题算法。

答:略

7.什么叫结构化程序设计?它的主要内容是什么?

答:把一个复杂问题的求解过程分阶段进行,每一个阶段处理的问题都控制人们容易理解和处理的范围内。
结构化程序设计的方式:
(1)自顶向下
(2)逐步细化
(3)模块化设计
(4)结构化编码

8.用自顶向下、逐步细化的方法进行一下算法的设计:

(1)输出1900~2000年中是闰年的年份,符合下面两个条件之一的年份是闰年:能被4整除但不能被100整除;能被100整除且能被400整除。
Python代码:

#判断year是否为闰年
def Judge_leapYear(year):
	if (year % 4)==0:
		if (year % 100)==0:
			if (year % 400)==0:
				return True	#能被100整除且能被400整除,是闰年
			else:
				return False#能被4整除且能被100整除,不能被400整除,非闰年
		else:
			return True		#能被4整除且不能被100整除,是闰年
	else:
		return False		#不能被4整除,非闰年

if __name__=='__main__':
	list_leapYear=[]
	list_nonleapYear=[]
	for year in range(1900,2001):
		if Judge_leapYear(year)==True:
			list_leapYear.append(year)
		else:
			list_nonleapYear.append(year)
	print("1900~2000年中是平/闰年的年份:")
	print("闰年年份有:%s" % list_leapYear)
	print("平年年份有:%s" % list_nonleapYear)

运行结果:

1900~2000年中是平/闰年的年份:
闰年年份有:[1904, 1908, 1912, 1916, 1920, 1924, 1928, 1932, 1936, 1940, 1944, 1948, 1952, 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1988, 1992, 1996, 2000]
平年年份有:[1900, 1901, 1902, 1903, 1905, 1906, 1907, 1909, 1910, 1911, 1913, 1914, 1915, 1917, 1918, 1919, 1921, 1922, 1923, 1925, 1926, 1927, 1929, 1930, 1931, 1933, 1934, 1935, 1937, 1938, 1939, 1941, 1942, 1943, 1945, 1946, 1947, 1949, 1950, 1951, 1953, 1954, 1955, 1957, 1958, 1959, 1961, 1962, 1963, 1965, 1966, 1967, 1969, 1970, 1971, 1973, 1974, 1975, 1977, 1978, 1979, 1981, 1982, 1983, 1985, 1986, 1987, 1989, 1990, 1991, 1993, 1994, 1995, 1997, 1998, 1999]

C语言代码:

#include <stdio.h>

int Judge_leapYear(int year)
{
	if(year%4==0)
		if(year%100==0)
			if(year%400==0)
				return 1;	//能被100整除且能被400整除。闰年
			else
				return 0;	//能被4整除但能被100整除。平年
		else
			return 1;		//能被4整除但不能被100整除。闰年
	else
		return 0;			//不能被4整除。平年
}

int main()
{
	int year;
	printf("请输入一个年份:");
	scanf("%d",&year);
	if(Judge_leapYear(year)==1)
		printf("%d年是闰年\n",year);
	else
		printf("%d年是平年\n",year);
	return 0;
}

运行结果:

python语言程序设计刘卫国pdf_整除


(2)求ax2+bx+c=0的根。分别考虑d=b2-4ac大于0、等于0和小于0这3中情况。

(3)输入10个数,输出期中最大的一个数。
代码:

#返回一组数据中的最大值
def max_number(array):
	max=array[0]
	for num in array:
		if num>max:
			max,num=num,max  #将大值赋值max
	return max

if __name__=='__main__':
	num=[45,6,3,21,52,48,99,62,88,100]   #准备10个测试数据
	print("%s中的最大值为:%d" % (num,max_number(num)))

运行结果:

[45, 6, 3, 21, 52, 48, 99, 62, 88, 100]中的最大值为:100

C语言代码:

#include <stdio.h>

float max_number(int num,float array[])
{
	int i;
	float max;
	max=array[0];
	for(i=1;i<num;i++)
		if(array[i] > max)
			max=array[i];
	return max;

}

int main()
{
	int i,num=10;
	float arr[]={12,45,65,23,58,6,94,51,62,78};

	for(i=0;i<num;i++)
		printf("%.2f ",arr[i]);
	printf("\n");
	printf("最大值为:%.2f\n",max_number(num,arr));
	return 0;
}

运行结果:

python语言程序设计刘卫国pdf_整除_02

END