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;
}
运行结果:
(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;
}
运行结果:
END