精华内容
下载资源
问答
  • C语言易错

    千次阅读 2019-12-29 17:25:45
    C语言易错题集合 1. 选择题 1,执行下列语句后a和b的值分别为( C )。 int a, b, c; a=b=c=1; ++a|| ++b && ++c; A: 错误 1 B: 2 2 C: 2 1 D: 1 1 2,若希望当A的值为奇数时,表达式的值为”真”,A的值为...

    C语言易错题集合

    1. 选择题

    1,执行下列语句后a和b的值分别为( C )。

    int a, b, c;
    a=b=c=1;
    ++a|| ++b && ++c;
    

    A: 错误 1
    B: 2 2
    C: 2 1
    D: 1 1

    2,若希望当A的值为奇数时,表达式的值为”真”,A的值为偶数时,表达式的值为”假”,则以下不能满足要求的表达式是( C )。

    A: A%2==1 
    B: !(A%2==0)
    C: !(A%2)
    D: A%2

    3,已知 int x=10, y=20, z=30; 以下语句执行后x, y, z的值是( B )。

     if(x>y)
      z=x;x=y;y=z;
    

    A: x=10,y=20,z=30 
    B: x=20,y=30,z=30
    C: x=20,y=30,z=10 
    D: x=20,y=30,z=20

    4,判断char型变量cl是否为小写字母的正确表达式是( D )。

    A: 'a'<=cl<='z'
    B: (cl>=a)&&(cl<=z)
    C: ('a'>=cl)||('z''<=cl)
    D: (cl>='a')&&(cl<='z')

    5,下述程序的输出结果是( C)

    main()
    {
     int a=0,b=0,c=0;
     if(++a>0||++b>0)  ++c;
     printf("%d,%d,%d",a,b,c);
    }
    

    A: 0,0,0
    B: 1,1,1
    C: 1,0,1
    D: 0,1,1,

    6,语句:printf(“%d”,(a=2)&&(b= -2));的输出结果是(D)。

    A: 无输出
    B: 结果不确定
    C: -1
    D: 1

    7, 若有定义:int a=3,b=2,c=1;并有表达式:①a%b,a>b>c,b&&c+1.则表达式值相等的是(C)

    A: ①和②
    B: ②和③
    C: ①和③
    D: ③和④

    8,请阅读以下程序:

    main()
    {
       int a=5,b=0,c=0;
       if(a=b+c) printf(***\n”);
       else      printf(“$$$\n”);
    }
    

    以上程序(D)。

    A: 有语法错不能通过编译
    B: 可以通过编译但不能通过连接
    C: 输出***
    D: 输出$$$

    9,
    w=1,x=2,y=3,z=4,则条件表达式w<x? w:y<z? y:z的值是( D)

    A: 4
    B: 3
    C: 2
    D: 1

    10,以下程序的输出结果是(B)。

    main()
    {int x=2,y=-1,z=2;
     if(x<y)
       if(y<0) z=0;
       else    z+=1;
     printf(%d\n”,z);
    }
    

    A: 3
    B: 2
    C: 1
    D: 0

    11,
    对下述程序,正确的判断是( B)

    main()
    {
     int x,y;
     scanf("%d,%d",&x,&y);
     if(x>y)
      x=y;y=x;
     else
      x++;y++;
     printf("%d,%d",x,y);
    }
    

    A: 有语法错误,不能通过编译
    B: 若输入3和4,则输出4和5
    C: 若输入4和3,则输出3和4
    D: 若输入4和3,则输出4和5

    12,设int x,a,b;则下面if语句中错误的是(B )

    A: if(a=b) x++;
    B: if(a=
    C: if(a-b) x++;
    D: if(x) x++;

    13,以下程序输出结果是(B)

    main( )
    {
     int x=1,y=0,a=0,b=0;
     switch(x)
     {
        case 1:switch(y)
         {
           case 0 :a++;break;
        case 1 :b++;break;
         }
        case 2:a++;b++;break;
        case 3:a++;b++;
     }
     printf("a=%d,b=%d",a,b);
    }
    

    A: a=1,b=0
    B: a=2,b=1
    C: a=1,b=1
    D: a=2,b=2

    14,
    int a=0,b=5;执行表达式++a||++b,a+b后,a,b和表达式的值分别是(C)

    A: 1,5,7
    B: 1,6,7
    C: 1,5,6
    D: 0,5,7

    15 能正确标识“当x的取值在[1,10]或[200,210]范围内当真,否则为假”的表达是(C)

    A: (x>=1)&&(x<=10)&&(x>200)&&(x<=210)
    B: (x>=1)||(x<=10)||(x>=200)||(x<210)
    C: (x>=1)&&(x<=10)||(x>=200)&&(x<=210)
    D: (x>=1)||(x<=10)&&(x>200)||(x<=210)

    16有如下程序段

    int a=14,b=15,x;
    char c=‘A’;
    x=(a&&b)&&(c<‘B’);
    

    执行该程序段后,x的值为(D)。

    A: true
    B: false
    C: 0
    D: 1

    17下面判断正确的是____________。(A)

    A: char *a="china";等价于char *a; a="china";
    B: char str[10]={“china”};等价于char str[10];str[]={“china”};
    C: char *s=”china”;等价于char *s; *s=”china”;
    D: char c[4]=”abc”,d[4]=”abc”;等价于char c[4]=d[4]=”abc”;

    18,若有说明:char *language[]={“FORTRAN”,”BASIC”,”PASCAL”,”JAVA”,”C”};
    则表达式*language[1]>*language[3]比较的是______________。(C)

    A: 字符F和字符P
    B: 字符串BASIC和字符串JAVA
    C: 字符B和字符J
    D: 字符串FORTRAN和字符串PASCAL

    19,若有说明:int*p1,*p2,m=5,n;以下程序段正确的是( D)

    A: p1=&m;p2=&p1
    B: p1=&n;scanf("%d",*p1)
    C: scanf("%d",n); *p1=n
    D: p1=&n; *p1=m

    20,若有以下定义和语句:

    int a[]={l,2,3,4,5,6,7,8,9,10},*p=a;
    

    则值为3的表达式是_________.(A)

    A: p+=2,*(p++)
    B: p+=2,*++p
    C: p+=3,*p++
    D: p+=2,++*p

    21,若有以下定义,则赋值正确的是( C)。

    int a ,b , *p;
    float c, *q;
    

    A: p=&c
    B: q=p
    C: p=NULL
    D: q=new int

    22,已有函数max(a,b),为了使函数指针变量p指向函数max,则下面选项中赋值方法正确的是(A)。

    A: p=max
    B: *p=max
    C: p=max(a, b)
    D: *p=max(a, b )

    23,有以下程序

    void  fun(char  *c,int  d)
    {
       *c=*c+1;
       d=d+1;
       printf(%c,%c,”,*c,d)}
    
    main()
    {     char  b=’a’,a=’A’;
          fun(&b,a);
          printf(%c,%c\n”,b,a)}
    

    程序的运行结果是( B )

    A: a,B,B,a
    B: b,B,b,A
    C: a,B,a,B
    D: b,B,B,A

    24, p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是(B)

    A: c=*p1+*p2
    B: p2=c
    C: p1=p2
    D: c=*p1*(*p2)

    25,以下正确的定义语句和赋值语句是_________。(B)

    A: int b[3][5],(*p)[3],(*q)[5];p=b;q=b;
    B: float b[3][5],*p[3];p[0]=b[0];p[2]=*b+4;
    C: double b[3][5],s[5][3],*q;q=b;s=q;
    D: int b[10],*q;char *s;q=b;s=b;

    26,以下程序有错,错误原因是___________。(A)

     main()
     {int *p,i;
    char *q,ch;
    p=&i;   q=&ch;   *p=40;   p=q;}
    

    A: p和q的类型不一致,不能执行p=q;语句
    B: p中存放的是地址值,因此不能执行p=40;语句
    C: q没有指向具体的存储单元,所以*q没有实际意义
    D: q虽然指向了具体的存储单元,但该单元中没有确定的值,所以不能执行p=q; 语句

    27,若有以下定义,则数值不为3的表达式是__________。( C )

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

    A: x[3]
    B: p1=x+3,*p1++
    C: p1=x+2,*(p1++)
    D: p1=x+2,*++p1

    28设有以下定义:

    int a[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};
     int (*prt)[3]=a,*p=a[0];
    

    则下列能够正确表达数组元素a[1][2]的表达式是( D )。

    A: *((*prt+1))
    B: *(*(p+5))
    C: (*prt+1)+2
    D: *(*(a+1)+2)

    29
    有以下程序

    #include <stdio.h>
    main()
    {
     int a[5]={2,4,6,8,10},*p,**k;
     p = a;  k = &p;
     printf("%d",*(p++));
     printf("%d\n",**k); 
    }
    

    程序运行后输出结果是(D)

    A: 46
    B: 22
    C: 44
    D: 24

    30 p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是( B)

    A: c=*p1+*p2
    B: p2=c
    C: p1=p2
    D: c=*p1*(*p2)

    31,若有以下定义和语句,则对a数组元素地址的正确引用为________________。©

     int a[2][3], (*p)[3];
     p=a;
    

    A: *(p+2)
    B: p[2]
    C: *(p[1]+1)
    D: (p+1)+2

    32,有以下程序

    #include <stdio.h>
    main()
    {
     int a[5]={2,4,6,8,10},*p,**k;
     p = a;  k = &p;
     printf("%d",*(p++));
     printf("%d\n",**k); 
    }
    

    程序运行后输出结果是( D)

    A: 46
    B: 22
    C: 44
    D: 24

    33,
    已定义以下函数:

    int fun(int *p){return *p;}

      fun函数返回值是 (  C )
    

    A: 一个整数
    B: 形参p的地址值
    C: 形参p中存放的值
    D: 不确定的值

    34,
    有以下程序

    void ss(char *s,char t)
    { while*s)
    { if*s= =t)*s=t-'a'+'A';
    s++;
    }
    }
    main()
    { char str1[100="abcddfefdbd",c='d';
    ss(str1,c); printf("%s\n",str1);
    }
    

    程序运行后的输出结果是(B)

    A: ABCDDEFEDBD
    B: abcDDfefDbD
    C: abcAAfefAbA
    D: Abcddfefdbd

    35,若有以下定义,则数值不为3的表达式是__________。©

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

    A: x[3]
    B: p1=x+3,p1++
    C: p1=x+2,
    (p1++)
    D: p1=x+2,*++p1

    36,有如下程序

    main()
    { char s[]="ABCD", *p;
    for(p=s+1; p<s+4; p++)printf("%s",p);}
    

    该程序的输出结果是(D )

    A: ABCDBCDCDD
    B: ABCD
    C: BCD
    D: BCDCDD

    37,对于两个类型相同的指针变量,不能进行( A )运算?

    A: +
    B: -
    C: =
    D: ==

    38,
    main函数的正确说明形式是___________。(B)

    A: main(int argc,char *argv)
    B: main(int abc,char **abv)
    C: main(int argc,char argv)
    D: main(int c,char v[])

    39,下面说明不正确的是(D)

    A: char a[10]="china";
    B: char a[10],*p=a;p="china"
    C: char *a;a="china";
    D: char a[10],*p;p=a="china"

    40, 若要对a进行+ +运算,则a应具有下面说明______(D)

    A: int a[3][2];
    B: char * a [ ]={“12”,”ab”};
    C: char (*a)[3]
    D: int b[10],*a=b;

    41,若有以下程序段,

      int c1=1, c2=2, c3;
        c3=1.0/c2*c1;
    

    则执行后,c3中的值是(A )。

    A: 0
    B: 0.5
    C: 1
    D: 2

    42,设有以下语句:

    struct st{int n; struct st *next;};
    static struct st a[3]={5, &a[1], 7, &a[2], 9, ‘\0},*p;
    p=&a[0];
    

    则表达式( D)的值是6。

    A: p++ ->n 
    B: p->n++
    C: (*p).n++
    D: ++p->n

    43, 下面四个选项中,均是合法整型常量的选项是( A)。

    A: 160 -0xffff 011
    B: -0xcdf 01a 0xe
    C: -01986 012 0668
    D: -0x48a 0x2e5 0x

    44,
    在下列叙述中,错误的一条是( B )。

    A: 全局变量存放在静态存储区中,在程序开始执行时就给全局变量分配存储区,程序执行完才释放
    B: 在有参函数中,形参在整个程序一开始执行时便分配内存单元
    C: 用数组名作函数实参和形参时,应在主调用函数和被调用函数中分别定义数组
    D: 在同一个源文件中,全局变量与局部变量同名时,在局部变量的作用范围内,全局变量不起作用

    45,
    以下程序的输出结果是(B)。

    main()
    {int x=2,y=-1,z=2;
     if(x<y)
       if(y<0) z=0;
       else    z+=1;
     printf(%d\n”,z);
    }
    

    A: 3
    B: 2
    C: 1
    D: 0

    46,设有以下定义和语句,则输出结果是(指针变量占2个字节)( B)。

    struct  date
    {long *cat;2字节)
     struct date *next;2字节)
     double dog;(8字节)
    }too;
    printf(%d”, sizeof(too));
    

    A: 20
    B: 16
    C: 14
    D: 12

    47,若输入1.5、2.5,以下程序的输出结果为(C)。

    main( )
    {int max(float x, float y);
     float a, b;
     int c;
     scanf("%f, %f" , &a, &b);
     c=max(a, b);
     printf("%d", c);
    }
    max(float x, float y)
    {float z;
     z=x>y ? x : y;
     return(z);
    }
    

    A: 1
    B: 2.5
    C: 2
    D: 3

    48,语句while(!E);中的表达式!E等价于( A)

    A: E0
    B: E!=1
    C: E!=0
    D: E
    1

    49,以下程序的输出结果是( )。

    main()
    {
     int x=2,y,z;
     x*=3+1;
     printf("%d,",x++);
     x+=y=z=5;
     printf("%d,",x);
     x=y=z;
     printf("%d\n",x);
    }
    

    A: 8,14,1
    B: 8,14,5
    C: 8,13,5
    D: 9,14,5

    50,以下程序的输出结果是( )。

    main()
    {int i=1,j=3;
     printf("%d,",i++);
      {int i=0;
       i+=j*2;
       printf("%d,%d,",i,j);
      }
     printf("%d,%d\n",i,j);
    }
    

    A: 1,6,3,1,3
    B: 1,6,3,2,3
    C: 1,6,3,6,3
    D: 1,7,3,2,3

    51,fgetc函数的作用是从指定文件读入一个字符,该文件的打开方式必须是(C )

    A: 只写
    B: 追加
    C: 读或读写
    D: 答案b和c都正确

    52,
    下面程序段的运行结果是( A)。

    a=1;b=2;c=2;
    while(a<b<c) {t=a;a=b;b=t;c--;}
    printf("%d, %d, %d", a, b, c);
    

    A: 1,2,0
    B: 2,1,0
    C: 1,2,1
    D: 2,1,1

    53,以下程序的输出结果是(C)。

    #include<stdio.h>
    #include<math.h>
    main()
    {
     int a=1,b=4,c=2;
     float x=10.5, y=4.0, z;
     z=(a+b)/c+sqrt((double)y)*1.2/c+x;
     printf("%f\n", z);
    }
    

    A: 14.000000 
    B: 15.400000
    C: 13.700000 
    D: 14.900000

    54,若要“向文本文件尾增加数据”,在fopen函数中应使用的文件方式是( B )。

    A: “ab+”
    B: “a”
    C: “ab”
    D: “a+”

    55,能正确表示逻辑关系:”a≥10或a≤0”的C语言表达式是( D )。

    A: a>=10 or a<=0 
    B: a>=0|a<=10
    C: a>=10&&a<=0 
    D: a>=10||a<=0

    56,对下述程序,正确的判断是( A )

    main()
    {
     int x,y;
     scanf("%d,%d",&x,&y);
     if(x>y)
      x=y;y=x;
     else
      x++;y++;
     printf("%d,%d",x,y);
    }
    

    A: 有语法错误,不能通过编译
    B: 若输入3和4,则输出4和5
    C: 若输入4和3,则输出3和4
    D: 若输入4和3,则输出4和5

    57,只能向终端输出一个字符的函数是( B )。

    A: printf函数
    B: putchar函数
    C: getchar函数
    D: scanf函数

    58,有如下程序

    main( )
    { float x=2.0,y;
      if(x<0.0) y=0.0;
      else if(x<10.0) y=1.0/x;
           else y=1.0;
      printf(%f\n”,y);
    }
    

    该程序的输出结果是( C )。

    A: 0.000000
    B: 0.250000
    C: 0.500000 
    D: 1.000000

    59,以下程序的输出结果是(D )。

    #include<stdio.h>
    void fun(float *p1,float *p2, float *s)
    {s=(float *)calloc(1, sizeof(float));
     *s=*p1+*(p2++);
    }
    main()
    {float a[2]={1.1, 2.2}, b[2]={10.0, 20.0}, *s=a;
     fun (a, b, s);
     printf(%f\n”, *s);
    }
    

    A: 11.100000 
    B: 12.100000
    C: 21.100000
    D: 1.100000

    60,
    以下选项中,能定义s为合法的结构体变量的是( )。

    A) typedef  struct  abc 
    {
    double a;
    char b[10]}s;        
    
    B) struct
    {
    double  a;
    char b[10]}s;
    C) struct  ABC
    {
    double  a;
    char  b[10]}
    ABC  s;
    
    D) typedef struct ABC
    {
    double  a;
    char  b[10]}
    

    A: 在题目描述中
    B: 在题目描述中
    C: 在题目描述中
    D: 在题目描述中

    61,设有如下定义:

    struct  sk
    {int a; float b;} data, *p;
    

    若有p=&data,则对data中的成员a的正确引用是(B)。

    A: (*p).data.a 
    B: (*p).a 
    C: p->data.a 
    D: p.data.a

    62,
    设有以下说明语句:

    struct lie
    {
     int a;
     float b;
    }st;
    

    则下面叙述中错误的是(C )。

    A: struct是结构类型的关键字
    B: struct lie 是用户定义的结构类型
    C: st是用户定义的结构类型名
    D: a和b都是结构成员名
    ## 判断题
    1,字符指针是指向字符串的指针,可以用字符串常量给字符指针赋值。 对

    2,“==”表示关系运算符等于, “=”表示赋值运算符。 对

    3.,C语言的基本组成单位是语句 错

    4,指针可以赋值,给指针赋值时一定要类型相同,级别一致。 对

    5,C语言的基本组成单位是语句()。 错

    6, C语言中,关键字及编译预处理命令用小写字母书写。 错

    7,指针的类型是它所指向的变量或对象的类型。 对

    8,两个指针在任何情况下相减都是有意义的。 对

    9, 表达式*p++的运算顺序为先自增后取值。 错

    10,指针、数组名、函数名都是地址。 对

    11,一个指针变量的值是一个地址值。 对

    12, 指针可以加上或减去一个int型数,也可以加上一个指针。 错

    13, 通过变量名或地址访问一个变量的方法称为“直接访问”方式。 对

    14,指向同一数组的两个指针p1,p2相减的结果与所指元素的下标相减的结果是相同的。 对

    15 函数指针所指向的是程序代码区。 对

    16, 如果两个指针的类型相同,且均指向同一数组的元素,那么它们之间就可以进行加法运算。 错

    17,语句“int p;”中的p的含义为取值。 错

    18,C语言中,只能用下标来引用数组元素。 错

    19,如果两个指针的类型相同,且均指向同一数组的元素,那么它们之间就可以进行加法运算。 错

    20, C语言中的文件是一种流式文件,读写时均以字符为单位。 对

    21结构体和共用体成员的应用都可能引用最低一级的成员。 对

    22,对于数值型数组来说,可以引用整个数组。 错

    23,用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。 对

    24,将整数值赋值给枚举变量时不需要作强制类型转换。 错

    25,枚举类型是一种基本的数据类型 错

    26, 结构体变量作参数时是地址传递。 错

    27,定义结构体typedef struct one { int a;}s; s a;则a为结构体变量 对

    28,结构体和共用体成员的应用都可能引用最低一级的成员。 对

    29,结构体数组不可以在定义时进行初始化。 错

    30,表达式c=fgetc(fp)!=EOF的功能是从fp指向的文件中读取字符,并判断文件是否结束。 对

    31, 函数原型说明中,省略形参变量或者将形参变量写成其它名称不影响程序的正确性。 对

    32,C语言函数返回类型的默认定义类型是void 错

    ## 函数题
    1,二维数组交换两行值功能函数的实现问题
    现在有一个程序如下,要求完成对应的函数change(),该函数有三个参数,分别是二维数组arr和两个整数u、w,函数功能是要求实现将二维数组arr[][N]中行标为u和w的两行元素交换位置,交换规则是相同的列进行交换。已知该二维数组的行数和列数都为N,注意:行标和列标都从0开始。
    #include <stdio.h>
    #define N 10
    void change(int arr[][N], int u,int w)
    {//请在此完成函数,u,w都是下标}
    将两数组的指针传入change函数,在函数中将两指针对应的数组内容进行调换;

    2,矩阵主对角线的平均值
    题目描述:
    输入一个n*n的矩阵,要求计算对角线的平均值,结果保留两位小数。
    输入:
    输入只有一个用例,第一行表示矩阵行数(也是列数),接下来n行,每行n个整数,表示矩阵的元素。
    输出:
    用一行输出主对角线元素的平均值,结果保留两位小数(四舍五入)。
    根据二维数组的组数和每组个数尽行处理,使其对角数相加。

    3,题目描述

    密码:密码被盗,后果很严重。现在发现安全的密码至少应该满足下面两个条件:

    (1).密码长度大于等于8,且不要超过16。

    (2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。

    这四个字符类别分别为:

    1.大写字母:A,B,C…Z

    2.小写字母:a,b,c…z

    3.数字:0,1,2…9;

    4.特殊符号:~,!,@,#,$,%,^
    使用for循环进行多次判断,使用if语句和sizeof()判断密码位数是否合格,在用fou循环判断每个字符是否合格,用4个初始数当他们有3个非0就合格;

    展开全文
  • 以下代码段的输出是什么?for(inti=10;i>1;i/=2){ printf("%d",i++); } 解析: 开始走循环: i = 10打印i++ 10,之后i = 11; i = 11 / 2 i = 5 打印i++ 5,之后i = 6;...i = 4 / 2 i =...

    以下代码段的输出是什么?
    for ( int i=10; i> 1; i /=2 ) {

        printf("%d ", i++);

    }

     解析:

    开始走循环:

                         i = 10 打印i++   10,之后i = 11;

    i = 11 / 2       i = 5  打印i++    5,之后i = 6;

    i = 6 / 2         i = 3   打印i++    3,之后i = 4;

    i = 4 / 2         i = 2 打印 i++   2,之后i = 1 ;

    i=1 的时候,与i > 1,条件不成立,程序结束。

    故:打印的结果为:10  5  3  2 

     

     

     

    展开全文
  • C语言易错题集 第四部一、位操作相关 一、位操作相关 执行"int x=1;int y=~x;"语句后,y的值为? A 1 B 0 C -1 D -2 答案: D x = 00000001 ~x = 11111110,~x为负数,负数在计算机中用补码表示,所以符号位不变,...

    一、位操作相关

    执行"int x=1;int y=~x;"语句后,y的值为?
    
    A  1
    B  0
    C -1
    D -2
    
    答案:   D
    
    x = 00000001
    ~x = 11111110,~x为负数,负数在计算机中用补码表示,所以符号位不变,取反加1
    y = 100000010
    

    二、switch()相关

    若以下选项中的变量a,b,y均以正确定义并赋值,则语法正确的switch语句是?
    A
    switch(a*a+b*b)
    { defaultbreak;
      case 3 : y=a+b; break;
      case 2 : y=a-b; break;
    }
    B
    switch(a+b)
    { case 1case 3 : y=a+b;break;
      case 0case 4 : y=a-b;}
    C
    switch(a+9)
    { case a : y=a-b;
      case b : y=a+b;
    }
    D
    switch a*b
    { case 10 : y=a+b;
      default : y=a-b;}
    
    答案 :   AB
    
    C  case a:  a是变量  case b:  b是变量
    

    三、输出相关

    
    以下程序的输出结果是( )。
    main()
    { 
     char x=040;
     printf("%o\n",x<<1);
    }
    
    A  100
    B  80
    C  64
    D  32
    
    答案:   A
    040 以零开头 固是8进制为32 32<<1 左移1位 相当于扩大1倍 为 64 64转化为8进制为 100
    

    四、实数相关

    以下选项中合法的实型常量是?
    A   0
    B   3.13e-2.1
    C   .914
    D   2.0*10
    
    答案:   C
    
    A选项为整型数据。B选项中e后面必须为整数。D选项是表达式,不是常量,所以选择C。
    

    在这里插入图片描述

    五、指针&a相关

    下面代码会输出什么()
    int main(int argc, char **argv)
    {
        int a[4] = {1, 2, 3, 4};
        int *ptr = (int *)(&a + 1);
        printf("%d", *(ptr - 1));
    }
    A   1
    B   2
    C   3
    D   4
    
    答案:   D
    
    这边主要考察的是数组指针和数组首地址的问题。
    &a是数组指针,a是数组首地址。
    而指针的+1,增加的是1个指针类型的长度。比如&a是数组指针,(&a + 1)增加的是1数组的长度。
    所以题目中第四步的ptr指向的是a[4]的位置。
    而(ptr - 1)减少的是1个数据元素的长度。第五步ptr指向的是a[3],页就是4
    
     a 与 &a 的值是一样的,但意思不一样,a是数组首元素的首地址,也就是a[0]的首地址, &a是数组的首地址。 
     a+1是数组下一元素的首地址,即a[1]的首地址,    所以输出2  
     &a+1是下一个数组的首地址,   
    

    六、指针访问数组元素相关

    char s[3][4];
    则下列对数组元素s[i][j]的各种引用形式中,正确的是哪些?
    A   * (s+i)[j]
    B   * (&s[0][0]+4 * i+j)
    C   * ((s+i)+j)
    D   * ( * (s+i)[j])
    
    答案:   B
    
    &s[0][0]得到的是首元素的地址,
    &s[0][0]+4 * i得到的是i行首元素的地址
    &s[0][0]+4 * i+j得到的是s[i][j]的地址&s[i][j] 
    * (&s[0][0]+4 * i+j)得到的就是s[i][j]的值。
    
    这道题的另外一种写法就是*(*(s+i)+j)
    A  *(a+i)[j],错误的原因是(a+i)结束后下一步运算是(a+i)[j],
    而不是*(a+i),正确写法是(*(a+i))[j]
    

    七、转义字符相关

    语句printf(“a\bre\’hi\’y\\\bou\n”);的输出结果是()。
    
    A   a\bre\’hi\'y\\\bou
    B   a\bre\’hi\’y\bou
    C   re’hi’you
    D   abre’hi’y\bou
    
    答案:   C
    
    首先要明确该字符串中包含的转义字符,”a \b re \’ hi \' y \\ \b ou \n”中的转义
    
    字符共有6个,其中’\b’是退格符,输出时将光标往左边回退一个位置,
    
    ‘\’’为单引号字符,’\\’为\字符,’\n’为回车换行符。所以显示的结果为C。
    

    八、类型提升问题

    以下代码执行后,val的值是___:
    
    unsigned long val = 0;
    char a = 0x48;
    char b = 0x52;
    val = b << 8 | a;
    
    A   20992
    B   21064
    C   72
    D   0
    
    答案:   B
    

    在这里插入图片描述

    九、是不是正确的浮点数相关

    下面四个选项中,均是不合法的浮点数的选项是().
    
    160.   0.12     e3
    123    2e4.2    .e5
    -.18   123e4    0.0
    -e3    .234     1e3
    
    答案:   B
    A   e3没有尾数  其他两个都是浮点数
    B   123是整数  2e4.2 阶码不是整数   .e5没有尾数
    C   都是浮点数
    D   -e3没有尾数 其他都都是浮点数   
    

    十、define相关

    以下程序的输出结果是:
    #define M(x,y,z) x*y+z
    main()
    {
           int a=1, b=2, c=3;
           printf("%d\n",M(a+b,b+c,c+a));
    }
    A   19
    B   17
    C   15
    D   12
    
    答案:   D
    分析:#define的边际效应,直接展开,变成a+b*b+c+c+a=12
    

    十一、隐式转换相关

    下列代码的输出结果是
    int i = -1;
    unsigned j = 1;
    if (j > i)
        printf(" (j>i)成立\n");
    else
        printf(" (j>i)不成立\n");
     
    if (i < j)
        printf(" (i<j)成立\n");
    else
        printf(" (i<j)不成立\n");
    A  (j>i)成立,(i<j)成立
    B  (j>i)不成立,(i<j)成立
    C  (j>i)成立,(i<j)不成立
    D  (j>i)不成立,(i<j)不成立
    
    答案:   D   int隐式的要转换为unsigned int   1000  0001  反码;  1111  1110 
    补码:1111 1111   大于  j
    

    十二、while相关

    若有以下程序
    #include<stdio.h>
    main( )
    { 
        int a=-2,b=0;
        while(a++) ++b;
        printf("%d,%d\n",a,b);
    }
    则程序的输出结果是?
    
    A   1,1
    B   1,2
    C   2,1
    D   2,2
    
    答案:   B
    第一次while判断条件中a++,先用后加,-2不为0条件为真,执行a的自加与++b操作,
    a的值变为-1,b的值变为1。第二次while判断后,a的值变为0,b的值变为2。
    第三次while判断条件为假,但是仍要执行自加操作,即值为1,跳出循环。打印12

    十三、++相关

    int a=4,则对于表达式++(a++)的结果说法正确的是()
    
    A   结果为5
    B   结果为6
    C   结果为7
    D   以上不都是
    
    答案:    D
    
    a++的结果是4,然后进行++4是不对的,++运算只是针对于变量的,不能对常量来进行++运算。
    

    十四、strlen()相关

    设语句定义char a[ 80 ]= " 0123\0789 "; ,则sizeof(a)strlen(a)的值分别为()。
    A   809
    B   807
    C   805
    D   806
    
    答案:     A
    空格 0123、\0789 空格  
    

    十五、宏定义相关

    #include<stdio.h>
    #define Mul(x,y) ++x*++y
    void main()
    {
    int a = 1;
    int b = 2;
    int c = 3;
      
    printf(%d”,Mul(a+b,b+c));
    }
    程序最后输出什么?(    )
    A  14
    B  24
    C  48
    D  18
    
    答案:A
    Mul(a+b,b+c)经过宏替换变成++a+b*++b+c,需要注意宏替换的原则,是不会凭空加括号的。
    另外++优先级大于*,因此会先++a 和++b,然后a=2,b=3进行a+b*b+c=2+3*3+3=14
    
    展开全文
  • C语言易错

    2020-02-06 13:20:39
    因为这个语句平时用到的机会不是很多,碰到一些要求用switch的题目,一时间想不起来怎么用,今天就来总结以下。 举一个简单的例子,从键盘输入一个数字,判断它的等级, 60-80 及格,80-90良好,90-100优秀。 ...

    1.选择语句switch
    首先看一下格式
    switch(表达式){
    case 表达式的值:
    表达式1
    break;
    case 表达式的值:
    表达式2
    break;
    default:
    表达式3
    break;
    }
    因为这个语句平时用到的机会不是很多,碰到一些要求用switch的题目,一时间想不起来怎么用,今天就来总结以下。
    举一个简单的例子,从键盘输入一个数字,判断它的等级,
    60-80 及格,80-90良好,90-100优秀。

    int fun()
    {
    	int score;
    	printf("请输入成绩:");
    	scanf("%d",&score);
    	if(score>100 || score < 0)
    	{
    		return 0;
    	}
    	switch(score/10){     //这里是{}不是:
    		case 10:     //这里的:容易遗漏,10不带括号
    		printf("优秀");
    		break;        //这里必须有break
    		case 9:        //注意值与冒号的顺序
    		printf("优秀");
    		case 8:
    		printf("良好");
    		case(7 || 6):    //这么写是错误的
    		printf("及格");
    		defaultprintf("不及格");
    		break;
    }

    2.右移
    补符号位,符号位为1时,右移的时候看作0
    比如 -12 >> 1
    -12二进制 1000 1100
    -12>> 1: 1000 0110
    而 不是 : 1100 0110
    3.异或^
    两个数字异或,先将其化为二进制,相同位为0,不同位为1(这一点容易混淆)
    4.十进制与二进制的相互转换
    按权展开求和,概念就不赘述了 直接看例子(不考虑数据类型)
    197 = 1* 2^7 +1* 2^6 + 0* 2^5 + 0* 2^4 + 0 *2^3+ 1 *2^2 + 0 *2 ^1+ 1 *2^0
    197 = 128+64+0+0+0+4+0+1
    二进制1 1 0 0 0 1 0 1
    相反,二进制转十进制则是逆过程
    1100 0101
    2^0 + 2^2 + 2^6 + 2^7 = 1+4+64+128 = 197

    下面说一下考虑数据类型时进制转换

    比如 int 型179(int型数据占32位 不是8位)
    二进制: 0000 0000 0000 0000 0000 0000 1011 0011
    char 型 179(char型数据占8位,最高位为符号位)
    二进制:1011 0011
    十进制:①最高位为1,该数为负数②对其取反+1,添负号 得到的十进制为-71
    若为正数,则直接转换。

    展开全文
  • 二级C语言易错锦集

    2019-09-26 17:09:30
    二级C语言易错锦集 1、 C语言中的非执行语句不会被编译,不会生成二进制的机器指令 C程序经过编译、连接步骤之后才能形成一个真正可执行的二进制机器指令文件。 用C语言编写的程序称为源程序,它以ASC||代码形式存放...
  • C语言易错点经典分析

    2012-03-21 17:06:51
    详细讲解了C语言中易错易混点,能够让你在开发中避免很多错误,同时也能考察自己的C语言水平的必备试题,更是面试过程中不可或缺的面试题目
  • C语言易错题集合

    2019-12-29 17:23:11
    易错题记录: 一、选择题 1、 下列表达式中,不满足“当x的值为偶数时值为真,为奇数时值为假”要求的是( ) A: x%20 B: !x%2!=0 C: (x/2*2-x)0 D: !(x%2) 我的答案:C 正确答案:B 解析: B:当X为2(偶)时...
  • 二级C语言部分知识点以及易错题目.docx
  • 首先题目说要声明一个数组指针, 一般我们想到的数组指针是 随便来一个 int(*p)[10], 然后又说每个元素是一个函数指针,那么我们随便来一个 函数指针 int (*pf)(int *) . 然后把(*p)[10]作为一个整体替代 pf 即 int(*...
  • C语言易错的选择题

    2020-03-28 10:31:20
    以下选项中,合法的C语言实数是(B) A)3.1e0.4 B).2e0 C)E13 D)7.12E 解析:实型常量:用带小数点的数字表示,其值有两种表达形式,分别为十进制小数形式和指数形式。十进制小数形式由数字和小数组成,必须有...
  • C语言易错点解析(一)

    千次阅读 2014-12-02 18:46:05
    中间是否得输入逗号,对于C语言新手来说是一个非常头疼的问题,要注意。 另外在scanf函数里面禁止使用 \n, 例如: scanf("%d%d \n ",&a,&b); 这些细节非常小,但这是小编培训大一所看到新手...
  • 概念常考到的: 1、编译预处理不是C语言的一部分,不再运行时间。C语言编译的程序称为源程序,它以ASCII数值存放在文本文件中。 2、每个C语言程序中main函数是有且只有一个。 3、在函数中不可以再定义函数。 4...
  • 易错C语言题目

    2020-05-22 11:22:25
    这道题是我在网上看到的。拿出来给大家一起学习学习 #include <stdio.h> int main (void) { int a[]={1,2,3,4,5};... int *p=(int *)(&... printf("*(p-1)=%d,*(p+1)=%d,*p=%d\n",*(p-1),*(p+1...题目看似简单,
  • 中常见十进制转化二进制题目:将十进制数23588转化成二进制: 错:#include  void main() { unsigned long a=23588,n=0;/* 数据类型长度可能不够*/ while(a) {n=10*n+a%2; /* 首次a%2可能为0 */  a=a/2; } ...
  • 题目来源:牛客网编程入门训练--BC111 小乐乐与进制转换 输入描述: 输入一个正整数n (1 ≤ n ≤ 109) 输出描述: 输出一行,为正整数n表示为六进制的结果 解题思路:由十进制数字打印类比可得,需要得到一个...
  • 题目来源:牛客网编程入门训练--BC69 空心正方形图案 解题思路:此题需要注意的是当i(行)和j (列)为0和n-1时候,打印的是“ * ”(*+空格),其余情况均打印“ ”(空格+空格)即可。 直接上代码: #include &...
  • 题目来源:牛客网编程入门训练--BC76 公务员考试 输入描述: 一行,输入7个整数(0~100),代表7个成绩,用空格分隔。 输出描述: 一行,输出去掉最高分和最低分的平均成绩,小数点后保留2位,每行输出后换行。...
  • 解析:该题是c语言题目,而不是数学题目c语言的运算,从最到右,先算 1<=n 是否成立,用结果再计算 <= 10 是否成立,所以if ( 1<=n<=10 ); 的结果结果 只能是 0 或者1 ,而并非 [1,10]之间。 如果...
  • CSS3 Pie工具可以让IE6至IE8版本实现大多数的CSS3修饰特性,如圆角、阴影、渐变等 css3 pie使用方法: P1280 尼克的任务 题目描述 尼克每天上班之前都连接上英特网,接收他的上司发来的邮件,这些邮件包含了尼克主管的...
  • 题目来源:牛客网编程入门训练--BC115 小乐乐与欧几里得 输入描述: 每组输入包含两个正整数n和m。(1 ≤ n ≤ 109,1 ≤ m ≤ 109) 输出描述: 对于每组输入,输出一个正整数,为n和m的最大公约数与最小公倍数...
  • 易错题目

    2019-12-30 15:12:04
    评析:计算机语言分为低级语言、汇编语言和高级语言,c语言属于高级语言,但并不是说c语言比其他语言高级,所以选项A错误;除了低级语言外,其他各种语言都必须编译成能被计算机识别的二进制数才能执行,选项B错误;...
  • 二级C语言常见易错

    2008-12-04 14:44:27
    计算机等级考试,二级C语言部分易错题,word文档
  • 最近在复习C语言好多都忘记了,所以写这篇博文来记录一下打代码时遇到的问题和解决方法 2019-08-03 题目描述 二叉排序树,也称为二叉查找树。可以是一颗空树,也可以是一颗具有如下特性的非空二叉树: 1. 若左子树...
  • 这里总结了20道比较容易错的C语言题目,主要是关于循环、数组、指针。1.char a[7]="abcdef"; char b[4]="ABC";strcpy(a,b);printf("%c",a[4]);程序运行的结果是( )Solution:Strcpy(a,b):把从b地址开始且含有'\0'...
  • C语言宏定义易错

    2020-10-09 08:41:44
    #include <stdio.h> #define MAX(x,y) (x)>(y)?(x):(y) void main(){ int a=5,b=2,c=3,d=3,t; t=MAX(a+b,c+d)*10; printf("%d",t); ...原因: 宏定义并非函数,只是单纯地语言替换 ......
  • 原标题:易错题之大一C语言&英语 C语言011.指针填空Deion用指针统计字符串中英文字母、数字的个数输入一行字符,用指针统计字符串中英文字母和数字(字符串中只有英文字符和数字)主要代码已经给出,请补充缺少的...
  • 关于一个学期以来学习c语言遇到的易错题 1.关于选择结构:
  • 题目保证字符重复个数在整型范围内,且输出文件不超过 1MB。 输出格式: 根据要求压缩或解压字符串,并在一行中输出结果。 输入样例 1: C TTTTThhiiiis isssss a tesssst CAaaa as 输出样例 1: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 545
精华内容 218
关键字:

c语言易错题目

c语言 订阅