C/C++快速入门

这篇博客是C/C++编程的快速入门教程,涵盖了代码结构、基本数据类型、顺序结构、选择结构、循环结构、数组、函数、指针、结构体等内容。特别强调了C++对C的向下兼容性,指出在输入输出中常用scanf和printf,并讨论了不同类型的变量定义、强制类型转换、宏定义、const定义和运算符。此外,还介绍了输入输出函数、数学函数和字符串处理的基本方法。
摘要由CSDN通过智能技术生成

和之前的文章一样,参考书目还是之前说的算法笔记


前言

这里的快速入门不适合需要系统学习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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值