![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c语言
Li_xixi111
这个作者很懒,什么都没留下…
展开
-
关于循环结构语句的使用
结构化程序设计的三种基本结构都有顺序结构,选择结构和循环结构。其中,实现循环结构的语句主要有以下几种,为了便于详解,举个例子说明。 求解1到100的和。这是一个累加的题,要重复100次加法,显然可以用循环结构来实现。重复执行循环100次,每次加一个数。用while实现循环#include<stdio.h>int main(){ int i = 1, sum = 0;...原创 2018-03-22 15:01:59 · 1056 阅读 · 0 评论 -
C语言-----模拟实现strlen函数的三种方法
第一种:计数器方法,一开始写的时候,我是最喜欢用这种方法写的,但随着后来的知识面的扩充,感觉这种方法不是很简便。#include <assert.h>int my_strlen(const char *str){ int count = 0; assert(str != NULL); while (*str != '\0') { count++; str++; }...原创 2018-05-02 20:42:19 · 353 阅读 · 0 评论 -
C语言-----string.h头文件中相关字符串函数的模拟实现
strlen:用途:Get the length of a string.函数原型:size_t strlen( const char *string ); size_t表示无符号的意思,长度值肯定是无符号的。模拟实现:int my_strlen(const char *str){ int count = 0; assert(str != NULL); while (*str != '\0...原创 2018-05-10 14:35:28 · 1306 阅读 · 2 评论 -
C语言-----结构体内存对齐
结构体内存对齐规则:第一个成员在结构体变量偏移量为0 的地址处。其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。对齐数 = 编译器默认的一个对齐数与该成员大小中的较小值。vs中默认值是8 Linux默认值为4.结构体总大小为最大对齐数的整数倍。(每个成员变量都有自己的对齐数)如果嵌套结构体,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(包含...原创 2018-05-10 11:15:13 · 18797 阅读 · 11 评论 -
C语言-----memcpy和memmove函数的模拟实现
memcpy:用途:Copies characters between buffers. 函数原型:void *memcpy( void *dest, const void *src, size_t count ); 模拟实现:void* my_memcpy(void *dest, const void *src, int count){ void *ret = dest...原创 2018-05-10 11:57:05 · 258 阅读 · 0 评论 -
C语言-----结构体知识点总结
定义 声明 位段原创 2018-05-11 18:00:50 · 4688 阅读 · 0 评论 -
C语言-----动态内存开辟
动态内存开辟是根据用户的需要来开辟开间,就是用多少空间开辟多少空间。 malloc:原创 2018-05-18 21:04:21 · 818 阅读 · 0 评论 -
C/C++内存分配
在C/C++中,内存分为5个区,分别是栈区,堆区,静态区,文字常量区,程序代码区。 静态区:保存全局变量和static变量(包括static全局和局部变量),静态区的内容在整个程序的生命周期中都存在。由编译器在编译的时候分配。 栈:保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁。效率高,但空间有限。 堆:有malloc系列函数或new操作符分配的内存...原创 2018-05-18 21:30:32 · 247 阅读 · 0 评论 -
C语言-----sizeof和strlen的计算
sizeof是一个关键字,求字符串所占的字节数。sizeof在计算变量所占空间大小时,括号可以省略,但是绝对不能sizeof int,这是错误的,可以在int前加unsigned,const等关键字,但是不能加sizeof,以下三种都是正确的;sizeof在编译的时候计算出来。 printf("%d\n", sizeof(int)); printf("%d\n", si...原创 2018-05-18 22:34:01 · 372 阅读 · 0 评论 -
C语言-----编写一个日历
#define _CRT_SECURE_NO_WARNINGS 1#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;//某个月的日历int months[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 },{ 0, 31, 29, 31, 30, 31, 30, 3...原创 2018-05-18 22:50:01 · 2391 阅读 · 0 评论 -
C语言-----实现my_atoi函数
题目: 编写程序实现字符串到整数的转换,如字符串”12345”,输出整数12345。 分析: 实现这个函数要先知道怎么把字符转换成数字,用字符1减去字符0就是数字1。 另外还有考虑一些问题: 1. 正负数该怎么输出? 2. 有空格怎么办? 3. 有其它字符该怎么输出? 4. 返回值怎么知道它是不是正确返回? 以下为源代码:#define _CRT_SECURE_NO_WA...原创 2018-05-20 10:48:55 · 1002 阅读 · 0 评论 -
C语言-----冒泡排序多个字符串
题目: 写冒泡排序可以排序多个字符串 我们按照从大到小的顺序,应该想到用指针数组来存放字符串void bubble_sort_str(char *arr[], int sz){ int i = 0; int j = 0; for (i = 0; i < sz - 1; i++) { for (j = 0; j < sz - i ...原创 2018-05-25 20:41:34 · 751 阅读 · 0 评论 -
C语言---文件操作
先来了解一下什么叫流?? 计算机中大量设备都与I/O有关。CD驱动器,软盘硬盘驱动器,网络 连接,通信接口,视频适配器就是很常见的外设。每一种外设都有不同的特性和操作协议。OS负责这些不同设备的通信细节,并向用户提供一个更为简单的统一的I/O接口。而ANSI C进一步对I/O的概念进行了抽象。就C程序而言,所谓的I/O操作就是简单从程序移进,移出字节的事情,这种字节流就叫做 流。 流分为两种:...原创 2018-05-22 12:11:34 · 482 阅读 · 0 评论 -
C语言----注释转换(C风格---C++风格)
这篇博客主要内容是注释转换,就是把C语言风格的注释/* ~~~~~~~~~~*/转换成C++风格 //其中有一些文件操作函数,不懂的可以看这篇博客: https://blog.csdn.net/abc_xixi111/article/details/80377450首先,我们要知道一个文件中至少有五种状态,我们用状态图表示 解读: 我们从 不是注释 的状态开始,请看下图 ...原创 2018-05-22 12:29:04 · 508 阅读 · 0 评论 -
C语言-----数组的一组数据反向存储
数组的一组数据反向存储,也就是数组数据进行倒序,把最后一个和第一个进行交换,第二个和倒数第二个进行交换,依次类推,直到到中间的元素。void reverse(int* left, int *right){ while (left &lt; right) { int tmp = *left; *left = *right; *ri...原创 2018-06-02 17:28:43 · 2066 阅读 · 0 评论 -
浅谈 折半查找
先来看一下普通查找,在一组数据中查找元素x,最容易想到的方法就是遍历n个元素,找到元素x并返回x的位置,这种算法的时间复杂度为O(n)。如果这n个元素是有序的,我们可以用二分查找来实现,二分查找的时间复杂度是O(logn)二分查找即折半查找,前提是有序的一组元素,其基本思想是每次拿中间元素和要查找的元素 (假设是k) 进行比较,如果相等,返回该元素位置;如果arr[mid] &amp;amp;gt; k,那么...原创 2018-06-02 18:03:24 · 397 阅读 · 0 评论 -
C语言-----指针数组,数组指针,函数指针,函数指针数组,函数指针的数组的指针的一些理解
指针数组数组是一个存放相同类型数据的存储空间。我们先来看一下整型数组int arr[5] = { 0 }; printf("%p\n", arr); printf("%p\n", arr + 1); printf("%p\n", &arr); printf("%p\n", &arr + 1);结果如下:arr与&arr值一样,表示数组地址,但是+1之后就不一样了。a...原创 2018-05-02 19:40:31 · 127 阅读 · 0 评论 -
C语言-----编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
题目:编写一个程序,它从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。 int main(){ int ch = 0; while ((ch = getchar()) != EOF) { putchar(ch); } system("pause"); return 0;}EOF是end of file 的缩写,意为文件结束标志,定义为#define EOF -1简单...原创 2018-04-20 19:53:35 · 457 阅读 · 1 评论 -
C语言操作符总结
c语言操作符总结算术操作符算术操作符比较简单,有+,-,*,/,%需要特别注意的是:1. 取余运算只能作整数取余。3%22. 除法运算中,两个整数做除法结果也为整数,如果有一个数是浮点型的,那么结果就为浮点数。移位操作符移位操作符分为两种左移操作符<< 和右移操作符 >>。补充:移位操作符是对计算机中存放的二进制数而言的。计算机中存放的二进制数是一个数的补码,正数的原码,反...原创 2018-03-31 09:36:05 · 196 阅读 · 1 评论 -
c语言操作符——面试题
求下列输出值是多少?1. int i = 0, a = 0, b = 2, c = 3, d = 4; i = a++ && ++b && d++; printf("%d,%d,%d,%d\n",a,b,c,d);输出 a=1, b=2, c=3, d=4,进行逻辑与运算时,当前边表达式为假时,后边的表达式不用计算,其结果为假。下来的是由此题引申的题:...原创 2018-03-31 10:03:16 · 215 阅读 · 1 评论 -
交换两个数的程序
交换两个变量的内容有三种思路,以下为三种方法的代码。给定两个整型变量的值,交换两个值的内容。w1: 可以定义一个临时变量tmp来实现交换:#include<stdio.h>int main(){ int a = 1, b = 2; int tmp=0; tmp = a; a = b; b = tmp; ...原创 2018-03-25 20:49:52 · 1128 阅读 · 2 评论 -
第一个小程序-重拾c语言
1. 打印100~200 之间的素数 判断一个数是否为素数(即质数),如 101,最易想到的是从 101 开始除以 2 到 100 之间的所有数,如果都不能整除就证明这个数是素数。但这种方法对于大规模数据时,时间复杂度相当大,所以有一种更优化的方法,即从 2 开始到这个数的算术平方根,这样也缩短了时间复杂度。#include<stdio.h>#include<ma...原创 2018-03-19 20:17:58 · 180 阅读 · 1 评论 -
c语言中数据的标准输入输出函数
在c程序中实现程序输入输出的,主要是 printf ( ) 函数和scanf ( )函数。这两个函数用的时候必须指定数据的格式,%d或%c之类的,成为格式控制。下面会详细说明。1. printf( )函数用来向屏幕输出若干个任意类型的数据。如:printf("%d,%c", t,c); printf("%d", 97); 这个屏幕打印结果为97。因为 %d是用来输出一个十进制整数,所以输出...原创 2018-03-22 12:40:51 · 10646 阅读 · 0 评论 -
C语言-----函数调用过程
我们在程序运行过程中运行到一个函数,它就会自动跳转到这个函数去执行它,那么函数在内存中到底是怎么经过一系列过程调用的呢?今天来聊一聊函数调用。指针寄存器esp,ebp1. 首先先搞清楚函数调用中两个非常重要的指针寄存器esp,ebp。对这两个寄存器的一些理解:esp为栈指针,用于指向栈的栈顶ebp为帧指针,指向栈的栈底。函数栈帧2. 函数调用过程中需要开辟空间,用于本次函数的调用中临时变量的保...原创 2018-04-15 16:11:56 · 562 阅读 · 0 评论 -
C语言-----三子棋的实现
相信大家都玩过五子棋吧,今天我来写一个简易版的三子棋,第一次写超过200行的代码,是自己的一个进步,这算是我的第一个小项目了。写三子棋首先要有一个简单的思路:1. 要有棋盘,初始化棋盘,显示棋盘2. 该下棋了,人和电脑进行对战,那就需要两个函数,分别是人下棋的函数和电脑下棋的函数。3. 下完棋之后,每一步都要判断输赢。我们先来看一下运行结果:O---------玩家X---------电脑首先,打...原创 2018-04-15 18:22:44 · 225 阅读 · 3 评论 -
C程序无穷无尽的坑之一--------赋值和判断
被这个赋值=,判断==坑了好多次,下次还会继续被坑。。。。举个例子: k=0 和 k == 0k=0 是把 0 赋值给 k 。 k == 0 判断 k 的值是否为 0。1.while( k=0 )是把 k 赋值为 0,同时表达式的结果也是 0,所以while下的循环体不会执行。a = b 是将b的值传给 a, while(a=b)则表示b的值传给 a,然后以 a 是否为 0 作为循环条...原创 2018-03-28 21:32:38 · 1172 阅读 · 2 评论 -
C语言-----五人比赛预测比赛结果
题目:5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。题目分析:一开始看到这个题 完全不知道从何下手,所以在会了之后才想写这篇博客供大家参考,也是为我打开了一个新思路。 首先有五位选手说明了需要...原创 2018-04-11 17:35:17 · 1146 阅读 · 0 评论 -
C语言-----编写程序确定凶手题
题目:日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯 的一个。以下为4个嫌疑犯的供词。 A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。 现在请根据这些信息,写一个程序来确定到底谁是凶手。 int main(){ int killer = 0; for (killer = 'a'; killer <= 'd'; kil...原创 2018-04-11 17:59:42 · 388 阅读 · 0 评论 -
C语言-----有参数的main函数
我们学习C语言的时候,用到的第一个函数应该就是main函数了吧,大多数情况下看到的都是没有参数的int main(void),今天我们来深入解析一下有参数并且带有三个参数的main函数。编译器为vs2013。int main(int argc,char *argv[],char *envp[]){ int i = 0; for (i = 0; i < argc; i++) { ...原创 2018-04-18 19:18:25 · 31391 阅读 · 10 评论 -
C语言-----可变参数解析
写在开头: 当我们想实现的函数功能的参数不确定时,我们就不能用同一个函数去实现不同参数的传递,此时,我们可以将函数实现成为可变参数的形式,可以使函数接受一个以上任意参数的传递。举个栗子:int main(){ int ave = 0; ave = average(2, 2,2); printf("%d\n", ave); ave = average(3, 2,2,2); pri...原创 2018-04-19 14:21:17 · 245 阅读 · 0 评论 -
C语言-----递归解决汉诺塔问题(典型递归)
题目: 这是一个典型的用递归解决的例子,问题是这样的:古代有一个梵塔,塔内有三个座A,B,C,开始时A座上有64个盘子,盘子大小不等,大的在下,小的在上,有一个和尚想把这64 个盘子从A移到C,规定每次只能移到一个盘子且在移的过程中始终保持打大的在下,小的在上。用编程写出移动过程。解题思路: 这个问题看着很麻烦,不知道从何下手,那是想的太复杂,类似这种复杂的问题,首先要做的就...原创 2018-04-19 15:21:21 · 11173 阅读 · 3 评论 -
C语言------什么叫大端小端
我们都知道在计算机中是以二进制的方式存储数据的,对于整形来说:数据存放内存中其实存放的是补码。举个栗子: int a = 7; int b = 1;这两个变量在内存中是这样存放的数据存储顺序和我们想象的不太一样,这就是大端小端存储模式的原因。什么叫大端大端字节序(大端存储模式):一个数据的低位字节序放在高地址,高位字节序的内容放在低地址。什么...原创 2018-04-13 21:23:08 · 499 阅读 · 2 评论 -
C语言-----简单实现扫雷
今天来写一个小项目-怎么实现简易版扫雷,大家都玩过扫雷吧,在写扫雷这个小项目之前我是不会玩扫雷的,O(∩_∩)O哈哈~,之后才有了玩的想法。现在我们来看一下如何实现吧。项目思路:首先,我们要玩扫雷要有一个简单的游戏菜单供用户选择,这就需要一个菜单函数menu( )。其次,要有两个数组,一个用来隐藏的显示雷的数组,另一个就是真正显示界面的数组。数组定义好后要进行初始化啊,显示雷的数组用 0 初始化,...原创 2018-05-02 15:16:52 · 541 阅读 · 0 评论 -
C语言-----对指针和数组的一些认识
指针,什么叫指针?数组,什么又是数组?指针与数组之间的关系?这是一个曾经让我感到难于上青天的问题现在我来替我解答一下,也希望可以帮助到曾经和我一样绕不清的小伙伴。指针在计算机科学中,指针是编程语言中的一个对象,利用地址,它的值直接指向存在电脑存储器中另一个地方的值。由于通过指针能找到所需要的变量单元,可以的说,地址指向该变量单元。因此,将地址形象化为指针,意思是通过它能找到以它为地址的内存单元。简...原创 2018-05-02 16:59:26 · 182 阅读 · 0 评论 -
C语言-----怎么刷新输入缓冲区
经常我们想在屏幕上看一个结果或输入内容的时候,却不等待你输入就结束了,此时就需要刷新输入缓冲区。题目:先来看一个栗子:实现登录时确认密码,输入Y即确认成功,N表示放弃确认。int main(){ char password[20] = { 0 }; int ch = 0; printf("请输入密码:"); scanf("%s", password); printf("请确认密码(Y/...原创 2018-04-20 19:11:24 · 9674 阅读 · 0 评论 -
结构体实现静态+动态通讯录
学习了结构体之后,我用结构体实现了一个简易版通讯录。 题目: 实现一个通讯录; 通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名、性别、年龄、电话、住址 可以实现的功能有:增删改查以及排序。 下面是通讯录的源程序: 头文件中是一些函数的声明以及宏定义#ifndef __TELE_H__#define __TELE_H__#include "tele.h"...原创 2018-05-16 15:02:54 · 470 阅读 · 0 评论