义乌网站制作电话,沈阳网上房地产,wordpress后台界面,全站加速 wordpressEssential C 前言1.1 如何撰写 C程序1.2 对象的定义与初始化1.3 撰写表达式1.4 条件语句和循环语句1.5 如何运用Array和Vector1.6 指针带来弹性1.7 文件的读写 前言 通过Essential C笔记的形式对C相关重点知识进行汇总#xff0c;读者通读此系列文章就可以轻松的把该语言基础捡… Essential C 前言1.1 如何撰写 C程序1.2 对象的定义与初始化1.3 撰写表达式1.4 条件语句和循环语句1.5 如何运用Array和Vector1.6 指针带来弹性1.7 文件的读写 前言 通过Essential C笔记的形式对C相关重点知识进行汇总读者通读此系列文章就可以轻松的把该语言基础捡起来。 1.1 如何撰写 C程序
int main()
{
// 我们的程序代码置于此处
}int是C程序语言的关键字。
函数function是一块独立的程序代码序列code sequence能够执行一些运算。它包含四个部分返回值类型return type、函数名称、参数列表parameter list以及函数体function body。
main并非是程序语言定义的关键字。但是执行我们这个C程序的编译系统会假设程序中定义有main函数。如果我们没有定义程序将无法执行。
函数的参数列表parameter list由两个括号括住置于函数名之后。空的参数列表如main表示函数不接受任何参数。
int main(int val1, int val2)
{
// 我们的程序代码置于此处
}函数的主体body由大括号{}标出其中含有“提供此函数之运算”的程序代码。双斜线//表示该行内容为注释也就是程序员对程序代码所做的某些说明。
所谓类class是用户自定义的数据类型user-defined data type。class机制让我们得以将数据类型加入我们的程序中并有能力识别它们。
class机制赋予了我们“增加程序内之类型抽象化层次”的能力。
class的定义一般来说分为两部分分别写在不同的文件中。其中之一是所谓的“头文件header file”用来声明该 class 所提供的各种操作行为operation。另一个文件程序代码文件program text则包含了这些操作行为的实现内容implementation。
欲使用class我们必须先在程序中包含其头文件。头文件可以让程序知道class的定义。C标准的“输入/输出库”名为iostream其中包含了相关的整套class用以支持对终端和文件的输入与输出。我们必须包含iostream库的相关头文件才能够使用它
#include
我将利用已定义好的cout读作see out对象将信息写到用户的终端中。output运算符可以将数据定向到cout像下面这样
cout “Please enter your first name”;
上述这行便是C所谓的“语句statement”。语句是C程序的最小独立单元。就像自然语言中的句子一样。语句以分号作为结束。
接下来我们要读取用户的输入内容。读取之前我们必须先定义一个对象用以储存数据。欲定义一个对象必须指定其数据类型再给定其标识符。截至目前我们已经用过int数据类型。但是要用它来储存某人的名字几乎是不可能的事。更适当的数据类型是标准库中的string class
string user_name;
如此一来我们便定义了一个名为user_name的对象它属于string class。这样的定义有个特别的名称称为“声明语句declaration statement”。单只写下这行语句还不行因为我们还必须让程序知道string class的定义。因此还必须在程序中包含string class的头文件
#include
接下来便可利用已定义好的cin读作see in对象来读取用户在终端上的输入内容。通过input运算符将输入内容定向到具有适当类型的对象身上
cin user_name;
为了产生上述信息我们的第一个步骤便是将输出位置屏幕上的光标调到下一行起始处。将换行newline字符常量写至cout便可达到这个目的
cout ‘\n’;
所谓字符常量character literal系由一组单引号括住。字符常量分为两类第一类是可打印字符例如英文字母‘a’、‘A’等等、数字、标点符号‘’、‘-’等等。另一类是不可打印字符例如换行符‘\n’或制表符tab‘\t’。由于不可打印字符并无直接的表示法这表示我们无法使用单一而可显示的字符来独立表示所以必须以两个字符所组成的字符序列来表示。
#include iostream
#include string
using namespace std; // 命名空间
int main()
{string user_name;cout Please enter your first name: ;cin user_name;cout \n Hello, user_name ... and goodbye!\n;return 0;
}using和namespace都是C中的关键字。std是标准库所驻之命名空间namespace的名称。标准库所提供的任何事物诸如string class以及cout、cin这两个iostream类对象都被封装在命名空间std内。
所谓命名空间namespace是一种将库名称封装起来的方法。
通过这种方法可以避免和应用程序发生命名冲突的问题所谓命名冲突是指在应用程序内两个不同的实体〔entity〕具有相同名称导致程序无法区分两者。命名冲突发生时程序必须等到该命名冲突获得解析〔resolve〕之后才得以继续执行。命名空间像是在众多名称的可见范围之间竖起的一道道围墙。
若要在程序中使用string class以及cin、cout这两个iostream类对象我们不仅需要包含string及iostream头文件还得让命名空间std内的名称曝光。
1.2 对象的定义与初始化
已知某数列相邻的两个元素值分别为2和3试问下一个值是多少
这两个数字事实上是“斐波那契数列Fibonacci sequence”中的第三和第四个元素。斐波那契数列的前几个值分别是11235813…。斐波那契数列的开头两个数设定为1接下来的每个数值都是前两个数值的总和。
如果用户输入5我们就打印出信息恭喜他答对并询问他是否愿意试试另一个数列。如果用户输入不正确的值我们就询问他是否愿意再试一次。
为了提升程序的趣味性我们将用户答对的次数除以其回答总次数以此作为评价标准。
这样一来我们的程序至少需要五个对象 一个string对象用来记录用户的名字 三个整数对象分别储存用户回答的数值、用户回答的次数以及用户答对的次数 此外还需要一个浮点数记录用户得到的评分。
为了定义对象我们必须为它命名并赋予它数据类型。对象名称可以是任何字母、数字、下画线underscore的组合。大小写字母是有所区分的user_name、User_name、uSeR_nAmE、user_Name所代表的对象各不相同。
每个对象都属于某个特定的数据类型。对象名称如果设计得好可以让我们直接联想到该对象的属性。数据类型决定了对象所能持有的数值范围同时也决定了对象应该占用多少内存空间。
所谓 class便是程序员自行定义的数据类型。
每一个内置数据类型都有一个相应的关键字用于指定该类型。。例如为了储存用户输入的值我们定义一个整数对象
int usr_val;
int是C关键字此处用来指示 usr_val是个整数对象。用户的“回答次数”以及“总共答对次数”也都是整数唯一差别是我们希望为这两个对象设定初值0。下面这两行可以办到
int num_tries 0; int num_right 0;
1.3 撰写表达式
1.4 条件语句和循环语句
1.5 如何运用Array和Vector
1.6 指针带来弹性
1.7 文件的读写
对文件进行读写操作需要包含fstream头文件 #include
打开可供输出的文件需要定义一个ofstream对象并将文件名传入 // 以输出模式开启seq_data.txt ofstream outfile(“seq_data.txt”)
声明outfile的同时会发生什么事情
如果文件已经存在希望将新数据增加到该文件中需要以追加模式append mode打开这个文件为此我们提供第二个参数ios_base::app给ofstream对象。
// 以追加模式打开seq_data.txt, 新数据会被加到文件末尾
ofstream outfile(seq_data.txt, ios_basea::app);// 如果outfile的求值结果为false表示此文件并未成功打开
if(!outfile)
{// 因为某种原因档案无法开启cerr Oops! Unable to save session data!\n;}else{// ok: outfile 开启成功接下来将数据写入outfile usr_name num_tries num_right endl;
}endl 是事先定义好的所谓操纵符。endl会插入一个换行符并清除输出缓冲区output buffer的内容。
如果要打开一个可供读取的文件定义一个ifstream供输入file stream对象并将文件名传入。
// 以读取模式input mode打开infile
ifstream infile(seq_data.txt)int num_tries 0;
int num_cor 0;if(! infile)
{
// 由于某种原因文件无法打开...
// 我们将假设这是一位新的用户...
}else{
// ok: 读取档案中的每一行
// 检查这个用户是否曾经玩过
// 每一行的格式是
// name num_tires num_correct
// nt: 猜过的总次数num_tries
// nc: 猜对的总次数num_correctstring name;int nt;int nc;// while 循环的每次迭代都会读取文件的下一行内容while(infile name){// 先将用户猜过的总次数读到nt之中再将用户猜对的总次数读到nc之中infile nt nc;if(name usr_name){// 找到他了cout Welcom back, usr_name \n Your current socre is nc out of nt \n Good Luck!\n;num_tries nt;num_cor nc;}}
}如果想要同时读写同一个文件我们得定义一个fstream对象。为了以追加模式打开需要传入第二参数值 ios_base;:in|ios_base::app;
tstream iofile(saq data.txt,ios_base::in|ios_bane::app)if(!iofile)
{//由于某种原因文件无法开启……·真糟!
}else{//开始读取之前将文件重新定位至起始处iofile.seaxg( 0);//其它部分都和先前讨论的相同
}