zoukankan      html  css  js  c++  java
  • 2019.1.18专业课笔记

    https://www.baidu.com/s?wd=刷算法常用的函数

     =============

    1. 位运算相关技巧知识点
    2. if else记得用三木运算符替换   加减的初试化为0,乘除的初始化为1;注意给的数据要判断大小顺序
       
      1. n--替换循环
        1. 要循环的命令写在for条件中第三个位置。  要初始化的命令写在for条件第一个位置。
           
    3. 说了是正整数 的直接用 unsigned int 替换掉int
    4. 交换两个数据的方法                 C语言交换两个变量数值的几种方法 - ljx_5489464的博客 - CSDN博客
      https://blog.csdn.net/ljx_5489464/article/details/50042571

    用c语言实现两数交换的四种方法 - Bit Up - CSDN博客
    https://blog.csdn.net/qq_41209741/article/details/82261889

    其中最后一种位操作没看哦,加油!

     位运算——强大得令人害怕 - Daioo 随笔 - CSDN博客
    https://blog.csdn.net/deaidai/article/details/78167367

    1.   1、隐式转换
          C在以下四种情况下会进行隐式转换:
             1、算术运算式中,低类型能够转换为高类型。
             2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。
             3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。
             4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。

      2、算数运算的隐式转换
          算数运算中,首先有如下类型转换规则:
             1、字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用) 。
             2、short型转换为int型(同属于整型) 。
             3、float型数据在运算时一律转换为双精度(double)型,以提高运算精度(同属于实型) 。
          其次,有下面的规则。

    2.     当不同类型的数据进行操作时,应当首先将其转换成相同的数据类型,然后进行操作,转换规则是由低级向高级转换。转换规则如下图所示:

       

    =============

    列个提纲:
    1.cstdio是面向“文件”的,或者不强调文件和非文件流的区别,默认流就是可以关联外部文件,至于文件的外延是啥就不管,扔给宿主环境了。从std::FILE这个名字以及printf/scanf接口描述基于fprintf/fscanf上就可以看出来。
    iostream头只是包含了一坨东西,封装标准输入输出流,和文件流(在<fstream>)不通用。
    2.cstdio不知道iostream,而iostream知道cstdio并且默认同步,此外提供有限的接口摆脱关系(sync_with_stdio)。因为这个接口约束,iostream要脱离cstdio(的实现)是不太可能的。
    3.cstdio有orientation的概念;iostream是否wide是直接写死在静态类型的模板参数里的,并且底层的流不只支持char和wchar_t字符类型。
    4.iostream底层公开了相对完整的缓冲接口(如std::basic_filebuf),可以自行扩展;cstdio只能笼统地设置缓冲模式和提供提供区的接口,但多了行缓冲的概念(_IOLBF)。
    5.iostream和std::locale交互。C标准库的<locale.h>(对应C++的<clocale>)提供locale-specific behavior,和cstdio不直接关联。两者不是一回事。
    因为这个原因,iostream能直接编解码字符串,而cstdio不能处理和wide-oriented无关的编码,需要<wchar.h>(对应C++的<cwchar>)或C11的<uchar.h>的例程显式调用。
    6.iostream体系提供了基于字符串提供了“内存流”(主要是std::stringstream),而cstdio这部分一般只是内部实现,如果需要得自己造。
    7.iostream底层通过继承和重写protected虚函数提供实现。cstdio这部分是内部实现,不提供与之对应的扩展功能。
    8.两者都实现了流的状态,但不尽相同。iostream显式区分bad和fail,但cstdio没有。
    9.iostream提供特定的打开模式的组合,而cstdio使用字符串参数。前者无法直接扩展;后者解析较低效,虽然不需要修改类型就可扩展但也存在实现的运行时兼容性问题。
    10.除了检查流的状态,iostream处理错误可选使用异常。cstdio处理错误依赖返回值和流状态。
    11.iostream的格式输入输出基于重载,静态分派且类型安全,可以实现得更高效;cstdio的格式输入输出使用的是领域特定语言,需要运行时解析,通常比较低效,且实现的运行时兼容问题修复较困难。
    但后者同时提供运行时配置可修改的格式的功能,而前者没有。
     
     
     
     
    1、while(scanf("%d",&n),n)

    功能:当n为0时中止循环

    这里要先说一下逗号表达式:逗号表达式的值是逗号后面的那个数。例如x=(5,6),则x=6。

    while(scanf("%d",&n),n)括号里的语句其实就是个逗号表达式,它的返回值是n的值,所以这个语句就相当于while(n),n=0时跳出循环,写成这样是为了输入。

    如果是while(scanf("%d%d",&n,&m,),n,m),那么就相当于while(m)。
    2、while(scanf("%d",&n)!=EOF)和while(~scanf("%d",&n))

    功能:当读到文件结尾时中止循环

    scanf语句的返回值为成功赋值的个数,例如scanf("%d %d",&a,&b),如果a、b均赋值成功返回值为2,只是a赋值成功返回1,a、b都不成功返回0,出错的时候返回EOF。

    ~是按位取反,scanf语句如果没有输入值就是返回-1,按位取反结果为0。

    注意:这两种方法在输入字母的时候会变成死循环,而scanf("%d %d",&a,&b)==2不会。windows下可通过按“Ctrl +Z”、linux下可通过“Ctrl + D”来来达到“输入”文件结束符的效果,结束循环。
    3、while(scanf("%d",&n)==1)

    功能:赋值失败,跳出循环

    这个应该很好理解了吧,如果是scanf("%d%d",&n,&m就是while(scanf("%d %d",&a,&b)==2)。
    =============

    while (~scanf("%d%d",&n,&m))

    while (~scanf("%d%d",&n,&m))等效于 while (scanf("%d%d",&n,&m)!=EOF)

    ~是按位取反

    scanf的返回值是输入值的个数

    如果没有输入值就是返回-1

    -1按位取反结果是0

    while(~scanf("%d", &n))就是当没有输入的时候退出循环

    ===========

    while(scanf("%d",&n),n)和while(scanf("%d",&n)!=EOF)和while(scanf("%d",&n)==1)和while(~scanf("%d",&n)

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39993896/article/details/78158536

    第一个遇到0结束;

    第二个和第四个一样,在windows下按ctrl+Z终止,在linux下按ctrl+D终止;

    第三个是指正确接收对应的变量个数,要是while(scanf("%d%d",&n,&n1)==2)这时候就为2了,在windows下按ctrl+Z终止,在linux下按ctrl+D终止。

    ============

     

    2011 多项式求和

    顺着递归

    你也可以顺着递归,这就随你喜欢了。

    答案没看懂。

    puts和putchar

    输入输出格式相关函数

    注意判断输入的数据是否需要处理(排列顺序、正负判定,然后再进行运算,

    2013多做推理题~ 这个推理拿纸笔,手推一遍、

    连用两个三目运算符可以替换 if elseif else

    int* 是类型说明

    ()是强制转换运算符

    (int *)a是表示把a强制转换成一个int型的指针。
    如果以前a是char型,编译器会认为a指向的那一个字节的内存单元是a里面的东西
    把a转换成int型,编译器会认为a指向的连续四个字节里的东西都是a里面的。

    *(int *)a就是取a指向的内容的意思,跟*a的那个*作用一样

    return *(int*)a-*(int*)b;就是返回a b两个地址中的 整型 数据 的差!

    ceil(x)            返回     不小于x的最小整数值(返回值为浮点型)。 
    floor(x)          返回     不大于x的最大整数值(返回值为浮点型)。 
    round(x)        返回        x的四舍五入整数值(返回值为浮点型)。

    C语言运算符优先级(超详细) - yuliying的专栏 - CSDN博客
    https://blog.csdn.net/yuliying/article/details/72898132

    注意其中三目运算符是右结合性

     运算符优先级_百度百科
    https://baike.baidu.com/item/运算符优先级/4752611?fr=aladdin

    #include <stdio.h>

    #include <stdlib.h>

    int cmp(const double *a, const double *b)

    { return *a > *b ? 1 : *a < *b ? -1 : 0; }

    int main(void)

    { int n, i; double x, y[100];

    while (scanf("%d", &n) != EOF) {

    for (i = 0 ; i < n ; i++)

    scanf("%lf", y + i);   ..//关于数组中元素的输入表达方式,所有的表达方式。!!!!等待search

    qsort(y, n, sizeof(double), cmp);

    for (x = 0, i = 1 ; i < n - 1 ; i++)

    x += y[i];

    printf("%.2f ", x / (n - 2)); }

    return 0; }

    #include <stdio.h>

    int main(void)

    { int n, i;

    double min, max;

    double x, y;

    while (scanf("%d", &n) != EOF)

    { scanf("%lf", &x);

    min = max = x;

    for (i = 1 ; i < n ; i++) {

    scanf("%lf", &y);

    x += y; // 不要总想着开数组,只要把整个和加起来,然后减去最大和最小值就可以。循环的时候一次性找着最大值最小值,可以办到的啊~

    if (y > max)

    max = y;

    if (y < min) min = y; }

    printf("%.2lf ", (x - min - max) / (n - 2));

    }

    return 0; }

    http://www.mamicode.com/info-detail-2323132.html

    http://www.pinlue.com/article/2018/04/2914/586227517711.html

    沙耶加是最棒的也是最强的,今天换我来拯救世界!
  • 相关阅读:
    Scrapy框架
    描述符类
    完整的blog设计过程
    钉钉机器人设置步骤
    homework登录和支付mock两个接口
    jsonpath的用法和nnlog的使用
    mp4格式文件转码后处理(qt-faststart).md
    html5视音频标签参考.md
    ffmpeg文档43-开发者
    ffmpeg文档42-参考/看
  • 原文地址:https://www.cnblogs.com/wanghui626/p/10286857.html
Copyright © 2011-2022 走看看