c++一些00001

- 万能头文件:

#include<bits/stdc++.h>
优点如下:
    1.在竞赛中节约时间
    2.减少了编写所有必要头文件的工作量
    3.对于使用的每个函数,不用记住GNU C++的所有STL
缺点如下:
    1.不属于GNU C++库的标准头文件,在部分情况下可能会失败
    2.使用它将包含许多不必要的东西,并增加编译时间
    3.这个头文件不是C++标准的一部分,因此是不可移植的,应该避免
    4.编译器每次编译翻译单元时都必须实际读取和分析每个包含的头文件,应该减少这类头文件的使用

- 运算符

在这里插入图片描述

- printf 与%

在这里插入图片描述

- 符号常量

在这里插入图片描述

- 自动类型转换

在这里插入图片描述

- 赋值运算符

在这里插入图片描述

在这里插入图片描述

- 运算符

在这里插入图片描述
在这里插入图片描述

- 怎么获得一个数的百位,十位和个位

百位数:num/100 可以获得,因为 int 是整数型,小数部分会省略。比如 765/100 的结果是7
十位数:num%100/10 。比如765%100先得到65,65/10得到6
个位数:num%10。765%10得到5

- break continue

在多层循环中,一个break语句只跳出当前循环。
continue语句的作用是结束本次循环开始执行下一次循环。

递归函数

递归就是一个函数在它的函数体内调用它自身。
注意递归函数必须有结束条件

例1:任务
猴子第一天摘下N个桃子,当时就吃了一半,还不过瘾,就又多吃了一个。第二天又将剩下的桃子吃掉一半,又多吃了一个。以后每天都吃前一天剩下的一半零一个。到第10天在想吃的时候就剩一个桃子了,问第一天共摘下来多少个桃子?并反向打印每天所剩桃子数。

#include <stdio.h>
int getPeachNumber(int n)  
{
    int num;    
    if(n==10)
    {
       return 1;      
    } 
    else
    {
        num = (getPeachNumber(n+1)+1)*2;  
        printf("第%d天所剩桃子%d个\n", n, num); 
    }
    return num;
}
int main()
{
    int num = getPeachNumber(1);
    printf("猴子第一天摘了:%d个桃子。\n", num);
    return 0;
}

在这里插入图片描述
例2:有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第3个人,又说比第2人大两岁。问第2个人,说比第1个人大两岁。最后 问第1个人,他说是10岁。请问第5个人多大?

程序解析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第5个人岁数,需知道第4人的岁数,依次类推,推到第1人(10岁),再往回推。

#include <stdio.h> 
int dfs(int n) {
    return n == 1 ? 10 : dfs(n - 1) + 2;
}
int main() 
{
    
    printf("第5个人的年龄是%d岁", dfs(5)); 
    return 0;
} 

在这里插入图片描述

- 数组

数组声明:
cpp 数据类型 数组名称[长度];

C语言中的数组初始化是有三种形式的,分别是:
1、 数据类型 数组名称[长度n] = {元素1,元素2…元素n}; int a[3]
2、 数据类型 数组名称[] = {元素1,元素2…元素n}; int a[]
3、 数据类型 数组名称[长度n]; 数组名称[0] = 元素1; 数组名称[1] = 元素2; 数组名称[n-1] = 元素n; int a[8];

ps:如果采用第一种初始化方式,元素个数小于数组的长度时,多余的数组元素初始化为0;

c语言获取数组长度的方法:

int length = sizeof(arr)/sizeof(arr[0]);

(一)[冒泡排序]

升序排序为例冒泡排序的思想:相邻元素两两比较,将较大的数字放在后面,直到将所有数字全部排序。就像小学排队时按大小个排一样,将一个同学拉出来和后面的比比,如果高就放后面,一直把队伍排好。

#include <stdio.h>
int main()
{
    double arr[]={1.78, 1.77, 1.82, 1.79, 1.85, 1.75, 1.86, 1.77, 1.81, 1.80};
    int i,j;
    printf("\n************排队前*************\n");
    for(i=0;i<10;i++)
    {
        if(i != 9)   
            printf("%1.2f, ", arr[i]);  //%1.2f表示小数点前一位,小数点后精确到两位
        else
            printf("%1.2f", arr[i]);    //%1.2f表示小数点前一位,小数点后精确到两位
    }
    for(i=8; i>=0; i--)
    {
        for(j=0;j<=i;j++)
        {
            if( arr[j]>arr[j+1])      //当前面的数比后面的数大时
            {
                double temp;    //定义临时变量temp
                temp=arr[j];//将前面的数赋值给temp
                arr[j]=arr[j+1];             //前后之数颠倒位置
                arr[j+1]=temp;//将较大的数放在后面    
            }                 
        }                
    }
    printf("\n************排队后*************\n");
    for(i=0;i<10;i++)
    {
        if(i != 9)   
            printf("%1.2f, ", arr[i]);  //%1.2f表示小数点前一位,小数点后精确到两位     
        else
            printf("%1.2f", arr[i]);    //%1.2f表示小数点前一位,小数点后精确到两位
    }
    return 0;    
}

