7个华为关于C语言的经典面试题(分享)

7个华为关于C语言的经典面试题(分享)

1、找错

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

       这里string数组越界,因为字符串长度为10,还有一个结束符’’。所以总共有11个字符长度。string数组大小为10,这里越界了。

PS:使用strcpy函数的时候一定要注意前面目的数组的大小一定要大于后面字符串的大小,否则便是访问越界。

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

    这里有一个一眼就能看出的问题,那就是变量i没有定义,这在代码编译阶段编译器可以帮你发现,很容易搞定。然而很多问题是自己造成的漏洞,编译器是帮不上什么忙的。这里最大的问题还是str1没有结束符,因为strcpy的第二个参数应该是一个字符串常量。该函数就是利用判断第二个参数的结束符来得到是否拷贝完毕。所以在for循环后面应加上str1p[9] = ‘’;

立即学习“C语言免费学习笔记(深入)”;

PS:字符数组和字符串的最明显的区别就是字符串会被默认的加上结束符’’。

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

       这里的问题仍是越界问题。strlen函数得到字符串除结束符外的长度。如果这里是

小结:上面的三个找错的函数,主要是考查对字符串和字符数组的概念的掌握以及对strcpy函数和strlen函数的理解。

2、找错

DSN get_SRM_no(){  static int SRM_no;  int I;  for(I=0;I=MAX_SRM)       return (NULL_SRM);    else       return SRM_no;}

这里for循环的判断语句是后来我加上的,估计在网上流传的时候被人给弄丢了,根据对程序的分析,给补上了。估计错误应该不是这儿。

简单的阅读一下这个函数,可以大概的可以猜测出这个函数的功能是分配一个空闲的SRAM块。方法:从上次分配的RAM块后的RAM块开始检测SRAM每个RAM块,看是否是IDLE状态,如果是IDLE则返回当前的RAM块的号SRM_no。如果所有的RAM块都不是IDLE状态,则意味着无法分配一个RAM给函数调用者,返回一个表示没有RAM可分配的标志(NULL_SRM)。

经过上面的分析,则这里可以知道,这个函数的错误是for循环里面没有给SRM_no这个变量累加1。

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));    }}

运行结果是:8,10,12,14,16,

在求和函数sum里面c是auto变量,根据auto变量特性知每次调用sum函数时变量c都会自动赋值为0。b是static变量,根据static变量特性知每次调用sum函数时变量b都会使用上次调用sum函数时b保存的值。

简单的分析一下函数,可以知道,若传入的参数不变,则每次调用sum函数返回的结果,都比上次多2。所以答案是:8,10,12,14,16,

4、func(1) = ?

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

在 case 语句中可能忘记了对变量b赋值。如果改为下面的代码:

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

因为case语句中漏掉了break语句,所以无论传给函数的参数是多少,运行结果均为0。

5、a[q – p] = ?

int a[3];

    a[0]=0; a[1]=1; a[2]=2;

    int *p, *q;

    p=a;

    q=&a[2];

    很明显:a[q – p] = a[2] = 2;

6、内存空间占用问题

定义 int **a[3][4], 则变量占有的内存空间为:16位系统24,32位编译系统中是48。

PS:公式:3 * 4  * sizeof(int **) 。

7、程序编写

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

void ResetTheTime(int *year,int *month,int *date,int *hour,int *minute,int*second){    int dayOfMonth[12]={31,28,31,30,31,30,31,31,30,31,30,31};       if( *year < 0   || *month  12 ||       *date  31 || *hour  23 ||       *minute  59|| *second 60 )       return;     if( *year%400 == 0 || *year%100 != 0 && *year%4 == 0 )       dayOfMonth[1] = 29;     if(*second >= 60)    {       *second = 0;       *minute += 1;       if(*minute >= 60)       {           *minute = 0;           *hour += 1;           if(*hour >= 24)           {              *hour = 0;              *date += 1;              if(*date > dayOfMonth[*month-1])              {                  *date = 1;                  *month += 1;                  if(*month > 12)                  {                     *month=1;                      *year += 1;                  }              }           }       }    }    return;}

