和之前的文章一样,参考书目还是之前说的算法笔记
前言
这里的快速入门不适合需要系统学习C/C++的初学者,适合想做一些OJ的题目快速入门的朋友。
由于C++是向下兼容C的,所以写代码的时候可以采用C++中的一些很好的特性来取代C语言中的一些不顺手的设定。而且在后面的代码中采用的输入输出主要是用的C语言中的scanf和printf,虽然cin和cout很好用,但是很多时候时间上耗时会比较长。最后cout和printf不要在一个程序中使用。
对于cout和printf有兴趣的朋友可以去看看这个博客。https://blog.csdn.net/ysayk/article/details/50959909
提示:以下是本篇文章正文内容,下面案例可供参考。
一、代码的结构
首先来看一段代码C语言的代码。
#include <stdio.h>
int main() {
int a, b;
scanf("%d%d", &a, &b);
printf("%d", a+b);
return 0;
}
这是一个很简单的代码,实现的功能就是输入两个整数,然后输出他们的和。代码分为两部分:头文件和主函数。
1.头文件
头文件就是用#include写的那部分,这里的< stdio.h >就是一个标准输入输出库。如果写的代码中存在输入和输出就需要写这个头文件。除了这个头文件,后面还会介绍很多头文件,当然在C++中写< cstdio >,是一个意思,其他的头文件也类似。
2.主函数
主函数就是程序的执行入口,整个程序的执行就是从主函数开始执行,一个程序最多只能存在一个主函数。下面这个结构就是一个主函数的结构。
#include <stdio.h>
int main() {
......
return 0;
}
二、基本数据类型
1.变量的定义
变量就是数值可以改变的量,在程序运行中要使用变量是要进行定义的,定义的格式是这样的。
变量类型 变量名 = 初值;
但是这里的赋初值是可以省略不写的,可以只是简单地声明变量。
变量名的命名规则:
a.不能是标识符,就是说不能用C语言中本身有含义的字符,比如if,for,break等等。
b.变量名的开头只能是字母或者下划线,后面接的必须是字母、数字或者下划线,比如说_sha123就是合法的,而6sha就不合法。
c.变量是区分大小写的。
2.变量类型
一般来说分为整型、浮点型、字符型、C++中还有布尔型。每个大类中也有很多小类,具体的参考菜鸟教程关于C语言中数据类型的讲解。
这里有几个注意点:
1.对于整型的int来说,绝对值在109范围之内的整数可以采用int定义。
2.对于长整型long long,一般数值在1010和1018之内可以采用long long定义,但是在赋初值的时候如果是大于231-1的初值,需要在后面加上LL。
3.对于无符号数unsigned,其实就是把原先的负数的范围也挪到了正数上面。
4.对于浮点型,一般就直接用double来存储,不用float。
对于字符型的这里再讲两句。
a.字符常量和字符变量
定义字符变量和定义整型变量类似。
char c;
char c = 'e';
上面的定义就是一个字符变量,c的值是可以变的,而下面的定义c已经被赋值 e了,就是一个没办法变的值,所以就是字符常量。字符常量使用ASCII码表示的,范围是0-127,小写的字母比大写的字母的ASCII码值大32。
定义字符常量必须用单引号标注,而且必须是单个字符。当然也可以直接给char类型的变量赋值ASCII码值,输出也是字符,比如下面这个代码。
#include <stdio.h>
int main() {
char c;
c = 117;
printf("%c", c);
//输出就是u,117就是字符'u'的ASCII码
return 0;
}
b.转义字符
转义字符就是将控制字符输出出来。比如说"\n"就是换行,"\t"就是Tab制表符。特别注意"\0"表示的是NULL而不是空格。
c.字符串常量
由若干字符组成的那就是字符串,在C++中对应的就是string类型,而在C语言中用的是字符数组来存储的。用双引号来标记,不能将字符串常量赋值给字符变量。
比如下面这个代码就是错误的
char c = "abc";
这里才是正确的字符串的操作。
#include <stdio.h>
int main() {
char str1[100] = "zhe shi di yi ge zi fu chuan";
char str2[100] = "zhe shi di er ge zi fu chuan";
printf("%s\n%s", str1, str2);
/*输出结果
zhe shi di yi ge zi fu chuan
zhe shi di er ge zi fu chuan
*/
return 0;
}
最后布尔型的其实就是两个数值零和非零,也就是false和true。非零是包括正数和负数的,这两个都是会转变为true的。
3.强制类型转换
就是将一种类型的变量强制转换为另一种变量,一般采用下面这种写法。
(新类型名)变量名
有时候编译器是会自动转换类型的。一般遵循的原则就是保障精度不能降低。常见的转换有下面几种:
(1)int向long转化
(2)float向double转化
(3)char和short都是先转化为int进行运算
(4)有符号和无符号的都转换为无符号的,结果也是无符号的
(5)整型和浮点转化为浮点,且结果也是浮点类型的
(6)在赋值运算中,当赋值号两边的数据类型不同时,右边的类型会转换为左边的类型,然后再赋给左边。如果右边数据类型的长度比左边长,那么将会丢失数据,这样就会降低精度,所以编译的时候会产生警告。
4.宏定义和const定义
这两个都会定义常量的常见写法。
#include <stdio.h>
#define pi 3.14
int main() {
//const 数据类型 变量名 = 变量;
const double pi2 = 3.14;
return 0;
}
但是宏定义还能定义语句和片段。
#include <stdio.h>
//#define 标识符 语句或片段
#define ADD(a,b) ((a) + (b))
int main() {
int a,b;
scanf("%d%d", &a ,&b);
printf("%d",ADD(a,b));
return 0;
}
注意:宏定义是直接把你参数带进去的,很多时候运算顺序和你想的不一样,所以最好加上括号,比如下面这段代码。
#include <stdio.h>
//#define 标识符 语句或片段
#define CAL(x) (x*2+1)
int main(){
int a = 1;
printf("%d\n",CAL(a+1));
return 0;
//输出结果其实是4,并不是想象中的5;
}
因为define是直接把你的参数原封不动的代进去的,实际的运算表达式是 a+1*2+1。
5.运算符
这里也可以参考菜鸟教程这里还是比较简单的。
三、顺序结构
1.输入输出
(1)如何输入
a.scanf函数的使用
scanf("输入的格式",变量的地址);
scanf("%d", &a);
这里%d就是表示输入是一个int型的变量,存放在a中,&就是一个取地址的运算符。
scanf常见的格式符见下表。
数据类型 | 例子 |
---|---|
int | scanf(" %d ", &n); |
long long | scanf(" %lld ", &n) ; |
float | scanf(" %f ", &fl); |
double | scanf(" %lf ", &db); |
char | scanf(" %c ",&c); |
字符串(char数组) | scanf(" %s ",str) ; |
注意:str前面是没有&取地址运算符的,因为数组本身就是表示的地址。
如果出现特殊格式的输入,就按格式设置引号中的内容就可以了。
比如下面这个。
int hh, mm, ss;
scanf("%d:%d:%d", &hh, &mm, &ss);
所以其实scanf引号就是输入的内容,然后用&取出来的值代替引号中的%后面的内容。
注意使用scanf的时候除了对 %c 的输入,对其他格式的输入都是按照空白符(换行、空格等)来实现读入的结束,也就是如果不是 %c 的情况,出现空白符就会直接结束。
#include <stdio.h>
int main(){
char str1[100];
//输入abc def
scanf("%s ",str1);
//输出abc 也就是说空格后面的内容并没有读入
printf("%s",str1);
}
但是如果是 %c 的情况是可以对空格和换行进行读入的。
#include <stdio.h>
int main(){
int a;
char c,str[100];
//输入 1 a bcd
scanf("%d%c%s",&a, &c, str);
//输出是 a=1,c= ,str=a
printf("a=%d,c=%c,str=%s",a,c,str);
return 0;
}