第一篇:黑马程序员C语言教程:兴趣爱好是学习CC++编程的唯一先决条件
兴趣爱好是学习C/C++编程的唯一先决条件
我们在学校里,很多就开始接触C语言编程了。问到学习的原因,就是考个证,说以后好找工作,或者说多一个证更有筹码。还有的因为学校开了这个课,所以,就跟着学了。至于为什么学,很多就只是想,学校开的课不学不行。反正,学着学着就是为了考试,为了应付学校而已。学完课程之后,也写不了什么程序。很少有学生主动去练习,所以,他们自己也不知道究竟学这个课程做什么。
当然也有些学生对C/C++感兴趣,自己主动学。那么这些人毕业后,都是大神了。在这种好环境下,有是兴趣所在,得天独厚,成长的很快。这些人,知道自己所学所想,目的很明确,动力也很强,效率很高,就可以很好的利用学校的条件。
而社会上存在一大波人,非计算机专业的,甚至是高中学历的,很多人就是不知道自己适不适合学C/C++编程,那么首先需要确定你是否对编程感兴趣,那么你可以考虑扪心自问一下,自己是不是想在编程方面发展,是纯粹喜欢C/C++编程。
我喜欢编程,我喜欢将我的想法在计算机中即刻实现出来,这样的感觉,有一种很心情舒畅的感觉。有时候,即使一个很没有技术含量的效果做出来后,总是不经意或者刻意去不停的玩,每一遍都是不厌其烦,总是感觉那个效果的过程很有意思,并且还是自己做出来的,还洋洋得意。不过,这得意只是在自己心中,被自己认可。有时候分享给朋友,有时候被否定,觉得技术也就一般般吧。不过无所谓,我自己做的,我自己很清楚。喜欢不需要很高深的技术。
还有时候,写一些小算法,虽然不是那种牛逼的让人叹服的算法,但是写好后,运行起来,自己用总是感觉很满足,可以自己自足的优越感,是其他人所体会不到的。想到那些不会编程的,很多事情可以简单的解决,但是他们不会编程,无法解决,就会感到无比的得意,不过也是心里得意而已,也只是对自己的能力的肯定而已。
为了一个功能实现,可以废寝忘食,可以做梦都在想解决思路,实现之后想和全世界分享,而功能其实就是有点水平的人简单两句就可以搞定的。虽然如此,但是还是特别想高兴的跳起来。那种喜悦,就和吃了蜜一样的甜,简单的快乐,不参杂任何世俗利益的快乐,纯粹的精神愉悦感。
当然,非计算机专业的能在计算机行业从事编程,基本都是计算机感兴趣的,否则根本就不会入这一行。要知道,入这一行,比其他行要辛苦很多。如果没有兴趣的支持,很难走下去,也很难发展的好。
对于非计算机专业的朋友来说,学习C/C++编程真的不是一件容易的事情,吃过的苦只有他自己知道。很多孤军奋战,缺少引导,缺少交流,缺少同行朋友,处处被人看低,赤裸裸的学历歧视,很打击人。即使有些人嘴里说不在乎学历,实际上他们心里也悬着一块石头,他为了他们公司的利益,有时候不敢相信一个感觉能力还行,但是还不够了解的人。就是一般有能力的,还担心干不长呢。其实,兴趣是最好的发展方向,也是最好的动力。适不适合编程,兴趣太重要的。有兴趣,就行。
尽管各种阻碍和困难,非计算机专业的程序员一大把,还是有很多朋友对编程有很大的兴趣。不过,一个程序员的成功,绝对不要用金钱来衡量,技术和财富并不是绝对的对等,会将技术有效的转换为金钱的,需要具备好的技术以及好的商业头脑,而这两者对于程序员似乎比较少。
如果你真要问自己适不适合编程,那请你先问,你是否真的喜欢编程。如果答案是,那你还觉得适不适合这还是问题吗?如果答案是不是,那你已经不适合了。
学习C/C++编程,很多确实因为现实压力而学习,不过我可以告诉你,虽然技术好可
以拿到不错的工资,但是,你付出的努力,绝对是很大的。干程序员,技术不过关,不喜欢技术,不愿意花时间,也就是注定你走不远。
而最后真正受到财富回报的多少,都是要看你付出了多少,做过了多少努力的。并不是简单的学了什么就有很多前途,不是做了多少事情就得到相应的回报的。
第二篇:黑马程序员C语言教程: CC++培训专家-预处理命令使用详解
传智播客C/C++培训专家:预处
理命令详解
作为一枚C/C++程序猿,在我们编写和查看C/C++源代码的过程中会遇到各种编译指令,这些指令称为预处理命令。预处理命令虽然不是C/C+的一部分,但却扩展了C程序的设计环境,下面传智播客C/C+培训专家将向大家介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。
ANSI标准定义的C语言所有预处理命令均以符号#开头,比如我写程序时常用的:
#define,#undef,#include,#if,#else,#elif,#endif,#ifdef,#ifndef, #error 1.#define和 #undef 宏定义命令的一般形式为:
#define[MacroName][MacroValue],示例如下: #defineITHEIMA 传智播客黑马程序员
在源程序中每次遇到ITHEIMA时,均以定义的值传智播客黑马程序员代换它。
在使用该宏时,有以下几点注意事项:
该语句没有分号。在标识符和串之间可以有任意个空格。 定义宏的时候,可以使用之前已经定义好的宏。
如果串长于一行,可以在该行末尾用一反斜杠' '续行。
#defineLONG_STRING“good good study,day day up!” 在定义宏标识符时,字母一般需要大写。 预处理运算符的使用:
#--该符号是“字符串化”的意思,出现在宏定义中的#是把跟在后面的参数转换成一个字符串
#define ERROR_LOG(module)
fprintf(stderr, “error: ”#module“n”)ERROR_LOG(“add”);转换为 fprintf(stderr,“error: ”add“n”);ERROR_LOG(devied =0);转换为 fprintf(stderr,“error: devied=0n”); ##--是连接符号,将多个串连接到一起。char *szStr = “传播播客_黑马程序员”;#define ITCAST(exp)cout < 2.#include 命令#i nclude使编译程序将另一源文件嵌入带有#include的源文件,被读入的源文件必须用双引号或尖括号括起来。例如: #include“stdio.h”或者#include 这两行代码均使用C编译程序读入并编译用于处理磁盘文件库的子程序。将文件嵌入#i nclude命令中的文件内是可行的,这种方 式称为嵌套的嵌入文件,嵌套层次依赖于具体实现。 如果显式路径名为文件标识符的一部分,则仅在那些子目录中搜索被嵌入文件。 例如: #include “../include/head.h” 如果文件名用双引号括起来,则首先检索当前工作目录。如果未发现文件,则在命令行中说明的所有目录中搜索。如果仍未发现文件,则搜索实现时定义的标准目录。例如: include “head.h” 如果文件名被尖括号括起来,则首先在编译命令行中的目录内检索。如果文件没找到,则检索标准目录,不检索当前工作目录。 例如: include
它与#endif之间的代码,否则跳过这些代码。命令#endif标识一个#if块的结束。
跟在#if后面的表达式在编译时求值,因此它必须仅含常量及已定义过的标识符,不可使用变量。表达式不许含有操作符sizeof(sizeof也是编译时求值)。
#else命令的功能有点象C语言中的else;#else建立另一选择(在#if失败的情况下)。注意,#else属于#if块。
#elif命令意义与ELSE IF 相同,它形成一个if else-if阶梯状语句,可进行多种编译选择。#elif 后跟一个常量表达式。如果表达式为true,则编译其后的代码块,不对其它#elif表达式进行测试。否则,顺序测试下一块。
4.#error 命令#error强迫编译程序停止编译,主要用于程序调试。该指令使预处理器发出一条错误消息,该消息包含指令中的文本.这条指令的目的就是在程序崩溃之前能够给出一定的信息。
5.#ifdef 和 #ifndef 条件编译的另一种方法是用#ifdef与#ifndef命令,它们分别表示“如果有定义”及“如果无定义”。# ifdef的一般形式是:
# ifdef macroname statement sequence
#endif #ifdef与#ifndef可以用于#if、#else,#elif语句中,但必须与一个#endif。
define MAX 91 #include
int main(){ #ifdef MAX cout<<“hello,MAX!”< #else cout<<“where is MAX?”< #endif #ifndef LEO cout<<“LEO is not defined”< #endif return 0;} 今天关于预处理命令的知识点传智播客C/C+培训专家就为大家接受到这里, 欢迎大家留言交流.
第三篇:黑马程序员C语言教程: CC++培训专家:漫谈软件编码风格
传智播客C/C++培训专家:漫谈软件编码风格
通过建立代码编写规范,形成开发小组编码约定,提高程序的可靠性、可读性、可修改性、可维护性、一致性,保证程序代码的质量,继承软件开发成果,充分利用资源。提高程序的可继承性,使开发人员之间的工作成果可以共享。代码的风格主要有以下几点:
1、缩进
缩进以4个空格为单位。预处理语句、全局数据、函数原型、标题、附加说明、函数说明、标号等均顶格书写。语句块的“{”“}”配对对齐,并与其前一行对齐,语句块类的语句缩进建议每个“{”“}”单独占一行。
2、空格
变量、类、常量数据和函数在其类型,修饰(如 __fastcall 等)名称之间适当空格并据情况对齐。关键字原则上空一格,如: if(...)等,运算符的空格规定如下:“::”、“->”、“[”、“]”、“++”、“--”、“~”、“!”、“+”、“-”(指正负号),“&”(取址或引用)、“*”(指使用指针时)等几个运算符两边不加空格(其中单目运算符系指与操作数相连的一边),其它运算符(包括大多数二目运算符和三目运算符“?:”两边均加一空格,“(”、“)”运算符在其内侧空一格,在作函
数定义时还可据情况多空或不空格来对齐,但在函数实现时可以不用。“,”运算符只在其后空一格,需对齐时也可不空或多空格,“sizeof”运算符建议也在其后空一格,不论是否有括号,对语句行后加的注释应用适当空格与语句隔开并尽可能对齐。
3、对齐
原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在“,”处或运算符处,换行后最好以运算符打头,并且以下各行均以该语句首行缩进,但该语句仍以首行的缩进为准,即如其下一行为“{”应与首行对齐。
变量定义最好通过添加空格形成对齐,同一类型的变量最好放在一起。
4、空行
程序文件结构各部分之间空两行,若不必要也可只空一行,各函数实现之间一般空两行,由于BCB会自动产生一行“//------”做分隔,另因每个函数还要有函数说明注释,故通常只需空一行或不空,但对于没有函数说明的情况至少应再空一行。对自己写的函数,建议也加上“//------”做分隔。函数内部数据与代码之间应空至少一行,代码中适当处应以空行空开,建议在代码中出现变量声明时,在其前空一行。类中四个“p”之间至少空一行,在其中的数据与函数之间也应空行。
5、注释
对注释有以下三点要求: A.必须是有意义。B.必须正确的描述了程序。C.必须是最新的。
注释必不可少,但也不应过多,以下是四种必要的注释: A.标题、附加说明。
B.函数说明。对几乎每个函数都应有适当的说明,通常加在函数实现之前,在没有函数实现部分的情况下则加在函数原型前,其内容主要是函数的功能、目的、算法等说明,参数说明、返回值说明等,必要时还要有一些如特别的软硬件要求等说明。C.在代码不明晰或不可移植处必须有一定的说明。D.及少量的其它注释。
注释有块注释和行注释两种,分别是指:“/**/”和“//”建议对A用块注释,D用行注释,B、C则视情况而定,但应统一,至少在一个单元中B类注释形式应统一。
6、代码长度:
对于每一个函数建议尽可能控制其代码长度为53行左右,超过53行的代码要重新考虑将其拆分为两个或两个以上的函数。函数拆分规则应该一不破坏原有算法为基础,同时拆分出来的部分应该是可以重复利用的。对于在多个模块或者窗体中都要用到的重复性代码,完全可以将起独立成为一个具备公用性质的函数,放置于一个公用模块中(Common.cpp/Common.h)。
第四篇:黑马程序员c语言教程:Oracle简介
9.通过子查询建表 通过子查询建表的例子
SQL>CREATE TABLE emp_41 AS SELECT id, last_name, userid, start_date FROM s_emp WHERE dept_id = 41;SQL> CREATE TABLE A as select * from B where 1=2;只要表的结构.10.用子查询建表的注意事项
可以关连多个表及用集合函数生成新表,注意选择出来的字段必须有合法的字段名称,且不能重复。
用子查询方式建立的表,只有非空NOT NULL的约束条件能继承过来, 其它的约束条件和默认值都没有继承过来.根据需要,可以用alter table add constraint ……再建立其它的约束条件,如primary key等.11.Foreign Key的可选参数ON DELETE CASCADE 在创建Foreign Key时可以加可选参数: ON DELETE CASCADE它的含义是如果删除外键主表里的内容,子表里相关的内容将一起被删除.如果没有ON DELETE CASCADE参数,子表里有内容,父表里的主关键字记录不能被删除掉.12.如果数据库表里有不满足的记录存在,建立约束条件将不会成功.13.给表创建和删除同义词的例子 SQL> CREATE SYNONYM d_sum 2 FOR dept_sum_vu;SQL> CREATE PUBLIC SYNONYM s_dept 2 FOR alice.s_dept;SQL> DROP SYNONYM s_dept;
十、ORACLE里的数据字典
1.什么是数据字典?ORACLE的数据字典是数据库的重要组成部分之一,它随着数据库 的产生而产生, 随着数据库的变化而变化, 体现为sys用户下所有的一些表和视图.2.数据字典里存了以下内容: 用户信息
用户的权限信息
所有数据对象信息表的约束条件统计分析数据库的视图等 不能手工修改数据字典里的信息.16
J2EE @ zxw 3.常用的数据字典
Dictionary 存放所有数据表,视图,同义词名称和解释 Dict_columns 数据字典里字段名称的和解释 Dba_users 用户 Dba_tablespaces 表空间
Dba_data_files 数据库的文件 Dba_free_space 空闲表空间 Dba_rollback_segs 回滚段
User_objects 数据对象 User_constraints 约束条件 User_sequences 序列号 User_views 视图 User_indexes 索引 User_synonyms 同义词
Session_roles 用户的角色 User_role_privs 用户的角色权限 User_sys_privs 用户的系统权限 User_tab_privs 用户的表级权限 V$session 实时用户情况 V$sysstat 实时系统统计 V$sesstat 实时用户统计 V$sgastat 实时SGA使用 V$locked_object 实时锁 V$controlfile 控制文件 V$logfile 日志文件 V$parameter 参数文件 4.数据字典的分类 数据字典四大类别
User_ 用户下所有数据库对象
All_ 用户权限范围内所有的数据库对象 Dba_ 所有的数据库对象
V$Content$nbsp;统计分析数据库的视图 赋于oem_monitor权限非DBA用户也可查询V$*视图
5.查询数据字典
SQL> select * from dictionary where instr(comments,'index')>0;SQL> select constraint_name, constraint_type, 2 search_condition, r_constraint_name 3 from user_constraints 4 where table_name = ‘&table_name';十一.控制数据、INSERT(往数据表里插入记录的语句)SQL> insert into 表名(字段名1, 字段名2, ……)values(值1, 值2, ……);SQL> insert into 表名(字段名1, 字段名2, ……)select(字段名1, 字段名2, ……)from 另外的表名 where 条件;可以用&标记变量的方法多次输入记录
快速插入数据的方法, 一般用于大于128M的数据转移 SQL> insert /*+ append */ into 表名
select * from 另外的用户名.另外的表名 WHERE 条件;SQL> commit;注意事项:
用INSERT /*+ APPEND */ 的方法会对target_tablename产生级别为6的独占锁,如果运行此命令时还有对target_tablename的DML操作会排队在它后面, 对OLTP系统在用的表操作是不合适的。17
J2EE @ zxw 2.插入字符串类型的字段的注意事项: 字符串类型的字段值必须用单引号括起来, 例如: ’GOOD DAY’
如果字段值里包含单引号’ 需要进行字符串转换, 我们把它替换成两个 单引号’ ’
字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度校验 ‘’ 标记是NULL, user 标明当前用户
日期字段的字段值可以用当前数据库的系统时间SYSDATE, 精确到秒
用字符串转换成日期型函数TO_DATE(‘2001-08-01’,’YYYY-MM-DD’)TO_DATE()还有很多种日期格式, 可以参看ORACLE DOC.年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS NSERT时最大可操作的字符串长度小于等于4000个单字节, 如果要插入更长的字符串, 请考虑字段用CLOB类型, 方法借用ORACLE里自带的DBMS_LOB程序包.3、UPDATE(修改数据表里记录的语句)SQL> UPDATE 表名 SET 字段名1=值1, 字段名2=值2, …… WHERE 条件;如果修改的值N没有赋值或定义时, 将把原来的记录内容清为NULL, 最好在修改前进行非空校验;值N超过定义的长度会出错, 最好在插入前进行长度校验.新功能,可以修改子查询后的结果集
例子:SQL> update(select * from s_dept)set id=50 where id=60;
4、DELETE(删除数据表里记录的语句)SQL> DELETE FROM 表名 WHERE 条件;注意:删除记录并不能释放ORACLE里被占用的数据块表空间.它只把那些 被删除的数据块标成unused.如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
SQL> TRUNCATE TABLE 表名;此操作不可回退.5、SQL语句的分类 数据定义语言(DDL):create、alter、drop(创建、修改结构、删除)(其他:rename)数据操纵语言(DML):insert、delete、select、update(增、删、查、改)(其他:truncate)
数据控制语言(DCL):grant、revoke(授权、回收)、set role 事务控制:commit、rollback、savepoint(其他:lock table、set constraint、set transaction)
审计控制:audit、noaudit 系统控制:alter system 会话控制:alter session 其他语句:comment(添加注释)、explain plan、analyze、validate、call
6、ORACLE里事务控制 Commit 提交事务 Rollback 回退事务
Savepoint 设置断点, 在事务中标记位置, 事务结束, 断点释放
事务结束的情况遇到commit或者rollback遇到DDL和DCL语句发现错误,如死锁用户退出
SQL*PLUS系统重启或崩溃 7.DML操作的注意事项 18
J2EE @ zxw 以上SQL语句对表都加上了行级锁, 确认完成后, 必须加上事物处理结束的命令COMMIT 才能正式生效, 否则改变不一定写入数据库里.行级锁也未能得到释放.如果想撤回这些操作, 可以用命令 ROLLBACK 复原.在运行INSERT, DELETE 和 UPDATE 语句前最好估算一下可能操作的记录范围, 应该把它限定在较小(一万条记录)范围内,.否则ORACLE处理这个事物用到很大的回退段.程序响应慢甚至失去响应.如果记录数上十万以上这些操作, 可以把这些SQL语句分段分次完成, 其间加上COMMIT 确认事物处理.太过频繁的commit不好
第五篇:黑马程序员c语言教程:DML语言强化
sql语言的类型
数据语言实现数据的crud
DML语句(Data Manipulation Language)数据库操作语言
insert update delete select DDL语言 data definition Lanaguage
create table
create view index sequence synonym同义词
truncate table DCL语言 data control language数据语言
commit rollback savetpointe
OCA认证 OCP(dba)一起考, 参加oracle的培训 2w Oracle数据库管理员认证专员(OCA):Oracle Certified Associate Oracle数据库管理员认证专家(OCP): Oracle Certified Professional Oracle数据库管理员认证大师(OCM): Oracle Certified Master
语法: INSERT INTO table [(column [, column...])] VALUES(value [, value...]);
--1 向表中插入所有列
insert into emp values(1, 'tom_111', 'enginerr', 7839, sysdate, 5000, 100, 10)--2 向表中插入部分列
insert into emp(empno, ename, job, hiredate)values(2, 'tom_2222', 'enginerr', sysdate)
--3 隐式插入空值: 没有写出的列,默认为null值--4 显示插入空值:--5 sql插入语言的地址符 & 取地址符后面相当于一个变量
mysql语言: preparedStatement语言 SQL> insert into emp(empno, ename, job, hiredate)values(&empno, &ename, &job, &hiredate);输入 empno 的值: 3
输入 ename 的值: 'tom_ccc' 输入 job 的值: 'job' 输入 hiredate 的值: '22-2月-81' 原值 1: insert into emp(empno, ename, job, hiredate)values(&empno, &ename, &job, &hiredate)新值 1: insert into emp(empno, ename, job, hiredate)values(3, 'tom_ccc', 'job', '22-2月-81')
&地址符, 可以在任何sql语言中使用.在select 语言中也可以使用地址符
SQL> select ename, job, &tt from emp;输入 tt 的值: deptno 原值 1: select ename, job, &tt from emp 新值 1: select ename, job, deptno from emp
--7 批量插入数据--创建一张表
create table emp10 as
select * from emp where 1=2;--一次性的将emp中所有10号部门的员工插入到emp10中
--在insert语言中使用子查询 子查询 不光用在查询套查询, 也可用在DML语句套select语句
insert into emp10--列完全一样,可以不写
select * from emp where deptno=10;delete from emp10;
有关update更新语句
UPDATE table SET column = value [, column = value,...] [WHERE condition];--列子
SQL> update emp10 set sal=2300 where empno=7934;
有关删除数据
DELETE [FROM] table [WHERE condition];
delete和truncate表区别
delete逐条删除 truncate先摧毁表再重建delete语言是DML语言 truncate是DDL
DML语言可以闪回 做错的并且提交了.可通过闪回,撤销操作
DDL语言不可以闪回 flashback
delete是逐条删除,会产生碎片, truncate不会产生碎片
行移动功能: 要开启闪回功能,必须要开启行移动功能delete不会释放空间 truncate会delete可以回滚 truncate不可以
oracle delete快 mysql truncate快.实验: 从文件中导入数据, 通过命名delete 和 truncate删除表数据 实验
从文件中导入数据
SQL> set timing off;SQL> set feedback off;SQL> drop table testdelete purge;SQL> @c:Sql.sql;SQL> SQL> set timing on;//最后删除数据表的时候,把时间打开,记录时间
SQL> delete from testdelete;已用时间: 00: 00: 00.03
从文件中导入数据
SQL> set timing off;@c:Sql.sql;
set timing off;
select count(*)from testdelete;set timing on;//最后删除数据表的时候,把时间打开,记录时间
truncate table testdelete;已用时间: 00: 00: 00.39
事务基本概念
概念
一个或者多个DML语言组成特点
要么都成功,要么都失败
特性
原子性 一致性 隔离性 持久性
事物的隔离性 多个客户端同时操作数据库的时, 要隔离他们的操作
否则:脏读 不可重复读 幻读
设置不同的搁置级别来解决oracle中的事务
事务起始标志 DML语言(oracle默认事务似是打开的)2 事务的结束标志
提交: 显示提交commit
隐式提交
1)执行DDL语言
eg create table语言 还有I个隐式的功能
提交之前的没有提交的DML语言(insert update)
2)正常退出
回滚: 显示 rollback
隐式 掉电/宕机/非正常退出==系统出错了 oracle事务控制--保存点
create table testsavepoint(tid number, tname varchar2(20));set feedback on
insert into testsavepoint values(1, 'tom1');insert into testsavepoint values(2, 'tom2');savepoint a;//创建一个保存点
insert into testsavepoint values(3, 'tom3a);rollback to savepoint a;
注意: 回退到savepoint a 前面插入的两条sql语句还没有提交;仍然还在一个事务里面;让事务结束的方法 显示 隐式 SQL> rollback / commit oracle数据的隔离级别问题
read only ,数据库几乎不做串行化操作,增加了read only SQL99