1.初识C语言(带你0基础体会C语言的魅力)

1.第一个C语言程序

#include<stdio.h>//printf函数的头文件
int main()
{
    printf("Hello bit\n");
    return 0;
}
//main函数是一个程序的入口,main有且仅有一个

2.数据类型:
在这里插入图片描述

#include<stdio.h>
int main()
{
    printf("%d\n",sizeof(char));
    printf("%d\n",sizeof(short));
    printf("%d\n",sizeof(int));
    printf("%d\n",sizeof(long));//C语言规定sizeof(long)>=4
    printf("%d\n",sizeof(long long));
    printf("%d\n",sizeof(float));
    printf("%d\n",sizeof(double));
    return 0;
}

3.变量, 常量
(1)数据类型的定义:

#include<stdio.h>
int main()
{
    char a='w';
    int age=120;
    float wight=45.5f;
    printf("%c\n",a);
    printf("%d\n",age);
    printf("%f",wight);
    return 0;
    //age这个变量的创建其实是需要在内存开辟空间的
    //关键字sizeof:C语言中sizeof是用来计算变量或者使用类型创建的变量的大小,单位是字节,8bit=1Bity(1个字节=8个比特位)
    //例如:sizeof(char) =1就表示char类型变量占1个字节,也就是8位,即0000 0000——————1111 1111
}

(2)变量的分类
局部变量
全局变量

#include<stdio.h>
int global=2019;//全局变量
int main()
{
    int local=2018;//局部变量
    int global=2020;//局部变量
    printf("global=%d\n",global);
    return 0;
}
//上面的局部变量global变量的定义其实没有什么问题
//当局部变量和全局变量同名的时侯,局部变量优先使用

在这里插入图片描述
(3)变量的使用

#define _CRT_SECURE_NO_WARNINGS 1#define _CRT_SECURE_NO_WARNINGS 1
//在VS中,如果没有这个东西,就会报错,提示用scanf_s的函数,该函数是VS编译器提供的,不是C语言自己的
//在其他的编译器下就没有scanf_s的函数,也不认识这个函数
//当你在代码中使用了scanf_s函数,你的代码在其他编译器下就无法正确的运行,这就降低了代码的跨平台性
#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)变量的作用域和生命周期
作用域:定义的变量的有效区域
生命周期:定义的变量在代码运行时的有效时间段

(5)常量

#include<stdio.h>
int main()
{
    //常量的定义方法:
	//1.字面常量
	100;
	3.14;
	"abc";
	'w';

	//2.const 修饰的常变量
	const int num = 100;
	printf("%d\n", num);
	num = 200;//不能改变
	printf("%d\n", num);
	//在数组中,int arr[num]={0}不能定义,因为num虽然不能改变,但是其本质上仍然为变量

	//3.#define定义的标识符常量  (习惯大写)

    #define MAX 100
	int b = MAX;
	int arr[MAX];
	printf("%d\n", b);

	4.枚举常量
    return 0;
}

在这里插入图片描述

4.字符串+转义字符+注释
(1)字符串

#include<stdio.h>
#include<string.h>
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);
	printf("%d\n", strlen(arr1));//3
	printf("%d\n", strlen(arr2));//输出随机值
	printf("%d\n", strlen(arr3));//3
	//strlen计算时,只计算字符串中‘\0’之前的字符数

    return 0;
}

在这里插入图片描述
(2)转义字符
在这里插入图片描述

#include<stdio.h>
#include<string.h>
int main()
{
    printf("c:\code\test.c\n");//并不能直接输出c:\code\test.c\n
	printf("c:\\code\\test.c\\n\n");// 能直接输出c:\code\test.c\n
	printf("\a");//蜂鸣
	printf("%d\n", strlen("c:\test\328\test.c"));//14
	// \32被解析成一个转移字符
    return 0;
}

在这里插入图片描述
(3).注释

方法一:/*XXXXXXXXX*/
方法二://
多行注释:选中注释区域——> ctrl+k ——> ctrl+c
多行取消注释:选中注释区域——> ctrl+k ——> ctrl+u

