C/C++预备知识-基本知识概念与编程技巧(1)

本篇博客目的在于详细讲解C/C++的相关知识,以及注意事项,用一些小的示例演示一些概念,让你对C语言有足够的认识。

本章主要讲述C/C++的预备知识。

首先来看一个经典的实例

#include <stdio.h>

int main()
{
    int flower;
    flower = 6;
    printf("Hello, World! \n");
    printf("There are %d apples",flower);
    return 0;
}

首先,#include表示预处理器指令,<stdio.h>表示调用标准库头文件stdio.h(即标准输入/输出头文件),此条一般写于最顶部。调用别库函数也需要重新使用#include指令引用包括其在内的头文件。

int main()即为主函数,不管写在哪里,程序总是第一个执行它。操作系统通过调用main函数来运行程序。其中int表示,此函数返回值为一个int整型。考虑到不同标准的问题,使用void类型部分编译器可能会导致出错。括号内为空表示形参列表为空。

花括号{}内包括整段函数体,函数体从头到尾依次执行。函数体内第一行表示声明变量flower为int类型(若声明两个变量可用逗号隔开),第二行将6赋值给此变量,然后调用printf函数,输出引号内的内容。[其中printf()函数为格式化打印函数,包括在stdio.h头文件中。\n是换行符,表示另起一行。%d表示输出变量值的类型为十进制整数,称为转换说明,与待输出数据的类型相匹配,引号后的变量值将其替换,%d仅起占位作用,指明变量位置和printf函数显示此值的格式,与int类型相匹配,八进制使用%o,十六进制使用%x],函数体最后一句return 0;即返回给函数一个数 ( 先前定义的函数返回类型),返回后结束程序。 

转换说明输出
%a/%A浮点数、十六进制数和p计数法
%c单个字符
%d/%i有符号十进制整数
%e/%E浮点数,e计数法
%f浮点数,十进制计数法
%g/%G根据值的不同,自动选择%f或%e/%E。%e/%E格式用于指数小于-4或者大于或等于精度时
%o无符号八进制整数
%p指针
%s字符串
%u无符号十进制整数
%x/%X无符号十六进制整数,使用十六进制数0f/0F
%%打印一个百分号

注意:

1.C语言程序的基本结构由一个或多个函数组成,其中main函数必须存在且只有一个。函数为C语言的基本模块,其存在为了重复使用某个特定功能,避免代码重复,提高语言简洁性和维护效率。除了main函数,其他函数仅在调用时才会执行。

2.在C语言中,绝大部分语句和变量声明与赋值等属于操作指令,都要在其末尾加上分号,表示语句结束,否则会出错。

2.在许多系统中,main函数return的值被用来指示状态,一般通过返回0表示成功,通过自定义其它返回值来指出错误类型。 

2.C++的缓冲刷新操作可以保证到目前为止程序所产生的所有输出都真正写入输出流中,而不是仅停留在内存中等待写入流。

2.std::cout << std::endl;相当于std::cout << '\n' << std::flush;或者std::cout << '\n'; std::fflush(stdout);输出一个换行符,并立即刷新缓冲区(流操作符 << 的重载,对于 '\n' 和 "\n",输出效果相同),对于无缓冲的流,例如cerr,刷新是不必要的,可以直接使用 '\n'。

3.C语言中的关键字,例如数据类型int,不能作为函数名和变量名。

4.命名规范可清楚的表达自身的用途,杜绝模糊不清的变量命名,如abx1x2。规范命名是一种良好的编程习惯,C语言常用命名方式为两个用下划线连接的单词,如high_rate

5.C语言的标识符和变量名可使用字母、下划线、数字来命名,但数字不能作为第一个字符,习惯上也很少拿下划线作为第一个字符(因为大部分标准库标识符是这样命名的,防止名称冲突)。

6.C语言区分大小写,大小写不同的两个变量是独立的。

7.不仅仅是C语言,所有编程语言都使用半角英文符号。

