谭浩强《C语言程序设计》课后重点习题及答案第一、二、三章

第一章

3.正确理解以下名词及其含义
(1)源程序 目标程序 可执行程序
(2)程序编辑 程序编译 程序连接
(3)程序 程序模块 程序文件
(4)函数 主函数 被调用函数 库函数
(5)程序调试 程序测试

(1)
源程序:指未编译的按照一定的程序设计语言规范书写的文本文件,C语言以.c为扩展名
目标程序:为源程序经编译可直接被计算机运行的机器码集合,在计算机上以.obj 作扩展名——由语言处理程序将源程序处理(汇编,编译,解释)成由机器码构成的,计算机能够直接运行的程序,该程序称为目标程序
可执行程序:指一种可在操作系统存储空间中浮动定位的可执行程序,以.exe作为扩展名
(2)
程序编辑:上机输入或者编辑源程序。
程序编译:
①先用C提供的“预处理器”,对程序中的预处理指令进行编译预处理
②对源程序进行语法检查,判断是否有语法错误,直到没有语法错误未知
③编译程序自动把源程序转换为二进制形式的目标程序
程序连接:将所有编译后得到的目标模块连接装配起来,再与函数库相连接成为一个整体的过程称之为程序连接
(3)
程序:一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具
程序模块:可由汇编程序、编译程序、装入程序或翻译程序作为一个整体来处理的一级独立的、可识别的程序指令
程序文件:程序的文件称为程序文件,程序文件存储的是程序,包括源程序和可执行程序
(4)
函数:将一段经常需要使用的代码封装起来,在需要使用时可以直接调用,来完成一定功能
主函数:又称main函数,是程序执行的起点
被调用函数:由一个函数调用另一个函数,则称第二个函数为被调用函数
库函数:一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数
(5)
程序调试:是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法错误和逻辑错误的过程
程序测试:是指对一个完成了全部或部分功能、模块的计算机程序在正式使用前的检测,以确保该程序能按预定的方式正确地运行

6.编写一个C程序,运行时输人a,b,c三个值,输出其中值最大者
#include<stdio.h>

int main()
{
    
    
	int a, b, c, max;
	printf("请输入三个数:\n");
	scanf("%d%d%d", &a, &b, &c);
	max = a;
	if(max < b)
	max = b;
	if(max < c)
	max = c;
	printf("三个数中最大的数为:%d", max);
	return 0;
}

第二章

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

结构化程序设计(structured programming,简称SP)是进行以模块功能和处理过程设计为主的详细设计的基本原则。结构化程序设计是过程式程序设计的一个子集,它对写入的程序使用逻辑结构,使得理解和修改更容易更高效。
它的主要观点是采用自顶向下、逐步求精的程序设计方法;各个模块通过“顺序、选择、循环”的控制结构进行连接,并且只有一个入口、一个出口 。
主要内容:把一个复杂问题的求解过程分段进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。

第三章

4、分析下面的程序:
#include<stdio.h>
#include<stdlib.h>
int main()
{
    
    
	char c1, c2;
	c1 = 97;
	c2 = 98;
	printf("c1=%c, c2=%c\n", c1, c2);
	printf("c1=%d, c2=%d\n", c1, c2);
	return 0;
}
(1)运行时会输出什么信息?为什么?
c1 = a, c2 = b
c1 = 97, c2 = 98

因为第一行是以字符形式输出,所以会把97和98当作相依字符的ASCII码值,输出的时候按照字符显示,第二行由于是以整形输出,所以输出对应整数值

(2)如果将程序第4,5行改为c1 = 197;c2 = 198;
运行时会输出什么信息?为什么?

在这里插入图片描述
因为c1和c2为char类型,其保存的数据范围为-128~127,当c1=197,c2=198时,已经超出了char类型所能够保存的数据范围,此时会进行相应的转换为c1=-59,c2=-58,只是第一行以字符输出时,c1=-59,c2=-58为不可显示字符,所以输出了?,而第二行以整数输出时就进行了相应的整数显示

(3)如果将程序第3行改为int c1, c2;运行时会输出什么信息?为什么?

在这里插入图片描述
因为c1和c2为int时,第二行以整形输出自然能够保存的下,但第一行以字符输出时,虽然数据int能够储存,但是在输出时需要准换为字符,转换后数据就超出了范围,此时c1=-59,c2=-58,两者都为不可显示字符,所以就显示了?

6、请编程序将“China"译成密码,密码规律是:用原来的字母后面第4个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此,“China"应译为“Glmre”。
请编写一程序,用赋初值的方法使cl,c2,c3,c4,c5这5个变量的值分别为’C’,‘h’,‘i’,‘n’,‘a’ ,
经过运算,使c1,c2,c3,c4,c5 分别变为’G’,‘l’,‘m’,‘r’,‘e’
分别用putchar函数和printf函数输出这5个字符。
#include<stdio.h>
#include<stdlib.h>
int main()
{
    
    
	char c1 = 'C', c2 = 'h', c3 = 'i', c4 = 'n', c5 = 'a';
	c1 = c1 + 4;
	c2 = c2 + 4;
	c3 = c3 + 4;
	c4 = c4 + 4;
	c5 = c5 + 4;
	
	//使用putchar输出
	printf("使用putchar输出: ");
	putchar(c1);
	putchar(c2);
	putchar(c3);
	putchar(c4);
	putchar(c5);
	printf("\n");

	//使用printf输出
	printf("使用printf输出: %c%c%c%c%c\n", c1, c2, c3, c4, c5);
	return 0;
}

在这里插入图片描述

8.编程序,用getchar函数读入两个字符给c1和c2,
然后分别用putchar函数和printf函数输出这两个字符。思考以下问题:
(1) 变量cl和c2应定义为字符型、整型还是二者皆可?
(2) 要求输出cl和c2值的ASCII码,应如何处理?
用putchar函数还是printf函数?
(3) 整型变量与字符变量是否在任何情况下都可以互相代替?如:
char c1,c2;与int cl,c2;是否无条件地等价?
int main()
{
    
    
	int c1, c2;
	printf("请输入两个字符c1,c2:");
	c1 = getchar();
	c2 = getchar();
	printf("用putchar语句输出结果为:");
	putchar(c1);
	putchar(c2);
	printf("\n");
	printf("用printf语句输出结果为:");
	printf("%c %c\n", c1, c2);
	return 0;
}

在这里插入图片描述
(1)两者皆可(推荐为整形,因为定义为字符有可能返回的整数会超出字符的存储范围)
(2)输出ASCII码应该用printf函数,以%d的格式输出
(3)不是任何情况下都可以替换,字符变量在计算机中占1个字节,而整形变量占2个或4个字节。因此整型变量在可输出字符的范围内(ASCII码为0~127之间的字符)是可以与字符数据互相转换的,在此范围外,不能代替。

猜你喜欢

转载自blog.csdn.net/qq_43310387/article/details/124564039