C语言学习笔记

整理自比特就业课

一、初识C语言

1、什么是C语言

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

2、第一个C语言程序

#include <stdio.h>

int main() {
	printf("hello world!\n");
	return 0;
}
// main函数是程序的入口
// 一个工程中main函数有且只有一个

3、数据类型

char          // 字符数据类型
short         // 短整型
int           // 整形
long          // 长整形
long long     // 更长的整形
float		  // 单精度浮点数
double        // 双精度浮点数

每种类型的大小

#include <stdio.h>
int main()
{
	printf("%d\n", sizeof(char));			// 1
	printf("%d\n", sizeof(short));			// 2
	printf("%d\n", sizeof(int));			// 4
	printf("%d\n", sizeof(long));			// 4
	printf("%d\n", sizeof(long long));		// 8
	printf("%d\n", sizeof(float));			// 4
	printf("%d\n", sizeof(double));			// 8
	printf("%d\n", sizeof(long double));	// 8
	return 0;
}

类型的使用

char ch = 'w';
int weight = 120;
int salary = 20000;

4、变量、常量

生活中有些值是不变的(比如:圆周率,性别,身份证号码,血型等等),有些值是可变的(比如:年龄,体重,薪资)。
C语言中,不变的值用常量的概念来表示,变的值用变量表示

4.1 定义变量的方法

int age = 150;
float weight = 45.5f;
char ch = 'w';

4.2 变量的分类

  • 局部变量
  • 全局变量
#include <stdio.h>

int global = 2019; // 全局变量
int main() {
    int local = 2018; // 局部变量
    // 下面定义的global会不会有问题?
    int global = 2020; // 局部变量
    printf("global = %d\n", global);
    return 0;
}

【总结】:

  • 上面的局部变量global变量的定义其实没有什么问题。
  • 当局部变量和全局变量同名的时候,局部变量优先使用。

4.3 变量的使用

#include <stdio.h>
int main() {
    int num1 = 0;
   	int num2 = 0;
    int sum = 0;
    printf("输入两个操作数:>");
    scanf("%d %d", &num1, &num2);
    sum = num1 + num2;
    printf("sum = %d\n", sum);
    return 0;
}

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

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

  • 局部变量的作用域是变量所在的局部范围
  • 全局变量的作用域是整个工程

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

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

4.5 常量

C语言中的常量和变量的定义形式有所差异。
C语言中的常量分为以下几种:

  • 字面常量
  • const修饰的常变量
  • #define定义的标识符常量
  • 枚举常量
#include <stdio.h>
//举例
enum Sex
{
 MALE,
 FEMALE,
 SECRET
};
//括号中的MALE,FEMALE,SECRET是枚举常量
int main()
{
    //字面常量演示
    3.14;//字面常量
    1000;//字面常量
    
    //const 修饰的常变量
    const float pai = 3.14f;   //这里的pai是const修饰的常变量
    pai = 5.14;//是不能直接修改的!
    
    //#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;
}

【注意】
上面例子上的 pai 被称为 const 修饰的常变量, const 修饰的常变量在C语言中只是在语法层面限制了
变量 pai 不能直接被改变,但是 pai 本质上还是一个变量的,所以叫常变量。

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

5.1 字符串

"hello bit.\n"

这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。

#include <stdio.h>
//下面代码,打印结果是什么?为什么?(突出'\0'的重要性)
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;
}

5.2 转义字符

加入我们要在屏幕上打印一个目录:c:\code\test.c,我们该如何写代码?

#include <stdio.h>
int main()
{
 printf("c:\code\test.c\n");
    return 0;
}

实际上程序运行的结果是这样的:
在这里插入图片描述
这里就不得不提一下转义字符了。转义字符顾名思义就是转变意思。
下面看一些转义字符。

