C语言之类型转换、一维数组、字符串、基本算法

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);
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客领航

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

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

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

打赏作者

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

抵扣说明:

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

余额充值