C程序设计(第四版)课后习题完整版 谭浩强编著
//复习过程中,纯手打,持续更新,觉得好就点个赞吧。
第一章:程序设计和C语言
习题
1、什么是程序?什么是程序设计?
答:程序就是一组计算机能识别和执行的指令。
程序设计是指从确定任务到得到结果,写出文档的全过程。(一般经历6个阶段:①问题分析;②设计算法;③编写程序;④对源程序进行编辑,编译和连接;⑤运行程序,分析结果;⑥编写程序文档;)
2、为什么需要计算机语言?高级语言的特点?
答:如同和人类交流一样,和哪个国家的人交流就需要哪个国家的语言来作为桥梁,想要和计算机进行交流沟通也就需要计算机语言,沟通以后就能用计算机做很多事情,更好的控制计算机 更好的用计算机完成我们的目的。高级语言同自然语言相近,便于人类理解和记忆,从人类的逻辑思维角度出发的计算机语言,抽象程度大大提高,需要经过编译成特定机器上的目标代码才能执行,一条高级语言的语句往往需要若干条机器指令来完成。
3、正确理解以下名词及其含义
(1)源程序 目标程序 可执行程序
答:用高级语言编写的代码程序即为源程序。
(2)程序编辑 程序编译 程序连接
答:
(3)程序 程序模块 程序文件
答:程序就是一组计算机能识别和执行的指令。
(4)函数 主函数 被调用函数 库函数
答:
(5)程序调试 程序测试
答:
4、 自学本书复录A,熟悉上级运行C程序的方法,上级运行本章3个例题。
5、请参照本章列题,编写一个C程序,输出以下信息:
*******************************
Very good !
*******************************
#include<stdio.h>
int main()
{
for(int i=;i<;i++)
{
printf("**");
}
printf("\n");
printf("Very Good ! \n"); for(int i=;i<;i++)
{
printf("**");
} return ; }
6、编写一个C程序,输入a,b,c三个值,输出其中最大者。
#include <stdio.h> int main () {
int max(int a,int b,int c);
int x=,y=,z=;
int c=max(x,y,z);
printf("%d\n",c);
return ;
} int max(int a,int b ,int c)
{
if(a>b)
{
if(a>c)
return a;
else
return c;
}
else if(b>c)
{
return b;
}else
return c; }
第二章:算法-----程序的灵魂
读书笔记:
1、一个程序主要包括数据结构和算法。在程序中指定用到哪些数据以及这些数据的类型和数据的组织形式就是数据结构。对操作的描述即为算法。
2、算法的特性:有穷性;确定性;有零个或多个输入、输出;有效性。
3、表示算法的方法:自然语言表示;程序流程图表示;N-S流程图表示;伪代码表示;计算机语言表示。
4、程序流程图的基本结构:顺序结构;选择结构;循环结构(当型循环、直到型循环)。
习题:
1、什么是算法?试从日常生活中找三个列子,描述他们的算法。
答:算法是对一个程序涉及到的操作的描述。eg1:机场过安检:安检口验证登机人信息是否一致,验证通过将自己的行李放到行李安检区,此时安检人员检查登机者,都通过允许进入候机厅。
2、什么叫结构化的算法?为什么要提倡结构化的算法?
答:由顺序结构,选择结构,循环结构构成的算法即为结构化的算法。结构化的算法不存在无规律的转向,只在本基本结构内才允许存在分支和向前或向后的跳转。不会出现死循环,使算法的质量得到保证和提高,所以,要提倡结构化的算法。
3、试述3种基本结构的特点,请另外设计一种基本结构。
答:顺序结构可以保证代码从上到下一个总的编写逻辑结构。选择结构能够灵活的进行分支判断,增强代码的健壮性。循环结构有效提高简单重复率高程序的运行效率。 do{语句} while(条件);
4、
5、
6、
7、
8、用自顶向下,逐步细化的方法进行以下算法的设计:
(1)输出1900~2000年中是闰年的年份,符合下面两个条件之一的年份是闰年:①能被4整除但不能被100整除 ②能被100整除且能被400整除
#include <stdio.h> int checkYear(int year){
if(year%== && year%==)
return year;
else if(year%== && year%!=)
return year;
return ;
} int main () {
//printf("%d",checkYear(2000));
int i,result;
for(i= ;i< ;i++){
result=checkYear(i);
if(result==)
continue;
else
printf("%d\n",result);
}
}
(2)求ax2+bx+c=0的根,分别考虑d=b2-4ac大于0、等于0和小于0这三种情况。
(3)输入10个数,输出其中最大的一个数。
第三章 最简单的C程序设计-----顺序程序设计
读书笔记:
1、常量的分类:
- 整形常量:即常见的整数
- 实型常量:十进制小数形式和指数形式。指数的表达形式举例:12.34*103 -->12.34e3 0.14E-25---->0.14*10-25
- 字符常量:普通字符范围在Ascii表中、转义字符即有特殊含义的字符:常以\作为开始符号
- 字符串常量:用双引号括起来的字符串,严格区分单引号,单引号只能表示单字符
- 符号常量:宏定义、#define 系列
2、变量必须先定义再使用
3、常变量用const'进行命名 eg:const float a=3.14 与符号常量#define a 3.14 的区别是:符号常量是预编译指令,在预编译时进行字符替换,预编译完成后,符号常量就不存在了。常变量是占用存储单元,有值的,只是不可变更。
4、标识符的命名标准:只能由字母数字下划线三种组成。数字不能作为变量名的开始。
5、数据类型:vc6.0下的变量
不同类型的数据在内存中占用的存储单元长度是不同的。使用sizeoif()函数测量类型或者变量的长度的运算符。
常见数据类型长度:short 2个字节16位。long 4个字节32位 。int 4个字节32位 。一个指针 4位。
6、字符变量的输出:当输出值大于128时,减去128输出对应的ASCII码的字符。
习题:
第四章选择结构程序设计:
读书笔记:
习题:
1、什么是算数运算?什么是关系运算?什么是逻辑运算?
答:算数运算就是数字与数字之间的加减乘除等基本算数运算。关系运算为 > 、< 、>= 、<= 、==之间的关系运算。逻辑运算为以与或非进行排列组后以后的逻辑运算。
2、C语言中如何表示“真”和“假”?系统如何判断一个量的“真”和“假”?
答:C语言中用非零表示真,用0表示假;也可用bool类型的true和false 进行真假的表示,依赖于c的编译器是否支持bool类型数据。在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”
3、写出下面各逻辑表达式的值。设a=3,b=4,c=5: 1. a+b>c && b==c 2. a || b+c && b-c 3. !(a>b)&&!c || 1 4. !(x=a)&&(y=b)&&0 5. !(a+b)+c-1&&b+c/2
答:如下:
- 0因为a+b=7是大于c的,这个式子得1,b==c是不成立的,得0.1&&0得0。
- 因为&&的优先级高于||所以,a的得值为1,||后面的那个式子不管是多少都不会影响整个式子的结果了,所以结果为1;
- 结果为1.原因跟上面一样。
- x=a的值为1,只有当a=0时,赋值表达式的结果才为0.其他状态都为1.所以!(a>b)为0.整个式子是由&&组成的,结果就为0了。
- !(a+b)+c-1=0+5-1=4!=0,所以结果为1.b+c/2 =4+5/2=6!=0,根据整数整除是向下取整的原则,所以式子结果也为1。1&&1的结果为1.
4、有三个整数a,b,c由键盘输入,输出其中最大的数:
#include<stdio.h>
//查找输入值的最大值
int findMax(int a,int b,int c){
if(a>b){
if(a>c){
return a;
}else
return c;
}else if(b>c)
return b;
else
return c;
} void main(){ int a,b,c;//定义三个变量 a,b,c
printf("请输入三个整数,并以逗号隔开!!!\n");
scanf("%d,%d,%d",&a,&b,&c);
int result=findMax(a,b,c);
printf("最大的数为:%d\n",result);
}
5、从键盘输入一个小于1000的正数,输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后检查是否为小于1000的正数,若不是则要求重新输入。
#include<stdio.h>
#include<math.h>//平方根调用math类库中的sqrt方法 void main(){ int a;
printf("请输一个小于1000的正数!!!\n");
scanf("%d",&a);
if(a< && a>){
int result=sqrt(a);
printf("该数的平方根为%d\n",result);
}else
{
printf("输入错误,请重新输一个小于1000的正数!!!\n");
main();//输出错误,继续输入。
} }
6、有一个函数:
写程序,输入x的值,输出y相应的值。
#include <stdio.h>
#include <math.h>
int main()
{
int x, y;
printf("Please enter x: ");
scanf("%d", &x);
if (x < )
y = x;
else if (x >= && x <)
y = * x - ;
else
y = * x - ;
printf("y = %d\n", y);
return ;
}
8、习题 4.8 给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为’E‘。
#include <stdio.h> int main()
{
int score, g;
scanf("%d", &score);
while (score < || score > ){
printf("Error! Retry!\n");
scanf("%d", &score);
}
g = score / ; //成绩除以10的商进行判断
if (g >= )
printf("Grade is A!\n");
switch(g){
case :
case :
case :
case :
case :
case : printf("Grade is E!\n"); break;//成绩为60以下都会执行到这里
case : printf("Grade is D!\n"); break;
case : printf("Grade is C!\n"); break;
case : printf("Grade is B!\n"); break;
}
return ;
}
9、给一个不多于5位的正整数,要求:1. 求出它是几位数;2. 分别输出每一位数字;3. 按逆序输出各位数字,例如原数为321,应输出123。
#include <stdio.h> //计算数字的位数
int calcSize(int x){
int count=;//cout定义为数字的位数,初始值为0
while(x>){
x=x/;
count++;
}
return count;
} //判断数字是否合法
bool isLeagl(int x){
bool flag=false;
if(x<)
return flag;
if(calcSize(x)>)
return flag;
flag=true;
return flag;
} //按位输出每一位数字(从个位开始输出)
void printNumOneByOne(int x){
int temp;
int xx;
printf("按位输出每一位数字(从个位开始输出):");
while(x>){
temp=x;
temp=temp%;
printf("%d,",temp);
x=x/;
}
printf("\n");
} //逆序输出该数字
void reverseNum(int x){
int y;
for(y=;x!=;x=x/ ){
y=y*+x%;
}
printf("%d\n",y); }
int main()
{
int x;
puts("请输入一位不多于5位的正整数!!!");
scanf("%d",&x);
if(isLeagl(x)==false){
puts("输入错误,请重新输入一位不多于5位的正整数!!!");
return ;
}
int s=calcSize(x);
printf("该数位数为:%d\n",s);
printNumOneByOne(x);
printf("逆序后的该数字:");
reverseNum(x);
}
C程序设计(第四版)课后习题完整版 谭浩强编著的更多相关文章
- c++面向对象程序设计第四章课后习题
这是书上的习题,我使用的是VS2010运行编译的 原习题: 4.有两个矩阵a和b,均为两行三列.求两个矩阵之和.重载运算符“+”,使之能用于矩阵相加.如c=a+b. #include<iostr ...
- 挂羊头卖狗肉蓄意欺骗读者——谭浩强《C程序设计(第四版)》中所谓的“按照C99”(二)
挂羊头卖狗肉蓄意欺骗读者——谭浩强<C程序设计(第四版)>中所谓的“按照C99”(二) 在<谭C>p4:“本书的叙述以C99标准为依据”,下面从C89到C99的主要变化方面来看 ...
- c++面向对象程序设计 课后题 答案 谭浩强 第四章
c++面向对象程序设计课后题答案 谭浩强 第四章 1: #include <iostream> using namespace std; class Complex {public: Co ...
- C程序设计(谭浩强)第五版课后题答案 第一章
大家好,这篇文章分享了C程序设计(谭浩强)第五版课后题答案,所有程序已经测试能够正常运行,如果小伙伴发现有错误的的地方,欢迎留言告诉我,我会及时改正!感谢大家的观看!!! 1.什么是程序?什么是程序设 ...
- 《C程序设计(第四版)》小记
我看的这本书很经典,它是谭浩强写的,也就是广为流传的“C语言红皮书”.在网上看了很多帖子,生活中也问过一些朋友,大多数人是不认可这本书的.很多人都说这本书很烂,看不懂,然后去“追逐”国外的一些教材.其 ...
- 剑指offer】Java版代码(完整版)
转自:剑指offer]Java版代码(完整版) 转自:[剑指offer] JAVA版题解(完整版)
- c++面向对象程序设计 谭浩强 第一章答案
c++面向对象程序设计 谭浩强 答案 第一章 目录: c++面向对象程序设计 谭浩强 答案 第一章 c++面向对象程序设计 谭浩强 答案 第二章 c++面向对象程序设计 谭浩强 答案 第三章 c++面 ...
- c++面向对象程序设计 谭浩强 第三章答案
2: #include <iostream> using namespace std; class Date {public: Date(int,int,int); Date(int,in ...
- c++面向对象程序设计 谭浩强 第二章答案
类体内定义成员函数 #include <iostream> using namespace std; class Time { public: void set_time(); void ...
随机推荐
- JavaScript的数据类型及其检测
一.什么是数据类型 1.基本类型 值是不可改变的 var name = 'java'; name.toUpperCase(); // 输出 'JAVA' console.log(name); // 输 ...
- PHP弱类型总结
0x01:“==”和“===” PHP中有两种比较符号,“==”与“===”.“==”我们称之为等值符,当等号两边为相同类型时,直接比较值是否相等:当等号两边类型不同时,先转换为相同的类型,再对转换后 ...
- redux和react-redux做简单组件控制
这次我们用两种方式实现以下要求 1.三个组件 2.第一个组件有两个按钮 分别控制第二和第三个组件年龄和姓名的改变 3第二个组件展示姓名,第三个组件展示年龄 用到哪些插件 store redux 一 ...
- JS高级程序设计第3章--精简版
前言:纯手打!!!按照自己思路重写!!!这次是二刷了,想暑假做一次完整的笔记,但用本子来写笔记的话太贵了,可能哪天还丢了..所以还是博客好== 第三章:基本概念(语法.数据类型.流控制语句.函数) 3 ...
- 数据结构与算法---线索化二叉树(Threaded BinaryTree)
先看一个问题 将数列 {1, 3, 6, 8, 10, 14 } 构建成一颗二叉树 问题分析: 当我们对上面的二叉树进行中序遍历时,数列为 {8, 3, 10, 1, 6, 14 } 但是 6, 8 ...
- python实现DFA模拟程序(附java实现代码)
DFA(确定的有穷自动机) 一个确定的有穷自动机M是一个五元组: M=(K,∑,f,S,Z) K是一个有穷集,它的每个元素称为一个状态. ∑是一个有穷字母表,它的每一个元素称为一个输入符号,所以也陈∑ ...
- 【动态规划法(DP)】-C++
360百科定义: 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家R.E.Bell ...
- 为git伸冤(使用git中可能会踩的一些坑)
窦娥被冤,六月飞霜.今天我两次遇到git被冤枉的情况,要是其它人也遇到这种情况导致git使用量缩小,那也要六月飞霜了. git第一次被冤枉是同事以为git的版本管理有问题.事情是这样的,同事提交新版本 ...
- 数组指针&&指针数组
数组指针: 定义 int (*p)[n]; 占用内存中一个指针的存储空间 ()优先级高,首先说明p是一个指针,指向一个int型的一维数组,故名数组(的)指针.指向的一维数组的长度是n,也可以 ...
- USACO-修理牛棚
#include<cstdio> #include<algorithm> using namespace std; int a[201],b[201]; int main() ...