指针
文章平均质量分 56
余思荷
记录余小荷的进步过程,为了成为一个优秀的程序媛!给老子冲!
展开
-
【C语言】综合案例六十二 回文字符串(方法一)
案例描述回文字符串是正反读都一样的字符,比如“level”,"noon"都是回文字符串。案例要求从键盘输出字符串,并判断字符串是否为回文字符串。案例分析判断一个字符串是否为回文字符串时常用的方法有两种使用递归来解决问题使用指针来解决问题案例实现方法一通过观察可以知道,去掉回文字符串尾的字符后,剩下的字符串仍然是回文字符串,通过不断的去除首尾的字符,一层层检查,可以缩小问题的规模。去掉字符串首尾字符串后,得到一个子串,此时产生的新问题是检查子串是否为回文字符串,然后就发现可以用递归解决问题原创 2021-09-07 21:10:18 · 1902 阅读 · 1 评论 -
【C语言】案例六十三 最简单的预处理【编译和预处理】
案例描述本案例要求将矩形的长和宽设置为宏,然后再求出矩形的面积。案例分析宏定义是预处理最常用的功能之一,它用于讲一个标识符定义为一个字符串,这样在源程序被编译器处理之前,预处理器会将标识符替换成所定义的字符串。根据...原创 2021-09-04 10:32:36 · 161 阅读 · 0 评论 -
【C语言】案例六十二 回文字符串(方法二)
案例描述回文字符串是正反读都一样的字符,比如“level”,"noon"都是回文字符串。案例要求从键盘输出字符串,并判断字符串是否为回文字符串。案例分析判断一个字符串是否为回文字符串时常用的方法有两种使用递归来解决问题使用指针来解决问题案例实现方法二1,案例设计用两个指针分别指向字符串开头和字符串末尾,判断两个指针所指向的字符是否相同如果不相同直接返回0,表示此字符串不是回文字符串;如果相同,则把指向字符串的开头的指针加一,向后移动并指向下一个字符,同时把指向某位的指针减一,然后继续原创 2021-09-03 18:09:11 · 729 阅读 · 0 评论 -
【C语言】案例六十 字符串的其他常用函数【atoi()itoa()sprintf()】
在编程时有时需要将字符串转化为整数,或将整数转换为字符串,如将字符串表示的IP地址转化为十进制整数,就需要用到字符串与整数转化的函数。下面介绍两种字符串与整数的转换函数。atoi()函数此函数用于将一个数字字符串转换为十进制数,其函数原形如下:int atoi(const char* str);atoi()函数接收一个字符串作为函数,返回转换后的十进制数。如果转换失败,则返回0.需要注意的是,atoi()函数的声明位于stdlib.h文件中,因此需要使用include指令引用头文件stdlib原创 2021-09-02 11:26:05 · 146 阅读 · 0 评论 -
【C语言】案例五十九 检查字符串1中是否有字符串2
案例描述如题案例分析我们需要用到字符串查找的知识,解决思路分为三步:分别从键盘中输入str1和str2调用字符串查找函数来确定题目最后将结果输出到屏幕上必备知识字符串查找函数在程序中,经常需要从字符串中查找指定信息,比如,统计一段文字中某个词语出现的次数。C语言提供了strchr()函数、atrrchr()函数、strstr()函数来实现对字符串的查找功能,接下来将针对这三个函数进行详细解释。strchr()函数此函数用于查找指定字符在指定字符串中第一次出现的位置,其函数原型如下原创 2021-09-01 21:42:32 · 1648 阅读 · 0 评论 -
【C语言】案例五十八 字符串排序【strcmp函数strncmp函数选择排序】
案例描述案例要求对“c lanuage”,“hello world”,“itcast”,“strcmp”,"just do it"这五个字符串按照字母大小的排序,并将结果输出到屏幕上。案例分析此案例用到三个知识点:用指针数组构造字符串数组,使用指针数组中的元素指向各个字符串需要用字符串比较函数strcymp来比较字符数组中各元素的大小之后使用选择排序法进行由小到大的排序选择排序法1.选择排序法是将序列分为两段,有序前列和无序后列,每次查找无序后列中最大元素,将其插入到有序前列的最末尾处,原创 2021-09-01 21:31:56 · 2087 阅读 · 0 评论 -
【C语言】案例五十六 在指定位置插入字符【strncat()函数strncat()函数strcpy()函数】
案例描述案例要求输入一个字符串和一个要插入的字符,然后输入要插入的位置,在指定的位置插入指定的字符,并将新字符串输出到屏幕上。必备知识1,字符串连接失败在程序开发时,可能会将两个字符串进行连接,为此C语言提供了strncat()函数和strncat()函数来实现连接字符串的操作,讲解如下:(1)strncat()函数将一个字符串接到另一个字符串的后面,原型如下:char* strcat(char* dest,const char* src);表示将指针src指向字符串接到指针dest指向的原创 2021-09-01 17:18:55 · 6171 阅读 · 0 评论 -
【C语言】案例五十三 删除字符串中子串【gets()函数 puts()函数】
案例描述从键盘输入一个字符串,输入要删除的字符串起始位置及长度,然后输出删除后的字符串。案例分析若要删除字符串中的子串,需要使用该子串后的字符从要删除的地方开始,逐一往前移动覆盖待删除字符。之前学习过的printf()函数和scanf()函数,他们分别用于向控制台中输出内容和从控制台上接受用户的输入。C语言还提供了针对字符串读取和输出的函数,即puts()函数和gets()函数。使用这两个专用函数能更顺利的完成此案例必备知识1,gets()函数gets()函数用于从控制台读入用户输入的字符串,原创 2021-09-01 11:01:46 · 1474 阅读 · 0 评论 -
【C语言】案例五十二 字符串替换(二)【字符,字符串,字符数组】
案例实现1,案例设计自定义一个具有字符串替换功能的函数使用for循环从指定位置遍历字符串“Good moring”;用字符串“evening”中的字符逐一替换掉字符串“Good moring”中“morning字符串主函数中调用字符串替换函数最后将替换后的字符串输出到屏幕上2,完整代码#include <stdio.h>#include <stdlib.h>#include <string.h>#include <time.h>/原创 2021-09-01 09:14:25 · 1000 阅读 · 0 评论 -
【C语言】案例五十二 字符串替换(一)【字符,字符串,字符数组】
案例描述字符串替换是处理字符串时最常见的操作之一,也是学习字符串必须掌握的知识。本案例要求通过编程实现字符串“Good moring”到“Good evening”的转换。案例分析我们需要从字符串中被替换的位置开始,将要替换的内容逐个复制到原字符串中,直到字符串结束或者替换的字符串结束为止。为了顺利完成案例,需要先学习字符数组,字符串,字符指针等基础知识。必备知识1,字符数组字符数组是存放字符数据的数组,其中每一个元素都是单个字符(1)字符数组的定义字符数组定义的语法格式如下:char原创 2021-08-31 23:07:58 · 2471 阅读 · 0 评论 -
【C语言】案例五十一 员工档案管理系统
让我用心把你(的赞)留下来!案例描述本系统是员工档案管理系统,该系统包括姓名,性别,工号,年龄。进入系统输入密码,若密码错误三次则退出程序,此外,有输入数据,查看数据,数据查询,数据保存,数据排序等多项功能//初始密码为123456#include "stdio.h"#include "string.h"#include "stdlib.h"#include "malloc.h"#define OP sizeof(stu) typedef struct student{ char原创 2021-08-27 10:56:25 · 1130 阅读 · 0 评论 -
【C语言】案例五十 歌曲管理系统
让我用心把你(的赞)留下来!#include "stdio.h" #include "stdlib.h" #include "string.h" #include "ctype.h" #define M 50 /*定义常数表示记录数*/ typedef struct /*定义数据结构*/ { char songname[20];/*歌曲名*/ char name[20]; /*作者*/ char singer[20]; /*演唱者*/ char year[20]; /*年月日*/ }原创 2021-08-27 10:52:47 · 3492 阅读 · 1 评论 -
【C语言】案例四十八 综合案例——天生棋局(围棋棋盘)
案例描述本案例要求创建一个棋盘,在棋盘生成的同时初始化棋盘,根据初始化后棋盘中棋子的位置来判断此时的棋局是否为一局好棋。具体要求如下:棋盘的大小根据用户的指令确定棋盘中的棋子数量也由用户指定棋子的位置由随机函数随机确定,若生成的棋盘中有两颗棋子落在同一行或者是同一列,则判定为”好棋“,否则判定为“不是好棋”案例分析本案例需要根据用户输入的数据分别确定棋盘的大小和棋子的数量,所以棋盘大小和棋子数量是不确定的。为了避免存储空间的浪费,防止因空间不足造成的数据丢失,本案例可动态的申请堆上的空间,来原创 2021-08-27 10:24:55 · 2456 阅读 · 2 评论 -
【C语言】案例四十五 数据表(二)(调试代码,解答疑惑)
案例描述本案例主要是建立数据表实现任意一行/列的相加讲解的主要知识有两个:一是函数指针,该知识将在选择求和函数时使用;二是指针与二维数组的联系。本案例中的存储基于二为数组,数据的获取利用数组指针,下面分别讲解这两个知识点:案例实现1,案例设计创建一个二维数组,使用循环语句为其赋值在循环结构中使用指针读取数组中的数据并输出根据案例要求,在程序中使用两个函数分别实现不同方式的求和计算同时在主函数中创建函数指针,当用户做出选择后,根据选择结果调用函数————————————————版权声明:本原创 2021-08-26 09:20:15 · 121 阅读 · 0 评论 -
【C语言】 案例四十七 const修饰符(常量指针 指针常量 )
在程序开发中,有时并不希望使用者修改程序中的某些数据,此时可以使用const修饰符,从而提高程序的安全性和可靠性。const通常与指针配合使用,根据const在语句中出现的位置,const与指针配合有一下三种用法:常量指针在定义指针之前,const放在数据类型之前,则构成常量指针。常量指针的用法如下:const 数据类型* 指针变量名;该指针指向的数据是一个常量,该数据不能被修改,示例如下:int num = 10;const int* p = #在以上示例中,p指向原创 2021-08-26 11:25:48 · 131 阅读 · 0 评论 -
【C语言】案例四十六 点名册(二)【strcpy()函数】
案例实现点名册中每个学生姓名都可以定义为一个字符数组,为了能统一操作点名册中的学生姓名,应使用指针数组,使数组中的每个指针都指向一个学生姓名。同时可以定义一个二级指针(数组指针),使该指针指向指针数组,使用二级指针读取点名册中的学生姓名。完整代码#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){ char buf[1024]; //普通数组,存储学生姓原创 2021-08-26 10:54:25 · 352 阅读 · 0 评论 -
【C语言】案例四十六 点名册(一)
案例描述案例要求编程实现一份基于指针的点名册,记录学生的姓名,并能实现学生姓名的输出;点名册中的学生姓名由多个字符组成,点名册中包含不止一名学生。案例分析将每个学生视为一个字符数组,则点名册中的内容可以视为多个字符数组的集合。如若每个学生姓名字节数都相同,那么点名册可以视为一个二维数组,但实际上,学生姓名字节可能各不相同。所以,需要考虑的问题有两个:如何使用不同长度的字符数组存储学生的姓名如何将多个存储学生姓名且长度不同的字符数组联系起来,使之成为一个整体考虑到学生姓名逐条储存,类似于二维数组原创 2021-08-26 09:00:33 · 413 阅读 · 0 评论 -
【C语言】案例四十五 数据表 [函数指针]
案例描述本案例主要讲解的主要知识有两个:一是函数指针,该知识将在选择求和函数时使用;二是指针与二维数组的联系。本案例中的存储基于二为数组,数据的获取利用数组指针,下面分别讲解这两个知识点:必备知识1,指针与二维数组在之前的案例中,我们学习了如何用指针引用一维数组,二维数组与多维数组同样有地址,也可以使用指针引用,只是因为其逻辑结构较一维数组复杂,所以操作也比较复杂。这里我们来介绍指针和二维数组的关系。假设要定义一个二行三列的二维数组,示例如下:int a[2][3] = {{1,2,3}{4,5原创 2021-08-24 23:44:43 · 414 阅读 · 0 评论 -
【C语言】案例四十四 快速排序
案例描述快速排序是对冒泡排序的改进,它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的数据比另一部分的都小,然后再按此方法,对两部分数据分别进行快速排序,整个排序过程可以递归进行,直到整个数据变成有序序列为止。相比于冒泡排序,快速排序在时间,性能上有大大的提升,本案例要求用指针实现快速排序算法,并将结果逐个输出。案例分析设,要排序的数组是S[],首先任选一个数据(一般选择数组的第一个)作为关键数据(key),然后将所有比关键值小的数都放到关键值之前,所有比关键值大的数都放到关键原创 2021-08-23 22:09:30 · 248 阅读 · 3 评论 -
【C语言】案例四十三 幻方(魔方阵)
案例分析将从1到n方的的自然数,排列成纵横各有n个数的矩阵,使每行,每列,每条主对角线上的n个自然数之和都相等,这样的矩阵就是魔方阵,也称作幻方,本案例要求编写程序,实现奇数的幻方。案例设计矩阵的行数,列数,矩阵中的元素的数量都由n决定,在程序中设置scanf()函数,由用户手动控制幻方的规模。因为本案例为奇数幻方,如果输入的数不是奇数,则使用goto语句回到输出函数之前;因为本案例中元素数量不稳定,则使用malloc函数动态申请存储空间幻方中的数据按行序优先存储在malloc函数开辟的空间中,原创 2021-08-21 19:25:51 · 1072 阅读 · 0 评论 -
【C语言】案例四十二 指针取值,内存分配,内存回收
指针和一位数组一个普通变量有地址,一个数组包含若干个变量,数组中的每个元素都在内存中占据存储单元,所以每个元素都有各自地址。指针可以通过变量的地址访问相应的变量,当然也可以根据指针的指向来访问数组中的元素其定义如下: int[a] = {1,2,3,4,5}; int* p = NULL; //定义一个指针 p = &a[0]; //使指针指向数组中元素a[0]其实也可以使指针直接指向数组a[]。数组名实际上是一个指向数组首地址的指针,也就是指向数组中第一个元素的指针,但原创 2021-08-20 14:39:05 · 940 阅读 · 0 评论 -
【C语言】案例四十一 猜宝游戏
案例描述甲乙一起玩猜硬币的游戏:初始时,甲的左手握着一枚硬币,游戏开始后,甲进行有限次或真或假的交换,最后由乙来猜两只手中是否有硬币。写明案例,实现游戏过程。案例分析因为游戏要执行有限次,所以需要首先确定交换进行的次数,通过循环执行每次交换,又因为每次交换真假不确定,所以至少需要实现两个交换函数,一个函数真正的实现两只手的交换,另一个只需要表面完成交换。而每次是否真正交换硬币也是随机的。因此使用随机数发生器来决定每次选择执行的函数。必备知识1,指针作为参数函数在C语言中,实参和形参之间的数据传递原创 2021-08-20 09:39:51 · 621 阅读 · 0 评论 -
【C语言】案例四十 空指针,无类型指针,野指针
空指针空指针即没有指向任意存储单元的指针,有时可能需要到指针,但是不确定指针在何时使用,因此先使定义好的指针相空,具体实例如下:int* p1 = 0; //0是唯一不必转换就可以赋值给指针的数据int* p2 = NULL;//NULL是一个宏定义,作用与0相似//在ASCII中,0的定义就是空一般在编程时,先将指针初始化为空,再对其进行赋值操作int a = 10; int* p = NULL; p = &a; 无类型指针之前讲述的指针都有确定的类型,但有时指针无法被给原创 2021-08-18 16:32:30 · 465 阅读 · 0 评论 -
【C语言】案例三十九 爸爸去哪儿
晚餐时间,妈妈做好了美味的晚餐,去楼上叫爸爸和宝宝吃饭,到了卧室,发现只有宝宝,妈妈想:“爸爸在哪?”。妈妈先让宝宝下楼去餐桌旁,然后走到书房,在书房找到正在看书的爸爸。(父慈子孝的场面,泪目)案例设计假设将案例描述中的宝宝和爸爸视为变量,书房和卧室视为存储空间,那么实现时,卧室和书房都应设置为指针卧室和书房指向宝宝和爸爸的地址。完整代码#include <stdlib.h>#include <stdio.h>#include <time.h>int原创 2021-08-18 10:36:37 · 324 阅读 · 0 评论