转义字符释义
?在书写连续多个问号时使用,防止他们被解析为三字母词
用于表示字符常量’
"用于表示一个字符串内部的双引号
\用于表示一个反斜杠,防止它被解释为一个转移序列符
\a警告字符,蜂鸣
\b退格符
\f换页,将光标当前位置移到下一页开头
\n换行
\r回车
\t水平制表符
\v垂直制表符
\dddddd表示1~3个八进制的数字。如:\130
\xdddd表示2个十六进制数字。如:\x30
#include <stdio.h>
int main()
{
    //问题1:在屏幕上打印一个单引号',怎么做?
    //问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号“,怎么做?
    printf("%c\n", '\'');
    printf("%s\n", "\"");
    return 0;
}

笔试题:

//程序输出什么?
#include <stdio.h>
int main()
{
    printf("%d\n", strlen("abcdef"));
    // \62被解析成一个转义字符
    printf("%d\n", strlen("c:\test\628\test.c"));
    return 0;
}

5.3 注释

  1. 代码中有不需要的代码可以直接删除,也可以注释掉
  2. 代码中有些代码比较难懂,可以加一下注释文字

比如:

#include <stdio.h>
int Add(int x, int y)
{
    return x+y;
}
/*C语言风格注释
int Sub(int x, int y)
{
    return x-y;
}
*/
int main()
{
    //C++注释风格
    //int a = 10;
    //调用Add函数,完成加法
    printf("%d\n", Add(1, 2));
    return 0;
}

注释有两种风格:

  • C语言风格的注释 /*xxxxxx*/
    缺陷:不能嵌套注释
  • C++风格的注释 //xxxxxxxx
    可以注释一行也可以注释多行

6、选择语句

如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!

#include <stdio.h>
int main()
{
    int coding = 0;
    printf("你会去敲代码吗?(选择1 or 0):>");
    scanf("%d", &coding);
    if(coding == 1)
   {
       prinf("坚持,你会有好offer\n");
   }
    else
   {
       printf("放弃,回家卖红薯\n");
   }
    return 0;
}

7、循环语句

有些事必须一直做,比如我日复一日的讲课,比如大家,日复一日的学习。C语言中如何实现循环呢?

  • while语句
  • for语句
  • do … while语句
//while循环的实例
#include <stdio.h>
int main()
{
    printf("加入比特\n");
    int line = 0;
    while(line<=20000)
   {
        line++;
        printf("我要继续努力敲代码\n");
   }
    if(line>20000)
        printf("好offer\n");
    return 0;
}

8、函数

习题

【习题1】字符串的结束标志是:( )。
A、'0'
B、EOF
C、'\0'
D、空格
【答案】:C

【习题2】下面代码的结果是:( )。

#include <stdio.h>
#include <string.h>

int main() {
	char arr[] = {'b', 'i', 't'};
	printf("%d\n", strlen(arr));
	return 0;
}

A、3
B、4
C、随机值
D、5
【答案】:C

【习题3】下面那个不是转义字符?( )
A、'\n'
B、'\060'
C、'\q'
D、'\b'
【答案】:C

【习题4】关于数组描述错误的是:( )。
A、数组是一组相同类型元素的集合
B、数组的下标是从1开始的
C、数组的下标是从0开始的
D、数组如果初始化,可以不指定数组的大小
【答案】:B

【习题5】C语言中下面那个数组的创建是错误的。( )
A、int arr[10] = {0}
B、int n = 10; int arr[n] = {0}
C、int arr[] = {1,2,3,4,5,6,7,8,9,0}
D、char ch[10] = "hello bit"
【答案】:B

【习题6】下面程序的结果是:( )

#include <stdio.h>
#include <string.h>

int main() {
	printf("%d\n", strlen("c:\test\121"));
	return 0;
}

A、7
B、8
C、9
D、10
【答案】:A

【习题7】写一个函数求两个数的较大值

//写一个函数求两个数的较大值
#include <stdio.h>

int Max(int x, int y) {
	if (x > y) {
		return x;
	}
	else {
		return y;
	}
}

int main() {
	int num1 = 30;
	int num2 = 10;
	int max = 0;
	max = Max(num1, num2);
	printf("%d\n", max);
	return 0;
}
  • 20
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昵称只能一个月修改一次呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值