前言
从0开始记录我的学习历程,我会尽我所能,写出最最大白话的文章,希望能够帮到你,谢谢。
提示:文章作者为初学者,有问题请评论指正,感谢。
题目 1:
已有定义:char a[]="xyz",b[]={'x','y','z'}; 比较两者谁更大(长度使用sizeof比较)
解答:
1.a
数组:
a
是一个以字符串字面量"xyz"
初始化的字符数组。- 字符串字面量
"xyz"
实际上包含4个字符:‘x’、‘y’、‘z’ 和一个隐含的空字符 ‘\0’ 作为字符串的结束标志。 - 因此
sizeof(a)
将返回4,因为它包括了结尾的空字符。
2.b 数组
- b数组就很简单了撒 它三个字母
sizeof(a)
就返回3。
题目 2:
C语言中, 表达式 (4 << 2 | 3) 的结果是______
解答:
- 题目中的表达式
(4 << 2 | 3)
使用了位左移运算符<<
和按位或运算符|
。 - 位左移运算符
<<
的优先级高于按位或运算符|
,因此先计算左移部分。 -
计算过程:
- 首先,计算
4 << 2
:- 数字4的二进制表示是
100
。 - 向左移动2位后,得到
10000
,即十进制中的16。
- 数字4的二进制表示是
- 然后,计算
16 | 3
:- 数字3的二进制表示是
11
。 - 按位或运算是对每一位分别进行,如果两个数中至少有一个是1,则结果位是1,否则是0。
- 因此,
10000 | 11
的结果是10011
,即十进制中的19。
- 数字3的二进制表示是
- 首先,计算
题目3:
问输出结果是什么
#include <stdio.h>
int main() {
char str[]="ABCD", *p = str;
printf("%d\n", *(p + 4));
return 0;
}
解答:
char str[]=”ABCD”相当于 str[0]='A'; str[1]='B'; str[2]='C'; str[3]='D'; str[4]='\0'; 而*(p+4)==str[4]; '\0'的ASCII为0 故输出0。
题目4:
以下程序运行时,若输入1abcedf2df<回车>输出结果是?
#include <stdio.h>
int main() {char a = 0, ch;while ((ch = getchar()) != '\n') {if (a % 2 != 0 && (ch >= 'a' && ch <= 'z'))ch = ch - 'a' + 'A';a++;putchar(ch);}printf("\n");return 0;
}
解答:
总的简答
while ((ch = getchar()) != '\n')
:这是一个循环,它会不断读取输入的字符,直到遇到换行符为止。
getchar()
函数用于从标准输入读取一个字符,并将其赋值给变量ch
。- 循环条件
(ch = getchar()) != '\n'
表示只要输入的字符不是换行符,就继续执行循环体。if (a % 2 != 0 && (ch >= 'a' && ch <= 'z'))
:这是一个条件判断。
a % 2 != 0
检查a
是否为奇数(即,是否是第奇数个字符)。(ch >= 'a' && ch <= 'z')
检查输入的字符是否是小写字母。- 如果满足上述两个条件,执行以下操作:
ch = ch - 'a' + 'A'
:将小写字母转换为对应的大写字母。putchar(ch)
:将处理后的字符输出到终端。
getchar()
函数:
getchar()
函数实际上是逐个字符地读取这个字符串的。这是因为在C语言中,标准输入(stdin)是一个缓冲区,当您输入一串字符并按下回车键时,这些字符都会被存储在缓冲区中。这里是详细的运行过程:
- 当
while
循环开始时,程序执行getchar()
函数,等待用户输入。- 当您开始输入并按下回车键时,您输入的所有字符都会被放入标准输入的缓冲区。
while
循环会继续调用getchar()
函数,getchar()
函数它会从缓冲区中读取下一个字符,直到遇到换行符'\n',
直到缓冲区中的所有字符都被读取完毕。这就是为什么您感觉像是只输入了一次,但实际上
getchar()
在内部是逐个读取字符的。
总结
以上就是今天要讲的内容,本文仅仅简单讲解了一下C语言的几个小练习,祝愿你我的朋友在学习的路上一帆风顺,也祝愿我会成为一个优秀的嵌入式工程师。