8.虽然C语言中编译器不读取空格,但某些关键字中必须带有空格,否则不被识别,例如int age

9.虽然缩进规范并不是C语言的强制要求,但规范化的代码会实现每条语句独占一行,括号对齐与缩进统一等约定俗成的标准,即使多条语句放一行你的代码也照样不会出错。

10.限制精度可使用例如%4.2f的转换说明,这表示输出字符最小宽度为4,小数点后有两位数字。

11.使用输入函数scanf()时,变量名前需加上&地址运算符,若输入字符串,则不需要&。输入double型,使用转换说明%lf[printf()函数只需使用%f]。

若想在代码内写入注释,提高程序的可读性,让其能被开发者看见但又不被编译,可使用单行注释//或者多行注释/**/(其中,注释不能出现在字符串中,多行注释界定符不能嵌套),用法如下

//单行注释

/*
    多行注释
    多行注释
*/

接下来强调一下变量声明和赋值的过程

C 中有两种类型的表达式:左值(lvalue)、右值(rvalue),右值一般为数值,不能被赋值,因此只能出现在赋值号的右边。而左值即变量,一般都可以出现。左值指向内存地址,可用来保存数据,而右值为存储在此内存地址的数值,被用来读取。左值在很多地方以右值形式存在,而右值不能以左值形式表示。所以,变量应先定义再赋值。其中,左值必须是变量,右值可以是变量,常量或者表达式。声明变量时左侧先写类型说明符,然后命名变量,以分号结尾,赋值符右侧可写上常量实现赋值,也可不写,仅声明变量。赋值过程称为初始化变量。声明变量可直接声明多个也可单个声明,其效果相同。

然后强调下main函数的标准写法

完整写法应为

int main(int argc, char *argv[])
{
    ......  //代码块
    return 0;
}

括号内应使用命令行参数,也可省略,其中*argv[]可替换为**argv,argc为传入参数的个数,argv是字符串数组。argv[]是一个指针数组,指向传递给程序的每个参数,argv[0]存储可执行程序的文件名称,*argv[1]是第一个参数,*argv[n]是最后一个参数,从1-n依次存放传入的参数。

最后强调一下C++的输入输出

C++并未定义输出(IO)语句,而是通过一个全面的标准库iostream来提供IO以及一些其它操作。其中iostream库包含两个基础类型istream(输入流)和ostream(输出流),通过流,也就是字符序列来表示随着时间的推移,从IO设备读出或写入IO设备,字符顺序生成或消耗。标准库定义了4个IO对象,其中对象cin(istream类型)来表示标准输入,对象cout(ostream类型)来表示标准输出,标准错误cerr(ostream类型对象)来输出警告和错误消息,clog(ostream类型对象)来输出程序运行时的一般性信息,系统将程序运行的窗口与这些对象关联起来。

用户输入两个数,输出他们的和

#include <iostream>
int main()
{
    std::cout << "Enter two numbers:" << std::endl;
    int v1 = 0, v2 = 0;    //定义两个int类型变量并初始化为0
    std::cin >> v1 >> v2;    //从std::cin读取两个值,第一个存入v1,第二个存入v2
    std::cout << "The sun of " << v1 << " and " << v2
              << " is " << v1 + v2 << std::endl;
    return 0;
}

前缀std::通过显式说明指出使用定义在std命名空间(标准库)中的名字,用此方法来避免名字相关冲突,其中::为作用域运算符。输出运算符<<可打印消息,其中左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值,运算符将给定的值写到给定的ostream对象中,其计算结果就是写入给定值的ostream对象。用两个此运算符,第一个给用户打印一个字符串字面值常量,将字符序列用双引号包围,第二个运算符打印操纵符流操作子endl(其中endl与"\n"功能实现相似),其效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中。输入运算符>>接受一个istream对象作为其左侧运算对象,接受一个对象作为其右侧运算对象,它从给定的istream中读取数据,并存入给定对象中,返回其左值运算对象作为其运算结果。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值