谭浩强《C程序设计》(第4版)笔记和课后习题详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 课后习题详解

1什么是程序?什么是程序设计?

答:程序是一组计算机能识别和执行的指令。

程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。

2为什么需要计算机语言?高级语言的特点?

答:人和计算机交流信息,要解决语言问题。因此,需要创造一种计算机和人都能识别的语言,这就产生了计算机语言。

高级语言的特点:

(1)功能强,且不依赖于具体机器,用它写出的程序对任何型号的计算机都适用(或只须作很少的修改)。

(2)计算机也是不能直接识别高级语言程序的,也要进行“翻译”。用一种称为编译程序的软件把用高级语言写的程序(称为源程序,source program)转换为机器指令的程序(称为目标程序,object program),然后让计算机执行机器指令程序,最后得到结果。高级语言的一个语句往往对应多条机器指令。

3正确理解以下名词及其含义:

(1)源程序 目标程序 可执行程序

(2)程序编辑 程序编译 程序连接

(3)程序 程序模块 程序文件

(4)函数 主函数 被调用函数 库函数

(5)程序调试 程序测试

答:(1)源程序是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件。通常由高级语言编写。源程序可以是以书籍或者磁带或者其他载体的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机可执行的程序。目标程序,又称为“目的程序”,为源程序经编译可直接被计算机运行的机器码集合,在计算机文件上以.obj作扩展名,由语言处理程序(汇编程序,编译程序,解释程序)将源程序处理(汇编,编译,解释)成与之等价的由机器码构成的,计算机能够直接运行的程序,该程序称作目标程序。可执行程序(executable program,EXE File)是指一种可在操作系统存储空间中浮动定位的可执行程序。在MS-DOS和MS-WINDOWS下,此类文件扩展名为.exe。

(2)程序编辑是指将完成一件工作所需要的步骤,也就是算法,用计算机所能识别的语言,按照一定的程序结构翻译出来,并可被计算机执行的编写代码的全过程。程序编译是指用户使用编译程序对其个人编制的源程序进行编译的过程。程序连接是指把所有编译后得到的目标模块连接装配起来,再与函数库相连接成一个整体的过程。

(3)程序是为完成某项活动所规定的方法。程序模块即可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令。程序文件是用来描述程序的文件,其存储的是程序,包括源程序和可执行程序。

(4)函数是指完成一定功能的一段代码;主函数是指main函数,main函数是C程序里必不可少的,程序从这里开始运行。被调用函数是指某一个地方调用到的函数,C程序就是通过函数调用方式来运行的,库函数就是预先编制好的一些函数,完成特定的功能,比如随编译器一起提供的库函数:数学运算的、有关输出的、文件操作的等等。库函数一般是指编译器提供的可在C源程序中调用的函数。可分为两类,一类是C语言标准规定的库函数,一类是编译器特定的库函数。

(5)程序调试,是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程。这是保证计算机信息系统正确性的必不可少的步骤。程序测试(program testing)是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行。

4自学本书附录A,熟悉上机运行C程序的方法,上机运行本章3个例题。

答:略。

5请参照本章例题,编写一个C程序,输出以下信息:

****************************

Very good!

****************************

答:程序如下:

#include<stdio.h>
int main()
{
  printf("****************************\n\n");
  printf("Very good!\n\n");
  printf("****************************\n");
  return 0;
}

6编写一个C程序,输入a,b,c三个值,输出其中最大者。

答:

#include<stdio.h>
int main()
{
  int a,b,c,max;
  printf("please input a,b,c:\n");
  scanf("%d,%d,%d",&a,&b,&c);
  max=a;
  if(max<b)
    max=b;
  if(max<c)
    max=c;
  printf("The lagest number is:%d\n",max);
  return 0;
}

运行结果:

please input a,b,c:

23,45,39

The lagest number is:45

7上机运行以下程序,注意注释的方法。分析运行结果,掌握注释的用法。

(1)

#include<stdio.h>
int main()
{
  printf("How do you do!\n"); //这是行注释,注释范围从//起至换行符止
  return 0;
}

(2)把第4行改为

printf("How do you do!\n");  /*这是块注释*/

(3)把第4行改为以下两行

printf("How do you do!\n");  /*这是块注释,如在本行内写不完,可以在下一行继续写。这部分内容均不产生目标代码*/

(4)把第4行改为

//printf("How do you do!\n");

(5)把第4行改为

printf("//How do you do!\n");  //在输出的字符串中加入//

(6)用块注释符把几行语句都作为注释

/*printf("How do you do!\n");
  return 0;*/

答:请读者上机运行程序,注意观察结果。结果如下:

(1)输出:How do you do!

//之后是注释,这部分内容不参加编译,不影响运行结果。

(2)输出:How do you do!

/*与*/之间是注释,这部分内容不参加编译,不影响运行结果。

(3)输出:How do you do!

程序运行结果表明:从上一行的/*到下一行的*/之间是注释,块注释不受一行范围的限制,可以跨行。这部分内容不参加编译,不影响运行结果。

(4)程序运行时无输出,因为//之后都作为注释,因此在程序编译时不包括printf函数,故无输出。

(5)输出://How do you do!

在双撇号之间的//不作为注释标记,因此把它按字符原样输出。

(6)无输出。因为把所有语句都作为注释,不参加编译,程序相当于:

#include<stdio.h>

int main()