第一节、初识C语言

第一节、初识C语言

先快速了解一下C语言的大概内容,点到为止,以后会具体介绍。

1.什么是C语言

C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。

2.第一个C语言

#include
int main(){
    printf("Hello,world!\n");
    return 0;
}
//Ctrl+F5  VS运行代码快捷键

3.数据类型

char          //字符数据类型
short         //短整型
int           //整型
long          //长整型
long long     //更长的整形
float         //单精度浮点数
double        //双精度浮点数
//C语言中没有字符串类型
//在不同的系统上,这些类型占据的字节长度不同,具体可以用sizeof测试

4.常量与变量

常量—不变的量

变量—可变的量

4.1 定义变量的方法

int age = 150;
float weight = 45.5f;
cha ch = x;
//两数相加
#define _CRT_SECURE_NO_WARNINGS 1 
#include
int main() {
	int num1 = 0;
	int num2 = 0;
	int sum = 0;
	scanf("%d %d", &num1, &num2);
	sum = num1 + num2;
	printf("%d\n", sum);
	return 0;
}
//#define _CRT_SECURE_NO_WARNINGS 1是为了避免编辑器因为使用strcpy,scanf等不安全的函数从而报警告和错误

4.2 变量的分类

全局变量;局部变量c

#include 
int year = 1998;//全局变量 
int main(){       
    int year = 2021;//局部变量    
    printf("year = %d\n", year);    
    return 0; 
}
//当局部变量和全局变量同名的时候,局部变量优先使用。 

4.3 变量的作用域和生命周期

作用域—作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,限定这个名字的可用性的代码范围就是这个名字的作用域。

  1. 局部变量的作用域:变量所在的局部范围。
  2. 全局变量的作用域:整个工程。

生命周期—变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。

  1. 局部变量的生命周期:进入作用域生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期:整个程序的生命周期。

4.4 常量

C语言中的常量分为以下以下几种:

字面常量;const修饰的常变量;#define定义的标识符常量;枚举常量;

#include  //举例
enum Sex{
	MALE,
	FEMALE,
	SECRET
}; //括号中的MALE,FEMALE,SECRET是枚举常量

int main(){
	//字面常量演示
	3.14;//字面常量
	1000;//字面常量
	
	//const 修饰的常变量 
	const float pai = 3.14f;//这里的pai是const修饰的常变量
	//pai = 5.14;会报错
    //const 修饰的常变量在C语言中只是在语法层面限制了变量pai不能直接被改变,但是pai本质上还是一个变量,所以叫常变量

	
	//#define的标识符常量
	#define MAX 100
	printf("max = %d\n", MAX);
	
	//枚举常量
	printf("%d\n", MALE);
	printf("%d\n", FEMALE);
	printf("%d\n", SECRET);
	//注:枚举常量的默认是从0开始,依次向下递增1的
	return 0;
}

5.字符串+转义字符+注释

5.1 字符串

字符串—由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal)。

"hello bit.\n"

注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

#include  
int main() {
	char arr1[] = "bit";
	char arr2[] = {'b', 'i', 't'};
	char arr3[] = {'b', 'i', 't','\0'};
	printf("%s\n", arr1);
	printf("%s\n", arr2);
	printf("%s\n", arr3);
	return 0; 
}
//输出结果:
//bit
//bit烫烫烫烫蘠it
//bit

5.2 转义字符

转义字符 释义
? 在书写连续多个问号时使用,防止他们被解析成三字母词
\’ 用于表示字符常量’
\" 用于表示一个字符串内部的双引号
\\ 用于表示一个反斜杠,防止它被解释为一个转义序列符
\a 警告字符,蜂鸣
\b 退格符
\f 进纸符
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ddd ddd表示1~3个八进制的数字。 如: \130 X
\xdd dd表示2个十六进制数字。 如: \x30 0
//举例
#include
int main(){
    printf("%c\n", '\'');//打印一个单引号
    printf("%s\n", "\"");//打印一个双引号
    return 0; 
}

5.3 注释

代码中有不需要的代码可以直接删除,也可以注释掉

代码中有些代码比较难懂,可以加一下注释文字

/*xxxxx*/   //多行注释,不能嵌套注释
//xxxxx     //单行注释

6.选择语句

#define _CRT_SECURE_NO_WARNINGS 1
#include
int main(){
    int learn = 0;
    printf("你会认真学习吗?(选择 1 or 0):")scanf("%d",&learn);
    if(learn == 1){
        printf("你会进步!\n");
    }else{
        printf("你会落后!\n");
    }
    return 0;
}
//if(表达式){代码块}else{代码块}
//if(表达式1){代码块}else if(表达式2){代码块}else{代码块}

7.循环语句

