> 文档中心 > C语言企业常问面试题

C语言企业常问面试题

C语言面试题大全

  • ------------------------C语言试题1START-------------------
  • 一、选择题
  • 二、填空题
  • 三、简答题
  • 四、编程
  • ------------------------C语言试题1END-----------------------
  • ------------------------C语言试题2START--------------------
  • 一、选择题
  • 二、填空题
  • 三、简答题
  • 四、编程
  • ------------------------C语言试题2END--------------------

------------------------C语言试题1START-------------------

一、选择题

1、C语言允许函数值类型缺省定义,此时该函数值隐含的类型是()。

A、float型B、int型C、long型D、double型参考答案:B

2、一个指向整数的数组指针可以定义为()。

A、int (*ptr)[]B、int *ptr[]C、int *(ptr[])D、int ptr[]参考答案:A

3、若有定义:int a[3][4]={{1, 2}, {0}, {1, 2, 3}};则a[1][1]的值为()。

A、3B、{1, 2}C、1D、0参考答案:D

4、下面这段代码输出的i的值是()。

int i=3;while(i--)printf(“%d\n”, i);A、3  2  1  0B、2  1  0C、1  0D、2  1参考答案:B

5、以下程序的打印结果是()。

#include #define N 2#define M N+1#define NUM (M+1)*M/2int main(void){      int i = 0;      while(i < NUM)  printf("%d", i++);      printf("\n");      return 0;}A、01234567B、012345C、123456D、01参考答案:A

6、已知声明:
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, *p=1;则不能表示数组a中的元素的表达式是()。

A、*pB、a[10]C、*aD、3[p]参考答案:B

7、以下定义语句中正确的是()。

A、char a='A' b='B';  B、float a=b=a;C、int a=10,*b=&a;  D、float *a,b=&a;参考答案:C

8、设有如下的程序段:
char str[ ]=“Hello”;
char ptr;
ptr=str;
执行上面的程序段后,
(ptr+5)的值为()。

A、'o'B、'\0'C、不确定的值D、'o'的地址参考答案:B

9、若有int *p1, *p2,k; 不正确的语句是()。

A、p1=&kB、p2=p1 C、*p1=k+12    D、k=p1+p2 参考答案:C

10、在循环语句的循环体中执行break语句,其作用是()。

A、跳出该循环体,提前结束循环B、继续执行break语句之后的循环体各语句C、结束本次循环,进行下次循环D、终止程序运行参考答案:A

11、为表示、“a和b都大于0”,应使用的C语言表达式是()。

A、(a>0)&&(b>0)B、a&&bC、(a>0)||(b>0)D、(a>0)&(b>0)参考答案:A

12.若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )

A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元参考答案:D

13、有以下程序:

 int  func(char *s) { char *t=s;while(*t++){;} t--; return(t-s); }int main(void){     char *s = "abcdefghijk";     int n = func(s);     printf("%d\n", n);}

程序的执行结果是( )

A.字符串s的长度B.比较两个串的大小C.将串s复制到串tD.求字符串s所占字节数参考答案:B

14、设有如下程序段,下面描述中正确的是 ( )。

int k=10; while(k=0) k=k-1;
A 循环执行一次 B循环是无限循环 C循环体语句一次也不执行 D循环体语句执行一次  参考答案:C

15、以下函数调用语句中含有( )个实参。
   func((e1,e2),(e3,e4,e5));

A 2   B 3   C 5   D 语法错误参考答案:A

16、以下程序的输出结果为( )。

  #define ADD(x) x*x  main( )  { int a=4,b=6,c=7,d=ADD(a+b)*c;  printf("d=%d",d);  }
A d=70   B d=80   C d=140   D d=700参考答案:D

17、若有以下定义,则p+5表示_______.

 int  a[10],*p=a;
  A元素a[5]的地址      B元素a[5]的值  C元素a[6]的地址      D元素a[6]的值参考答案:A

18、若函数调用时的实参为变量时,以下关于函数形参和实参的叙述中正确的是( )

A.函数的实参和其对应的形参共占同一存储单元B.形参只是形式上的存在,不占用具体存储单元C.同名的实参和形参占同一存储单元D.函数的形参和实参分别占用不同的存储单元参考答案:D

19、以下叙述中错误的是( )

A.函数的形参存放在数据段中B.函数可以返回地址值C.可以给指针变量强制赋一个浮点数作为地址值D.可以给指针变量赋NULL参考答案:A

20、有以下程序

 #include void fun(char *  (*p)  ) {  ++p; printf("%s\n",*p); } int main(void) {  char *a[ ]={"Morning","Afternoon","Evening","Night"};  fun(a); }

程序的运行结果是( )

A.AfternoonB.fternoonC.MorningD.orning参考答案:A

二、填空题

1、以下代码试图就出a、b、c的最小值:

 #includeint  main(void){ int a,b,c,t1,t2; scanf("%d%d%d",&a,&b,&c); t1=a<b? A  a:b;  t2=c<t1? B  c:t1;printf("%d\n",t2);}

