<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p>C语言学习代码</p>
讯享网
1.基础的HelloWorld代码
讯享网
2.有关于常量整型常量(包含正数、负数、0):18、19;
实型常量(所有带小数点的数):1.93、1.83;
字符常量(单引号引起来的字母、数字、英文符号):‘A’,‘B’;
字符串常量(双引号引起来):“XXX”,“我真厉害”。
3.
%d(整型),%f(实型),%c(字符),%s(字符串)
实形常数的例子:
4.输出两个数相加
讯享网
5.变量的注意注意事项:
(1)只能存在一个值
(2)变量名不允许重复定义
(3)一条语句可以定义多个变量
(4)变量在使用前一定要赋值
(5)变量的作用域范围。
6.同时要注意进制不同时输入的前缀也不同。
二进制:由0和1组成,代码中以*ob*开头.
十进制:由0~9组成,前面不加任何前缀。
八进制:由0~7组成,代码中以*0*开头。
十六进制:由0~9还有a到组成,代码以*ox*开头。
例如:
*7.不同的整型输入
*short型:
讯享网
*int*型:
*long*型:
讯享网
*long long*型:
8.关于有符号整数、无符号整数的定义情况
*signed*有符号整数 正数 负数:
讯享网
*unsigned*无符号整数 正数:
讯享网
关于*double:*
关于*long double:*
讯享网
10.变量的硬性命名规则:由数字、字母、下划线(-)组成,不能以数字开头,不能为关键字,区分大小写(a、A为不同的变量)。
讯享网
例题:
(char一般用与单个字符,scanf后要用&标识)
讯享网
12.同时输出多个数据:
13.取余(%):printf("%d ",10%3);//1
整数计算,结果一定是个整数:
printf("%d ",3+2);//5
汇总:通用细节:
1.两整数计算,结果整数(如果有小数,舍小数部分)
2.两小数计算,结果一定是小数。
3.整数和小时计算,最终的结果是小数。
4.小数直接参与计算,结果是有可能不精确的.
除法:1.不允许·除以0(与数学一样)。
取余:1.运算符必须是整形。
2.结果的符号跟第一个数字保持一致。
3.不允许%0(与数学保持一致)。
14.数值拆分:(输入一个三位数拆分为个位、十位、百位 )
讯享网
2.short char类型的数据在运算的时候,先提升为int,再进行运算。
douible > float > long long > long > int > short > char
short(两个字节)、int(4个字节)、long(4个字节)、long long(8字节)
一个字节:0 000 0000 0000 0000
例如:
short a= 10;
int b =a
此时short:0000 0000 0000 0010
int:0000 0000 0000 0000 0000 0000 0000 0010
格式::目标数据类型 变量名=(目标数据类型)被强制转换的数据;
例如:int b = 10;
short i =(short)b;
此时int:0000 0000 0000 0000 0000 0000 0000 0010
short:0000 0000 0000 0010
例如:
想要转成什么类型,就在前面的小括号中写什么类型即可。
short i = (short)b;
强制转换的弊端:有可能导致错误。
17.当需要查看ASCII码表中各个字符相应的数字时,可以通过下面的代码运行:
讯享网
18.在进行计算时,/与%的区别:两个数据做除法,/取结果的商,%取结果的余数。整数计算只能·得到整数想要得到小数,必须要有小数参与计算。
数据类型一样时可以直接计算,类型不一样时默认隐式转换(1.小变大 2.char short>int),强制大变小:强制转换
19.自增自减运算符:++为变量值加一,–为变量值减一。例如:
(1)先用后加:
讯享网
(2)先加后用:
同时也要注意有些坑:
讯享网
此时的意思是将a与b相加后将a+b的值赋值给a,对b的值没任何影响。
讯享网
||:两边都为假,结果才是假,或者。两边都不成立,那么最终的结果才是不成立的,只要有一个成立的,最终的结果计就是成立的。
讯享网
!:取反。
题目:键盘录入一个两位整数
讯享网
&&、||连续写多个的,多个&&,表示同时满足多个条件,多个||,表示在多个条件当中,只要满足其中一个(a1 || a2|| a ==3)
规则:当左边的表达式能确定整个表达式的结果了,右边不参与运算。
真题练习:
讯享网
范例:a > b ? a : b
例子:获取两个变量中的较大值
讯享网
获取三个变量中的最大值
从左到右,最后一个式子表达式的结果,是整个表达式的结果,优先级最低(永远最后执行)
格式:表达式1, 表达式2,…,表达式n
(i == 3, i++,++i,i=5)
讯享网
题目:
讯享网
运算符的优先级:
讯享网
题目:
讯享网
如果满足运行条件,才可以执行指定的代码。
利用if语句对数据进行判断,从而执行不同的代码。
语法格式:
讯享网
(练习)当温度大于37.5度,就会由语音警报:
讯享网
(练习):
使用场景:需要对参数进行判断
细节:1.判断的结构是数字,非零->成立,零->不成立
2.大括号中语句体只有一行,大括号可以省略
讯享网
练习;
规则:从上往下依次进行判断
只有要有一个判断成立,就执行对应的语句体
如果所有的判断都不成立,就执行else的语句体
语法格式:
讯享网
例子:
语法格式:
讯享网
执行流程:1.首先计算表达式的值。
2.依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
3.如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后结束整个switch语句。
细节:
|.表达式:计算结果只能为(字符/整数)
||.case:值只能是(字符/整数)的字面量,不能是变量
||:case:值不允许重复
|||:break:表示中断,结束的意思,结束switch语句
IV.default:所有情况都不匹配,执行该处的内容
defaultd的位置和省略
例子:
switch和if第三种格式各自的使用场景:
switch:有限个case进行匹配的情况,10个左右
if:一般是对一个范围进行判断
case穿透的规则:
1.还是根据小括号中表达式的结果去匹配对应8case
2.执行对应case里面的代码
3.如果在执行的过程中,遇到了break,那么直接结束整个switch、但是如果没有遇到break,就会继续执行下面case中的代码。直到遇到break,或者把整个switch中所有的代码全部执行完了,才会执行。
4.细节:case穿透只会往下穿,不会回到上面。
练习:
需求:健盘录入月份数,输出对应的季节。
春季:3、4、5月份
夏季:6、7、8月份
秋季:9、10、11月份
冬季;12月份到次年的2月份
讯享网
循环:重复的执行某件事情
初始化语句:循环的开始条件
条件判断语句:循环的结束条件
条件控制语句:控制循环次数的
循环体语句:要重复执行代码
执行流程;
(1)执行初始化语句
(2)执行条件判断语句,看其结果是否成立
成立:执行循环体语句
不成立:结束循环
(3)执行条件控制语句
(4)回到(2)继续执行条件判断语句
格式:
例子:
讯享网
题目:
讯享网
练习:
案例4:统计满足条件的数字
需求:键盘录入两个数字,表示一个范围。
统计这个范围中。
既能被6整除,又能被8整除数字有多少个?
讯享网
例子:
for与while的对比,区别:
for循环中:知道循环次数·或者循环的范围
while循环:不知道循环的次数和范围,只知道循环的结束条件。
练习:
讯享网
题目:
案例1:2的幂
给你一个整数 n,请你判断该整数是否是2的幂次方
举例:
n=1输出:yes n=2 输出:yes n=3输出:no
规则:任意的一个数字,不断的除以2,最终都会得到数字1
循环的结束案件息什么?
1.结果是1的时候,就可以结束了,yes
2.结果无法被2整除了,也可以结束了,no
题目:
案例2:打印折纸的次数
需求:世界最高山峰是珠穆朗玛峰(8844.43米=毫米),假如我
有一张足够大的纸,它的厚度是0.1毫米。
请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
思路:
利用循环折叠纸张,当纸张的厚度超过珠穆朗玛峰的高度,循环就结束了
循环的结束条件:纸张的厚度 》穆朗玛峰的高度
讯享网
题目:
案例3:整数反转
思路:
原先的数字:123
反转之后的数字:321
从右边开始,依次获取每一位数字,再次拼接起来
题目:
案例4:X的平方根
给你一个非负整数X,计算并返回×的算术平方根
结果只保留整数部分,小数部分将被舍去
举例:
×=4 结果:2
×=8 结果:2
规则:任意的数字而言,如何确定平方根的整数部分呢?
从3开始一个一个的找,直到第一个相乘的结果大于原来的数字
那么前一个数字就是他平方根的整数部分
讯享网
题目:
案例5:回文数(课堂练习)
例如:121是回文,而123不是。
题目:
案例6:两数相除(课堂练习)
有两个整数,被除数dividend 和除数 divisor。
将两数相除,要求不使用乘法、除法和取余运算。
返回被除数dividend除以除数divisor 得到的商和余数。
比如说:两个整数11、3
输出结果:商:3
余:2
有两个整数,被除数dividend 和除数divisor.
将两数相除,要求不使用乘法、除法和取余运算。
返回被除数dividend 除以除数 divisor 得到的商和余数。
比如说:两个整数 11、3
输出结果:商:3
余:2
计算机中的乘法和除法:
除法11
商:执行减法的次数
余:剩下的数字
跳转控制语序:在循环过程中,跳转其他语句上执行
注意点:无限循环因为永远停不下来,所以下面不能再写其他的代码了
for:
while:
讯享网
do…while:
格式:
讯享网
例如:
break不能单独书写,只能写在switch,或者是循环中,表示结束,跳出的意思
讯享网
练习:
结束本次循环,继续下次循环
讯享网
练习:
小全全早上一个吃了5个包子,吃到第三个包子时;发现里面有个虫子。直接扔掉不吃了,开始吃下一个包子。
小结:break:只能写在switch,循环中,表示结束整个语句
continue:只能写在循环中,表示跳过本次循环,继续执行下次循环
讯享网
练习:
练习:
讯享网
练习:打印九九乘法表:
练习:制表符详解:
讯享网
练习:计算质数
给定整数n,获取所有小于等于n的质数的数量
示例:
输入:n=100
输出:25个质数
质数:只能被1和本身整除的数字
抽丝剥茧大法
复杂的问题>>简单的问题
1.判断一个整数是否是一个质数
2.添加范围1~100
3.统计
练习:计算数字
1的1次方+2的2次方+3的B次方++10的10次方,结果是多少?
提示:结果过大用longlong类型
正确答案:
讯享网
练习:和为15的数字(课堂练习)
找出0~1000之内,符合要求的数字:要求:每一位的数字之和等于15举例:78,168,1167
练习:
讯享网
函数:函数就是程序中独立的功能
讯享网
例子:
定义一个函数,求函数之和,并将结果输出到控制台上
返回值类型:函数最终结果的类型
讯享网
讯享网
小结。没有返回值
1.结束函数
2.把后面的数据,交给调用处
例子:
讯享网
题目
需求:小慧慧考试成绩:基础题得分93,附加题得分10
小丹丹考试成绩:基础题得分87,附加题得分9
请问,谁的总分更高?
最终格式:
调用方式:
变量=函数名(实参…)
用变量去接收函数的结果
printf(“占位符”,函数的调用);
提高了代码的复用性
提高了代码的可维护性
讯享网
:
练习:
函数的注意事项:
函数不调用就不执行
函数名不能重复
函数和函数之间是平级关系,不能嵌套定义
自定义函数写在main函数的下面,需要在上方申明
return下面,不能编写代码,永远执行不到,属于无效的代码。
函数的返回值类型为void,表示没有返回值,return可以省略不写,如果书写了return,后面不能跟具体的数据,仅表示结束函数。
<string.h>:
strlen() strcmp() strlwr() strupr() strcat() strcpy()
各个格式的演示
讯享网
讯享网
int num = 0;
int num1 = (31 * num0 + 13) % 100;
例子:
讯享网
例子:
课堂练习:
1.12~87
2.17~39
绝招:用于生成任意范围之内的随机数
1.把这个范围变成包头不包尾,包左不包右8-50
2.拿着尾巴 - 开头 50 - 8 =42
3. 修改代码
猜数字小游戏
生成1-100之间的随机数
使用键盘录入去猜,猜中为止
讯享网
是一种容器,可以用来存储同种数据类型的多个值
数组的定义:数组如何创建
数组的定义格式:数据类型 数组名 [长度]
特点: 连续的空间。一旦定义,长度不可变。
:定义数组的时候,第一次给数组赋值
数据格式:数据类型 数据名[长度] = {数据值,数据值…};
例如:
int arr[3] = {1, 2, 3}
长度省略:数据值的个数就是 数组长度
长度未省略, 数据值的个数<=长度
未赋值的部分有默认值
整数:0
小数:0.0
字符:’0‘
字符串:“NULL”(什么都没有)
练习:
1.定义数据存储5个学生的年龄,并初始化。
2.定义数据存储你女朋友的身高,并初始化。
讯享网
1.获取数组的元素。2.如何修改数组里的元素
变量名 = 数据名[索引]
int num = arr[5]
printf(“占位符”,数据名[索引]);
printf(“占位符”,arr[5]);
数据名[索引] = 数据值;
arr[5] = 10;
讯享网
内存:软件在运行时,用来临时存储数据的
内存地址的规则:
1.32位的操作系统,内存地址以32位的二进制表示
2. 64位的操作系统,内存系统以64位的二进制表示
书写的事后转成十六进制
概念:在内存中申请空间的编号
内存地址:内存中每一个小格子的编号
作用:快速的管理内存空间
&变量名
数组的内存地址:
是一个元素的第一个字节空间的地址,也是首地址
数组的常见问题:
讯享网
数组的算法题:
数组求最值
需求:已知数组元素为{33,5,22,44,55}
请找出数组中最大值并打印在控制台