#include
int main(){
    int num = 0;
    //while语句
    while(num <= 10){
        printf("%d",num);
        num++;
    }
    //do...while语句
    do{
        printf("%d",num);
        num++;
    }while(num <= 10);
    //for语句
    for(num=0;num <= 10;num++){
        printf("%d",num);
    }
    return 0;
}
//while语句在进入循环体之前要先判断条件是否成立,如果成立的话则进入循环体
//do…while语句则相反,先执行循环体,然后再判断条件是否成立,如果成立的话则进入循环体,也就是说对于do…while语句,不管条件是否成立都要先执行一遍

8.函数

#define _CRT_SECURE_NO_WARNINGS 1
#include
//创建加法函数Add()
int Add(int x,int y){
    int sum = x + y;
    return sum;
}
int main() {
	int num1 = 0;
	int num2 = 0;
    int sum = 0;
    printf("输入两个数:");
	scanf("%d %d",&num1,&num2);
    //使用自己定义的加法函数Add()
    sum=Add(num1,num2);
    printf("sum=%d",sum);
	return 0;
}
//函数的特点就是简化代码,代码复用

9.数组

9.1 数组的定义

数组—一组相同类型元素的集合 。(c语言中的定义)

int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个最多放10个元素的整形数组

9.2 数组的下标

数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的。

10.操作符

//算术操作符
+  -  *  /  %

//移位操作符
>>  <<
    
//位操作符
&  ^  |
    
//赋值操作符
=  +=  -=  *=  /=  &=  ^=  !=  >>=  <<=
    
//单目操作符
!  -  +  &  sizeof  ~  --  ++  *
    
//关系操作符
>  >=  <  <=  !=  ==

//逻辑操作符
&&  ||

//条件操作符
exp1 ? exp2 : exp3

//逗号表达式    
exp1,exp2,exp3
    
//下标引用、函数调用和结构成员
[]  ()  .  ->

11.常见关键词

auto  break  case  char  const  continue  default  do  double  else  enum  extern  float  for  goto  if  int  long  register  return  short  signed  sizeof  static  struct  switch  typedef  union  unsigned  void  volatile  while

注:先介绍下面几个,之后会详细介绍

11.1 关键字 typedef

typedef—定义自己习惯的数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等。

//将unsigned int 重命名为uint_32
typedef unsigned int uint_32;

11.2 关键字 static

static是用来修饰变量和函数的。

11.2.1 修饰局部变量

#include
void test1(){
    int i = 0;
    i++;
    printf("%d ",i);
}
void test2(){
    static int i = 0;//static修饰局部变量
    i++;
    printf("%d ",i);
}
int main(){
    int i = 0;
    for(i=0;i<10;i++){
        test1();
    }
    printf("\n");
    for(i=0;i<10;i++){
        test2();
    }
    return 0;
}

输出:

1 1 1 1 1 1 1 1 1 1
1 2 3 4 5 6 7 8 9 10

结论:

static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束,也就是保持变量内容的持久性

11.2.2 修饰全局变量

//add_1.c
int year_1 = 2021;
//add_2.c
static int year_2 = 2021;
//test.c
#include
int main(){
    extern int year_1;
    extern int year_2;
    printf("%d",year_1);
    //printf("%d",year_2);  无法输出,会出现连接性错误
    return 0;
}
//一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使 用。 

11.2.3 修饰函数

修饰函数与修饰全局变量效果类似。

一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

12.#define 定义常量和宏

//define定义标识符常量
#define MAX 1000
//define定义宏
#define ADD(x,y) ((x)+(y))
#include
int main(){
    int sum = ADD(2,3);
    printf("%d   %d",MAX,sum);
    return 0;
}
//#define是预处理命令,在编译预处理的时候进行简单的替换
//typedef是在编译时处理的,它在自己的作用域内给一个已经存在的类型一个别名

13.指针

每一个变量都有一个内存位置,每一个内存位置都定义了可使用&运算符访问的地址,它表示了在内存中的一个地址。

指针也就是内存地址,指针变量是用来存放内存地址的变量。

指针大小在32位平台是4个字节,64位平台是8个字节。

#include
int main(){
    int num = 100;
    int *p;
    p = &num;
    printf("num变量的地址:%p\n",p);
    printf("num变量的值:%d\n",*p);
    return 0;
}

结果:

num变量的地址:00A4F88C
num变量的值:100

14.结构体

结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。

struct Stu{
    char name[20];
    int age;
    char sex[5];
    char id[15];
};

//打印结构体信息
struct Stu s = {"小白",20,"男","20210101"};
//.为结构成员访问操作符
printf("name = %s;age = %d", s.name, s.age); 
//->操作符
struct Stu *ps = &s;
printf("name = %s;age = %d", ps->name, ps->age); 

你可能感兴趣的:(01,C快速入门,c语言)