2、已有定义如下:

struct node{    int data;    struct node *next;}*p;

以下语句调用malloc函数,使指针p指向一个具有struct node类型的动态存储空间,请填写所需空间的大小 struct node
*p = (struct node *)malloc( sizeof(struct node) );

3、表达式(int)((double)5/2+2.5)的值是: 5
4、

 int  main(void) { char *cptr,c; void *vptr,v; c=10;v=0; }  

上述程序有何错误:

不能定义void型普通变量 [每空2分]

5、用变量m给出下面的定义

1 一个整型数 int m;
2 一个指向整型数的指针 int *m;
3 一个指向指针的指针,它指向的指针是指向一个整型数 int *p= 10;
int *m = p;
4一个有10个整型数的数组 int m[10];
5一个有10个指针的数组,该指针是指向一个整型数的 int *m[10]; m = 10;
6一个指向有10个整型数数组的指针 int (*p)[10];
7 一个指向函数的指针,该函数有一个整型参数并返回一个整型数 int *m(int m){ return m;}
8 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int *m[10];m=m(x);m(intn){return n;}

三、简答题

1、指出下面代码的不妥之处:

 void get_memory(T_S8 *p, T_S16 nNum) { p = (T_S8 *)malloc(sizeof(T_S8) * nNum); } void Test(void) { T_S8 *str = NULL; get_memory(str, 100); strcpy(str, "hello"); }

答 :T_S8,T_S16未宏定义 值传递不能改变str的值,所以实参str的值仍然为NULL,不能执行strcpy(str,“hello”) , 会发生段错误。

2、以下程序的运行结果如何?原因?

