zoukankan      html  css  js  c++  java
  • C语言考试笔答题部分坑点解析

    1.下面程序中的加注释方式是合法的:

    #include <stdio.h>

    void main()

    { int x/*x初始化*/=0;

      /*打印*/printf("%d",x);

    }

    这种就不合法:

    #incl/*   */ude <stdio.h>

    这样也不合法:

    #include <st/*x初始化*/dio.h>

    2.

    int a=12;

    printf("%d",a+=a-=a*=a);

    输出结果是0

    等号表达式从左往右计算。上式等价于((12+12-24*0

    3.

    以下数组定义不正确的是:

    int a[3][]={(1,2), {0,0}};

    这里的知识点是,数组的行数可以省,列数不能省。

    对于二维数组,如果不用大括号括起来,默认放到第0行。

    4.

    函数定义不能嵌套,但函数调用可以嵌套。

    这个地方我觉得是我理解错了定义的含义,真是不好意思了。

    5.

    C语言字符串比较不能直接用关系运算符进行正确比较。

    所以说,是可以比较的!!!

    如果想正确比较的话,可以用字符串比较函数strcmp

    strcmp(s1,s2);

    它会按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回比较结果。

    相等,返回值=0;字符串1>字符串2,返回值1;字符串1<字符串2,返回值-1

    本函数也可用于比较两个字符串常量,或比较数组和字符串常量。

    6.

    考察宏定义的二义性。顾名思义,二义性就是实际的结果和想得到的结果不一致。

    举个栗子:

    #define multi(a) a*a

    main()

    {

        int i

    i=multi(2+2);

    }

    需要的结果是i = 4*4 = 16, 而实际被解析为  i = 2+2*2+2 = 8

    解决问题:#define SQ(a)  (a)*(a) 则不会产生二义性。

    7.

    数据在内存中是以二进制形式存放的。数值以补码表示。

    整型:一个正数的补码和其原码的形式相同。而负数的补码方式是将其绝对值的二进制形式“按位求反再加1

    实型:在内存中占4个字节,是按照指数形式存储的,实型数据分为小数部分和指数部分,分别存放!计算机用二进制表示小数部分,用2的幂次来表示指数部分!

    字符型:在内存中字符的存储实际上是把字符相对应的ASCII代码放到存储单元中的。而这些ASCII代码值在计算机中也是以二进制形式存放的。这个与整型的存储很相似。因此这两类之间的转换也比较方便!

    8.在作为函数形参时,intcharlong long等类型可混用……只是要注意范围问题。

    9.do while语句中,一旦使用了continue就会跳过后面的循环条件判断……可以达到一直循环的效果。

    10.若没有说明函数类型,默认是int型。

    11.

    char *language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};

    printf("%c ",*language[1]);

    上面的语句定义了一个字符类型的二维数组。输出结果为B

    如果改为

    printf("%s ",language[1]);

    输出结果为BASIC。这是因为定义的是指向数组类型的指针……所以language[1]相当于BASIC这个字符串首字母的地址。

    12.

    设有说明int (*ptr)[M]; 其中ptr是:

    一个指向具有M个整形元素的一维数组的指针。

    13.

    以下是对于指针操作顺序的一些实验:

    int x[10]={0,1,2,3,10,5,6,7,8,9},*p1;

        p1=x+3;

        printf("%d",*p1++);

        printf("%d",*p1);

    上面的语句会输出310。也就是说是*的优先度很低。

    14.fscanf函数的正确调用格式是:文件指针,格式字符串,输入表列。

    15.f(x1,x2+x3,x4,x5);函数调用过程中,含有的实参个数是:4

    16.要打开一个已存在的非空文件“file”用于修改,正确的语句是:

    fp=fopen(“file”,”r+”);

    17.

    char ch;

        scanf("%3c",&ch);

        printf("%c",ch);

    如果输入abc<回车>,输出结果是a。实验之后发现是%3c这种语句在输入里没有意义。

    18.

    下面程序段的运行结果是___3___

    char c[]=" v\will ";

    printf("%d",strlen(c));

    是字符串结束符,之后的字符都不算在长度之内,输出的时候也不会输出。

    19.

    main函数里定义的整形数组初始值是一堆乱码,在问输出结果的题里答案只能是0不要在意。

    20.

    short 2字节 int 4字节

    21.

    实参和形参使用不同的存储单元。

    22.

    #include<stdio.h>

    #include<string.h>

    #include<stdlib.h>

    #define  A 3.5

    #define S(b) A*b*b

    int main()

    {

       int x=1,y=2;

       printf("%4.1f ",S(x+y));

    }

    讲道理,这道题真是对我智力和想象力的考验……答案是7.5

    23.

    else语句总是与和他最近的未配对的if语句匹配。

    24.

    除主函数之外,各函数之间既可以直接递归调用也可以间接递归调用。

    25.

    如果输出语句中写的变量类型与实际类型不符,会出现编译错误。

    26.

    只能在switch和循环体内用break语句。

    27.

    int最大值:

    28.

    当把一个数值在scanf中用八进制和十六进制输出时,无前缀。

    比如11,输出结果就是:

    11,13,b

    29.

    strcpy函数将b赋值给a的时候,如果ba中原本的字符数少,那么a中多几位字符不变。

  • 相关阅读:
    spark编译报错信息简介
    [LintCode]各位相加
    [算法]头条面试—奇数位升序偶数位降序链表排序
    [算法]循环打印矩阵,蛇形矩阵专题
    [LeetCode]146.LRU缓存机制
    [算法]死磕递归和动态规划专题算法
    Storm学习笔记——高级篇
    fail-fast和fail-safe
    阿里巴巴面试之利用两个int值实现读写锁
    [爬虫]Python爬虫进阶
  • 原文地址:https://www.cnblogs.com/Shymuel/p/9130443.html
Copyright © 2011-2022 走看看