1.C语言程序主体
#include <stdio.h>
int main()
{
printf("hello bit\n");
return 0;
}
- main是主函数,是程序的入口,一个工程中可以有多个.c文件,但是只能有一个主函数
- include stdio.h包含标准输入输出头文件,standard inout output
- printf 打印函数,专门用在屏幕上打印数据的,是C语言标准库中提供的一个库函数
1.计算机的常见单位
- 比特(bit) 字节(byte) KB MB GB TB PB
- 1 byte = 8 bit 剩下的都是1024的关系
2.数据类型
3.变量,常量
1.定义变量的方法
int age = 18;
double salary = 20000.0;
- 定义变量的同时一定要给它一个初始值
2.变量的命名
- 只能由字母(包括大写和小写)、数字和下划线( _ )组成。
- 不能以数字开头。
- 长度不能超过63个字符。
- 变量名中区分大小写的。
- 变量名不能使用关键字。
3.变量的分类
- 局部变量
- 全局变量
int a = 10;//全局变量
int main()
{
int b = 20;//局部变量
return 0;
}
- 如果局部变量和全局变量的名字冲突时,局部优先。
写一个代码计算两个整数的和
#include<stdio.h>
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
//输入数据
scanf("%d%d", &num1, &num2);
//计算求和
sum = num1 + num2;
//输出结果
printf("sum = %d\n", sum);
return 0;
}
- scanf函数是一个库函数,它的作用是从键盘接收数据,它的语法重点是要指定输入类型,还要有取地址符&。
4.变量的作用域和生命周期
作用域
作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用
的而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段。
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
5.常量
常属性:不能被修改
- 字面常量
- const 修饰的常变量:用于变量不能被修改的情况,使变量具有了常属性,但是本质还是变量
const 修饰的常变量
const int num = 100;
num = 200;
- #define 定义的标识符常量
#include <stdio.h>
#define M 100
int main()
{
int arr[M] = { 0 };
printf("%d\n", M);
return 0;
}
M是一个常量(不能被修改),虽然是全局的,但是不能认为是全局变量
- 枚举常量
//枚举常量就是可以意译列举的常量,例如血型,三原色等
#include <stdio.h>
enum Color
{
//RED GREEN BLUE是枚举类型color的可能取值,同时也是常量,所以叫枚举常量
RED,//0
GREEN,//1
BLUE//2
};
int main()
{
enum Color c = BLUE;//enum Color是枚举类型,通过类型创建了一个变量c,就类似于int类型创建变量
printf("%d\n", c);
printf("%d\n", RED);
printf("%d\n", GREEN);
printf("%d\n", BLUE);
return 0;
}
4.字符串,转义字符
1.字符串
"hello,bit.\n" 这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
int main()
{
char ch1[] = { 'a','b','c','\0'};
char ch2[] = { "abc" };
printf("%s\n", ch1);//%s--打印字符串
printf("%s\n", ch2);
return 0;
}
1.统计字符串长度的函数--strlen
//C语言提供了一个库函数,可以计算字符串的长度,统计的是\0之前字符的个数
//strlen
#include<string.h> //包含strlen的头文件
int main()
{
char ch1[] = { 'a','b','c',};
char ch2[] = { "abc" };
int len1 = strlen(ch1);
int len2 = strlen(ch2);
printf("%d\n", len1);//%s--打印字符串
printf("%d\n", len2);
return 0;
}
- ch1[]的长度是一个随机值,因为没有添加“\0”结束标志,所以只能在运行当中碰到结束标识符才会停止,具体什么时候碰到随机。
2.转义字符
/*转移字符代码实现*/
printf("hello");
printf("\b");//退格符
printf("\n");//换行
printf("\a");//响铃
printf("\t");//水平制表符
printf("\v");//垂直制表符
printf("\'");//\'表示单引号
printf("\"");//\"表示单引号
5.选择语句
#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;
}
6.循环语句
- 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;
}
- for循环
- do.....while循环
7.函数
#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;
}
//上述代码,写成函数如下:
#include <stdio.h>
int Add(int x, int y)
{
int z = x+y;
return z;
}
int main()
{
int num1 = 0;
int num2 = 0;
int sum = 0;
printf("输入两个操作数:>");
scanf("%d %d", &num1, &num2);
sum = Add(num1, num2);
printf("sum = %d\n", sum);
return 0;
}
8.数组
int arr[10] = {1,2,3,4,5,6,7,8,9,10};//定义一个整形数组,最多放10个元素
- C语言规定:数组的每个元素都有一个下标,下标是从0开始的。数组可以通过下标来访问的。
1.数组的使用
#include <stdio.h>
int main()
{
int i = 0;
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
for(i=0; i<10; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
9.操作符
- 算数操作符:+ - * / %
int main()
{
int n = 10 / 4;//除号的两端如果都是整数,执行的就是整数除法
float m = 10.0 / 4;//除号两端有一个数是浮点数,才能执行浮点数的除法
int b = 10 % 4;//取余两端必须都是整数
printf("%d %.2f %d\n", n,m,b);
return 0;
- 移位操作符:>> <<
- 位操作符:& ^ |
- 赋值操作符:= += -= *= /= &= ^= |= >>= <<=
- 单目操作符:
! 逻辑反操作: 在C语言中,0就是假,非0就是真- 负值+ 正值& 取地址sizeof 操作数的类型长度(以字节为单位)~ 对一个数的二进制按位取反-- 前置、后置 --++ 前置、后置 ++ //后置++是先赋值,再++,前置++,先++,再赋值* 间接访问操作符 ( 解引用操作符 )( 类型 ) 强制类型转换
-
关系操作符:>>=<<=!= 用于测试 “ 不相等 ”== 用于测试 “ 相等 ”
- 逻辑操作符:
&& 逻辑与|| 逻辑或
-
条件操作符:exp1 ? exp2 : exp3
#include<stdio.h>
exp1?exp2 : exp3
m = (a>b ? a :b)//a>b是exp1,a是exp2,b是exp3,如果a>b,则输出a,否则输出b
10.常见关键字
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
1.static关键字
static是用来修饰变量和函数的
1. 修饰局部变量-称为静态局部变量
2. 修饰全局变量-称为静态全局变量
3. 修饰函数-称为静态函数
void test()
{
int a = 0;
a++;
printf("%d\n", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
- 此时输出的应该是10个1,因为a是局部变量,出了局部空间就释放了
- 但是加上static之后,a就变成静态变量了,也就是直到程序结束之后,a才会被释放
void test()
{
static int a = 0;
a++;
printf("%d\n", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
- static修饰全局变量
//全局变量本身是具有外部链接属性的
//在A文件中定义的变量,在B文件中可以通过【链接】使用
//但是如果全局变量被static修饰,这个外部链接属性就变成了
//内部链接属性,这个全局变量只能在自己所在的源文件内部使用
//
//static的修饰,会把外部链接属性变成内部链接属性,最终使得全局变量的
//作用域变小了
- static修饰函数
//函数本身是具有外部链接属性的
//被static修饰后,外部链接属性就变成了内部链接属性
//使得这个函数只能在自己所在的源文件内部使用,其他源文件无法使用
//限制了作用域
2.#define定义常量和宏
#include<stdio.h>
#define M 100//#define定义的符号
int main()
{
int a = M;
printf("%d\n", M);
printf("%d\n", a);
return 0;
}
#define MAX(x,y)(x>y?x:y)//#define定义的宏
// (x,y)是宏的参数,(x>y?x:y)是宏的实现体,调用方法和函数调用方法类似
int main()
{
int a = 10;
int b = 20;
int m = MAX(a, b);
printf("%d\n", m);
return 0;
}
11.结构体
结构体是C语言中特别重要的知识点,结构体使得C语言有能力描述复杂类型。比如描述学生,学生包含: 名字+年龄+性别+学号 这几项信息。这里只能使用结构体来描述了。
struct Stu
{
char name[20];
char sex[5];
int age;
};
int main()
{
int num = 0;
struct Stu s = { "张三","男",20 };
struct Stu s2 = { "如花","女",18 };
printf("%s\n", s.name);//.操作符用法:结构体变量.成员名
printf("%s\n", s.sex);
printf("%d\n", s.age);
return 0;
}