C语言概述
1.输出 "Hello, World!" 字符串,请选出错误答案。
A.
#include <stdio.h>
int main(int argc, char** argv)
{
char str[] = "Hello, World!";
printf("%s\n", str);return 0;
}
B.
#include <stdio.h>
int main(int argc, char** argv)
{
char str1[] = "Hello, ";
char str2[] = "World!";
printf("%s%s\n", str1, str2);
return 0;
}
C.
#include <stdio.h>
int main(int argc, char** argv)
{
char str1[] = "Hello, ";
char str2[] = "World!";
printf("%s%s\n", "str1", "str2");
return 0;
}
D.
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Hello, World!\n");
return 0;
}
错误答案:C
在正确答案中,"str1"与"str2"使用双引号引起来,这会导致%s无法识别str1与str2(字符数组)中的内容。
数据类型
小知识:C语言变量的生命周期和作用域
变量类型 | 生存周期 | 作用域 |
局部变量 | auto:自动变量,离开定义函数立即消失 | 只作用于该函数内部 |
register:寄存器变量,离开定义函数立即消失 | ||
static:静态变量,离开定义函数仍然存在 | ||
全局变量 | 在程序运行期间一直存在 | static:静态变量,仅限于本文件内部条用 |
extern:外部存储变量,用于声明本文件将要用到的其他文件的变量 |
变量:求正整数的平方
使用while循环修改变量值,依次打印10以内(包含10)所有正整数的平方。程序执行的第一步需要定义合适的变量用于后续逻辑的实现,请选出正确的变量定义,填在以下代码的(1)处。
1. #include <stdio.h> 2. 3. int main(int argc, char** argv) 4. { 5. (_____1_____) 6. 7. while (num <= max_num) 8. { 9. result = num * num; 10. printf("%d ^ 2 = %d\n", num, result); 11. num = num + step; 12. } 13. 14. return 0; 15. }
(1)处内容
1. int num = 1; 2. int max_num = 10; 3. int step = 1; 4. int result = 0;
常量:计算圆的面积
使用常量表示圆周率π,并计算半径为2的圆的面积。常量有多种定义方法,请判断哪一项填在(1)处无法使程序正常运行。
1. #include <stdio.h> 2. 3. (_____1_____) 4. 5. int main(int argc, char** argv) 6. { 7. float radius = 2.0; 8. float area = PI * radius * radius; 9. 10. printf("半径为%.2f的圆,面积是%.2f", radius, area); 11. 12. return 0; 13. }
好文章:
常量
C编程中的常量是一些固定的值,它在整个程序运行过程中无法被改变。
字面常量是直接写出的固定值,它包含C语言中可用的数据类型,可分为整型常量,字符常量等。如:9.9,“hello”等就属于这一类常量。
有的时候我们希望定义这么一种变量:值不能被修改,在整个作用域中都维持原值。为了满足用户需求,C语言标准提供了const关键字。在定义变量的同时,在变量名之前加上const修饰。如下所示:
1. int main() 2. { 3. const int a = 1; // const修饰的常变量 4. }
- const修饰的常变量,本质上是变量!
- 但具有常属性,不能被修改!
1. int main() 2. { 3. const int a = 1; 4. a = 2; // 错误 5. 6. const int n = 20; 7. int arr[n] = { 0 }; //n本质上是变量 8. }
关于上述n的使用,需要说明的是:在C99标准之前,数组的大小只能是常量修饰,不支持变长数组。
#define宏定义
1. #define PI 3.14159265358 //此处PI代替后面这串数字 2. #define SIZE 10 // 此处SIZE代表数组元素个数 3. int main() 4. { 5. int arr[SIZE]={0}; //等价于int arr[10]={0}; 6. return 0; 7. }
如果要修改数组大小,就只需要修改SIZE后面的数值。
如果程序中多处同一个数值,后续可能大批量修改的话,最好用一个宏定义来代替这个数值,只需要修改后面的数值即可,十分方便,在一个比较大的工程中可以看到很多宏定义,真是头皮发麻!
枚举常量
日常生活中有一些代表实际意义的常量,有这么一个特点:数值较小且为非负整数。如一周有7天等。C语言提供了一种枚举(Enum)类型,能够列出所有可能会用到的取值,并给它们取一个名字。
1. #include <stdio.h> 2. 3. int main() { 4. enum Sex { 5. //枚举常量 性别 6. MALE, FEMALE, SECRET 7. }; 8. 9. enum Sex s = FEMALE; //利用枚举常量给变量赋值 10. printf("%d\n", MALE); //0 11. printf("%d\n", FEMALE); //1 12. printf("%d\n", SECRET); //2 13. 14. return 0; 15. }
又比如在STM32中经常用到SET和RESET ,ENABLE和DISABLE,也都是枚举常量
if (USART_GetITStatus(USART3,USART_IT_RXNE) != RESET)
转到定义可以看到
1. typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; 2. 3. typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
在使用枚举常量的时候,需要注意以下几点:
- 不能对枚举常量赋值,只能将它们的值赋给其他的变量。
- 不能再定义与枚举常量名字相同的变量。
- 不能用
&
取得它们的地址。
以上就是C语言中常见的几种常量,合理使用常量可以使程序可读性更强,条理清晰,易于维护。
英文字母判断
判断一个字符是否是英文字母。请判断以下选项中哪个条件不能填在(1)处。
1. #include <stdio.h> 2. 3. int main(int argc, char** argv) 4. { 5. char ch; 6. printf("请输入一个字符:"); 7. scanf("%c", &ch); 8. 9. if (_____(1)_____) 10. printf("字符 \'%c\' 是一个英文字母", ch); 11. else 12. printf("字符 \'%c\' 不是一个英文字母", ch); 13. 14. return 0; 15. } 16. 17. A. ('a' <= ch <= 'z') || ('A' <= ch <= 'Z') 18. B. (0 <= (ch - 'a') && (ch - 'a') < 26) || (0 <= (ch - 'A') && (ch - 'A') < 26) 19. C. (ch >= 97 && ch <= 122) || (ch >= 65 && ch <= 90) 20. D. (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')
正确选项:A
('a'<=ch<='z')这是数学写法,编程中这种语法是错误的,但是
A~Z的ascll码为65-90,a~z是97-122,计算机语言中没有连等,所以("a" <= ch <= "z")能执行,不会报错,但会从左往右执行,假如ch是200,a是97<=ch,所以输出为1,就变成1<=z(122),所以程序是对的
其他三种写法都可以判断一个字符是否是英文字母
好文链接分享
文章知识点与官方知识档案匹配,可进一步学习相关知识