【C技能树】C语言学习笔记

简介: 【C技能树】C语言学习笔记

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. }

cb5dee85b70ee5c35bda259ea09f8d6c_e18483b0a7a94845bc88692daabd252b.png

好文章:

image.png

常量

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中经常用到SETRESETENABLEDISABLE,也都是枚举常量

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),所以程序是对的

其他三种写法都可以判断一个字符是否是英文字母

好文链接分享

文章知识点与官方知识档案匹配,可进一步学习相关知识

C技能树首页概览145059 人正在系统学习中


相关文章
|
3月前
|
C语言
C语言学习笔记-数组
C语言学习笔记-数组
|
3月前
|
C语言
C语言学习笔记-C语言中的运算符
C语言学习笔记-C语言中的运算符
|
3月前
|
C语言
C语言学习笔记-C语言中的数据类型
C语言学习笔记-C语言中的数据类型
|
4月前
|
存储 编译器 C语言
终于学会数组的使用啦~~~------C语言数组学习笔记详解
终于学会数组的使用啦~~~------C语言数组学习笔记详解
82 1
|
3月前
|
C语言
C语言学习笔记-C语言中的程序结构语句
C语言学习笔记-C语言中的程序结构语句
|
3月前
|
C语言
C语言学习笔记-初识C语言
C语言学习笔记-初识C语言
|
3月前
|
存储 小程序 C语言
C语言学习笔记-函数
C语言学习笔记-函数
|
4月前
|
存储 C语言
c语言 再学习笔记
c语言 再学习笔记
26 1
|
6月前
|
存储 C语言
C语言初阶学习笔记
C语言初阶学习笔记
20 0
|
9月前
|
存储 人工智能 算法
C语言学习笔记
C语言学习笔记