`
为心中梦想挥剑的那一刹那
  • 浏览: 7369 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

c++程序设计梳理(谭浩强)3-4章

阅读更多

 同学拿了58的offer,22万一年,内心多少有点不是滋味。自己享受着这么丁点的中兴薪酬,明显是学业不精的那一类。事实确实如此,可当现实摆在你面前多少有点惨目忍睹,故和女朋友吵了架。如此将内心的不爽发泄于自己的亲近之人实属万万不应该,极度幼稚的表现,还需多多修炼才行,要走的路很长,可能只身一人,可能万般荆棘,更可能千疮百孔,那也要硬着头皮打碎牙往肚子里咽,难啊!
 今天来总结谭浩强的第3到第4章
Chapter 3~Chapter 4
->程序设计初步
1、程序=算法+数据结构。
2、程序的组成:预处理命令(#include与#define等)、声明部分(对函数与数据类型的声明以及对变量的定义) 、函数。
3、c++输出流格式控制符(使用io流控制符要包含#include<iomanip>头文件)
dec         设置整数为十进制
hex         设置整数为十六进制
oct         设置整数为八进制
setbase(n)       以c填充,可以为字符常量或变量
setfill(c)       精度为n,fix与scientific时为小数点后n位
setw(n)        设置字段宽为n
setiosflags(ios::fixed)    以固定小数位显示
setiosflags(ios::scientific)  以科学技术法显示
setiosflags(ios::left)    左对齐
setiosflags(ios::right)    右对齐
setiosflags(ios::skipws)   忽略前导空格
setiosflags(ios::uppercase)   以科学计数法与十六进制输出时字母大写
setiosflags(ios::showpos)   输出正数时加上“+”号
resetioflags()      终止设置的输出格式状态
4、关系运算符的优先级问题:
</<=/>/>=高于==/!=
赋值运算符->关系运算符->算术运算符(由低到高)
5、c++中将bool值处理成数值

#include<iostream>
using namespace std;
int main(){
	bool flag = false;
	flag = 123;//将数值赋给布尔变量
	cout << flag << endl;//输出结果为1
	return 0;
}

(编译过程中出现警告:1>e:\experiment\c++project\test\c++_for_tanhaoqiang\main_file.cpp(5): warning
C4305: “=”: 从“int”到“bool”截断)
6、闰年表达式:(year%4==0&&year%100!=0)||year%100==0
7、位运算符的巧妙使用(就是&/|/^三个运算符,其中笔试中愿意出,我这总结在之后会一点点往上面加)

 

/*
交换两数,此方法可以运用到大数的问题上,因为使用的是异或位运算,所以当数值溢出时也可以运作
*/
#include<iostream>
using namespace std;
int main(){
	int a = 123123, b = 234234;
	cout << a << "," << b << endl;//交换前
	a = a^b;
	b = a^b;
	a = a^b;
	cout << a << "," << b << endl;//交换后
	return 0;
}
/*
不用“+”进行加法运算,这地方又是一个很好的利用位运算符的例子,并且可以结合递归思想
*/
#include<iostream>
using namespace std;

int addD(int a, int b){
	if ((a&b) == 0)
		return a^b;
	else{
		return addD(a^b, (a&b)<<1);
	}
}
int main(){
	cout << addD(24, 3) << endl;
	return 0;
}
/*
输出一个数的2进制,我看c++的标准输入输出中并没有格式化成2进制的,所以我搜了下,看到也是用位运算实现的!GJ!
*/
#include<iostream>
using namespace std;
void print2bit(int n){
	int size = sizeof(int) * 8;
	for (int i = 0; i < size; i++){
		cout << ((n >> (size - 1 - i)) & 1);
	}
	cout << endl;
}
int main(){
	print2bit(4);
	return 0;
}
/*
用位运算实现查看一个整数的二进制里面有多少个1
*/
#include<iostream>
using namespace std;
int count1bit(int n){
	int count = 0;
	int bit = 1;
	while (bit != 0){
		if ((n&bit) != 0){
			count++;
		}
		bit = bit << 1;
	}
	return count;
}
int main(){
	cout << count1bit(11) << endl;
	return 0;
}

  

 

8、习题4:
编程序,用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和cout语句输出这两个字符,并思考如下
问题:
 (1)变量c1,c2应定义为字符变量还是整型变量?亦或者二者皆可?
 (2)若要求输出c1和c2值的ASCII码,应该如何处理?

/*
习题4
*/
#include<iostream>
using namespace std;
int main(){
	int c1, c2;
	c1 = getchar();
	c2 = getchar();
	putchar(c1); putchar(c2); putchar('\n');
	cout << (char)c1 << "," << (char)c2 << endl;
	return 0;
}

9、习题23:
用迭代法求平方根。求平方根公式为:

要求前后两次x的绝对值要小于10的-5次方。

 

/*
习题23
*/
#include<iostream>
#include<cmath>
using namespace std;
int main(){
	double x1, x2, a;
	cin >> a;
	x1 = 1;
	x2 = a;
	while (abs(x1 - x2) >= 1e-5){
		x1 = x2;
		x2 = (x1 + a / x1) / 2;
	}
	cout << x1 << "," << x2 << endl;
	return 0;
}

10、习题25:
两个乒乓球队进行比赛,各出3人。甲队为A、B、C 3人,乙队为X、Y、Z 3人。已经抽签决定比赛名单。有人向队员打听比赛名单,A说他不合X比赛,C说他不合X、Z比赛,请编程序找出3对赛手名单。
 

/*
习题25
*/
#include<iostream>
using namespace std;
//思想主要是将i,j,z看做成A,B,C,将1,2,3看成是X,Y,Z,然后排列一下就行
int main(){
	int i, j, z;
	for (i = 0; i < 3; i++){
		for (j = 0; j < 3; j++){
			if (i != j){
				for (z = 0; z < 3; z++){
					if (z != i&&z != j){
						if (i != 0 && z != 0 && z != 2){
							cout << "A与" << char('X' + i) << "比" << endl;
							cout << "B与" << char('X' + j) << "比" << endl;
							cout << "C与" << char('X' + z) << "比" << endl;
						}
					}
				}
			}
		}
	}
	return 0;
}

 

 

->函数与预处理
1、函数定义的形式没有啥好说的。在函数这里呢,我想讲一下我自己计算机基础入门与编程语言初学的一些体会。由于本人本科是一个广东的三本院校,当初入学学着学着也觉得没什么,可是当bz入了一985研究生才发现,当初自己那个三本院校的基础教学是有多么的差!我觉得,在这种非常关键的、伴随着我们整个职业的、无时无刻都要用到的编程语言计算机基础课程,非常有必要要一个有过技术公司经历并且有过深厚项目经验的人来教学。当初我的本科竟然用一些要不是刚刚毕业的“美女”教师,要不就是远离工程的“博士”来充斥这这些课程的教学,以至于我现在回想起来,怎一个烂了得!后来大三大四的确接触到了几个我觉得可以的人,可是尼玛竟然不给安排去教学这么关键的基础课程,而去教一些上层的开发课!要知道,地基没打牢,上层再漂亮也会又一天崩塌的!为什么要在这里讲了这么多,是因为我是到了大三的时候才知道,c或者c++在处理函数值传递的时候,编译器是一种怎样的机制!就是在进行函数调用的时候,当程序进入函数,执行函数体的时候,会将传进来的实参进行一个拷贝复制,再内部生成一个拷贝的副本,局部变量,在离开函数的时候销毁!这么重要的东西,我自我认为,经历过如今我经历的这种残酷的校园招聘与有过多年的项目洗礼的人才能体会深刻啊,一个刚刚毕业的女老师,男博士之类的,怎么能讲出个兴趣,讲出个心得呢!!吐槽多了,但是这也是自己整个学生生涯的一种心得吧!
2、函数重载的判定(这个各种笔试经常会考!):
参数个数、参数类型或者参数顺序3者中至少有一种不同,就构成了函数的重载。
3、函数模板这个问题我觉得很重要,谭浩强这本书讲的很少,我决定直接在后面的《c++primer》的梳理中去总结,因为这个点关系到后面的类的模板的问题,这个很关键,类似于java的泛型,可是和泛型又有很大的不同,java中泛型是经常用到的,在c++中,后面数据结构的各处也都要用到模板,所以在此先不介绍!
4、函数默认值问题:
①参数默认值必须放在函数参数的右边,否则报错;
②函数声明的时候,如果这个函数有默认值必须要在声明中给出,在函数定义的时候可以不用写默认值;
③注意函数默认值与函数重载的问题,因为容易出现二义性。
5、数学知识,已知两点的二维坐标,能求出两点连线相交于x轴的坐标

                         

6、c++内存模型:(这个感觉不太全,以后深入了再完善)
 用户区
 程序区
 静态存储区(主要存储全局变量,程序开始执行的时候就分配了存储单元,程序执行完毕就释放这些空间)
 动态存储区(①函数形参②函数中的自动变量,也是未加static的局部变量③函数调用时的现场保护和返回地址等)
7、头文件一般包含以下几类内容:
(1)对类型的声明,结构体或者类等等;
(2)函数声明,各种库函数或者自定义函数等等,其中似乎不要包含命名空间最好;
(3)内置(inline)函数;
(4)宏定义(#define);
(5)全局变量的定义;
(6)外部变量的声明,如extern int a;
8、习题9:
汉诺塔问题。

/*
习题9:此乃经典的汉诺塔问题,很好的一道递归入门编程题
*/
#include<iostream>
using namespace std;
void function(int n, char a, char b, char c){
	if (n == 1){
		cout << a << "->" << c << endl;
	}
	else{
		function(n - 1, a, c, b);
		cout << a << "->" << c << endl;
		function(n - 1, b, a, c);
	}
}
int main(){
	function(2, 'A', 'B', 'C');
	return 0;
}

9、习题11:
用递归的方法求

n由主函数输入。 

/*
习题11
*/
#include<iostream>
using namespace std;
int sum = 0;
void function(int n){
	if (n >= 0){
		sum += n*n;
		function(n-1);
	}
}
int main(){
	int n;
	cin >> n;
	function(n);
	cout << sum << endl;
	return 0;
}

10、习题1:
最大公约数与最小公倍数。

/*
习题1:最大公约数与最小公倍数,经典的算法->碾转相除法!
*/
#include<iostream>
using namespace std;
//最大公约数
int gys(int a, int b){
	int t;
	while (a%b != 0){
		t = b;
		b = a%b;
		a = t;
	}
	if (a%b == 0)
		return b;
	else
		return 1;
}
//最小公倍数
int gbs(int a, int b){
	int g = gys(a, b);
	return g*(a/g)*(b/g);
}
int main(){
	cout << gbs(15,28) << endl;
	return 0;
}

(最后贴出网页嵌入数学公式的图片链接:<img src="http://latex.codecogs.com/gif.latex?在这里填写你的latex代码" />

分享到:
评论

相关推荐

    C++程序设计谭浩强版本的课件

    谭浩强版《C++程序设计》课件是对教材内容的一种详细梳理与总结,它覆盖了从C++的基础语法到面向对象编程的核心概念。下面将根据课件的目录,对各章节涉及的关键知识点进行详细的解析。 #### 第1篇 基本知识 **第1...

    《谭浩强C++程序设计》书本笔记自己整理--2016查询参考

    以上是《谭浩强C++程序设计》第二章中关于数据类型和表达式的详细知识点梳理,涵盖了整型常量、浮点数、字符常量、符号常量、变量定义及初始化、算术运算符等多个方面。通过这些知识点的学习,读者可以更好地理解C++...

    C++程序设计谭浩强100%完整·清华大学

    ### 谭浩强《C++程序设计》内容概览 #### 第1篇 基本知识 第1章 C++的初步知识 - 1.1 从C到C++:介绍了C++语言的发展历程,如何从C语言演化而来。 - 1.2 最简单的C++程序:展示了最基本的C++程序结构。 - 1.3 C++...

    C++程序设计谭浩强100%完整·清华大学.pdf

    通过以上章节的知识点梳理,我们可以看出《C++程序设计谭浩强100%完整·清华大学》这本书系统全面地覆盖了C++语言的基础知识、面向过程编程以及面向对象编程的核心概念和技术。对于初学者来说,这是一本非常适合入门...

    C++程序设计谭浩强版

    ### C++程序设计谭浩强版 #### 一、引言 ...通过上述对《C++程序设计谭浩强版》各章节内容的梳理,我们可以看出这本书覆盖了C++编程从基础知识到高级特性的各个方面,非常适合初学者系统学习C++编程。

    谭浩强c语言程序设计

    ### 谭浩强C语言程序设计知识点梳理 #### C语言概述 - **发展过程**:C语言由Dennis Ritchie于1972年在贝尔实验室开发完成,最初是为了移植Unix操作系统而设计的。 - **当代最优秀的程序设计语言**:C语言因其简洁...

    C++程序设计

    通过上述知识点的梳理,我们可以看到谭浩强老师编著的《C++程序设计》这本书内容丰富,覆盖了C++语言的基础知识、面向过程的程序设计、面向对象的程序设计等多个方面,适合初学者系统学习C++语言。

    C语言教程讲义(谭浩强)--免费

    - **当代最优秀的程序设计语言**:C语言因其简洁、灵活和强大,被广泛认为是学习编程的基础。它不仅适用于系统级编程(如操作系统和嵌入式系统),也用于应用软件开发。 - **C语言版本**:C语言经历了多个版本的发展...

    C语言程序设计 谭浩强 学习笔记 word doc

    ### C语言程序设计知识点梳理 #### 一、C语言概述 **1.1 C程序结构特点** - **函数**: C程序的基本单位是函数。每个函数都有自己的功能,并且可以独立编译。 - **函数首部**: 包括函数类型、函数名以及参数列表...

    谭浩强C程序设计课件

    《谭浩强C程序设计课件》是一套全面讲解C语言编程基础的教育资源,主要针对第三版的内容进行了详细的梳理和解读。这套课件涵盖了C语言的14个关键章节,旨在帮助初学者深入理解C语言的基本概念、语法结构以及编程技巧...

    c程序设计基础

    ### C程序设计基础知识点梳理 #### 一、C语言简介 - **定义**: C语言是一种通用的、过程式的计算机程序设计语言,具有高效、灵活的特点。 - **地位**: 国际上最著名的高级程序设计语言之一,使用范围广泛。 - **...

    谭浩强c语言学习教程

    - **面向对象的程序设计语言**:虽然C语言本身不支持面向对象编程,但其衍生的C++语言支持此类编程范式。 - **C和C++的区别**:C++是基于C语言扩展而成的一种面向对象的编程语言,增加了类、对象等概念。 - **简单的...

    C语言程序设计教程(第3版) 19910-A0.zip

    在《C语言程序设计教程》第三版中,作者谭浩强教授可能会深入讲解这些基础知识,并通过实例解析如何编写、编译和运行C程序。书中可能会涵盖结构体、联合体、枚举、位运算等进阶主题,以及预处理指令和文件操作等实际...

Global site tag (gtag.js) - Google Analytics