C语言之类型转换、一维数组、字符串、基本算法
#include <stdio.h>
#include <stdlib.h>
void printArr(void);//函数声明
int main(void)
{
//阶段二知识任务 ============================================================
1、了解类型转换,包含显式类型转换和隐式类型转换
2、了解一维数组的定义及使用,理解下标是从0开始;下标为0,就是数组的第一个元素
3、了解字符数组的定义及使用,字符数组就是元素里面装字符
4、了解字符串的定义及使用,字符串是以 \0 为尾的字符数组
5、了解算法基础,交换算法,冒泡算法,掌握排序思想,利用代码实现
// 类型转换 ===================================================
//类型转换包含:显式类型转换与隐式类型转换
//显式类型转换:形式:(type)数据
//int iA = 12;
//double dB = 13.123;
//printf("%d\n", iA);
//printf("%d\n", dB);输出失败,格式说明符不匹配
//printf("%d\n", (int)dB);
//(int)dB) 这个是将double类型变为int类型,所以可以用 %d输出了
//隐式类型转换:
//int iA1 = 12.12f; //初始化隐式类型转换,编译看警告
//printf("%d\n", iA1);
//int iA2 = 12 + 12.2; //混合运算隐式类型转换,看警告
//printf("%d\n", iA2);
// 数组 ===================================================
//引出数组
//我们如果需要很多变量,一个个定义变量 int a; int b ... 就会很麻烦
//如果能一次定义多个变量,那就会方便很多,那就有了数组
//比如我们定义5个变量
//int a1 = 1;
//int a2 = 2;
//int a3 = 3;
//int a4 = 4;
//int a5 = 5; //很麻烦
//一维数组的定义
//int iArr1[5] = { 1,2,3,4,5 }; //定义数组并初始化,一步到位
//printf("%d\n", iArr1[4]);
//int 表示数组为 int 类型,iArr1为数组名,也是数组的首地址,
//[5]代表5个元素,{ 1,2,3,4,5} 依次表示数组元素中每个变量的值
//赋值与调用
//我们以往是定义单个变量,然后进行调用
//int a = 12; //定义一个变量并初始化值为 12
//printf("%d\n", a); //输出变量a的值,输出12
//数组进行赋值与调用
//int iArr2[5] = { 1,2,3,4,5 };
//printf("%d\n", iArr2[0]);//调用单个数组元素
//iArr2[0]为数组中的第一个元素
//如果要一次输出全部内容呢,那就用循环
//for (int i = 0; i < 5; i++)
//{
// printf("%d\n", iArr2[i]);
//}
//赋值
//a = 45;
//iArr1[0] = 1; //数组第一个元素
//iArr1[1] = 2; //数组第二个元素
//iArr1[2] = 3; //数组第三个元素
//iArr1[3] = 4; //数组第四个元素
//iArr1[4] = 5; //数组第五个元素
//在进行调用时,数组的下标是从0开始
//比如第一个元素,下标为0,第二个元素下标为1,依次类推
//数组知识要点
//iArr1 是数组名,也是数组地址,进行数组元素调用时,需要 地址 + 下标,例如 iArr1[0]
//数组 [] 里面表示下标,比如iArr1[0],0为下标,表示数组中的第一个元素
//数组下标是从0开始,第一个元素下标为0
//数组的输入与输出
//int iArr[10] = { 0 };
利用循环+scanf函数给数组赋值
//for (int i = 0; i < 10; i++)
//{
// scanf_s("%d", &iArr[i]);
//}
依次输出数组元素
//for (int i = 0; i < 10; i++)
//{
// printf("%d\n", iArr[i]);
//}
//字符数组与字符串 ============================================================
//字符数组
//char iArr[5] = { 1,2,3,4,5 };//普通数组,元素为数值
//char iArr1[5] = { 'a','b','c','d','e' };//字符数组,全部初始化,元素为字符
//char iArr2[5] = { 'a','b','c' };//字符数组部分初始化,元素为字符
//初始化部分元素,其他元素默认为 0
//知识要点:
//字符数组 ---> 就是数组内的元素是字符
//字符与数值之前遵循ASCll准则
//字符数组和普通数组定义、赋值,调用都一样,只是元素类型不同
//字符串
//字符串就是以'\0'(0)结尾的字符数组,'\0'就是 0
//字符数组与字符串的区别
//char str[5] = { 'a', 'b', 'c', 'd', 'e' }; //纯字符数组
//char str1[5] = { 'a', 'b', 'c', 'd', '\0' }; //字符串
//char str2[5] = { 'a', 'b', 'c', 'd', 0 };//字符串
//char str3[5] = { 'a', 'b', 'c', '\0' };//字符串
//char str4[5] = { 'a', 'b', 'c' };//字符数组与字符串都是
//字符数组部分初始化,其他未初始化的元素默认为 0,所以也成为了字符串
//输出字符串
//printf("%s\n", str1); //输出abcd
//printf("%s\n", &str1[0]); //输出abcd
//printf("%s\n", &str1[2]); //输出cd, 从str1[2]开始输出
// %s 原理:从给定的字符串地址开始,一个一个的输出,遇到'\0'结束
//puts(str1); //输出 abcd ,puts输出函数,字符串专属
//字符串的声明、定义方式(四种形式)
//有元素个数=======
//char str[5] = { 'a', 'b', 'c', 'd', '\0' };//注意别越界
//char str1[5] = { 'a', 'b', 'c', 'd', 0 };
//char str2[5] = { 'a', 'b', 'c', '\0' };
//char str3[5] = { 'a', 'b', 'c' };
//无元素个数======
//char str[] = { 'a', 'b', 'c', 'd', '\0' };//一定要手写'\0'
//常量字符串======
// "hello world"
//printf("%s", "hello world"); //输出常量字符串 hello world
//常量字符串自带'\0'
//常量字符串不能被修改
//常量字符串初始化数组======
//char str1[15] = "hello world";//注意别越界
//原理
//系统在栈区申请15字节的空间
//将hello world\0依次复制进栈区字符数组str中
//char str2[] = "hello world";
//这个不用考虑越界,长度系统自动计算。
//系统计算常量字符串的长度12
//错误演示
//char str[10];
//str[10] = "dadsa"; 错误
//原因: str[10]为单个字符变量,"dadsa"为字符串,不能将字符串赋值为单个字符变量
//字符串输入
//scanf("%s", str);
//scanf_s("%s", str, 19);
//gets(str); //跟scanf对比,可以读空格
//gets_s(str, 19);//跟scanf对比,可以读空格
//字符串操作的其他常用库函数 阶段二不讲解
//算法基础与程序设计 ============================================================
//算法的定义非常广,比较复杂,在这里我不给你们细讲,你们暂时可以理解为 解决问题的方法
//如果我们要交换a,b两个数的值,该怎么去做?
//int a = 12;
//int b = 34;
//我们平常思维就是让a等于b,b等于a,在计算机中并不适用,因为 = 是赋值,
//a = b;//让a等于b,那么 a = 34,b = 34
//b = a;//现在a已经变为34了,再赋值给b,b还是34
//所以a,b都变为了34;达不到我们的交换目的
//所以我们引出 交换算法
//定义中间变量
//例:
//int temp = 0;//定义个中间变量
//temp = a;//保留a的值,让temp = 12;
//a = b;//让a等于b,a = 34;
//b = temp;//让b = 中间变量,b = 12;
//所以最后b = 12; a = 34;交换成功
//在C语言当中,算法用的比较多的就是查找与排序
//下面先了解循环嵌套与一维数组
//循环嵌套与一维数组
//int iArr[10] = { 0 };//定义一个int类型的数组,元素为10个
//利用循环给数组赋值
//for (int i = 0; i < 10; i++) //for循环
//{
// scanf_s("%d", &iArr[i]);
//}
//依次输出数组元素
//for (int i = 0; i < 10; i++)
//{
// printf("%d\n", iArr[i]);
//}
//冒泡排序 分析代码
//int iArr[10] = { 0 }; //声明一个数组,并初始化为0
利用循环+scanf函数给数组赋值
//for (int i = 0; i < 10; i++)
//{
// scanf_s("%d", &iArr[i]);
//}
//将数进行排序,分析代码,画图讲解
//for (int i = 0; i < 10; i++)
//{
// for (int j = i+1; j < 10; j++)
// {
// if (iArr[i] > iArr[j])
// {
// int temp = iArr[i];
// iArr[i] = iArr[j];
// iArr[j] = temp;
// }
// }
//}
依次输出数组元素
//for (int i = 0; i < 10; i++)
// {
// printf("%d\n", iArr[i]);
// }
//函数基础 ============================================================
//模块化编程
//1、用于完成特定任务的程序代码单元
//2、那就是把一个小功能封装成一个独立的代码段(函数)
//3、封装前与封装后的执行结果是一样的
//函数的作用
//1、增加代码的复用性(重复使用)
//2、增加代码的可读性
//函数的执行过程
//调用位置跳转进函数,函数走完了,再跳回调用位置
//函数形式
//无参数,无返回值
printArr(); //调用printArr函数
//调用printArr函数就会跳转到printArr函数内,执行printArr函数里面的内容,
//printArr函数内容执行完毕才回到调用函数的地方,进行下一步操作
//其他函数形式阶段二不讲解,这里只是提一下函数的基础概念
//阶段二总结 =====================================================
//阶段二主要掌握类型转换、一维数组,字符数组,字符串,冒泡排序,函数的基础概念
//写的比较急,这里很多细节没有补充,以后有时间再详细整理一遍
//有些知识点适合讲解,文字说的不容易明白,所以这里不写,以后给大家边写边讲解
//这里主要是将相关知识点写了一遍,是用于测试,大家一定要自己去写一遍,加深印象
system("pause");
return 0;
}
//printArr函数,printArr为函数名
//前void表示无返回值,后void表示无参数
void printArr(void)
{
//依次输出变量i的值
for (int i = 0; i < 10; i++)
{
printf("%d\n",i);
}
}