推荐:《c语言教程》

以上就是7个华为关于C语言的经典面试题(分享)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1434502.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 09:59:03
下一篇 2025年12月17日 09:59:27

相关推荐

  • c语言%什么意思

    c语言%的意思是:1、求余符号 ,经常会用到判断一个数是不是能被另一个整除;2、引导符,用于引导输入输出项表列的格式。 c语言%的意思是: 1、%是求余符号  经常会用到判断一个数是不是能被另一个整除。 如:7%3=1(7除以3  余下1,) 1%3=1(1除以3除不尽  余下1); 如判断一个m是…

    2025年12月17日
    000
  • C语言的特点与创建的基本步骤是什么

    C语言的特点与创建的基本步骤是:1、C语言是一种成功的系统描述语言,也是通用的程序设计语言,功能齐全,适用范围大,具有较好的可移植性;2、创建的基本步骤是编辑,编译,链接,执行。 C语言的特点与创建的基本步骤是: C 语言特点: 1.C语言是一种成功的系统描述语言,用C语言开发的UNIX操作系统就是…

    2025年12月17日
    000
  • C语言怎么换行

    C语言换行的方法:首先打开代码编辑器;然后每个在输出语句的句末加上【rn】即可,代码为【printf(“打个字符试试:rn”)】。 C语言换行的方法: 1、举个栗子 # include # include int main(){ char ch; printf(“打个字符试试…

    2025年12月17日
    000
  • 用c语言编写爱心的代码是什么

    用c语言编写爱心的代码:首先打开代码编辑器;然后输入代码【a = x*x+y*y-1;char ch = a*a*a-x*x*y*y*y 用c语言编写爱心的代码: 输入完整代码如下: #include int main(void){float a,x,y;for(y=1.5f; y>-1.5f…

    2025年12月17日
    000
  • c语言有哪些合法关键字

    c语言合法关键字有:1、char,声明字符型变量或函数;2、double,声明双精度变量或函数;3、do,循环语句的循环体;4、goto,无条件跳转语句;5、static,声明静态变量。 c语言合法关键字有: 1、关于数据类型的关键字(12个) (1) char :声明字符型变量或函数 (2) do…

    2025年12月17日
    000
  • c语言程序格式是什么

    c语言格式是:1、C程序都是从main函数开始执行的;2、C程序整体是由函数构成的;3、函数体的内容在【{}】中;4、每一个执行语句都以【;】结尾;5、英文字母大小写通用。 c语言格式是: 1. 主函数main 一个C程序都是从main函数开始执行的。main函数不论放在什么位置都没有关系。 2. …

    2025年12月17日
    000
  • c语言中允许的基本数据类型包括哪些?

    c语言中允许的基本数据类型包括:整型(short、int、long)、实型(单精度型float、双精度型double)、字符型(char)。 推荐:《C视频教程》 c语言有3种基本数据类型: 整型,表示一个整数,通常包括“short”、“int”、“long”等。 实型,“实型”即为浮点型数据,包括…

    2025年12月17日
    000
  • c语言源程序的扩展名是什么

    c语言源程序的扩展名是:“.c”。由C语言构成的指令序列称为C源程序,源程序文件的后缀为“.c”。注:在绝大多数的操作系统里,C源代码文件的后缀的大小写无所谓,如“index.C”和“index.c”指的是同一个文件;但老练的程序员通常使用小写。 推荐:《C视频教程》 C语言是一门面向过程的、抽象化…

    2025年12月17日
    000
  • c语言如何解水仙花数

    c语言解水仙花数的方法:首先按【CTRL+N】新建一个源代码;然后输入水仙花数的源代码;接着按【F9】进行编译;最后显示无错误后按【F10】运行即可。 c语言解水仙花数的方法: 1、首先什么是水仙花数? 水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3…

    2025年12月17日 好文分享
    000
  • c语言getch()的用法是什么?

    在c语言中,getch()函数用于从stdio流中读字符,即从控制台读取一个字符,但不显示在屏幕上;语法为:“int getch(void)”,返回读取的字符。 C语言中getch()函数 功 能: 从stdio流中读字符,即从控制台读取一个字符,但不显示在屏幕上 用 法:  int getchar…

    2025年12月17日
    000
  • 在c语言中,一条简单语句的结束符为什么?

    在c语言中,一条简单语句的结束符为:分号(;)。C语言中语句分为简单语句和复合语句,其中简单语句以分号“;”作为结束的标记,以“}”作为语句结束的标记。 C语言中语句分为简单语句(simple statement)和复合语句(compound statement)。 简单语句以分号(;)作为结束。其…

    2025年12月17日
    000
  • c语言文件读写操作有哪些?

    c语言文件读写操作有:1、读写文件中字符的函数,代码为【int fgetc(FILE *stream)】;2、读写文件中字符串的函数,代码为【int fputs(char *string,FILE *stream)】。 c语言文件读写操作有: 1.文件的打开函数fopen() 文件的打开操作表示将给…

    2025年12月17日
    000
  • C语言变量的定义包括变量存储类型和变量的什么?

    C语言变量的定义包括变量存储类型和变量的名称。C语言定义变量的格式:“数据类型  变量名;”,“数据类型”表示想要存储什么类型的数据,“变量名”就是你想给这个变量起个什么名字,通常都是用字母。 变量的定义 定义变量的格式非常简单,如下所示: 数据类型 变量名; 首先要强调的一点是:最后的分号千万不要…

    2025年12月17日
    000
  • 在c语言中,引用数组元素时,其数组下标的数据类型允许是什么?

    在c语言中,引用数组元素时,其数组下标的数据类型允许是:整型常量或整型表达式。数组是用来存储一系列数据,用于区分数组的各个元素的数字编号称为下标;下标只能为整型常量或整型表达式,如为小数时,将自动取整。 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数…

    2025年12月17日
    000
  • 在switch语句中,case后的标号只能是什么?

    在switch语句中,case后的标号只能是常量表达式。在一个特定的switch语句中,每个case常量都必须具有独一无二的值,不可以重复。但是switch语句可以包含多个case标签。 switch语句用于基于不同条件执行不同动作。 语法格式: switch (变量表达式){case 常量1: 语…

    2025年12月17日
    000
  • 一个c语言程序总是从什么开始执行

    一个c语言程序总是从主函数“main()”开始执行的,由主函数来调用其他函数,函数必须是并列的,定义后使用,不能在一个函数中定义其他函数,“main()”函数不一定要放在程序的开始部分。 C语言的程序是由主函数main()开始运行,由主函数来调用其他函数,函数必须是并列的,定义后使用,不能在一个函数…

    2025年12月17日
    000
  • c语言是面向什么的语言

    c语言是面向过程的语言,也是抽象化的通用程序设计语言,广泛应用于底层开发;C语言能以简易的方式编译、处理低级存储器;C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。 C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处…

    2025年12月17日
    000
  • C语言中用户标识符是什么?

    用户标识符是:用户根据需要自己定义的标识符(用来标识某个实体的一个符号,在不同的应用环境下有不同的含义);一般用来给变量、函数、数组等命名,以建立起名称与使用之间的关系。 标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编…

    2025年12月17日
    000
  • C语言中用户标识符的命名规则是什么

    C语言中用户标识符的命名规则是:1、用户标识符必须以字母a~z、A~Z或下划线开头;2、用户标识符区分大小写字母;3、C语言中的关键字具有特殊意义,不能作为标识符。 c语言的用户标识符一般应遵循如下的命名规则: (推荐学习:C语言教程) 1、标识符必须以字母a~z、 A~Z或下划线开头,后面可跟任意…

    2025年12月17日
    000
  • c语言的标识符只能由哪三种字符组成?

    c语言的标识符只能由:字母(A-Z,a-z)、数字(0-9)、下划线“_”这三种字符组成;且首字符不能是数字,但可以是字母或者下划线。不能把C语言关键字作为用户标识符;标识符对大小写敏感,即严格区分大小写。 标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信