遍历数组的求和(基础版)
需求:生成10个1~100之间的随机数存入数组
1.求出所有数据的和
讯享网
需求:生成10个1~100之间的随机数存入数组,要求数据不能重复
1.求出所有数据的和
2.求所有数据的平均数
3.统计有多少个数据比平均数小
需求:键盘录入5个数据并存入数据,完成以下需求
1.遍历数组
2.反转数组
3.再次遍历
讯享网
需求:定义一个数据,存入1-5.要求打乱数组中所有的数据的顺序
讯享网
1.二分查找的优势?
提前查找效率
*2.*二分查找的前提条件?
数据必须是有序的
如果数据是乱的,先排序再用二分查找得到的索引没有实际意义,只能确定当
前数字在数组中是否存在,因为排序之后数字的位置就可能发生变化了
3.二分查找的过程
min和max表示当前要查找的范围
mid是在min和max中间的
如果要查找的元素在mid的左边,缩小范围时,min不变,max等于mid减1
如果要查找的元素在mid的右边,缩小范围时,max不变,min等于mid加1
练习:
要求:数据要有序,且数据分布尽可能均匀一点
优势:满足要求,效率比二分查找快,否则反而会更慢
1.顺序查找的特点
对于数据没有任何要求,从头到尾遍历数组即可
2.二分查找、插值查找各自的特点
相同点:
都是通过不断的缩小范围来查找对应的数据的
分块的原则1:前一块中的最大数据,小于后一块中所有的数据(块内无序,块间有序)
分块的原则2:块数数量一般等于数字的个数开根号。比如:16个数字一般分为4块左右。
核心思路:先确定要查找的元素在哪一块,然后在块内挨个查找。
高级软件人才培训
讯享网
冒泡排序:相邻的数据两两比较,小的放前面,大的放后面。
1,相邻的元素两两比较,大的放右边,小的放左边。
2,第一轮循环结束,最大值已经找到,在数组的最右边。
3,第二轮循环只要在剩余的元素找最大值就可以了。
4,每二轮循环结束,次大值已经确定,第三轮循环继续在剩余数据中循环。
选择排序:从0索引开始,拿着每一个索引上的元素跟后面的元素依次比较,小的放前面,大的放后面,以此类推。
1,从0索引开始,跟后面的元素一—比较。
2,小的放前面,大的放后面。
3,第一轮循环结束后,最小的数据已经确定。
4,第二轮循环从1索引开始以此类推。
5,第三轮循环从2索引开始以此类推。
6,第四轮循环从3索引开始以此类推。
讯享网
查询数据:*指针名
存储数据:*指针名
例子:
指针的使用细节:
1.指针变量的名字
2.指针变量的数据类型要跟指向变量的类型保持一致
3.指针变量占用的大小,跟数据类型无关,跟编译器有关。
4.给指针变量赋值时,不能把一个数值赋值给指针变量
讯享网
作用:操作其他函数中的变量
练习:
定义两个变量,要求交换变量中记录的值
注意:交换的代码写在写在一个新的函数swap中
指针的作用一细节
函数中变量的生命周期跟函数相关,函数结束了,变量也会消失
此时在其他函数中,就无法通过指针使用了
如果不想函数中的变量被回收,可以在变量前面加statie关键字
讯享网
例子:
定义一个函数,求数组的最大值和最小值,并进行返回
讯享网
指针的类型是什么意思?
数据类型 * 变量名 = 内存地址
例子:
int * p = 0x001
指针中数据类型的作用:获取字节数据的个数
讯享网
步长:移动一次的字节个数
总结:
1.指针+7或者指针-1是什么意思?
把指针中记录的内存地址,往后或者往前移动一个步长
2.什么是步长?跟什么有关?
跟数据类型有关
Windows64位操作系统:char:移动一个字节short:移动两个字节int:移动四个字节long:移动四个字节long long:移动八个字节
有意义的操作:
指针跟整数进行加、减操作(每次移动N个步长)
指针跟指针进行减探作(间隔步长)
无意义的操作:
指针跟整数进行乘除操作
原因:此时指针指向不明
指针跟指针进行加、乘、除操作
讯享网
特殊类型
讯享网
不表示任何类型
特点:无法获得数据,无发计算,但是可以接收任意地址
(误)
讯享网
概念:指向数据的指针,叫做数据指针
作用:方便的操作数组中的各种数据
数组指针的细节:
arr参与计算的时候,会退化为第一个元素的指针
讯享网
此时+1相当于增加了一个数组的长度。
练习:
数组指针的细节
arr参与计算的时候,会退化为第一个元素的指针
特殊情况:
sizeof运算的时候,不给退化,arr还是整体
&arr获取地址的时候,不会退化
总结:
1.什么是数组指针?
指向数组的指针,就是数组指针
2.指针数组的细节
arr参与计算的时候,会退化为第一个元素的指针
特殊情况:
sizeof运算的时候,不会退化,arr还是整体
&arr获取地址的时候,不会退化
步长:数据类型 * 数组长度
数组指针
讯享网
二维数组(索引操作)
讯享网
二维数组的定义格式:
讯享网
二维指针(指针操作)
数组内部元素的类型:
数据类型 * 指针名 = arr
int (*p)[5]
讯享网
讯享网
数组指针:指向数组的指针
作用:方便的操作数组中的各种数据
举例:int*p= arr; 步长为:int(4字节)
举例:int (*p)[5] =&arr; 步长为:int乘5(20字节)
指针数组:存放指针的数组
作用:用来存放指针
举例:int*p[5],这个数组里面存着int类型的指针
格式:返回值类型 (*指针名)(型参列表)
作用:利用函数指针,可以动态的调用函数
函数指针的练习:
定义加、减、乘、除、四个函数
用户键盘录入三个数字
前两个表示参与计算的数字
第三个数字表示调用的函数
1:加法
2:减法3:乘法4:除法
讯享网
整数:short int long long long
小数:float double
字符:char
获取字符串的两种方式:
讯享网
有结束标记,内容可修改
有结束标记,指针 + 双引号定义时:内容不可更改
指针 + 双引号定义时:会复用
字符串数组`
需求:定义一个数组储存5个学生的名字并进行遍历
讯享网
strlen:获取字符串的长度
strcat:拼接两个字符串
strcpy:复制字符串
strcmp:比较两个字符串
strlwr:将字符串变成小写
strupr:将字符串变成大写
讯享网
用户登录
需求:已知正确的用户名和密码,请用程序实现模拟用户登录。
总共给三次机会,登录之后,给出相应的提示
讯享网
结构体格式:
讯享网
讯享网
总结:
1.什么是结构体?
结构体可以理解为自定义的数据类型
他是由一批数据组合·而成的数据结构体
里面的每一个数据都是结构体的“成员”
2.如何定义,如何使用?
结构体格式:
讯享网
结构体练习:
讯享网
结构体格式:
讯享网
讯享网
游戏人物
定义一个结构体表示游戏人物
属性有:姓名,攻击力,防御力,血量
要求:把三个游戏人物放入数组当中,并遍历数组
两种情况:
传递结构体中的数据值
传递结构体的地址值
练习:结构体作为函数参数
定义一个结构体表示学生
学生的属性:姓名、年龄
要求:
定义一个函数,修改学生中的数据
讯享网
如果结构体中成员的类型是其他的结构体,就用到结构体的嵌套
练习:定义一个结构体表示学生Student
Student成员如下:
名字、年龄、性别、身高、联系方式
投票选举:
某班级组织野外郊游,想要在ABCD四个景点中选择其中一个。
现在班上有80位同学进行投票,找出投票数最多的景点
PS:
1.学生投票,用随机数模拟
2.如果多少个景点投票一样的话,A优先B,B优先C,C优先D
讯享网
讯享网
练习:
- 数组
定义和初始化
定义:数组是一组相同类型数据的集合。使用类型 数组名[大小];来定义数组。
初始化:可以在定义时初始化数组,语法为类型 数组名[] = {值1, 值2, …};。注意,数组的大小可以省略。
访问元素
索引:通过索引访问数组元素,索引从0开始,例如数组名[0]表示第一个元素。
遍历:使用循环(如for循环)遍历数组元素。
多维数组
定义:例如类型 数组名[行数][列数];,可以用于表示矩阵等结构。
初始化和访问:类似于一维数组,通过多重索引访问。 - 指针
基础概念
定义:指针是存储变量地址的变量,使用类型 指针名;定义。
取地址和解引用:取地址使用&,例如&变量名。
解引用使用,例如指针名。
指针与数组的关系
数组名本身是指向数组首元素的指针。可以通过指针访问数组元素,例如(指针名 + i)等同于数组名[i]。
指向指针的指针
可以定义指向指针的指针,使用类型 指针名;,可以实现更复杂的数据结构。 - 结构体
定义和使用
定义:使用struct关键字定义结构体,例如:c
讯享网
实例化:定义结构体后可以创建实例,如struct 结构体名 变量名;。
访问成员
使用.运算符访问结构体成员,例如变量名.成员名。
对于指向结构体的指针,使用->运算符,例如指针名->成员名。
结构体数组
可以定义结构体的数组,如struct 结构体名 数组名[大小];,可通过索引访问结构体实例及其成员。
- 总结
理解基础概念:确保掌握数组、指针和结构体的基本定义和用途。
实践应用:通过编写代码和练习,增强对这些概念的理解。可以尝试实现一些小项目,比如学生管理系统、图书管理系统等。
解决问题:学会使用指针操作数组和结构体,掌握动态内存分配(malloc, free)以及指针和数组结合的技巧。 - 进阶知识
动态数组:通过指针和动态内存分配创建可变大小的数组。
结构体指针和函数:传递结构体指针到函数中以避免复制大结构体,提高效率。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/157387.html