C程序设计内容与例题讲解 -- 第二章(第五版)谭浩强

目录

目录

2.1程序 = 算法 + 数据结构

2.2什么是算法

2.3简单的算法举例

例题1.判定2000-2500年中的每一年是否为润年,并将其结果输出。

例题2.求1 - 1/2 + 1/3 - 1/4+ ....+ 1/99 - 1/100

例题3:给出一个大于或者等于3的正整数,判断他是不是素数。

2.4算法的特性

2.5三种基本结构

1.顺序结构

2.选择结构

3.循环结构 

2.6习题讲解

例题1.依次将十个数输入,要求输出其中的最大值

例题2.求1+2+3+...+100

例题3.判断一个数n能否同时被3和5整除。

例题4.求俩个数m和n的最大公约数

2.1程序 = 算法 + 数据结构

一个程序包括以下俩方面信息:

1.对数据的描述。在程序中要值定用到哪些数据,以及这些数据的类型和数据的组织形式。这就是数据结构。

2.对操作的描述。要求计算机进行的步骤,也就是算法。

2.2什么是算法

计算机算法可分为两大类别:数值运算算法和非数值运算算法。

数值运算算法:目的就是求数值的解,例如求方程的根、求一个函数的定积分等,都属于数值运算的范围。

非数值运算:涉及的面十分广泛,最常见的就是用于事务管理领域,例如对一批职工按姓名排序、图书检索、人事管理和行车调度等管理。

2.3简单的算法举例

例题1.判定2000-2500年中的每一年是否为润年,并将其结果输出。

首先分析润年的条件:

1.能被4整除,但不能被100整除的年份都是润年,如1996年、2008年、2012年等等;

2.能被400整除的年份是润年。例如1600年,2000年是润年。

不符合这俩条件的年份不是润年。例如2009年、2100年不是润年。

int main()
{
	int year = 0;
	for (year = 2000; year <= 2500; year++)
	{
		if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))//写出判断的条件
		{
			printf("year = %d ", year);
		}
	}
	return 0;
}

运行结果:

C程序设计内容与例题讲解 -- 第二章(第五版)谭浩强_第1张图片

例题2.求1 - 1/2 + 1/3 - 1/4+ ....+ 1/99 - 1/100

首先分析,此运算可以分为两部分,一部分为正数即: 1 + 1/3 + 1/5 +.... + 1/99这部分

另一部分为: -1/2 - 1/4 +..... -1/100这部分。因此最终的结果就是这俩部分相加的合

int main()
{
	float postive_sign = 1;//存放正数
	float i = 0;
	float postive_sum = 0;//存放正数相加的合
	float negative_sign = -1;//存放负数
	float negative_sum = 0;//存放负数相加的合
	float sum = 0;
	for (i = 1; i < 100; i += 2)
	{
		postive_sum += (postive_sign / i);
	}
	for (i = 2; i <= 100; i += 2)
	{
		negative_sum += (negative_sign / i);
	}
	sum = postive_sum + negative_sum;
	printf("%lf\n", sum);
	return 0;
}

运行结果:

例题3:给出一个大于或者等于3的正整数,判断他是不是素数。

首先对它进行分析,所谓素数,是指除了1和他本身之外不能被任何其它整数除的是数,因此判断素数有俩种,一种是从将2 ~(n - 1)的各个整数先后作为除数,如果都不能被整除,则n是素数。第二种,将2 ~该数的平方根的各个整数先后作为除数,如果都不能被整除,则n也是素数。法二的核心就,一个素数不可能被除他本身的数整除,因此他被拆成一半时也任然成立,也因为大于他一半的数成最小的数2也比它本身大,也因此只用考虑它开平方之前的数

方法一:

int main()
{
	int num = 0;
	int i = 2;
	int flag = 0;
	scanf("%d", &num);
	while (i < num)
	{
		if (num % i == 0)
		{
			flag = 1;
			break;
		}
		i++;

	}
	if (flag == 1)
	{
		printf("不是素数\n");
	}
	else
	{
		printf("是素数:%d\n", num);
	}
	return 0;
}

