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<argc; i++) { n = 10*n + *argv[i] – ‘0’; }
​
printf(“%d\n”, n);
​
}
​
./aout  12  345  678
​
输出结果为__  _
​
- A  123
​
- B  136
​
- C  678
​
- D  58
​
  
​
  答案:B
​
6、设变量定义为“int x, *p=&x;”,则&*p相当于 ( )
​
- A  p
- B  *p
- C  x
- D  *&x
​
答案:A
​
7、 以下程序的输出结果是     
​
void main()
​
{  int a=5,*p1,**p2;
​
p1=&a,p2=&p1;
​
(*p1)++;
​
printf("%d\n",**p2); 
​
}
​
- A  5
- B  4
- C  6 
- D  不确定
​
答案:C
​
8、整型变量x和y的值相等,且为非0值,则以下选项中,结果为0的表达式是 ( )
​
- A  x || y 
- B  x | y 
- C  x & y
- D  x ^ y
​
答案:D
​
9、若已定义 char s[10]; 则在下面表达式中不表示s[1]的地址的是 ( )
​
- A  s+1
- B  s++
- C  &s[0]+1
- D  &s[1]
​
答案:B
​
10、以下程序的输出结果是  ( )  
​
\#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
​
解析:1+2*2+3+3+1
​
11、 int a[5][4], (*p)[4]=a;,数组a的首地址为100,*(p+2)+3等于 ( )
​
- A  116
- B  118
- C  144
- D  122
​
答案:C

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 <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;
}
25、题目:利用递归方法分别求1!,2!,3!,4!,5!。
程序分析:递归公式:fn=fn_1*4!
答案1:
#include <stdio.h>
 
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 <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--;
 
    }
 
}
​
  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值