C语言面试重点

 1.C语言程序的基本单位是      C    

  • A  程序行
  • B  语句
  • C  函数
  • D  字符

2.在宏定义 #define PI 3、14159中,用宏名PI代替一个          D 

  • A  单精度数
  • B  双精度数
  • C  常量
  • D  字符串

3.设有以下语句:int a=3,b=6,c; c=a^b<<2; 则c的二进制值是     A     

  • A  00011011
  • B  00010100
  • C  00011100
  • D  00011000

4.执行下列程序段后,变量a,b,c的 D  

int x=10,y=9;

     int a,b,c;

     a=(--x==y++)?--x:++y;

     b=x++;

     c=y;

  • A  a=9,b=9,c=9 
  • B  a=9,b=10,c=9
  • C  a=1,b=11,c=10
  • D  a=8,b=8,c=10

5. int main(int argc, char *argv[])

{

    int i, n = 0;

for (i=1; i<argc; i++) { n = 10*n + *argv[i] – ‘0’; }

printf(“%d\n”, n);

}

./aout  12  345  678

输出结果为__ B   _

  • A  123
  • B  136
  • C  678
  • D  58

6.设变量定义为“int x, *p=&x;”,则&*p相当于 (A )

  • A  p
  • B  *p
  • C  x
  • D  *&x

 7.以下程序的输出结果是     c    

void main()

{  int a=5,*p1,**p2;

p1=&a,p2=&p1;

(*p1)++;

printf("%d\n",**p2); 

}

  • A  5
  • B  4
  • C  6 
  • D  不确定

8.整型变量x和y的值相等,且为非0值,则以下选项中,结果为0的表达式D)

  • A  x || y 
  • B  x | y 
  • C  x & y
  • D  x ^ y

9.若已定义 char s[10]; 则在下面表达式中不表示s[1]的地址的是 ( B)

  • A  s+1
  • B   s++
  • C  &s[0]+1
  • D  &s[1]

10.以下程序的输出结果是   (D  )   

#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

11. int a[5][4], (*p)[4]=a;,数组a的首地址为100,*(p+2)+3等于 ( C)

  • A  116
  • B  118
  • C  144
  • D  122

12.有两个字符数组a、b,则以下正确的输入语句B       

  • A  gets(a,b)
  • B  scanf(“%s%s”,a,b)
  • C  scanf(“%s%s”,&a,&b)
  • D  gets(“a”),gets(“b”)

13.以下对二维数组a的正确说明是 (A )

  • A  int a[ ][3]={ 0 }
  • B  int a[3][ ]={ {1},{2},{3} }
  • C  int a[1][3]={ 1,2,3,4 }
  • D  int a[2][3]={ {1,2},{3,4},{5,6} }

14.若有以下函数调用语句: fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数A       

  • A  3
  • B  4 
  • C  5
  • D  6

15.若有以下定义: char a; int b; float c; double d; 则表达式a*b+d-c值的类型为     D  

  • A  float 
  • B   int 
  • C  char
  • D  double

16.设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为   C     

  • A  4
  • B  16
  • C  32
  • D  52

17.下面程序的输B        

int w=3; 

fun(int k) { 

if(k==0) return w; 

return(fun(k-1)*k);

 } 

main() {

 int w=10; 

printf("%d",fun(5)*w); 

  • A  360
  • B  3600
  • C  1080
  • D  1200

18.下列说法中正确的是B     

  • A  在switch语句中一定要使用break语句
  • B  在switch语句中不一定要使用break语句
  • C  break语句是switch语句的一部分
  • D  break只能用于switch语句中

19.在C语言中,不正确的char类型的常数是     A  

  • A  32768 
  • B  0 
  • C  037 
  • D   0xAF

20.假定在32位机中,定义char a[20];char *p = a;那么sizeof(a),sizeof(p)输出的值是  C    

  • A  20,1
  • B  80,4
  • C  20, 4
  • D  40, 2

 21.关键字static的作用是什么?

1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;

2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;

3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;

4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;

5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

22. 已定义一个变量num ,其值为5,简单编程函数实现下列位操作:

int setbit(int num,int n){

        return  num | (1<<(n-1));

}

int clearbit(int num ,int n){

        return num & ~(1 << (n-1));

}

23.用变量a给出下面的定义

a) 一个整型数(An integer)

b) 一个指向整型数的指针(A pointer to an integer)

c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)

d) 一个有10个整型数的数组(An array of 10 integers)

e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)

f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)

g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)

h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )

a) int a; // An integer

b) int *a; // A pointer to an integer

c) int **a; // A pointer to a pointer to an integer

d) int a[10]; // An array of 10 integers

e) int *a[10]; // An array of 10 pointers to integers

f) int (*a)[10]; // A pointer to an array of 10 integers

g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer

h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

 24.给定一个整型变量a,写两个函数,第一个设置a的bit 3位,第二个清除a 的bit 3,在以上两个操作中,要保持其它位不变

#include <stdio.h>
void set_bit(int *p, int n){
    *p |= 1<<3;
}
void clean_bit(int *p, int n){
    *p &= ~(1<<3);
}
int main(void){
    int a = 3;
    int *p = &a;
    printf("a = %d \n", a);
    set_bit(p, 3);
    printf("a = %d \n", a);
    clean_bit(p, 3);
    printf("a = %d \n", a);
    return 0;
}</stdio.h>

25.题目:利用递归方法分别求1!,2!,3!,4!,5!。
程序分析:递归公式:fn=fn_1*4!

 

#include <stdio.h>
int fun(int a);
int main()
{
    int i = 1;
    for(i=1;i<6;i++)
    {
        printf("%d!=%d\n",i,fun(i));
    }
    return 0;
}
 
int fun(int a)
{
    if(a==1 || a==0)
    return 1;
    return fun(a-1)*a;
}

26.给定一个字符串“I love china”,编写程序完成以单词为单位的逆序,如“china love i”,并要求不允许使用第三方变量保存数据,但可以使用辅助指针变量等。

 

#include <stdio.h>
#define N 32
int swap(char *head, char *tail);
int main()
{
    char buff[N] = "I love China";
    char *head = buff,
         *tail = buff;
    //先讲尾指针定位到字符串尾部。
    while('\0'!= *tail)
        tail ++;
    //调用swap函数将整个字符串倒置。
    swap(buff,tail - 1);
    //主函数开始扫描遍历整个倒置后的字符串。
    while('\0' != *head)
    {//查找单词头。
        while(32 == *head)
            head ++;
        //找到头后将尾定位到头,开始找单词尾。
        tail = head;
        while(32 != *tail && '\0' != *tail)
            tail ++;
        //前两步找到头之后将单词倒置(因为循环结束后tail指向‘\0’,所以tail -1)。
        swap(head,tail - 1);
        //单词倒置后将头指向尾,为下次找单词做准备。
        head = tail;
    }
    puts(buff);
    return 0;
}
//swap函数,完成指定字符串倒置。
int swap(char *head, char *tail)
{
    while(head < tail)
    {//异或法进行交换数据
        *head ^= *tail;
        *tail ^= *head;
        *head++ ^= *tail--;
    }
}</stdio.h>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值