(二)[数组查找功能]
当我们购物之后,拎着购物袋回到家,会一一检查购物袋中的物品看是否缺少或者都是想购之物。
那么应用到程序中,可以使用数组查找功能,看看是否存在该数据,如果存在并返回该元素的下标。

#include <stdio.h>
int getIndex(int arr[5],int value)
{
    int i;
    int index;
    for(i=0;i<5;i++)
    {
       /* 请完善数组查询功能 */
       if(arr[i]==value)
        {
            index=i;
            break;
        }  
       index=-1;
    }
    return index;
}
 
int main()
{
    int arr[5]={3,12,9,8,6};
    int value = 8;
    int index = getIndex(arr,value);      //这里应该传什么参数呢?
    if(index!=-1)
    {
        printf("%d在数组中存在,下标为:%d\n",value,index);             
    }
    else
    {
        printf("%d在数组中不存在。\n",value);    
    }
    return 0;    
}

- 字符串与数组

C语言中,是没有办法直接定义字符串数据类型的,但是我们可以使用数组来定义我们所要的字符串。一般有以下两种格式:

char 字符串名称[长度] = “字符串值”;
char 字符串名称[长度] = {‘字符1’,‘字符2’,…,‘字符n’,’\0’};
注意:

1、 []中的长度是可以省略不写的;
2、 采用第2种方式的时候最后一个元素必须是’\0’,’\0’表示字符串的结束标志;
3、 采用第2种方式的时候在数组中不能写中文
4、 在输出字符串的时候要使用:printf(“%s”,字符数组名字);或者puts(字符数组名字);。

  • 字符串函数
    1、 strlen()获取字符串的长度,在字符串长度中是不包括‘\0’而且汉字和字母的长度是不一样的
    2、 strcmp(str1,str2) 把 str1 所指向的字符串和 str2 所指向的字符串进行比较。
    如果返回值小于 0,则表示 str1 小于 str2。
    如果返回值大于 0,则表示 str1 大于 str2。
    如果返回值等于 0,则表示 str1 等于 str2。
    3、 char *strcpy(char *dest, const char *src) 把 src 所指向的字符串复制到 dest。
    4、 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。

- 高效运算位函数_builtin_

- int __builtin_ffs (unsigned int x)
返回x的最后一位1的是从后向前第几位,比如7368(1110011001000)返回4。
-int __builtin_clz (unsigned int x)
返回前导的0的个数。
- int __builtin_ctz (unsigned int x)
返回最后一个1后面的0个个数,和__builtin_clz相对。
- int __builtin_popcount (unsigned int x)
返回二进制表示中1的个数。
- int __builtin_parity (unsigned int x)
返回x的奇偶校验位,也就是x的1的个数模2的结果。

#include <bits/stdc++.h>
using namespace std;

int  main()
{
    int n=1;  //1
    int m=8;  //1000
    int w=7;  //0111
    cout<<__builtin_ffs(n)<<"  "<<__builtin_ffs(m)<<"  "<<__builtin_ffs(w)<<endl;  //返回x的最后一位1的是从后向前第几位
    cout<<__builtin_ctz(n)<<"  "<<__builtin_ctz(m)<<"  "<<__builtin_ctz(w)<<endl;  //返回后面0的个数
    cout<<__builtin_popcount(n)<<"  "<<__builtin_popcount(m)<<"  "<<__builtin_popcount(w)<<endl;  //返回二进制表示中1的个数
    cout<<__builtin_parity(n)<<"  "<<__builtin_parity(m)<<"  "<<__builtin_parity(w)<<endl;  //返回x的奇偶校验位,偶数个输出0

}

在这里插入图片描述

ceil函数

功 能: 返回大于或者等于指定表达式的最小整数
头文件:math.h
说明:
float ceil ( float value )
返回不小于 value 的下一个整数,value 如果有小数部分则进一位。ceil() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。

ceil(x)返回不小于x的最小整数值(然后转换为double型)。

floor(x)返回不大于x的最大整数值。

round(x)返回x的四舍五入整数值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值