方法二:

int main()
{
	int num = 0;
	scanf("%d", &num);
	int half = sqrt(num);
	int i = 2;
	int flag = 0;
	while (i <= half)
	{
		if (num % i == 0)
		{
			flag = 1;
			break;
		}
		i++;
	}
	if (flag == 1)
	{
		printf("不是素数\n");
	}
	else
	{
		printf("是素数:%d\n", num);
	}
	return 0;
}

运行结果:

2.4算法的特性

1.有穷性。一个算法应包含有限的操作步骤,不能是无限的。

2.确定性。算法中的每一个步骤都应当是确定的,而不应当是含糊的、模棱俩可的。

3.有零个或多个输入。所谓输入是指在执行算法的时需要从外界取得必要的信息。例如刚刚的例题3中,判断是否为素时,所输入的数。

4.有一个或多个输出。算法的目的是为了求解,"解"就是输出。例如例题的算法,最后输出的n"是素数"或"n不是素数"就是输出的信息。一个算法得到的结果就是算法的输出。没有输出的算法是没有意义的。

5.有效性。算法中的每一步都应当能有效地执行,并得到确定的结果。

2.5三种基本结构

1.顺序结构

即在执行完A框所指定的操作后,必然接着执行B框所指定的操作。顺序结构是最简单的一种基本结构

C程序设计内容与例题讲解 -- 第二章(第五版)谭浩强_第2张图片

2.选择结构

选择结构又称选取结构或分支结构,如图所示。虚线框内是一个选择结构。此结构中必包含一个判断框。根据给定的条件p是否成立而选择执行A框或者B框

C程序设计内容与例题讲解 -- 第二章(第五版)谭浩强_第3张图片

3.循环结构 

循环结构又称重复结构,即反复执行某一部分操作。有俩类循环结构。

1.当型(while型)循环结构。他的作用是给定的条件p1成立时,执行A,在判断p1是否成立,如果成立在重复执行A直到A不成立为止。

2.直到型(until型)循环结构。他的作用是先执行A判断给定的条件p2是否成立如果不成立,再执行A直到p2成立为止。

2.6习题讲解

例题1.依次将十个数输入,要求输出其中的最大值

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	int max = 0;
	max = arr[0];//将第一个数放到Max中
	for (i = 0; i < 10; i++)
	{
		scanf("%d", &arr[i]);
	}
	for (i = 0; i < 10; i++)
	{
		
		if (max < arr[i])//将每个数与max进行比较
		{
			max = arr[i];//如果比他大就让把较大值赋给max;
		}
	}
	printf("%d\n", max);
	return 0;
}

运行结果:

C程序设计内容与例题讲解 -- 第二章(第五版)谭浩强_第4张图片

例题2.求1+2+3+...+100

int main()
{
	int i = 0;
	int sum = 0;
	for (i = 1; i <= 100; i++)
	{
		sum += i;
	}
	printf("%d\n", sum);
	return 0;
}

 运行结果:

 C程序设计内容与例题讲解 -- 第二章(第五版)谭浩强_第5张图片

例题3.判断一个数n能否同时被3和5整除。

int main()
{
	int n = 0;
	scanf("%d", &n);
	if ((n % 3 == 0) && (n % 5 == 0))
		printf("%d能被整除\n", n);
	else
		printf("%d不能被整除\n", n);
	return 0;
}

运行结果:

C程序设计内容与例题讲解 -- 第二章(第五版)谭浩强_第6张图片

例题4.求俩个数m和n的最大公约数

int main()
{
	int m = 0;
	int n = 0;
	scanf("%d%d", &m, &n);
	int min = m > n ? n : m;//将m 和 n中的最小值保存下来
	while (1)
	{
		if (m % min == 0 && n % min == 0)//让m和n同时除以它们的最小值,如果同时整除就是最大公约数
			break;
		min--;
	}
	printf("%d\n", min);
	return 0;
}

运行结果:

今天的内容就到这里了,如果有错误的地方希望各位多多指正。

你可能感兴趣的:(C程序设计谭浩强版本,c语言,算法,数据结构)