c语言
so_u
May the odds be ever in your favor
展开
-
杨辉三角的打印
题目:在屏幕上打印杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1解题思路:二维数组的使用;其每一行的第一个数(arr[i][0])和最后一个数(arr[i][i])输出都是1;其余数字则为第i-1行j-1列的数字加上i-1行j列数字之和(即arr[i原创 2017-10-18 15:21:10 · 276 阅读 · 0 评论 -
c语言关键字(上)
关键字: c语言中有些单词具有特殊意义,不允许用作标识符,这些单词称为关键字或保留字。常见关键字: auto break case char const continue default do double else enum extern float for goto if int long register原创 2017-10-09 13:30:04 · 281 阅读 · 0 评论 -
c语言关键字(中)
1、最冤枉的关键字---sizeof 经常被人认为是函数,但sizeof是关键字而不是函数;当我们不记得它是关键字时,可以通过以下几个例子来证明: int i=0;A)sizeof(int); B)sizeof(i); C)sizeof i; D)sizeof int; 通过编译器调试,我们发现A、B和C的值是4,而D则显示错误;int表原创 2017-10-12 19:01:11 · 2852 阅读 · 0 评论 -
解析“extern”
转载自:http://blog.csdn.net/keensword/article/details/401114解析“extern”1、声明外部变量现代编译器一般采用按文件编译的方式,因此在编译时,各个文件中定义的全局变量是互相透明的,也就是说,在编译时,全局变量的可见域限制在文件内部。下面举一个简单的例子。创建一个工程,里面含有A.cpp和B.cpp转载 2017-10-13 13:06:26 · 298 阅读 · 0 评论 -
c语言操作符---位操作符、移位操作符
1、按位操作符 1.1 按位“与”&(双目运算符):仅当两个操作数都为1时,结果为1,否则为0。参与运算的数以补码方式出现。 例:9&5=1 0000 1001------------- 9的补码 & 0000 0101------------- 5的补码 ---------- 0000 0001---原创 2017-10-13 20:21:10 · 725 阅读 · 0 评论 -
使用qsort函数排序各类型数据
接前面模拟实现的 qsort 函数,我们知道qsort是通过回调函数来实现其功能,故而我们通过回调函数可以排序各种类型的数据代码#include<stdio.h>#include<stdlib.h>#include<search.h>#include<string.h>int cmp(const void *x,const void *y) //整型{ retu原创 2017-11-20 19:56:29 · 823 阅读 · 0 评论 -
浅析函数栈帧、变量的创建与销毁
函数调用过程 每一个函数调用都有一个过程,在此期间,为函数开辟栈空间、用于本次函数调用临时变量的保存、现场保护。 函数栈帧 函数调用过程中为函数开辟的栈空间称为函数栈帧。 通过一个例子来分析函数栈帧:#include<stdio.h>int Add(int x, int y){ int z = 0; z = x + y; return z;}int main(原创 2017-11-04 23:39:27 · 722 阅读 · 0 评论 -
通讯录--文件存储
功能要求添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息 显示所有联系人信息 清空所有联系人 以名字排序所有联系人 实现思想采用多文件实现功能,避免程序混乱利用转移表(函数指针数组)减少代码量采用动态内存,节省了内存空间使用结构体保存通讯录信息使用I/O流的概念,并使用IO函数,完成通讯录的文件存储具体代码:contact.h#ifndef原创 2017-12-04 16:24:05 · 622 阅读 · 0 评论 -
C 清空输入缓冲区,以及fflush(stdin)的使用误区和解决方法
对C 语言初学者来说,fflush(stdin)函数被解释为会清空输入缓冲区的一个系统函数,这是一个曾经几乎对过一半的说法,随着计算机科学的进步,在学习的过程中的逐步完善,将fflush(stdin)函数的过去与现在分析一下。Personal thinking:fflush(stdin) 会清空输入缓冲区中的内容,读取时输入缓冲区中的内容会被scanf函数逐个取走,正常case下sca原创 2017-12-05 16:43:39 · 2271 阅读 · 3 评论 -
c语言关键字(下)
1. unsigned 和 signed 首先来看各值的表示范围: 32 位 signed int 类型整数表示法范围:-2^31 ——2^31-1; 8 位 signed char类型数其值表示范围:-2^7—— 2^7-1; 32位 unsigned int 类型数表示法范围:0 —— 2^32-1; 8 位 unsigned char 类型数其值表示法范围:原创 2017-11-26 16:34:29 · 600 阅读 · 0 评论 -
注释转换
功能思想: 1)注释分为两种:c 语言注释和 c++ 注释 2)文本状态分为四种: 普通状态(即NULLSTATUS) C++状态(即CPPSTATUS) C 状态(即CSTATUS) EOF状态(即EOFSTATUS)3)四种状态关系图具体实现: 普通状态 —– C 状态(或C++ 状态) /* int i = 0; *原创 2017-12-07 18:48:19 · 371 阅读 · 1 评论 -
简易游戏----贪吃蛇
设计思路: 界面设置:采用system()函数来调整界面的大小,背景颜色 绘制地图:采用库函数获取坐标(下面具体介绍) 蛇的设计:采用链式结构实现蛇 食物设计:rand()随机产生食物坐标 蛇的移动:蛇移动实现采用链表相关操作,下面具体介绍 方向控制:采用GetAsyncKeyState()函数,通过键盘操作蛇移动的方向 蛇移动速度:采用Sleep()函数控制原创 2018-01-11 17:03:18 · 606 阅读 · 1 评论 -
字符串右移
字符串右旋题目描述: 请实现字符串右循环移位函数,比如:“abcdefghi” 循环右移2位就是“hiabcdefg” 函数原型: void RightLoopMove(char *pstr,unsigned short steps) 函数参数说明: pstr: Point to a ‘\0’ terminated string steps:原创 2017-12-29 16:25:41 · 1250 阅读 · 0 评论 -
斐波那契数列算法——递归与非递归
斐波那契数列: 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n原创 2017-11-06 16:01:57 · 2762 阅读 · 0 评论 -
几种算法-----n的阶乘
问题描述: 输入一个正整数n,输出n!的值。 其中n!=1*2*3*…*n。算法 1 —–递归long long Factorial(long long n){ if(n==1) return 1; return Factorial(n-1)*n;}void Test1(){ printf("%lld\n",Factorial(1));原创 2018-01-25 17:43:34 · 26047 阅读 · 2 评论 -
[置顶] 二分查找各种情况大总结
转载至:http://blog.csdn.net/yefengzhichen/article/details/52372407二分查找多次刷题时遇到,虽然每次也能写对,但花了蛮多时间,没好好想过。而且网上的太多版本,并不是很简洁,而且边界条件变化情况太多,容易混淆,下面是自己对二分查找的一些思考和总结,尽量写得简单易懂。三种基本版本:1.1 二分查找原始版--查找某个数的下转载 2017-10-04 15:43:15 · 256 阅读 · 0 评论 -
跳转语句----break和continue
跳转语句: break:使流程跳到循环体之外,接着执行循环体下面的语句。 即:在循环中遇到break,就停止后期所有的循环,直接终止所有的循环。(只终止它所在的循环部分) 例:#includeint main(){ int i=0; for(i=1;i<10;i++) { if(i==原创 2017-10-02 13:57:48 · 426 阅读 · 0 评论 -
求平均数的几种方法
平均数:给定两个数a和b,求其平均值;分析:数学运算中一贯的算法是(a+b)/2,但在c语言中这种算法存在着一定的缺陷,当a和b足够大时,a和b的和就会存在溢出,从而得不到我们想要的结果。c语言中有相应的操作符可达到求平均数的效果,例如:>>(右移),&按为与,^(按位异或)。1、存在缺陷的算法(a+b)/2 例:int main(){ int a=4,b=2; int r原创 2017-10-18 16:24:45 · 15105 阅读 · 0 评论 -
c语言小游戏---扫雷
程序思想: 多文件实现扫雷基本功能: 1)test.c : 功能的测试,函数的调用; 2)game.h : 包含头文件的引用,函数的声明; 3)game.c : 各函数的功能的实现。 功能的具体思想: 1. 雷盘的初始化:注意实际雷盘的大小与展示雷盘的大小; 2. 雷盘的打印 :注意展示雷盘的大小; 3. 布置雷盘 :随机分布雷时,注意 srand 的使用;原创 2017-10-26 19:38:41 · 433 阅读 · 0 评论 -
函数的调用约定
转自:http://blog.csdn.net/Blue_Dream_/archive/2007/08/29/1763471.aspx 函数调用约定收藏新一篇: 函数名修饰约定规则 | 旧一篇: 构建自己的操作系统 1一:函数调用约定:函数调用约定是函数调用者和被调用的函数体之间关于参数传递、返回值传递、堆栈清除、寄存器使用的一种约定; 它是需要二进制级别兼容的转载 2017-10-29 21:13:26 · 439 阅读 · 0 评论 -
模拟实现库函数strcpy
库函数——strcpy 简单来说就是字符串的拷贝,对于这个函数返回类型、参数类型以及头文件,我们通过msdn来看一下:看了这个函数的相关知识,下来我们先分析一下他的实现过程: 首先要有一个字符串和一个目标空间,将字符串拷贝到目标空间时,我们可以通过指针来完成;定义指针变量分别指向目标空间的首地址以及字符串的首地址,逐一将字符串的内容放到数组当中,直到‘\0’结束。(注意:字符串拷贝过程中‘\0’原创 2017-10-29 21:07:39 · 677 阅读 · 0 评论 -
数组的简单总结
数组 1.定义 一组相同类型元素的集合 2. 创建方式 type_t arr_name [const_n]; //type_t 数组的元素类型 //[const_n] 常量表达式,用来指定数组的大小 3.数组的类型 int b; in原创 2017-10-19 18:25:06 · 316 阅读 · 2 评论 -
模拟实现库函数strlen
库函数 strlen 求字符串长度,当遇到‘\0’时,停止计算;关于这个函数的声明以及头文件,通过msdn了解一下: 首先分析一下实现过程: 首先给定字符串,必定占一定的内存空间,计算大小时,我们可以通过计数的方法来计算字符串的长度,每遇到一个字符,计数器加 1,直到遇到‘\0’停止计算。 下面实现自己的函数:#include<stdio.h>#include<assert.原创 2017-11-01 20:22:40 · 662 阅读 · 0 评论 -
小游戏--三子棋(任意几子棋)
程序思想 1. 多文件实现游戏功能 2. 改变宏定义即可改变棋盘大小以及棋子个数 3. test.c:功能的测试以及函数的调用 4. game.h : 包含头文件的引用,函数的声明 5. game.c : 各函数的功能的实现。 具体实现 1. 棋牌的设置以及棋盘的显示 2. 玩家和电脑各自落子的实现 3. 输赢的判定代码:test.c#define _CRT_SECURE_NO_原创 2017-11-11 22:44:41 · 393 阅读 · 0 评论 -
大小端介绍及其检测方法
大小端介绍大端存储 将一个数据的低字节序的内容存储到高地址处,高字节序的内容存储到低地址处。2.小端存储 将一个数据的低字节序内容存储到低地址处,将高字节序的内容存储到高地址处。检测方法算法一:取出一个整型数的地址,并拿出第一个字节判断是高字节序还是低字节序#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int check_sys(){原创 2017-11-02 20:57:45 · 427 阅读 · 0 评论 -
浅析指针数组、数组指针、函数指针、指针函数、函数指针数组的指针
1. 指针数组 两个例子: 1) int a[5]; 2) int *b[5]; 分析:根据前面数组的学习,我们知道数组的类型是int [5],显而易见(1)是一个数组,(2)是什么,指针还是数组?答案是数组,类型是int *[5],数组当中存放的都是指针。 我们知道,定义数组时,往往是在栈上提供一大块空间给数组存放内容,而对于指针而言,只占四个字节的空间;下面通过内存来证明一下两个都是原创 2017-11-19 14:37:24 · 296 阅读 · 0 评论 -
模拟实现库函数---qsort
实现功能之前,先补充一个知识:回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针 (地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。qsort函数:在上图中,我们可以看到,qsort的参数有函数指针 int(_cd原创 2017-11-19 17:01:10 · 252 阅读 · 0 评论 -
浅析可变参数列表及实例分析
实例分析之前先补充几个知识点 1.可变参数 C语言函数中,一些函数参数部分的个数是可变的,我们称之为可变参数,其函数称为可变函数;例如printf()函数,它的定义是这样的: int printf( const char *format [, argument]… ); 除了有一个参数format是固定的,后面跟着的参数个数和类型是可变的,例如: printf(“%d”原创 2017-11-05 17:40:13 · 381 阅读 · 0 评论 -
小型计算器
思想: 利用转移表实现计算器功能,实现之前先来补充一下转移表知识转移表(函数指针数组) 将函数的地址存到一个数组中,那这个数组就叫函数指针数组,那函数指针的数组 如何定义呢? int (* parr1[10]])(); int* parr210; int (* )() parr3[10]; 答案是:parr1 parr1先和[]结合,说明parr1是数组,数组的内容原创 2017-11-20 11:22:59 · 425 阅读 · 0 评论 -
源代码生成可执行程序过程
问:经常敲代码,代码是如何生成可执行程序的? 答:过程分为两个大的过程:翻译和链接;翻译分为编译和链接;编译又分为预编译,编译,汇编三个过程(具体过程看下图) 程序编码: gcc test.c -o test 1)第一步:预处理器扩展源代码—–展开头文件(#include命令包含文件),#define定义标识符的替换,去除注释 2)第二步:编译器产生两个源文件的汇编代原创 2018-02-01 21:41:19 · 6233 阅读 · 0 评论