C语言面试题与嵌入式知识:运算符、条件判断与数组

1 下载量 22 浏览量 更新于2024-08-03 收藏 15KB DOCX 举报
该文档是"C面试题_嵌入式-常用知识&面试题库_大厂面试真题.docx",主要包含了嵌入式领域关于C语言的面试题目,适用于准备面试的IT专业人士,特别是对C语言和嵌入式系统有需求的职位。 在C语言中,涉及到整型运算的操作符主要有算术运算符、关系运算符和位运算符。题目中提到的A选项`/`是除法运算符,可以用于浮点数和整数;B选项`++`是自增运算符,可以用在任何可以增量的类型上,包括整型和浮点型;C选项`!=`是不等于运算符,同样适用于所有数据类型;D选项`%`是取模运算符,它要求运算数必须是整型。因此,答案是D: `%`。 第二题考察了逻辑表达式的理解。A选项`A%2==1`表示A除以2的余数为1,即A是奇数;B选项`!(A%2==0)`等价于`A%2!=0`,同样表示A是奇数;C选项`!(A%2)`相当于`A%2==0`,意味着A是偶数;而D选项`A%2`本身只表示A除以2的余数,无法直接判断奇偶性。因此,不能满足题目要求的表达式是D: `A%2`。 第三题是一道流程控制题。程序中,`m++`先使用当前m的值进行比较,然后m加1,所以`if(m++>5)`会进入else分支,执行`--m`,使得m减1。因此,输出应该是m的初始值5减1后得到的4。答案是A:4。 第四题考察数组的定义。在C语言中,正确的数组声明方式是D:`#define SIZE 10`,然后定义数组`inta[SIZE]`。其他选项要么是语法错误,要么会导致未定义行为。 第五题和第六题是同一个程序,用于合并两个已排序的字符串。程序使用了两个指针i和j分别遍历字符串a和b,同时用指针k记录字符在新字符串c中的位置。如果a[i]小于b[j],则将a[i]的字符放入c[k],并移动指针i;否则,将b[j]的字符放入c[k],并移动指针j。第一空的答案是在a[i]小于b[j]的情况下,将a[i]的值放入c[k],然后递增i,因此选择A:`c[k]=a[i]; i++`。第二空的答案是在b[j]小于等于a[i]的情况下,将b[j]的值放入c[k],然后递增j,因此选择B:`c[k]=b[j]; j++`。最后,如果b[j]已经遍历完,则p指向a+i,否则p指向b+j,然后使用`strcat`函数连接剩余部分。在if语句中,条件应为b[j]是否等于'\0',即b是否已遍历完,所以第三空填`b[j]=='\0'`。 综合以上分析,完整的代码应该是: ```c #include <stdio.h> #include <string.h> int main(void) { char a[] = "acegikm"; char b[] = "bdfhjlnpq"; char c[80], *p; int i = 0, j = 0, k = 0; while (a[i] != '\0' && b[j] != '\0') { if (a[i] < b[j]) { c[k] = a[i]; i++; } else { c[k] = b[j]; j++; } k++; } c[k] = '\0'; if (b[j] == '\0') p = a + i; else p = b + j; strcat(c, p); puts(c); return 0; } ``` 这个程序将字符串a和b按升序合并到c中。