[置顶] 华为C语言笔试题(附答案)

时间:2023-02-11 14:38:42

1、局部变量能否和全局变量重名?
     答:能,局部会屏蔽全局。要用全局变量,需要使用"::"
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

2、如何引用一个已经定义过的全局变量?
     答:extern
     可以用引用头文件的方式,也可以用extern关键字,如果用引用头文件方式来引用某个在头文件中声明的全局变理,假定你将那个变写错了,那么在编译期间会报错,如果你用extern方式引用时,假定你犯了同样的错误,那么在编译期间不会报错,而在连接期间报错。

3、全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么?
    答:可以,在不同的C文件中以static形式来声明同名全局变量。
    可以在不同的C文件中声明同名的全局变量,前提是其中只能有一个C文件中对此变量赋初值,此时连接不会出错。

4、语句for( ;1 ;)有什么问题?它是什么意思?
    答:无限循环,和while(1)相同。

5、do……while和while……do有什么区别?
    答:前一个循环一遍再判断,后一个判断以后再循环。

6、请写出下列代码的输出内容
#i nclude<stdio.h>
main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;
}
答:10,12,120

 

找错
Void test1()
{
  char string[10];
  char* str1="0123456789";
strcpy(string, str1);
}


Void test2()
{
  char string[10], str1[10];
for(I=0; I<10;I++)
{
    str1[i] ='a';
}
strcpy(string, str1);
}

Void test3(char* str1)
{
  char string[10];
  if(strlen(str1)<=10)
{
  strcpy(string, str1);
}
}


2.  找错
#define MAX_SRM 256

DSN get_SRM_no()
{
    static int SRM_no;
    int I;
    for(I=0;I{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
  break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}


3.  写出程序运行结果

int sum(int a)
{
    auto int c=0;
    static int b=3;
c+=1;
b+=2;
return(a+b+C);
}
  
void main()
{
    int I;
int a=2;
for(I=0;I<5;I++)
{
  printf("%d,", sum(a));
}
}

4.  

int func(int a)
{
  int b;
  switch(a)
  {
    case 1: 30;
    case 2: 20;
    case 3: 16;
    default: 0
}
return b;
}
则func(1)=?

5:
int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
则a[q-p]=?

6.
定义 int **a[3][4], 则变量占有的内存空间为:_____

7.
编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。如输入2004年12月31日23时59分59秒,则输出2005年1月1日0时0分0秒