char *get_memory(void){   char p[] = "hello world";   return p;}int main(void){   char *str = NULL;   str = get_memory();//此处无须括号   printf("%s", str);//未解引用}

答:编译出错。 结果不确定,函数调用结束,数组p的空间被释放,不用再次引用

3、以下test函数的运行结果如何?原因?

void test(void){   char *str = (char *) malloc(100);   strcpy(str, “hello”);   free(str);     if(str != NULL)   {      strcpy(str, “world”);      printf("%s", str);   }}

答:输出 world 。 指针所指空间被free后不能再次被引用

四、编程

1、写一个程序,计算1到100的累加和。

int i=1,sum=0;for(i=1;i<=100;i++){sum += i;}printf(%d\n”,sum);

2、写一个函数,将作为实参出进去的字符串反转。

void reserverString(char str[]){char tmp;int i, j;for (i = 0, j = strlen(str) - 1; i < j; i++, j--){tmp = str[i];str[i] = str[j];str[j] = tmp;}}

------------------------C语言试题1END-----------------------

------------------------C语言试题2START--------------------

一、选择题

1、在函数中未指定存储类别的局部变量,其隐含的存储类别是()。

A、静态(staticB、外部(externC、自动(auto)D、寄存器(register)参考答案:C

2、以下各C语句中正确的是()。

A、char st[4][5]={ "ABCDE" };B、char *s = "ABCDE"; s[2] = 'Z';C、char s[5] = {'A', 'B', 'C', 'D', 'E'};D、char *S; scanf("%S", S);参考答案:C

3、若有定义:int a[3][4]={{1, 2}, {0}, {1, 2, 3}};则a[1][1]的值为()。

A、3B、{1, 2}C、1D、0参考答案:D

4、在Linux下的32位C程序中,请计算sizeof的值()。
char str[] = “Hello”;
char *p = str;
请计算:sizeof§ = ( )

A、1B、4 C、5  D、6参考答案:B

5、

#include int main(void){     float x = 0.1;     if(x == 0.1)  printf("Equal");     else  printf("Not Equal");     return 0;}

则运行的结果是()。

A、EqualB、Not EqualC、运行错误D、输出依赖于编译器参考答案:B

6、下面程序段的运行的结果是()。

char *s="abcde";s+=2;printf("%d", s);
A、cdeB、字符'c'C、字符'c'的地址D、无确定的输出结果参考答案:A

7、不能把字符串“Hello!”赋给数组b的语句是()。

A、char b[10]={'H','e','l','l','o','!'};  B、char b[10];b="Hello!";C、char b[10];strcpy(b,"Hello!");  D、char b[10]="Hello!";参考答案:B

8、若a为二维数组,则a[1][3]等价于()。

A、*((a+1)+3)B、*(a[1]+3)C、(*(a+1)+3) D、&a[1]+3参考答案:B

9、break语句的正确用法是()。

A、无论在任何情况下,都中断程序的执行,退出到系统下一层。B、在多重循环中,只能退出最靠近的那一层循环语句。C、跳出多重循环。D、只能修改控制变量。参考答案:B

10、有以下程序

#includeint main(void){int y=9;for( ; y>0; y--)      {      if(y%3 == 0)     printf("%d",--y);}}

程序的运行结果是( )

A.741B.963C.852D.875421参考答案:C

11、已知字符‘A’的ASCⅡ代码值是65,字符变量c1的值是‘A’,c2的值是‘D’。
则执行语句printf(“%d,%d”,c1,c2-2);后,输出结果是( )

A.A,BB.A,68C.65,66D.65,68参考答案:C

12、有以下程序

 #include void fun(char *  (*p)  ) {  ++p; printf("%s\n",*p); } int main(void) {  char *a[ ]={"Morning","Afternoon","Evening","Night"};  fun(a); }

程序的运行结果是( )

A.AfternoonB.fternoonC.MorningD.orning参考答案:A

13、有以下程序

main(){ int  a=1, b=3, c=5;  int  *p1=&a, *p2=&b, *p=&c;  *p =*p1*(*p2);  printf("%d\n",c);}执行后的输出结果是 
A 1B 2C 3D 4参考答案:C

14、在16位编译系统上,若有定义int a[]={10,20,30}, *p=&a;,当执行p++;后,下列说法错误的是( )

A  p向高地址移了一个字节B  p向高地址移了一个存储单元C  p向高地址移了两个字节D  p与a+1等价参考答案:A

15、若有以下定义,则对a数组元素的正确引用是_________.
int a[5],*p=a;

 A.*&a[5]   B.a+2  C.*(p+5)  D.*(a+2)参考答案:D

16、设已有定义: int a[10]={15,12,7,31,47,20,16,28,13,19},*p; 下列语句中正确的是( )

  A  for(p=a;a<(p+10);a++);  B  for(p=a;p<(a+10);p++);  C  for(p=a,a=a+10;p<a;p++);D  for(p=a;a<p+10; ++a);参考答案:B

17、在C语言程序中,以下说法正确的是( )。

 A函数的定义可以嵌套,但函数的调用不可以嵌套 B函数的定义不可以嵌套,但函数的调用可以嵌套 C函数的定义和函数的调用都不可以嵌套 D函数的定义和函数的调用都可以嵌套参考答案:B

18、下面程序的输出结果()。

#include struct A{int i;char j;char *ptr;long Array[100];char b[2];char *c;};int main(){     printf("%d\n", sizeof(A));      return 0;}
A、415B、416C、420D、421参考答案:C

19、如下C程序输出的是()。

#include int mul(int a, int b, int c){     return a*b*c;}int main(void){     int (*function_pointer)(int, int, int);     function_pointer = mul;     printf("The product of three numbers is: %d",     function_pointer(2, 3, 4));     return 0;}
A、不确定B、编译出错C、无输出D、The product of three numbers is: 24参考答案:D

20、设有如下枚举类型定义:

enum language { Basic=3, Assembly, Ada=100, COBOL, Fortran};
枚举变量Fortran的值为()。

A、4B、7C、102D、不确定参考答案:C

二、填空题

1、用变量m给出下面的定义一个整型数   int m;一个指向整型数的指针   int *m;一个指向指针的指针,它指向的指针是指向一个整型数   int *p = 10;int *m = p;一个有10个整型数的数组 int m[10];一个有10个指针的数组,该指针是指向一个整型数的 int *m[10]; m = 10;一个指向有10个整型数数组的指针  int (*p)[10];一个指向函数的指针,该函数有一个整型参数并返回一个整型数  int *m(int m){ return m;}一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数 int *m[10];m=m(x);m(int n){return n;}

2、以下程序的输出结果是 54321

 #include   int  main(void) { int  n=12345, d;   while(n!=0)     { d=n%10;    printf("%d",d); n/=10;     } }

3、给定结构

struct  A{char t:4;char k:4;unsigned short i:8;unsigned long m;};sizeof(A) =  8

4、若有以下定义,则p+5表示_元素a[5]的地址.

  int  a[10],*p=a;

5、写出以下两段程序的执行结果。如果程序无法编译,请指出出错部分并写明原因;如果程序陷入死循环,请回答“死循环”。
如果执行结果出现内存错误,请指出出错部分并写明原因。

 int  main(void) { char s[ ]="man"; int i; for(i=0;  s[i];   i++)      {     printf("\n%c%c%c%c",s[i], *(s+i), *(i+s), i[s]);     } } 

(1) mmmm (2)aaaa (3)nnnn

三、简答题

1、以下程序的运行结果如何?原因?

void get_memory(char **p, int num){*p = (char *)malloc(num);}int  main(void){char *str = NULL;get_memory(&str, 100);strcpy(str, "hello");printf("%s", str);}答:输出 hello 。

2、关键字static的作用是什么?

【参考答案】关键字static有三个明显的作用:
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

3、头文件中的 ifndef/define/endif 干什么用?

【参考答案】防止该头文件被重复引用。

四、编程

1、定义一个整形变量a,并将a的第5位清0,第7位置1,其他位不变。

int a;a = a & (~(0x01 << 5));a = a | (0x01 << 7);

2、写一个函数,交换传进去的两个参数的值。

void swap(int *p1,int *p2){int temp;temp = *p1;*p1 = *p2;*p2 = temp;}

------------------------C语言试题2END--------------------

在这里插入图片描述

艺术字体转换器