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 ...
随机推荐
- 该如何真正进入SEO行业?
今天一个多年的朋友突然问我这个问题,他作为一个seo局外人,感觉SEO挺神秘,我认为要入行就要先了解一个SEO是什么职业,它的工作有那些,然后再考虑怎样进行学习或培训. 一.查看网站状态 seo人员每 ...
- iOS邓白氏编码申请流程及苹果账号组织名称变更
邓氏编码(D-U-N-S®Number,是Data Universal Numbering System的缩写).它是一个独一无二的9位数字全球编码系统,相当于企业的身份识别码 (就像是个人的身份证) ...
- 56. Merge Interval
56. Merge Interval 0. 参考文献 序号 文献 1 花花酱 LeetCode 56. Merge Intervals 2 [LeetCode] Merge Intervals 合并区 ...
- django实战仿慕课网在线视频网站(完成了85%以上的功能已上传github:https://github.com/huwei86/mxonline):
1. 前台功能模块 基本模块:登录 注册 找回密码 / 全局搜索 / 个人中心, 课程功能:课程管理 / 讲师管理 / 授课机构管理 热门推荐 相关课程推荐 用户操作管理:用户收藏 / 课程评论 ...
- Java开发IDEA插件推荐
IDEA插件推荐 Alibaba Java Coding Guidelines MyBatisCodeHelper-Pro Lombok GsonFormat AceJump Statistic Tr ...
- Q&A-Ray-20180710
Q: 如果集群多个客户端订阅会不会重复接收消息? A: 集群环境用,有另外一个参数. NodeManager类没有在框架里面: public interface INodeManager : IGra ...
- MyBatis 存储过程
From<MyBatis从入门到精通> <!-- 6.2 存储过程 6.2.1 第一个存储过程 delimiter ;; create procedure 'select_user_ ...
- 【bfs基础】①
bfs,即广度优先搜索,主要通过队列(queue)进行操作. 稍微解释一下,队列是一种基础数据结构,其形态类似于一支长长的队伍,大概如下: 在C++中,队列的头文件定义为:#include<qu ...
- [记录]Python的master-worker和epoll模式
#master-worker模型: #coding:utf-8 import os import sys import socket import time import traceback impo ...
- 关于页面scroolTop的获取
scroolTop 发现问题 获取页面滚动高度的时候: 当html页面设置了DTD<!DOCTYPE html> document.body.scroolTop // 值总是为0: doc ...