
c语言学习
c语言从入门到小成
拜他三更梦归朝
这个作者很懒,什么都没留下…
展开
-
2025.1.8-2 链表静态添加与动态遍历
1)静态添加:在需要的情况下,只需要在代码内不断添加元素即可,但注意要用指针变量来指向下一个元素(结构体),形成一长串。2)动态遍历:运用函数,死循环,还有if语句或者直接循环,可以将链表内所有元素内容打印出来。例如:直接循环void printlink(struct Test *head){ struct Test *point; point = head; while(point != NULL){ printf("%d",point->d原创 2025-01-08 15:39:13 · 297 阅读 · 0 评论 -
2025.1.8-4 链表插入(后方与前方插入)
p->next放在=号前面,代表p指针指向的下一个指针,是一个动作,放在=号后面,代表p指针的下一个指针,是指一个指针。}//头部引入节点时。原创 2025-01-08 17:04:19 · 370 阅读 · 0 评论 -
2025.1.9-1 链表删除指定节点
代码:原创 2025-01-09 14:06:28 · 207 阅读 · 0 评论 -
2025.1.8-1 链表(基础内容)
1)类似于,而2)具体:链表是一种常见的基础数据结构,它由一系列节点组成,这些节点通过指针(在一些语言中类似指针的机制)相互连接,形成一个链式结构。原创 2025-01-08 14:40:13 · 1205 阅读 · 0 评论 -
2025.1.9-2 链表的动态创建(头插与尾插)
/malloc为分配指针,在删除该节点时需要释放内存。//头指针为空时,即输入第一个数据时。原创 2025-01-09 14:43:45 · 264 阅读 · 0 评论 -
2025.1.8-3 统计链表个数以及链表查找
int cnt;while(head!= NULL){cnt=cnt+1;return cnt;int cnt=0;while(head!=NULL){return 1;//出1说明找到。return 0;原创 2025-01-08 16:13:28 · 312 阅读 · 0 评论 -
2024.11.22-2函数的小总结
在前面加的#include <stdio.h>中stdio.h就是一个对输入输出库函数的声明。若无,则无法使用输入输出库中的函数。:在定义函数中指定的形参,在未出现函数调用时,他们并不占内存的存储单元。在发生函数调用时,函数max的形参被临时分配内存函数。:通过return语句将函数的值带回主函数。注意返回值类型应与函数类型一致。:将实参对应的值传递给形参,形参的返回值,传递给函数对应的变量。:调用结束,形参单元释放。原创 2024-11-22 20:41:49 · 306 阅读 · 0 评论 -
2024.12.24-1数组指针和二维数组的运用
输出二维数组任意列的数#include <stdio.h>void putArray(int *phang,int *plie){ printf("请输入你要找的数的行:\n"); scanf("%d",phang); printf("请输入你要找的数的列:\n"); scanf("%d",plie);}void printfArray(int (*p)[4],int hang,int lie){ int原创 2024-12-24 16:28:12 · 150 阅读 · 0 评论 -
2024.11.23-3 数组函数运用(模块化设计)
计算不同班级的学生成绩平均分。原创 2024-11-23 17:26:48 · 294 阅读 · 0 评论 -
2024.11.21-1函数的使用(重要!)
(全部代码写在main函数里面,导致程序运行缓慢,且当需要多次实现某一功能时,需要重复敲相同代码)2.3)函数体——执行什么样的功能,涉及的处理代码叫做函数体。(即为函数的代码内容)此时定义的函数括号内需要有使用的参数(自己定义变量名和变量类型)2.1)要先定义在使用,和变量同一个道理。printf("请输入一个数代表X:\n ");printf("此时Y的值为;(将功能模块化,使得最后需求只需要组装即可。类型名 函数名(){原创 2024-11-21 21:15:33 · 526 阅读 · 0 评论 -
2024.11.22-1 形参与实参的区别,局部变量
内,只有函数被调用的时候,栈空间会为其定义的变量申请内存,当函数结束调用的时候,内存又被系统释放,在开始占用到结束占用的时间成为生命周期。通常在定义变量的函数函数体中有效!4)局部变量:指变量作用的区域是有局限的,超过范围就开始无效。中,我们调用函数时,函数后面括号中的参数称为“实际参数”,实际参数可以是。,函数名后面括号中的变量名称称为"形式参数(虚拟参数)"3)核心:名字可以一样,但是地址肯定不一样!5)例子:输入俩个数,输出较大的数,用函数实现。主函数中变量不要和函数名字一样,容易出错。原创 2024-11-22 16:05:36 · 568 阅读 · 0 评论 -
2024.12.23-2 二维数组(地址的理解)
1)父子数组:对于a[3][4]来说,a即为父数组的名(地址),其中a[1],a[2],a[0]等为子数组的名(地址)2)偏移:a+1;指的是父数组的偏移,偏移量由子数组元素的量确定,a[0]+1等为子数组的偏移。3)对于子数组,其中a[0]的值为a[0][0]的值,都是该数组的首元素地址4)*a与a[0]意义一致,*(a+0)+1与a[0]+1一致,都是子数组首元素的地址。5)运用:地址的三种表达方式:&a[i][j];a[i]+j;原创 2024-12-23 20:49:27 · 341 阅读 · 0 评论 -
2024.11.23-1数组与函数组合技
数组的首地址是指数组在内存中第一个元素的起始位置的地址。它是程序员可以访问整个数组的基础,通过这个地址加上每个元素的偏移量,就可以访问到数组中的每一个元素。在大多数编程语言中,数组名实际上就是一个指向首元素的指针,所以获取首地址就是取数组名本身。例如,在C语言中,你可以直接打印数组名来得到其首地址。首地址对于动态操作内存以及理解程序如何存储数据至关重要。原创 2024-11-23 15:10:03 · 339 阅读 · 0 评论 -
2024.12.23-指针与数组
异:数组名为指针常量,无法加减,例如:*a++;指针用8个字节来表示一个地址,不管什么类型。指针为指针变量,可以加减。2.2)p+1指的是在p地址的基础上,偏移原地址的量,int型4字节,char型1字节。异:数组用4个字节来表示一个地址;1.1)指针指向数组的首元素地址: int *p;1.2)在c语言中,3)通过指针引用数组元素。原创 2024-12-23 16:35:39 · 446 阅读 · 0 评论 -
2024.11.23-4 二维数组和函数组合技
或者int arry[][3]后面的列数必须的写(一维数组的个数得定住)(数组中的每一个元素都是数组),原创 2024-11-23 20:39:41 · 472 阅读 · 0 评论 -
2024.11.23-5 外部变量(全局变量(外部变量的特殊情况))
外部变量的作用范围在其写完后往下的所有函数,其往上的函数作用不到。原创 2024-11-23 21:30:15 · 207 阅读 · 0 评论 -
2024.11.21-2 函数的使用(续)
3.4-2)调用函数时,将其的形式参数的变量类型带上:ret = add(例如:printf("返回值:%d",3.4-1)调用函数时,带上了该函数的类型:ret =3.5-1)函数直接使用他的表达式——例如:viod initWiFi()3.3)定义空函数——程序设计,模块设计的时候,3.5-2)函数调用。3)函数的封装和调用。原创 2024-11-21 21:40:44 · 366 阅读 · 0 评论 -
2024.11.22-3 函数的嵌套
定义:在主函数中调用一个函数后,该函数又调用了另一个(多个)函数,不断重复或者不重复,既是嵌套。在实际运用中十分常见。案例:输入四个数,找出最大值。#include <stdio.h>int bigger(int a,int b){ int ret; ret=a>b?a:b; return ret; }int Max(int a,int b,int c,int d){ int x; int y; int ret; x=bigger(a,b);原创 2024-11-22 20:58:57 · 305 阅读 · 0 评论 -
2024.12.23-3 数组指针
定义:一个指针,指向一个数组,真正等于一个二维数组名。原创 2024-12-23 21:10:54 · 310 阅读 · 0 评论 -
2024.11.19-1 二维数组的学习使用
2)定义形式:例如:data[5][10];(一般指五行十列的数组)1)运用场景:3个分队,一个分队6个人,查询每个人的个人信息之类的情况。4.3)自动判断(自己最好不要用!3)可以看作是一种特殊的一维数组,他的元素又是一组数组。与上面核心思想一致。原创 2024-11-19 21:27:15 · 216 阅读 · 0 评论 -
2024.11.23-6 全局变量的运用
printf("两个班的最高分是%d,最低分是%d,平均分是%f",max,min,aver);printf("请输入第%d班第%d个同学成绩\n",i+1,j+1);//这样要写两个函数,不好,太长了不好。//int min;//这样要写两个函数,不好,太长了不好。//利用外部变量,使用一个函数来输出三个想要的数据。puts("请输入两个班的成绩");原创 2024-11-23 21:58:47 · 407 阅读 · 0 评论 -
2024.11.23-2 数组名当作实参
例如:此时形参内data出110,main中出10.例如:此时实参与形参皆出102.原创 2024-11-23 16:38:59 · 190 阅读 · 0 评论 -
2024.11.22-4 递归函数
一定会在函数中运用if语句来确定初值,且其他情况的算法用else来确定。puts("请输入你想要的第几个数的阶乘");printf("最后的值为:%d",ret);long int类型的字节也是4个字节。除了一些特殊情况,例如n!原创 2024-11-22 21:36:14 · 329 阅读 · 0 评论 -
2024.11.18-1 数组的学习使用
但要初始化成0时不可以不赋值,要主动赋值给0,且可以利用部分赋值原理,只给第一个赋值为0即可,例如:int data[10]={0};,例如:int data[10]={0,1,2,3,4,5,6,7,8,9};5.2)循环法一个个赋值(上面写的,麻烦且不自由。2)在有多个变量且多个变量之间有一个小集合时,我们可以使用数组(给。(数组的大小):用整个数组的存储空间/数组中一个元素的存储空间。1)在多个变量定义时,最好不要一次性定义(虽然可以),5.1)全部赋值:在。,不像一个一个定义的分散)。原创 2024-11-18 20:21:41 · 283 阅读 · 0 评论 -
2024.11.18-2 数组的练习使用
printf("逆序输出为:%d\n",array[click-1]);2)费波纳杰数列(第n个数由其前两个数相加而成)边界与次数为重中之重。原创 2024-11-18 21:16:56 · 447 阅读 · 0 评论 -
2024.12.22-1 指针的学习(基础)
printf("交换前:data1=%d,data2=%d\n",data1,data2);printf("交换后:data1=%d,data2=%d\n",data1,data2);//c为指向固定内存地址。:把地址的值取出:printf("%d",*(&a));,地址的获取(例如&a),地址唯一,也是变量的代表。printf("请为data1赋值:");printf("请为data2赋值:");为取值运算符,把括号内地址的值取出。原创 2024-12-22 22:00:31 · 1007 阅读 · 0 评论 -
2024.12.24-5 二级指针(多级指针)(基础)
pp访问data的值是:100*/ //最后可以一层一层访问回到最开始的值。printf("pp访问data的值是:%d\n",**pp);3)差异:保存的是指针变量的地址(地址的地址)printf("pp保存的地址:%p\n ",pp);printf("pp本身地址是:%p\n",&pp);printf("p保存的地址是:%p\n ",p);printf("p本身地址是:%p\n",&p);p保存的地址是:000000000061FE1C。原创 2024-12-24 21:56:30 · 221 阅读 · 0 评论 -
2025.1.3-2 选票系统改写
printf("名字:%s,票数;printf("请输入第%d个候选人的名字:\n");printf("无此人!printf("请输入你要投给谁:\n");//初始化选民信息。原创 2025-01-03 20:57:09 · 233 阅读 · 0 评论 -
2025.1.3-1 结构体指针变量
printf("t1的cdata值为:%c\n",t1.cdata);//变量名访问,用点运算符。printf("t1的idata值为:\n",t1.idata);//变量名访问,用点运算符。原创 2025-01-03 20:43:09 · 179 阅读 · 0 评论 -
2024.12.25-2字符串与整型数组区别
我们自己写的时候,它会自动加上去,会占一个位置。原创 2024-12-25 20:27:00 · 315 阅读 · 0 评论 -
2024.12.24-5指针函数(基础)
注意这里要把pstu+pos括起来,不然会只加4个字节,不加16个字节。定义:返回指针值的函数。原创 2024-12-24 21:37:41 · 163 阅读 · 0 评论 -
2025.1.3-3 函数运用重点
2)函数运用时一定要先分步骤,一步一步的写代码,看看要不要返回值,没有返回值为viod函数类型。3)结构体与结构体指针也可以作为函数来运用,与结构体不同的是{}后有没有句号。原创 2025-01-03 21:39:37 · 281 阅读 · 0 评论 -
2024.12.24-6 二级指针(重难点)
1)二级指针不可以直接指向二维数组。(会警告,不兼容)二维数组应该和(*p)[4]相兼容。printf("请输入你要看的学生号数(0,1,2三个中一个):");运用:对成绩的读取(上一道题的重解)原创 2024-12-24 22:26:47 · 203 阅读 · 0 评论 -
2024.12.29-4 选票系统
printf("名字:%s,票数;printf("请输入第%d个候选人的名字:\n");printf("请输入你要投给谁:\n");原创 2024-12-29 21:58:25 · 368 阅读 · 0 评论 -
2024.12.29-3 结构体与数组
printf("姓名:%s,年龄:%d,地址:%s,成绩:%lf\n",arr2[i].name,arr2[i].age,arr2[i].addr,arr2[i].score);//类似与二维数组。原创 2024-12-29 21:34:13 · 312 阅读 · 0 评论 -
2024.12.29-1 结构体(基础)
/有点类似于int data1;udent//开头必须大写。2)理解:与数组类似,原创 2024-12-29 20:58:23 · 366 阅读 · 0 评论 -
2024.12.24-3 函数指针(运用,体现间接调用的好处)
该题答案没有运用二次函数调用,可以把if内容中的函数运用提取出来,单独用一个函数来出结果。原创 2024-12-24 17:51:36 · 291 阅读 · 0 评论 -
2024.12.25-4 动态开辟字符串(4个常用api记住)
* //运用strcpy()函数,原型char *strcpy(char* dest,const char *src);//运用strcpy()函数,原型char *strcpy(char* dest,const char *src);原型:void *malloc(size_t size),分配所需空间,并返回一个指向它的指针。1.2)当想要随意输入多个字符时,运用strcpy与malloc函数,代码如下。原创 2024-12-25 21:38:21 · 361 阅读 · 0 评论 -
2024.12.25-3 sizeof与strlen区别(很重要)
/计算实际字符长度。p是一个char *,sizeof计算时,得到是计算机用多少字节来表示地址。原创 2024-12-25 20:44:32 · 477 阅读 · 0 评论 -
2024.12.29-2 结构体的小应用
else{printf("姓名:%s,年龄:%d,地址:%s,成绩:%lf",stu2.name,stu2.age,stu2.addr,stu2.score);{printf("姓名:%s,年龄:%d,地址:%s,成绩:%lf",stu1.name,stu1.age,stu1.addr,stu1.score);printf("姓名:%s,年龄:%d,地址:%s,成绩:%lf",max.name,max.age,max.addr,max.score);//其中,struct Student相当于int。原创 2024-12-29 21:17:02 · 325 阅读 · 0 评论