欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

dxw 复习

时间:2024-05-11 15:11 作者:admin 点击:
# 计算机组成部分 输入设备:输入语句 输出设备:输出语句 存储器:数据类型 运算器:运算符 控制器:运行逻辑 中央处理器(cpu):运算器+控制器 # 输入输出 c语言输入输入: ```

# 计算机组成部分

> 输入设备:输入语句

> 输出设备:输出语句

> 存储器:数据类型

> 运算器:运算符

> 控制器:运行逻辑


中央处理器(cpu):运算器+控制器

# 输入输出

c语言输入输入:

```c++

int a;

scanf("%d",&a);

printf("%d",a);

/*

占位类型

int d

long long ld

double lf

char c

float f

*/

/*

%[标记][长度][.[精度位数]][类型]

标记:

   空格:默认右对齐

   +:正数显示加号

   -:左对齐

   0:空位补0

   printf("%05d",1);//00001

长度:

   当前数据至少占的宽度

精度:

   .数字 代表保留多少位小数,限于double和float用

*/

```

c++输入输出:

```c++

//空格和回车有特殊功能

cin>>

cout<<

```

字符专用输入输出:

```c++

char c;

c=getchar();

int a=98;

putchar(a);//将括号的内容,以字符的形式输出

```

# 数据类型

```c++

long long 8

int 4

short 2

float 4

double 8

char 1

bool 1

string

cout<<sizeof(变量);

```

# 运算符

## 逻辑运算符

```c++

&& || !

```

## 算术运算符

```c++

+ - * / %

+= -= *= /= %=

++ --

```

## 关系运算符

```c++

> < >= <= == !=

```

### 错写相等

```c++

if(a=值){

   此时的条件的值真假为赋值给a的具体值

}

```

### 连续使用

```c++

if(3<a<5){

   3<a 的值为1或0,均小于5,恒成立

}

```

# 运行逻辑(控制流程)

## 顺序结构

```c++

从上到下执行

```

## 分支(选择)

```c++

if(条件) 代码

else if(条件) 代码

else 代码

```

```c++

switch(可确定的值){

   case 值1:代码;break;

   case 值2:代码;break;

   case 值3:代码;break;

   default:代码;

}

//没有break会一直往下运行

```

## 循环

```c++

for(代码;条件;代码) 代码

```

```c++

while(条件) 代码

```

```c++

do{

   代码

}while(条件);

```

# ASCII

```c++

'0'-'9'   48-57

'A'-'Z'   65-90

'a'-'z'   97-122

' ' 32  

'\0' 0

```

# 交换算法

## 中间变量

```c++

int a=5,b=10;

int c=a;

a=b;

b=c;

```

## 交换函数

```c++

int a=5,b=10;

swap(a,b);

```

# 常用函数

```c++

swap(a,b);//交换函数

sqrt(num);//开平方根,返回值是double

   如果应用,需要用整数,需要四舍五入

   int(sqrt(num)+0.5);//手动四舍五入

   round(sqrt(num));//默认四舍五入函数

pow(a,b);//求幂函数,返回值是double

max(a,b);//最大值

min(a,b);//最小值

```

# 类型题

## 累加问题

> 初始值为0

> 循环范围,范围明确for,范围未知while

> 累加项

## 累乘问题

> 初始值为1

> 循环范围,范围明确for,范围未知while

> 累乘项(注意范围,可能需要过程中取余)

## 数字拆分问题

```c++

%10 求后面的数字

/10 去掉后面的数字

int a=3456789;

while(a){

   if(a%10%2==0) cout<<a%10;

   a/=10;

}

输出:864


%1n个零:代表保留后面n个数字

/1n个零:代表去掉后面n个数字

int a=123456789;

6789:%10000

123:/1000000

```

## 数字拼接问题

```c++

int num=234567;

//回文数

int n=num;

int num2=0;

while(n){

   num2=num2*10+n%10;

   n/=10;

}

cout<<num2;//765432

if(num==num2) cout<<"yes";

//原则上,尽量不改变原来的数据,所以拆分的时候用替身

## 判断质数

判断质数是:1~n之间没有数字能整除,才能是

判断质数否:1~n之间只要有一个能整除,就是否

设置默认是(难验证的方向)

判断过程中否定默认

int flag=1;

int n;

for(int i=2;i<=sqrt(n);i++){

   if(n%i==0){

       flag=0;

       break;

   }

}

if(flag)

cout<<"yse";

else

cout<<"no";

```

## 星阵问题

```c++

输入:2

输出:

*

**


**

*


*

**


**

*

输入:3

*

**

***


***

**

*


 *

**

***


***

**

 *

```

## 最大公约数 最小公倍数

### 穷举法

```c++

int a,b;

int ans=1;

for(int i=1;i<=min(a,b);i++){

   if(a%i==0&&b%i==0) ans=i;

}

cout<<ans;


int a,b;

int ans=1;

for(int i=min(a,b);i>=1;i--){

   if(a%i==0&&b%i==0){

       ans=i;

       break;

   }

}

cout<<ans;

```

已知p和q是a和b的最大公约数和最小公倍数

那么p*q=a*b

最小公倍数=a*b/最大公约数

### 辗转相除法

```c++

int a=346,b=220;

346/220=1..126

220/126=1..94

126/94=1..32

94/32=2..30

32/30=1..2

30/2=15...0 当余数为0时,除数就是答案

```


(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%