5.选择语句

#include<stdio.h>
int main()
{
	int input = 0;
	printf("加入比特\n");
	printf("你要好好学习吗?(1/0)");
	scanf("%d", &input);
	if (input == 1)
		printf("好offer!\n");
	else
		printf("卖红薯!\n");
	return 0;
}

6.循环语句

//while循环
#include<stdio.h>
int main()
{
	int line = 0;
	while (line < 20000)
	{
		printf("敲代码\n");
		line = line + 1;
	}
	if (line >= 20000)
		printf("好offer\n");
	else
		printf("火候还不够\n");
	return 0;
}

7.函数

//用函数求两个数的和
#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;
	scanf("%d %d", &num1, &num2);
	sum = Add(num1, num2);
	printf("sum = %d\n", sum);
	return 0;
}

8.数组
(1)整型数组

//整形数组
int main()
{
	int arr[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	//arr就是10个元素的整形数组,下标0——9;
	int i = 0;
	while (i <= 9)
	{
		printf("%d ", arr[i]);
		i = i + 1;
	}
	return 0;
}

(2)字符数组

//字符数组
#include<stdio.h>
#include<string.h>
int main()
{
	char ch1[5] = { 'a', 'b', 'c', 'd', 'e' };
	char ch2[] = { 'a', 'b', 'c', 'd', 'e' };
	char ch3[] = "hello";//后面默认有一个/0

	printf("%d\n", sizeof(ch1));//5
	printf("%d\n", sizeof(ch2));//5
	printf("%d\n", sizeof(ch3));//6

	printf("%d\n", strlen(ch1));//随机值
	printf("%d\n", strlen(ch2));//随机值
	printf("%d\n", strlen(ch3));//6
	
	return 0;
}

9.运算符
(1)

//运算符
int main()
{
	int n = 7 / 2;
	printf("%d\n", n);

	double ret = 7 / 2.0;
	printf("%lf\n", ret);

	int n = 7 % 2;
	printf("%d\n", n);
}

(2)取模运算符

//取模运算符——只能作用于整型
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 2 == 0)
		printf("偶数\n");
	else
		printf("奇数\n");
	return 0;
}

(3)移位运算符

//移位运算符
int main()
{
	int a = 3;
	//0000 0000 0000 0000 0000 0000 0000 0011
	int b = a << 1;//a 向左移一位
	//0000 0000 0000 0000 0000 0000 0000 0110
	printf("%d\n", b);
	return 0;
}

(4)按位与或非

//按位与或非
int main()
{
	int a = 3;
	//0000 0000 0000 0000 0000 0000 0000 0011
	int b = 5;
	//0000 0000 0000 0000 0000 0000 0000 0101
	int c = a & b;
	//0000 0000 0000 0000 0000 0000 0000 0011
	//0000 0000 0000 0000 0000 0000 0000 0101
	//全1为1
	//0000 0000 0000 0000 0000 0000 0000 0001   1
	
	int d = a | b;
	//0000 0000 0000 0000 0000 0000 0000 0011
	//0000 0000 0000 0000 0000 0000 0000 0101
	//有1为1
	//0000 0000 0000 0000 0000 0000 0000 0111   7

	int e = a^b;
	//0000 0000 0000 0000 0000 0000 0000 0011
	//0000 0000 0000 0000 0000 0000 0000 0101
	//相同为0,不同为1
	//0000 0000 0000 0000 0000 0000 0000 0110   6
	printf("%d %d %d",c,d,e);
	return 0;
}

(5).sizeof

//sizeof——计算变量或者类型创建变量占据的内存大小
int main()
{
	int a = 10;
	printf("%d\n", sizeof(a));//4
	printf("%d\n", sizeof(int));//4
	printf("%d\n", sizeof(10));//4
	return 0;
}

(6).按位取反

