C语言常见面试题

1、 C语言程序的基本单位是      
​
- A  程序行
- B  语句
- C  函数
- D  字符
​
答案:C
​
##### 试题解析
​
概念
2、在宏定义 #define PI 3、14159中,用宏名PI代替一个      
​
- A  单精度数
- B  双精度数
- C  常量
- D  字符串
​
答案:D
3、设有以下语句:int a=3,b=6,c; c=a^b<<2; 则c的二进制值是     
​
- A  00011011
- B  00010100
- C  00011100
- D  00011000
​
答案:A
​
解析:<<的优先级高于^ 所以b先<<2 ,再与进行^运算
0000 0110
<<2
0001 1000
0000 0011 ^
0001 1011
4、执行下列程序段后,变量a,b,c的值分别是  
​
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
​
答案:D
5、 int main(int argc, char *argv[])
​
{
​
  int i, n = 0;
​
for (i=1; i 
  

12、有两个字符数组a、b,则以下正确的输入语句是      
​
- A  gets(a,b)
- B  scanf(“%s%s”,a,b)
- C  scanf(“%s%s”,&a,&b)
- D  gets(“a”),gets(“b”)
​
答案:B
13、以下对二维数组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} }
​
答案:A
14、若有以下函数调用语句: fun(a+b,(x,y),fun(n+k,d,(a,b)));在此函数调用语句中实参的个数是          
​
A  3
B  4 
C  5
D  6
​
答案:A
15、若有以下定义: char a; int b; float c; double d; 则表达式a*b+d-c值的类型为        
​
A  float 
B   int 
C  char
D  double
16、设x、y、z和k都是int型变量,则执行表达式:x=(y=4,z=16,k=32)后,x的值为            
​
A  4
B  16
C  32
D  52
​
答案:C
​
逗号表达式
17、下面程序的输出是          
​
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
​
答案:B
​
f4*5    f3*4  f2*3 f1*2 f0*1    5*4*3*2*1*3*10
18、下列说法中正确的是         
​
A  在switch语句中一定要使用break语句
B  在switch语句中不一定要使用break语句
C  break语句是switch语句的一部分
D  break只能用于switch语句中
​
答案:B
19、在C语言中,不正确的char类型的常数是       
A  32768 
B  0 
C  037 
D   0xAF
​
答案:A
20、假定在32位机中,定义char a[20];char *p = a;那么sizeof(a),sizeof(p)输出的值是      
​
A  20,1
B  80,4
C  20, 4
D  40, 2
​
答案:C
21、关键字static的作用是什么?
(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
(4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
22、已定义一个变量num ,其值为5,简单编程函数实现下列位操作:
​
1)第二位清零;
​
2)第二位置1;
​
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 
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;
}
25、题目:利用递归方法分别求1!,2!,3!,4!,5!。
程序分析:递归公式:fn=fn_1*4!
答案1:
#include 
 
int recur(int n)
{
    if(n == 0 || n == 1) 
        return 1;
    else
        return n * recur(n-1);
}
 
 
int main(int argc, const char *argv[])
{
 
    printf("5!=%d\n",recur(5));
    printf("4!=%d\n",recur(4));
    printf("3!=%d\n",recur(3));
    printf("2!=%d\n",recur(2));
    printf("1!=%d\n",recur(1));
    return 0;
}
​
​
答案2:
 #include "stdio.h"
int fact(int j);
int main()
{
    int i;
    for(i=0;i<5;i++){
        printf("\40:%d!=%d\n",i+1,fact(i+1));
    }
    return 0;
}
int fact(int j){
    int sum;
    if(j==0){
        sum=1;
    }else{
        sum=j*fact(j-1);
    }
    return sum;
}
26、给定一个字符串“I love china”,编写程序完成以单词为单位的逆序,如“china love i”,并要求不允许使用第三方变量保存数据,但可以使用辅助指针变量等。
​
#include 
 
#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--;
 
    }
 
}
​

你可能感兴趣的:(c语言,开发语言)