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

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

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;
}

运行结果:

例题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框所指定的操作。顺序结构是最简单的一种基本结构

2.选择结构

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

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;
}

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;
}

运行结果:

例题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;
}

运行结果:

例题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;
}

运行结果:

例题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;
}

运行结果:

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


相关文章
|
3月前
|
C语言
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计(第五版)谭浩强
|
3月前
|
存储 C语言
C程序设计内容与例题讲解 -- 第三章第二部分(第五版)谭浩强
C程序设计内容与例题讲解 -- 第三章第二部分(第五版)谭浩强
|
3月前
|
存储 移动开发 C语言
# C程序设计内容与例题讲解 -- 第三章第一部分(第五版)谭浩强
# C程序设计内容与例题讲解 -- 第三章第一部分(第五版)谭浩强
|
3月前
|
C语言 数据格式
C程序设计内容与例题讲解 -- 第三章第三部分(第五版)谭浩强
C程序设计内容与例题讲解 -- 第三章第三部分(第五版)谭浩强
|
10月前
|
算法 C语言 C++
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
从C语言的使用转换到C++(上篇)——刷题、竞赛篇
251 0
|
2月前
|
IDE 编译器 开发工具
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
详细解读C语言程序设计:现代方法(第2版)第二章全部习题答案
19 0
|
3月前
|
C语言
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计第二部分(第五版)谭浩强
C程序设计内容与例题讲解 -- 第四章--选择结构程序设计第二部分(第五版)谭浩强
|
3月前
|
自然语言处理 Java C#
C程序设计内容与例题讲解 -- 第一章(第五版)谭浩强
C程序设计内容与例题讲解 -- 第一章(第五版)谭浩强
|
10月前
|
算法 程序员 C语言
从C语言的使用转换到C++(下篇)——刷题、竞赛篇
我们上篇文章讲述了C++中的一些基础语法和常用函数(从C语言的使用转换到C++(上篇)——刷题、竞赛篇),我们本篇文章讲述C++STL的使用。
193 0
|
存储 算法 C语言
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)
[数据结构与算法(严蔚敏 C语言第二版)]第1章 绪论(课后习题+答案解析)