// ~  按位取反(2进制)
//按位取反是对存在内存中的补码进行取反的
int main()
{
	int a=- 1;
	//1000 0000 0000 0000 0000 0000 0000 0001 原码
	//1111 1111 1111 1111 1111 1111 1111 1110 反码
	//1111 1111 1111 1111 1111 1111 1111 1111 补码
	//0000 0000 0000 0000 0000 0000 0000 0000    0(补码取反)
	int b = ~a;
	printf("%d\n", b);
	return 0;
}

(6)a++, ++a

//a++
int main()
{
	int a = 10;
	int b = ++a;
	//int b2 = a++;
	printf("%d %d\n", a, b);// 11,11
	return 0;
}
//++a
int main()
{
	int a = 10;
	int b = a++;
	printf("%d %d\n", a, b);//10,11
	return 0;
}

(7)强制类型转换——()

//强制类型转换——()
int main()
{
	int n = (int)3.14;
	printf("%d\n", n);
}

(8)与&& 或||

//与&&  或||
int main()
{
	int a = 3;
	int b = 5;
	if (a == 3 && b == 3)
		printf("haha\n");
	else
		printf("hehe\n");
	//输出hehe
	if (a == 3 || b == 3)
		printf("haha\n");
	else
		printf("hehe\n");
	//输出haha
}

(9)三目操作符

//三目操作符
int main()
{
	int a = 10;
	int b = 20;
	int max = 0;
	if (a > b)
		max = a;
	else
		max = b;
	printf("max=%d\n", max);
	//简化后
	max = (a > b ? a : b);
	printf("max=%d\n", max);
}

(10)逗号表达式

//逗号表达式
//逗号表达式会从左往右依次计算
//逗号表达式的结果是最后一个表达式的结果
int main()
{
	int a = 3;
	int b = 5;
	int c = 10;

	int d = (a + 2, b = a - 3, c = b + 4);
	//         5     b=0           c=4
	//d=c=4
	printf("%d\n", d);
	return 0;
}

10.关键字
在这里插入图片描述
(1)关键字typedef
———类型重命名
在这里插入图片描述

(2)寄存器——register
例如:register int a=10;
register起建议作用,当有多个建议时,register判断谁更合适,选择性放入寄存器;
register int a=10不能取地址(&a),因为&取的是内存地址,不能取寄存器地址;
在这里插入图片描述
(3)关键字——static
static修饰局部变量——称为静态局部变量
static修饰全局变量——称为静态全局变量
static修饰函数——称为静态函数
在这里插入图片描述

静态局部变量:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void test1()
{
	int i = 0;
	i++;
	printf("%d ", i);
}//i出了此函数就被销毁
void test2()
{
	static int i = 0;//有static修饰
	i++;
	printf("%d ", i);
}//有static修饰,i出了此函数就不被销毁
int main()
{
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		test1();
	}
	printf("\n");
	for (i = 0; i <= 10; i++)
	{
		test2();
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述
静态全局变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

静态函数
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
11.#define定义常量和宏

//#define定义常量和宏

#define MAX 100//定义常量
#define ADD(x,y) ((x)+(y))//定义宏,类似函数

int main()
{
	int sum = ADD(2, 3);
	printf("sum = %d\n", sum);
	sum = 10 * ADD(2, 3);
	printf("sum = %d\n", sum);
}

12.指针
(1)

int main()
{
	int a = 10;
	int *p = &a;
	printf("%p\n", &a);//打印地址,%p是以地址的形式打印
	printf("%d\n", *p);
	return 0;
}

在这里插入图片描述
(2)
指针变量的大小:
指针变量的大小取决于地址的大小
32位平台下地址是32个bit位,即4个字节
64位平台下地址是64个bit位,即8个字节

14.结构体

//结构体
struct Stu
{
	char name[20];
	int age;
	char sex[5];
};
int main()
{
	struct Stu s = {"张三",20,"男"};
	printf("name = %s   age = %d  sex = %s\n", s.name, s.age, s.sex);
	struct Stu *ps = &s;
	printf("name = %s   age = %d  sex = %s\n", ps->name, ps->age, ps->sex);
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值