c/c++算法竞赛
第一节 c++main函数结构[cout]
- 编程是控制计算机的一种手段
- 算法是解决方案的准确描述
1.1环境安装(推荐小熊猫c++)
优点
- 占用小,不吃配置
- 功能强大
- 即安即用,内嵌编译环境
1.2代码讲解
#include <iostream>//头文件区
using namespace std;//声明命名空间
int main (viod){//顺次结构
//viod 空类型 万能类型
cout<<"Hello World!"<<endl;
return 0;
}
-
顺次结构:从上到下依次执行
-
头文件区:不用自己写可以直接引用调用
-
参数:元素向外对接的接口
-
return 0;:函数返回值/数据 要与函数类型一致
-
一个程序可以没有输入,但是不能没有输出
记录输出字符个数
int main (char*argc[],int argv)
{
cout<<argv<<endl;
}
- endl 换行符/回车
第二节 数据类型、变量、常量、常数
2.1变量
类似于一个容器,用于储存数据
- 不同类型的数据用对应类型的变量去装
-
定义变量 :类型 名称 = 初值
-
字符型:单个的文本 字符串:一串字符
char b = '1';
-
== 两个对象的等于比较 = 赋值
-
;的作用表示一条语句的结束。分隔符
-
bool ture 1 fslse 0
类 型 | 名 称 | 占用字节数 | 取 值 范 围 |
---|---|---|---|
Bool | 布尔型 | 1 | true,false |
[signed] char | 有符号字符型 | 1 | -128~127 |
unsiged char | 无符号字符型 | 1 | 0~255 |
[signed] short [int] | 有符号短整型 | 2 | -32768~32767 |
unsigned short [int] | 无符号短整型 | 2 | 0~65535 |
[signed] int | 有符号整型 | 4 | -(2的31次方)~(2的31次方-1) |
unsigned [int] | 无符号整型 | 4 | 0~(2的32次方-1) |
[signed] long [int] | 有符号长整型 | 4 | -(2的31次方)~(2的31次方-1) |
unsigned long [int] | 无符号长整型 | 4 | 0~(2的32次方-1) |
float | 实型(浮点型) | 4 | |
double | 双精度型 | 8 | |
long double | 长双精度型 | 16 | |
void | 无值型 | 0 | 无值 |
-
常量 :const 类型 常量名
常量在之后就无法在更改
-
cin:可以把当前输入的数据赋值到变量
第三节 表达式、自增自减、类型转换
3.1 1024进制
1个字节对应8位2进制
K < BIt < KB < MB < GB < TB
- 8位 = 1字节
- 1024 字节 = 1 kb
- 1024 kb = 1 MB
- 1024 MB = 1 GB
3.2 表达式
逻辑表达式
逻辑符号
- && 与 并且关系,全真为真
- // 或 一真为真
- ! 非 取反
赋值表达式
- = 赋值符号
- == 等于号
符合表达式
a += 5 ;//a = a + (右侧的表达式)
a *= 2 ;//a = a * (右侧的表达式)
算数表达式
-
% 取余符号
cout << 5%2 << endl;
自增和自减
int a = 1;
a++ ;//后增 a = a + 1
++a ;//前增
- 后增 :完事以后在增加
- 前增:先增加在办事
int a = 1 ;
a-- ;//后减
--a ;//前减
逗号表达式
int a , b ;
- 逗号表达式分割的作用
自动转换机制 (隐式转换)
- 自动转换触发条件是 小的字节范围 转到 大的字节范围
- 两者类型不一致直接触发
- 整形 往 double 转
第四节 C语言基础(ASCII、printf/scanf)
#include <stdio.h>
int main ()
{
scanf("%d" , &a );
&// 取址符
printf("%s","hello world");//输出字符串不用加%s
// %d 整数
// %f 单精度浮点型
// %c 字符
// %s 字符串
// %lf 双精度浮点型
// %lld Long Long的整数
// %LLf Long double的小数
}
- long 字节大小和int一样都是4个
四舍六入五成双
- 舍弃位小于等于4时,舍去该位及后面的数字
- 舍弃位大于6时,则进位
- 舍弃位等于5时,如果5后面没有数据的话,就要看舍弃位前面的数字,若是奇数则进位,若是偶数则舍掉;如果5后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位
ASCII
-
字符与数字转换
-
每一个字符都有一个十进制的数
-
A 65 a 97
ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 0 NUL 32 (space) 64 @ 96 、 1 SOH 33 ! 65 A 97 a 2 STX 34 ” 66 B 98 b 3 ETX 35 # 67 C 99 c 4 EOT 36 $ 68 D 100 d 5 ENQ 37 % 69 E 101 e 6 ACK 38 & 70 F 102 f 7 BEL 39 ’ 71 G 103 g 8 BS 40 ( 72 H 104 h 9 HT 41 ) 73 I 105 i 10 LF 42 * 74 J 106 j 11 VT 43 + 75 K 107 k 12 FF 44 , 76 L 108 l 13 CR 45 - 77 M 109 m 14 SO 46 . 78 N 110 n 15 SI 47 / 79 O 111 o 16 DLE 48 0 80 P 112 p 17 DCI 49 1 81 Q 113 q 18 DC2 50 2 82 R 114 r 19 DC3 51 3 83 S 115 s 20 DC4 52 4 84 T 116 t 21 NAK 53 5 85 U 117 u 22 SYN 54 6 86 V 118 v 23 TB 55 7 87 W 119 w 24 CAN 56 8 88 X 120 x 25 EM 57 9 89 Y 121 y 26 SUB 58 : 90 Z 122 z 27 ESC 59 ; 91 [ 123 { 28 FS 60 < 92 \ 124 | 29 GS 61 = 93 ] 125 } 30 RS 62 > 94 ^ 126 ~ 31 US 63 ? 95 — 127 DEL
第五节 scanf/printf 补充、if语句
1 scanf/printf补充
-
C语言的东西c++可以直接拿来用
-
c/c++
-
阈宽 基本格式 %x.y 控制符
%.3lf 保留小数三位
当宽度没有达到设定值时,会自动补齐空格
当你提供的宽度大于等于提供值时,不会产生任何变化
#include <iostream>
using namespace std;
int main (void){
printf("hello world");
printf("%.3lf",2.6666);
printf("%5d",50);
return 0
}
- 阈宽右侧补齐(补的是空格)
printf("%-5d",22);
2 选择语句
- if
if(/*条件*/){
//代码区域 条件成立的执行区
}
else{
//条件不成立代码执行区
}
-
单 if 如果真
-
if else 如果 否则
-
三目运算符
cout << 5 < 4 ? cout << "5是大于4的" <<endl;
- 不能执行语句
bool flag = 5 < 4 ? ture : false ;
第六节 if的嵌套、switch语句
- 顺次嵌套
if(a<60)
{
cout << " 不及格 " << endl;
}
else if ( a >= 60 && a < 70)
{
cout << " c " << endl;
}
else if ( a >= 70 && a<= 80)
{
cout << "B" << endl;
}
else
{
cout << "A" <<endl ;
}
- 内嵌
if(a>5){
if(a>7){
cout << "大于 7"<< endl ;
}
else{
cout << "大于 5 但是 不大于 7" << endl ;
}
}
else{
cout << "不大于 5 " << endl ;
}
- 三个数输出最大数
int a , b . c;
cin >> a >> b >> c ;
if(a>b)
{
if(a>c)
{
cout << a;
}
else
{
cout << c;
}
else
{
if(b > c){
cout << b;
}
else
{
cout << c;
}
}
}
- switch
switch(//比对的数据){
//满足顺次结构,不停顿
case 1 :{
}
case 2 :{
}
case 3 :{
}
}
- break 关键字 可以跳出当前控制语句