精华内容
下载资源
问答
  • c语言考研复试
    千次阅读
    2020-10-29 18:39:45

    C语言考研复试知识点整理

    1.由float x=3e-6,y=3e-6;不能得到x= =y的逻辑值为真。
    解析:float类型的变量只能进行>或<运算,不能进行==运算
    2.自增和自减运算:
    int a=5;a++;使用时a=5;使用完a=a+1;a=6;
    int a=5;++a;使用前a=a+1;使用时a=6;
    3.只有在使用时才为该类型变量分配内存的存储类型是auto和register
    4.形参和实参的区别和联系
    (1)形参变量只有在函数被调用时才会分配内存,调用结束后,立刻释放内存,所以形参变量只有在函数内部有效,不能在函数外部使用。
    (2)实参可以是常量、变量、表达式、函数等,无论实参是何种类型的数据,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参,所以应该提前用赋值、输入等办法使实参获得确定值。
    (3)实参和形参在数量上、类型上、顺序上必须严格一致,否则会发生“类型不匹配”的错误。当然,如果能够进行自动类型转换,或者进行了强制类型转换,那么实参类型也可以不同于形参类型。
    (4)函数调用中发生的数据传递是单向的,只能把实参的值传递给形参,而不能把形参的值反向地传递给实参;换句话说,一旦完成数据的传递,实参和形参就再也没有瓜葛了,所以,在函数调用过程中,形参的值发生改变并不会影响实参。

    更多相关内容
  • c语言考研复试 面试常见问题集合
  • 考研复试C语言

    2019-01-18 20:25:59
    哈尔滨工业大学(本部威海深圳)计算机专业854考研复试C语言
  • 以及前几年的复试题。还有408的相关科目总结。同时包括严蔚敏C语言程序设计课后习题答案。以及学校C语言期末考试题。还有自己总结的一些知识点。文件很全面,比较实用。 还有面试的会被问道的问题,都做了总结。
  • 适合于考研复试简单上机练习,或者边学习C语言课本边练习的初学者。有C语言的课后练习题,也有稍微高于课后练习题难度的题目,属于入门题目。
  • 考研复试编程题

    2019-02-22 13:39:56
    考研复试编程题统计,C语言实现数据结构,指针实现字符串逆转等
  • 安徽大学考研复试科目C语言考试试卷,信号与信息处理,电子与通信工程,电路,集成电路专业复试攻略
  • 适用于考研C语言线上复试问答~
  • 查找题目描述:输入数组长度 n输入数组 a[1...n]输入查找个数m输入查找数字b[1...m]输出 YES or NO 查找有则YES 否则NO 。输入:输入有多组数据。每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<...

    查找

    题目描述:

    输入数组长度 n

    输入数组 a[1...n]

    输入查找个数m

    输入查找数字b[1...m]

    输出 YES or NO 查找有则YES 否则NO 。

    输入:

    输入有多组数据。

    每组输入n,然后输入n个整数,再输入m,然后再输入m个整数(1<=m<=n<=100)。

    输出:

    如果在n个数组中输出YES否则输出NO。

    样例输入:

    5

    1 5 2 4 3

    3

    2 5 6

    样例输出:

    YES

    YES

    NO

    AC代码:

    这道题没任何难度,就是两个for循环实现即可

    #include

    #include

    int main()

    {

    int a[101], b[101];

    int n, m, i, j, flag;

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

    {

    //接收输入数组

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

    {

    scanf("%d", a + i);

    }

    //接收查找数组

    scanf("%d", &m);

    for(j = 0; j < m; j ++)

    {

    scanf("%d", b + j);

    }

    //判断查找存在

    for(j = 0; j < m; j ++)

    {

    flag = 0;

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

    {

    if(b[j] == a[i])

    {

    flag = 1;

    break;

    }

    }

    if(flag)

    {

    printf("YES\n");

    }else

    {

    printf("NO\n");

    }

    }

    }

    return 0;

    }

    如果现在,我绝对会利用Java的HashMap去做这道题目

    查找第K小数

    题目描述:

    查找一个数组的第K小的数,注意同样大小算一样大。

    如  2 1 3 4 5 2 第三小数为3。

    输入:

    输入有多组数据。

    每组输入n,然后输入n个整数(1<=n<=1000),再输入k。

    输出:

    输出第k小的整数。

    样例输入:

    6

    2 1 3 5 2 2

    3

    样例输出:

    3

    AC代码:

    考察的就是简单的快速排序,上我的AC代码

    #include

    #include

    int partition(int *A, int left, int right);

    void quicksort(int *A, int begin, int end);

    int main()

    {

    int i, j, n, k;

    int a[1001];

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

    {

    //接受stdin输入数据

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

    {

    scanf("%d",a + i);

    }

    scanf("%d",&k);

    //快速排序

    quicksort(a, 0, n - 1);

    //输出第k小的数

    for(i = 0, j = 0; i < n && j < k; i ++)

    {

    if(a[i] != a[i + 1])

    {

    if(j == k - 1)

    {

    printf("%d\n",a[i]);

    break;

    }else

    {

    j ++;

    }

    }

    }

    }

    return 0;

    }

    void quicksort(int *A, int begin, int end)

    {

    int pivot;

    if(begin < end)

    {

    pivot = partition(A, begin, end);

    quicksort(A, begin, pivot - 1);

    quicksort(A, pivot + 1, end);

    }

    }

    int partition(int *A, int left, int right)

    {

    int stand = A[left];

    while(left < right)

    {

    while(left < right && A[right] >= stand)

    {

    right --;

    }

    if(left < right)

    {

    A[left ++] = A[right];

    }

    while(left < right && A[left] <= stand)

    {

    left ++;

    }

    if(left < right)

    {

    A[right --] = A[left];

    }

    }

    A[left] = stand;

    return left;

    }

    打牌

    题目要求:

    题目描述:

    牌只有1到9,手里拿着已经排好序的牌a,对方出牌b,用程序判断手中牌是否能够压过对方出牌。

    规则:出牌牌型有5种

    [1]一张 如4 则5...9可压过

    [2]两张 如44 则55,66,77,...,99可压过

    [3]三张 如444 规则如[2]

    [4]四张 如4444 规则如[2]

    [5]五张 牌型只有12345 23456 34567 45678 56789五个,后面的比前面的均大。

    输入:

    输入有多组数据。

    每组输入两个字符串(字符串大小不超过100)a,b。a字符串代表手中牌,b字符串代表处的牌。

    输出:

    压过输出YES 否则NO。

    样例输入:

    12233445566677

    33

    样例输出:

    YES

    注意事项:

    开始提交了3次,都是wa,发现有一种测试用例我无法通过,也是上个代码错误的地方,测试用例如下:

    样例输入:1122335566778899(不连续)12345

    样例输出:yes

    AC代码:

    #include

    #include

    #include

    int main()

    {

    char a[101];

    char b[101];

    char ch, key;

    int i, lena, lenb, flag;

    int count[11];

    while(scanf("%s",a) != EOF)

    {

    //接收回车符

    ch = getchar();

    //接收出牌

    scanf("%s",b);

    ch = getchar();

    //长度

    lena = strlen(a);

    lenb = strlen(b);

    //初始化

    memset(count,0,sizeof(count));

    //遍历手牌

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

    {

    count[a[i] - '0'] ++;

    }

    //检测对方出牌

    switch(lenb)

    {

    case 1:

    case 2:

    case 3:

    case 4:

    flag = 0;

    for(key = b[0] - '0' + 1; key <= 9; key ++)

    {

    if(count[key] >= lenb)

    {

    flag = 1;

    break;

    }

    }

    break;

    case 5:

    flag = 0;

    for(key = b[0] - '0' + 1; key < 9; key ++)

    {

    if(count[key] > 0 && count[key + 1] > 0 && count[key + 2] > 0 && count[key + 3] > 0 && count[key + 4] > 0)

    {

    flag = 1;

    break;

    }

    }

    break;

    }

    //打印输出

    if(flag)

    {

    printf("YES\n");

    }else

    {

    printf("NO\n");

    }

    }

    return 0;

    }

    展开全文
  • 计算机考研复试C语言常见面试题

    千次阅读 多人点赞 2021-04-28 19:41:34
    本文是我2021年考研时准备的复试面试题,现在拿出来给大家分享一下 觉得好的点个赞哦,毕竟当初我也是整理了好久,改了好几次版本呢 祝大家都上岸!!!! P.S. 我当初整理的时候是word,直接复制过来的话代码...

    本文是我2021年考研时准备的复试面试题,现在拿出来给大家分享一下

    觉得好的点个赞哦,毕竟当初我也是整理了好久,改了好几次版本呢

    祝大家都上岸!!!!

    P.S. 我当初整理的时候是word,直接复制过来的话代码不会自动变成CSDN的代码块,所以代码我是一段一段重新标记为CSDN代码段的,这样大家看起来舒服点

    C语言基础 目录

    1、static关键字的作用 2

    2、C++和C的区别 2

    3、Java的方法重载 2

    4、重写和重载 2

    5、面向对象编程 3

    6、c++可以有多个父类 3

    7、指针与引用 4

    8、struct和class的区别(C++) 4

    9、c++模板 4

    10、内存泄漏 5

    11、智能指针 6

    12、野指针 7

    13、new与malloc的区别 7

    14、堆栈区 7

    15、虚函数与纯虚函数 8

    16、为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数 8

    17、函数指针 9

    18、fork函数 9

    19、类构造和析构顺序 9

    20、静态函数和虚函数的区别 10

    21、静态多态与动态多态 10

    22、const修饰普通函数与成员函数的目的 10

    23、C语言参数压栈顺序 10

    24、STL六大组件 10

    25、C++源文件从文本到可执行文件经历的过程 10

     

     

    1、static关键字的作用

    1. 隐藏

    当同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。如果加了static,就会对其它源文件隐藏。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。

    1. 保持变量内容持久

    如果作为static局部变量在函数内定义,它的生存期为整个源程序,但是其作用域不会发生改变,只能在定义该变量的函数内使用该变量。退出该函数后,尽管该变量还继续存在,但不能使用它。

    1. 初始化

    Static变量默认初始化为0.

    对一个类中成员变量和成员函数来说,加了static关键字,则此变量/函数就没有了this指针了,必须通过类名才能访问。此时表示不依赖对象调用,它不与任何的对象相联系,由该类型的所有对象共享访问,故不存在this指针。

    2、C++和C的区别

    设计思想上:

    C++是面向对象的语言,而C是面向过程的结构化编程语言

    语法上:

    C++具有封装、继承和多态三种特性

    C++相比C,增加了许多类型安全的功能,比如强制类型转换、

    C++支持范式编程,比如模板类、函数模板等

    3、Java的方法重载

    就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

    4、重写和重载

     

    5、面向对象编程

    (1)封装:将数据或函数集合在一个类中类。

    (2)继承:子类可以继承父类的一些数据和函数。

    (3)多态:运行时,可以通过指向基类的指针,调用派生类中的方法。

    意义:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

    当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法

    class A{
    
    public:
    
        A(){}
    
        virtual void foo(){
    
            cout<<"This is A."<<endl;
    
        }
    
    };
    
    
    
    class B: public A{
    
    public:
    
        B(){}
    
        void foo(){
    
            cout<<"This is B."<<endl;
    
        }
    
    };
    
    
    
    int main(){
    
        A *a = new B();
    
        a->foo();
    
    }

    输出是B的输出,如果改为B *a = new B();则此时输出一致,但这个时候不叫做多态。

    6、c++可以有多个父类

    class A{
    
    public:
    
    A(){cout << "A Constructor!bai" << endl;}
    
    ~A(){cout << "A Destructor!" << endl;}
    
    };
    
    class B{
    
    public:
    
    B(){cout << "B Constructor!" << endl;}
    
    ~B(){cout << "B Destructor!" << endl;}
    
    };
    
    //基类的构造函数按照继承时声明的先后顺序从前到后执行,
    
    最后执行自己的构造函数;析构函数则按照相反的顺序执行。
    
    class C:public A, public B {
    
    public:
    
    C(){cout << "C Constructor!" << endl;}
    
    ~C(){cout << "C Destructor!" << endl;}
    
    };
    
    int main(){
    
    C c;
    
    }

    输出是

    A Constructor!

    B Constructor!

    C Constructor!

    C Destructor!

    B Destructor!

    A Destructor!

    如果在每一类中都写deal函数,则最终只能执行c的deal函数。

    7、指针与引用

    指针有自己的空间

    指针初始化可以为NULL

    指针可以有多级指针(存在指向指针的指针)

    指针初始化后可以再指向其他对象

     

    引用只是一个别名

    引用初始化时必须有一个对象

    引用只能一级(没有引用引用的引用)

    引用初始化后不能再引用其他对象

    8、struct和class的区别(C++)

    共同点:struct和class都可以定义成员和函数,都具有继承、多态。

    不同点:

    class默认权限是private,struct默认权限是public。

    class可以声明类模板,而struct不可以。

    9、c++模板

    模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。

    函数模板:

    template <class T>
    
    T Max (T a, T b) {
    
        return a < b ? b:a;
    
    }

    这样不用区分a和b是int还是double

    类模板:

    template <class T>
    
    class Stack {
    
      private:
    
        vector<T> elems;     // 元素
    
      public:
    
        void push(T const&);  // 入栈
    
        void pop();               // 出栈
    
        T top() const;            // 返回栈顶元素
    
        bool empty() const{       // 如果为空则返回真。
    
            return elems.empty();
    
        }
    
    };
    
    
    
    template <class T>
    
    void Stack<T>::push (T const& elem)
    
    {
    
        // 追加传入元素的副本
    
        elems.push_back(elem);    
    
    }
    
    
    
    template <class T>
    
    void Stack<T>::pop ()
    
    {
    
        if (elems.empty()) {
    
            throw out_of_range("Stack<>::pop(): empty stack");
    
        }
    
        // 删除最后一个元素
    
        elems.pop_back();         
    
    }
    
    
    
    template <class T>
    
    T Stack<T>::top () const
    
    {
    
        if (elems.empty()) {
    
            throw out_of_range("Stack<>::top(): empty stack");
    
        }
    
        // 返回最后一个元素的副本
    
        return elems.back();      
    
    }

    用的时候跟STL一样

    Stack<int> intStack

    10、内存泄漏

    内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

    11、智能指针

    智能指针的作用是管理一个指针,因为普通指针申请的空间在函数结束时常常忘记释放,从而造成内存泄漏。使用智能指针可以很大程度上的避免这个问题,因为智能指针就是一个类,当超出了类的作用域时,类会自动调用析构函数,析构函数会自动释放资源。

    智能指针的作用原理就是在函数结束时自动释放内存空间,不需要手动释放内存空间。

    C++里面的四个智能指针: auto_ptr, unique_ptr,shared_ptr, weak_ptr 其中后三个是C++11支持,并且第一个已经被C++11弃用。

    1. auto_ptr

    (C++98的方案,C++11已经抛弃)采用所有权模式。

    auto_ptr<string> p1 (new string ("I reigned lonely as a cloud."));

    auto_ptr<string> p2;

    p2 = p1;

    此时访问p2正常,但是访问p1则无法正常访问,会出错。因为此时p2指向p1的内存地址,而p1则改为指向其他地址(实测指向0地址)

    1. unique_ptr

    (替换auto_ptr)unique_ptr实现独占式拥有或严格拥有概念,保证同一时间内只有一个智能指针可以指向该对象。此时上述代码会直接报错

    1. shared_ptr

    shared_ptr实现共享式拥有概念。多个智能指针可以指向相同对象,该对象和其相关资源会在“最后一个引用被销毁”时候释放。它使用计数机制来表明资源被几个指针共享。当我们调用release()时,当前指针会释放资源所有权,计数减一。当计数等于0时,资源会被释放。

    1. weak_ptr

    当两个对象同时使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄露。为了解决循环引用导致的内存泄漏,引入了弱指针weak_ptr,weak_ptr 是一种不控制对象生命周期的智能指针, 它指向一个 shared_ptr 管理的对象. 进行该对象的内存管理的是那个强引用的shared_ptr, weak_ptr只是提供了对管理对象的一个访问手段。它是对对象的一种弱引用,不会增加对象的引用计数,和shared_ptr之间可以相互转化。

    注意:我们不能通过weak_ptr直接访问对象的方法,比如B对象中有一个方法print(),我们不能这样访问,pa->pb_->print(),因为pb_是一个weak_ptr,应该先把它转化为shared_ptr,如:

    shared_ptr<B> p = pa->pb_.lock();

    p->print();

    补充:智能指针泄露问题

    当两个对象相互使用一个shared_ptr成员变量指向对方,会造成循环引用,使引用计数失效,从而导致内存泄漏。

    class B;    //声明
    
    class A{
    
    public:
    
        shared_ptr<B> pb_;
    
        ~A(){
    
            cout << "A delete\n";
    
        }
    
    };
    
    class B{
    
    public:
    
        shared_ptr<A> pa_;
    
        ~B(){
    
            cout << "B delete\n";
    
        }
    
    };
    
    void fun(){
    
        shared_ptr<B> pb(new B());
    
        shared_ptr<A> pa(new A());
    
        cout << pb.use_count() << endl; //1
    
        cout << pa.use_count() << endl; //1
    
        pb->pa_ = pa;
    
        pa->pb_ = pb;
    
        cout << pb.use_count() << endl; //2
    
        cout << pa.use_count() << endl; //2
    
    }
    
    int main(){
    
        fun();
    
        return 0;
    
    }

    解决方案:为了解决循环引用导致的内存泄漏,引入了weak_ptr弱指针,weak_ptr的构造函数不会修改引用计数的值,从而不会对对象的内存进行管理,其类似一个普通指针,但不指向引用计数的共享内存,但是其可以检测到所管理的对象是否已经被释放,从而避免非法访问。把类A里面的shared_ptr pb_,改为weak_ptr pb_即可

    12、野指针

    野指针就是指向一个已删除的对象或者所指向的空间是访问受限的空间的指针。

    产生原因:

    (1)指针变量未初始化

    (2)指针释放后之后未置空

    (3)指针操作超越变量作用域

    13、new与malloc的区别

    (1)new分配内存按照数据类型进行分配,malloc分配内存按照指定的大小分配;

    (2)new返回的是指定对象的指针,而malloc返回的是void*,因此malloc的返回值一般都需要进行类型转化。

    (3)new分配的内存要用delete销毁,malloc要用free来销毁;delete销毁的时候会调用对象的析构函数,而free则不会。

    (4)new是一个运算符,malloc是一个库函数。

    (5)new如果分配失败了会抛出异常,而malloc失败了会返回NULL。

    14、堆栈区

    stack栈区主要是存储函数的局部变量,然后程序结束后操作系统自行回收但是栈区容量比较小。一级缓存。从高地址向低地址移动。

    heap堆区是程序里动态分配的内容,堆区的内存容量大,使用灵活,使用后要自行回收。容易产生内存碎片。二级缓存,速度比一级缓存慢。从低地址向高地址移动。

     

    15、虚函数与纯虚函数

    定义一个函数为虚函数,不代表该函数没有被实现,而是为了允许用基类的指针来调用子类的这个函数。

    定义一个函数为纯虚函数,才代表函数没有被实现。定义纯虚函数是为了实现一个接口,起到一个规范的作用,继承这个类必须实现这个函数。

    class A  {  
    
    public:  
    
        virtual void foo()  {  
    
            cout<<"A::foo() is called"<<endl;  
    
        }  
    
    };  
    
    class B:public A  {  
    
    public:  
    
        void foo()  {  
    
            cout<<"B::foo() is called"<<endl;  
    
        }  
    
    };  
    
    int main(void)  {  
    
        A *a = new B();  
    
        a->foo();   // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!  
    
        return 0;  
    
    }

    纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”

    如:virtual void funtion1()=0

    如果A中的virtual去掉以后,以上的结果将会是A的foo

    16、为什么析构函数必须是虚函数?为什么C++默认的析构函数不是虚函数

    析构函数设置为虚函数可以保证我们new一个子类时,可以使用基类指针指向该子类对象,释放基类指针时可以释放掉子类的空间,防止内存泄漏。

    C++默认的析构函数不是虚函数是因为虚函数需要额外的虚函数表和虚表指针,占用额外的内存。而对于不会被继承的类来说,其析构函数如果是虚函数,就会浪费内存。因此C++默认的析构函数不是虚函数,而是只有当需要当作父类时,设置为虚函数。

    17、函数指针

    有了指向函数的指针变量后,可用该指针变量调用函数

    int Func(int x);   /*声明一个函数*/
    
    int (*p) (int x);  /*定义一个函数指针*/
    
    p = Func;          /*将Func函数的首地址赋给指针变量p*/

    调用的时候直接(*p)(a, b)即可

    优点:便于分层设计、利于系统抽象、降低耦合度以及使接口与实现分开。

    比如提供了一个函数的原型,具体的实现用调用者来设定

    void test( void (*Fn)()){
    
        Fn();
    
    }
    
    void print(){
    
    // 用户自己写
    
    }
    
    void QQ(){
    
    // 用户自己写
    
    }
    
    test(print)
    
    test(QQ)

    18、fork函数

    用途:创建一个和当前进程映像一样的进程

    fork可能有三种不同的返回值:

    (1)fork向父进程返回最新创建的子进程的进程ID;

    (2)fork向新创建的子进程返回0,以告知它已经被成功创建;

    (3)如果出现错误,fork返回一个负值;

    创建新进程成功后,系统中出现两个基本完全相同的进程,这两个进程执行没有固定的先后顺序,哪个进程先执行要看系统的进程调度策略。

    19、类构造和析构顺序

    构造:

    基类成员对象的构造函数

    基类的构造函数

    子类成员对象的构造函数

    子类的构造函数

     

    析构:

    子类的析构函数

    子类成员的析构函数

    基类的析构函数

    基类成员的析构函数

    两者正好相反

    20、静态函数和虚函数的区别

    静态函数在编译的时候就已经确定运行时机,虚函数在运行的时候动态绑定。虚函数因为用了虚函数表机制,调用的时候会增加一次内存开销。

    21、静态多态与动态多态

    静态多态有两种实现方式:函数重载与函数模板的使用。

    静态多态:也称为编译期间的多态,编译器根据函数实参的类型,可推断出要调用哪个函数,如果没有对应函数则出现编译错误。

    动态多态主要是调用虚函数时,根据虚函数表确定具体调用的模块。

    动态多态:即运行时的多态,在程序执行期间判断所引用对象的实际类型,根据其实际类型调用相应的方法。

    22、const修饰普通函数与成员函数的目的

    成员函数指的是class中的函数。

    const修饰的函数表明函数调用不会对对象做出任何更改,事实上,如果确认不会对对象做更改,就应该为函数加上const限定,这样无论是const对象还是普通对象都可以调用该函数。因为非const对象是可以调用const函数的,而const对象无法调用非const函数。

    23、C语言参数压栈顺序

    从右到左

    24、STL六大组件

    (1)容器:各种数据结构,如Vector

    (2)算法:各种常用算法如Sort

    (3)迭代器

    (4)仿函数

    (5)配接器(适配器)

    (6)分配器

    25、C++源文件从文本到可执行文件经历的过程

    预处理阶段:对源代码文件中头文件、宏定义进行分析和替换,生成.i文件。

    编译阶段:将预编译文件转换成特定汇编代码,生成.s文件。

    汇编阶段:将汇编文件转化成机器码,生成.o或者.obj文件。

    链接阶段:连接所需要的库,形成最终的可执行目标文件,即.out或者.exe文件。

     

     

    展开全文
  • (考研复试)C语言笔记

    2021-05-21 16:13:07
    《(考研复试)C语言笔记》由会员分享,可在线阅读,更多相关《(考研复试)C语言笔记(17页珍藏版)》请在人人文库网上搜索。1、1:用高级语言编写的程序叫做源程序,然后用编译程序吧源程序翻译成二进制的目标程序,然后...

    《(考研复试)C语言笔记》由会员分享,可在线阅读,更多相关《(考研复试)C语言笔记(17页珍藏版)》请在人人文库网上搜索。

    1、1:用高级语言编写的程序叫做源程序,然后用编译程序吧源程序翻译成二进制的目标程序,然后将该目标程序与系统函数库以及其他目标程序连接,形成可执行程序。2:算法五个特点:确定性,有穷性,输入,输出,可行性。3:程序流程图、N-S盒图、伪代码4:int 无论有符号无符号,都是16位Short 无论是有符号还是无符号都是16位Long 无论是有符号还是无符号都是32位Float 32位 double 64位,long double 128位。一个整型常量后面加u就是无符号,加l就是长整型5:t,b退格,r移到本行开头6:048,A65,a97,差值327:级别charnum39:结构体在定义的时候,不。

    2、能student I,j,k;应该Struct student I,j,k;40:void *malloc(int size)41:共用体所占内存等于最长成员的长度。42:枚举类型:Enum weekdaysum,mon,tue,wed,thu,fti,stuEnum weekday I,j,k;定义时候自动赋值0-6;printf(“%d”,sum) 输出0也可以强制赋值Enum weekdaysum=7,mon,tue,wed,thu,fti,stu则mon自动为8,tue自动为9但是一个整数不能在定义外直接赋值枚举,i=7;是错的,应该要i=(enum weekday)2,相当于i=tu。

    3、e;43:typedef struct int I,int j,int kNUMNUM sum;即可,不用structTypedef int NUM100;意思是 NUM表示一个长度为100的整形数组, 到时候NUM n,就表示,n为一个长度为100的整型数组。Typedef int *NUM;意思是 NUM表示一个整形指针, 到时候NUM n,就表示,n为一个整型指针。NUM a10表示 a为一个整形指针数组。Typedef int (*NUM)();意思是 NUM表示一个指向函数指针, 到时候NUM n,就表示,n为一个指向函数指针。44:位与,可以清零,可以取中间某位,45:异或:特定位。

    4、翻转(即与11111111异或),保留原值(即与00000000异或),交换两个值不用临时变量A=ab;b=ba;a=ab;46:右移特殊,如果为无符号,就左边补0,如果有,就正数补0,负数补1;47:位段:Struct akunsigned a:2;(必须是unsigned)Unsigned b:3;Unsigned c:4;Int o;Unsigned d:5;Unsigned :0;Unsigned e:6;Int I; Struct ak data;一个abc占9位,那个i从第三个字节开始算,d占5位,但是Unsigned :0;表示下一个位段从下一个单元开始放,e占6位,从下一个单元。

    5、开始放i;所以data一共占用8个字节如果赋值data.a=9;就会自动把8的低2位给data.a,a里面就是01,再Printf(“%d”, data.a)输出148:输入一个字符串的时候,用回车结束,但是这个回车也会被接受,要用一个getchar来收下回车符,比如Scanf(“%s”,filename)Ch=getchar();49:fp=fopen(“a1”,”r”)打开失败则返回NULLfclose(fp);成功返回0,失败返回EOFfputc(ch,fp)把字符ch写到fp中,失败返回EOFch=fgetc(fp)从指定文件读入一个字符,失败返回EOFfeof(fp)判断文件是否结束。

    6、,fread(buffer,size,count,fp)从buffer数组中读入count个数字进fp文件中,size表示数组中每个元素占字节数。fwrite(buffer,size,count,fp)fprintf(fp,”%d”,d)把整型变量d输出到fp文件中fprintf(fp,”%d”,&d),从磁盘文件中读入一个整形putw(10,fp)把整数10输出到fp中i=getw(fp)fgets(str,n,fp)从fp文件中读n-1个字符,放入str中fputs(str,fp)把str放到fp中rewind(fp),是fp回到文件开头fseek(fp,100,1)从fp文件当前位置开始。

    7、,往后移100个字节。0表示文件开始,2表示文件末尾i=ftell(fp),i为文件当前对文件开头的偏移量、50:r 只读 w只写 a追加 Rb只读(打开的是二进制文本) wb只写 ab 追加R+,w+,a+都是读写,但是r+需要该文件已经存在,w+的时候会新建一个文件,a+打开后指针在文件末尾 51:find是标识变量。52:定义一个指针数组,并分别存入四个字符串的首地址。53:*(a+i)表示ai或者数组a的第i个元素。50:a表示二维数组首地址,a0表示第0行首地址,a00表示第0行第0列数组元素。54:sqrt返回的数据类型是double55:while(K=0)循环体一次也不执行56。

    8、:c语言的编译系统对宏的处理是在源程序中其它正式编译之前进行。57:char str=”ABC”,*p=str;P=p+3;Printf(“%d”,strlen(strcpy(p,”ABCD”);答案是4;58:u(u=(ab)?a:b)c)?u:c59:printf(“%d”,y=y/x);输出的是运算后的y的值60:argc是命令行参数的个数。61:以0开头的都是8进制,比如int x=010,就是x=8;62:返回值为char的函数,return 0是可以的63:strlen中,t b 等都按一个字符算。64:构建杨辉三角:void yh(int a1818)int j,k;for(j=。

    9、1;j0)?f:n;答案无论是n0还是n异或或(8)逻辑运算:与或(9)问号(右结合)(10)+=,|=。其中算术运算高于位预算(右结合)(12)逗号81: 括起来的叫 程序块,其后不需要分号。82:else默认和最近的一个if匹配,但是可以用打乱匹配。If()if()Else83:字符串转整数N=0;While(si!=0)N=10*n+(si-0);Return n;84:把数组n转化为字符串,Si+=n%10+0;85:do while循环体至少被执行一次。86:goto语句用于深度循环的跳出。87:函数与主函数在同一个源文件,若函数声明与后面定义的返回值不一类型,就会检测出错误,但是如。

    10、果不在同一个源文件,就不会检测错误。88:外部变量的好处就是在函数之间提供一种代替函数参数与返回值的数据交换,但是这样容易破坏函数之间的独立性。如果两个函数必须共享数据但是互不调用对方,这种情况下最好用外部变量。比如栈和队列。89:计算器的时候,/和-的左右字符串必须加以区别。90:计算器中,输入一个数字,比如123.456,但是输入2的时候,2想知道下一个是数字还是操作符,如果是数字,则把1和2还有3都放入字符串中,如果是操作符,就把si中的1,2变成数字赋值,那么这就需要一个预输入的操作,判断下一个输入的是数字还是操作符,用缓冲区思想可以解决。取数规则:如果缓冲区中有货,就从缓冲区中取,如。

    11、果没,就调用输入函数。如果预读入的是一个字符,就放进缓冲区。读入123.456的6,看到下一个读入的是+号,就把+号放进缓冲区,把123.456给化成数字然后复制,然后下一次取值就从缓冲区中取出+号。91:.c文件里面是完整的源文件,.h是把诸多个.c文件的共享部分集中在一起。#undef getchar 取消getchar的宏定义、92:条件编译:一般来说源文件中所有行都参加编译,但是希望一部分代码在满足条件时候再编译,于是有了条件编译#ifdef#else#endif采用条件编译,可以减少被编译的语句,减少目标程序的长度。93:Char *p sizeof(p)=4;Char a100 sizeof(a)=400;Char s1=A,B,C,D,E,F; sizeof(s1)=6char s2=ABCDEF; sizeof(s2)=7;。

    展开全文
  • C语言考研真题汇编

    2018-08-17 16:27:05
    C语言名校考研真题的汇编,包括中央财经大学、北京航空航天大学、首都师范大学、武汉科技大学、广东工业大学、沈阳航空航天大学、沈阳农业大学、华侨大学,此为第一部分
  • 2019考研复试面试问题:你的最大缺点是什么(2018-12-31 17:24:42)标签:19考研考研复试2019考研复试面试问题:你的最大缺点是什么怎么答考官如果问最大缺点一般会问:What is your greatest weakness/shortcoming?...
  • 中国科学技术大学计算机专业软件工程考研复试面试题,
  • 一、复试评分复试中的口试要求主要是从以下两个方面进行评价:① 考查学生理解并回答有关日常生活、家庭、工作、学习等问题的能力(3分钟)。② 考查学生连续表达的能力。考生从所给的问题中选择一个话题,就此话题...
  • 考研复试常见问题(C/C++、Java)

    千次阅读 2021-05-21 09:44:49
    C语言与C++的主要区别:C语言是面向过程编程的典范,C语言以过程为中心,用算法进行驱动。C++是继承C语言而来的,不仅包含面向过程编程,也包含了面向对象编程,支持类、封装、继承、多态等特性。指针与变量的自增自...
  • 2021年硕士研究生考试复试C语言科目考试大纲一、考查目标C语言是计算机科学中的一门重要的基础理论课,该课程考核的内容主要包括数据类型、运算符与表达式、顺序、选择和循环控制结构、数组、函数、指针、结构体和...
  • 2016511C ...................................... 2 2016511C ...................................... 8 2016511C .................................... 14 2016511C .......................................
  • 作者:Doreen1991 时间:2014-4-3 00:05标题:2014暨大计算机系复试详细流程与题目上午:c语言编程、专业英语(10:00--12:30)一,c语言考试地点:信科院楼某机房。题目分值:总共四道题目,每题25分作答形式:一是使用...
  • 一、选择题1. 设有定义:inta=0,b=l, c=l;以下选项中,表达式值与其他三个不同的是( )。A.b=a==cB.a=b=cC.a=c==bD.c=a!=c答:A【解析】赋值运算结合性为由右向左结合,成功实现赋值后以左值为返回值。...
  • 计算机考研复试C语言简答题

    万次阅读 多人点赞 2020-03-22 17:53:50
    C语言数据类型有哪几类?基本数据类型包括哪几类? C语言提供了丰富的数据类型,可以根据这些数据类型构造出不同的结构。 C中的数据类型包括:基本类型、构造类型、指针类型、空类型等。 其中基本类型包括:整型、...
  • #include <stdio.h> int main() { int M, N; int i, j; int isPrime; int cnt = 0, sum = 0; scanf("%d %d", &M, &N); for (i = M; i <= N; i++) { isPrime = 1; for (j = 2;...}

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,439
精华内容 975
关键字:

c语言考研复试