【C语言(基础)】
玛丽奥ZJY
这个作者很懒,什么都没留下…
展开
-
C语言常用库函数(含详细用法)
一、数学函数调用数学函数时,要求在源文件中包下以下命令行:#include <math.h> 函数原型说明 功能 返回值 说明 int abs( int x) 求整数x的绝对值 计算结果 dou...转载 2019-03-07 18:34:38 · 17885 阅读 · 1 评论 -
【C语言】状态机编程技巧:状态表与函数表
没有swith case那样可以直接能通过程序代码看到各 状态 的跳转与 状态机 的执行步骤,但这种 状态表与函数表 实现的 状态机。代码简洁,无遗漏状态,经典!简单实例:#include <stdio.h> char str[128] = " ./a.out 100 200 ";int argc;char * argv[16]; int i = 0;void act_sa...转载 2018-07-10 15:45:37 · 1996 阅读 · 0 评论 -
【C语言】C/C++用状态转移表联合函数指针数组实现状态机FSM
状态机在工程中使用非常的频繁,有如下常见的三种实现方法: 1. switch-case 实现,适合简单的状态机; 2. 二维状态表state-event实现,逻辑清晰,但是矩阵通常比较稀疏,而且维护麻烦; 3. 用状态转移表stateTransfer Table实现,数组大小等于状体转移边个数,易扩展; 下面用一个例子来进行详细说明,描述的如下场景:描述对象:门 状态:开着、关着、锁着 (这里的关...转载 2018-07-10 15:39:55 · 1845 阅读 · 0 评论 -
【C语言】使用柔性数组存储斐波拉次数列
#include <stdio.h>#include <malloc.h>typedef struct _soft_array{ int len; int array[];}SoftArray;SoftArray* create_soft_array(int size){ SoftArray* ret = NULL; ...原创 2018-06-27 16:28:31 · 185 阅读 · 0 评论 -
【C语言】swap交换数据
#include <stdio.h>#define SWAP1(a,b) \{ \ int temp = a; \ a = b; \ b = temp; \}#define SWAP2(a,b) \{ \ a = a + b; \ ...转载 2018-06-27 15:26:17 · 510 阅读 · 0 评论 -
【C语言】使用结构体和malloc函数时的一些错误。
使用结构体错误:#include <stdio.h>struct STU{ char *name; int score;}stu,*pstu;int main (){ strcpy(stu.name,"bit-tech"); strcpy(pstu->name,"bit-tech"); return 0;}12345678910...转载 2018-06-15 22:01:15 · 1164 阅读 · 0 评论 -
【C语言】检测malloc最大能分配多少空间。
方法一:#include <stdio.h>#include <stdlib.h>int main (){ int count = 0; while(malloc(1<<20)) { count++; } printf("%d\n",count); return 0;}12345678910...转载 2018-06-08 14:41:49 · 3216 阅读 · 0 评论 -
【C语言】大小端判断。
(一)联合体判断大小端首先大小端是什么?如果我们判断第一个字节里存放的是不是 数字1,那么就可以确定其存储方式。#include <stdio.h>union DX{ int a; char c;}un;int main (){ un.a = 1; if(un.c == 1) { printf("小端存储\n"); ...转载 2018-06-14 17:21:27 · 1089 阅读 · 0 评论 -
【C语言】通讯录实现以及信息保存至文件。
实现一个通讯录:通讯录用来存放1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址提供方法:(1)添加联系人信息(2)删除指定联系人信息(3)查找指定联系人的信息(4)修改指定联系人信息(5)显示所有联系人信息(6)清空所有联系人实现方法:#include <stdio.h>#include <string.h>#define MAX 1000#def...转载 2018-06-14 17:21:22 · 6004 阅读 · 0 评论 -
【C语言】my_itoa实现 (字符数组,字符串逆序)
方法一:#include <stdio.h>int main(){ int num = 123; char buf[10]; int i = 0; int j = 0; printf("input a number\n"); scanf("%d",&num); ...原创 2018-07-06 17:05:14 · 450 阅读 · 0 评论 -
【C语言】用可变参数列表实现printf函数
//用可变参数列表实现printf函数#include <stdio.h>#include <stdarg.h>void my_printf(const char *str,...){ va_list fun; va_start (fun,str); while(*str!=0) { if(*str=='c') { putchar(va_arg(fun,char )...转载 2018-07-06 15:45:52 · 473 阅读 · 0 评论 -
【C语言】状态机编程
状态机原理:有限状态机的工作原理如图1所示,发生事件(event)后,根据当前状态(cur_state) ,决定执行的动作(action),并设置下一个状态号(nxt_state)。FSM的实现方式:1) switch/case或者if/else这无意是最直观的方式,使用一堆条件判断,会编程的人都可以做到,对简单小巧的状态机来说最合适,但是毫无疑问,这样的方式比较原始,对庞大的状态机难以维护。...原创 2018-07-06 15:43:10 · 2052 阅读 · 0 评论 -
【C语言】判断地图上某点是否有出路(有几条出路)
程序中使用了:1、二维数组表示棋盘2、把上下左右抽象成结构体,然后定义结构体数组3、把一些冗余操作改变成函数。include <stdio.h>#define ROW 10#define COL 10int chessboard[ROW][COL];void print_chessboard(void){ int i,j; ...原创 2018-07-06 10:18:46 · 245 阅读 · 0 评论 -
【C语言】strlen函数递归调用
#include <stdio.h>int strlen(const char* s){ if( s == NULL ) { return -1; } else if( *s == '\0' ) { return 0; } else { return strlen(s+...原创 2018-07-12 15:46:41 · 674 阅读 · 0 评论 -
【C语言】汉诺塔
汉诺塔问题解法#include <stdio.h>void hanoi(int n,char a,char b,char c){ if(n > 0) { if(n == 1) { printf("%c -> %c\n",a,c); } else { hanoi(n-1,a,c,b); printf("%c -...原创 2018-07-12 15:44:14 · 330 阅读 · 1 评论 -
【C语言】根据日期判断星期几(使用基姆拉尔森计算公式)
C语言根据日期判断星期几(使用基姆拉尔森计算公式)算法如下: 基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7在公式中d表示日期中的日数,m表示月份数,y表示年数。注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。以公元元年为参考,公...转载 2018-07-06 17:05:05 · 13382 阅读 · 0 评论 -
【C语言】求两个坐标点之间的距离
方法一:注意:结构体初始化是两种方法。#include <stdio.h>#include <math.h>struct point{ float x; //x axis float y; //y axis};int main(void){ float x,y; st...原创 2018-07-05 11:53:22 · 15204 阅读 · 1 评论 -
【C语言】约瑟夫问题
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。例如:m=3,数到3的人就出队列,下一个人接着从1开始计数#include <stdio.h>#define ALL 100 ...原创 2018-07-05 10:31:47 · 4405 阅读 · 0 评论 -
【C语言】循环链表:约瑟夫环问题
CircleList.h#ifndef _CIRCLELIST_H_#define _CIRCLELIST_H_typedef void CircleList;typedef struct _tag_CircleListNode CircleListNode;struct _tag_CircleListNode{ CircleListNode * next;};CircleL...原创 2018-07-11 17:13:14 · 447 阅读 · 0 评论 -
【C语言】不创建临时变量,实现my_strlen函数
用递归思想实现:·指针指向当前字符不为‘\0’,那么就加1.·指针指向当前字符为‘\0’,返回0.#include <stdio.h>int my_strlen(char const *p){ if(*p== '\0') { return 0; } else { return 1+my_strlen(p+1)...转载 2018-06-14 17:21:09 · 159 阅读 · 0 评论 -
【C语言】函数,函数指针;指针数组,数组指针。
先定义一些功能简单的函数:#include <stdio.h>char *fun1(char *p,char a[]){ printf("fun1()\n"); return NULL;}char *fun2(char *p,char a[]){ printf("fun2()\n"); return NULL;}char *fun3(cha...转载 2018-06-14 17:21:03 · 186 阅读 · 0 评论 -
【C语言】将student a am i翻转成i am a student。
将student a am i翻转成i am a student。方法: (1)先将所有字符串进行翻转,即变成“i ma a tneduts”, (2)当遇到空格时,则把空格前那段字符进行翻转,接着往下判断。#include <stdio.h>#include <string.h>#include <assert.h>char * fanzhuan(cha...转载 2018-06-14 17:20:57 · 585 阅读 · 0 评论 -
【C语言】计算整数中出现9的次数
首先,让我们先看两个程序:#include <stdio.h>int main (){ int i; int count = 0; for(i=1; i<=100; i++) { if(i%10 == 9) { count++; } else if(i/10...原创 2018-06-07 13:18:54 · 1732 阅读 · 0 评论 -
【C语言】计算1-1/2+1/3-.......+1/99-100的值
早期我们用来入门学习的方法:[cpp] view plain copy<span style="font-size:14px;"><strong style="background-color: rgb(255, 255, 102);">#include <stdio.h> int main () { int sign = 1; doub...转载 2018-06-06 15:39:07 · 11375 阅读 · 1 评论 -
【C语言】写一个函数返回参数二进制中1的位数。
<pre name="code" class="cpp"><pre name="code" class="cpp">方法一: #include <stdio.h> int main () { int m = 255; int count_one_bits(int value); printf("one转载 2018-06-06 15:29:56 · 571 阅读 · 0 评论 -
【C语言】判断1000年~2000年之间的闰年。
[cpp] view plain copy#include <stdio.h> int main () { int year,count = 0; for(year=1000; year<=2000; year+=2)//奇数不可能是闰年 { if((year%400 == 0) || (year%4 == 0 &&am...转载 2018-06-06 15:08:12 · 592 阅读 · 0 评论 -
【C语言】求10个数中的最大值。
[cpp] view plain copy<pre name="code" class="cpp">#include <stdio.h> int main () { int i,max; int a[10]; for(i=0; i<sizeof(a)/sizeof(a[0]); i++)//动态分配,以字节为单位 { ...转载 2018-06-06 15:00:57 · 18349 阅读 · 2 评论 -
【C语言】不允许创建临时变量,交换两个数的内容。
[cpp] view plain copy加法实现: #include <stdio.h> int main () { int a = 30; int b = 20; a = a+b; b = a-b; a = a-b; printf("a=%d,b=%d\n",a,b); return 0; } 乘法实现...转载 2018-06-06 14:52:29 · 327 阅读 · 0 评论 -
【C语言】输出乘法口诀。
[cpp] view plain copy方法一: #include <stdio.h> int main () { int i,j,p; for(i=1; i<=9; i++) { for(j=1; j<=9; j++) { p = i * j; i...原创 2018-06-06 14:47:23 · 392 阅读 · 0 评论 -
【C语言】求100到200之间的素数。
<pre name="code" class="cpp">方法一: #include <stdio.h> int main () { int n,i; int flag = 0;//标签 int count = 0;//用来计数的 printf("100到200之间的素数:\n"); printf("\n");原创 2018-06-06 14:35:18 · 5015 阅读 · 0 评论 -
【C语言】从标准输入读取C源代码,并验证所有的花括号都正确的成对出现。
[cpp] view plain copy#include<stdio.h> int main() { int ch; int line = 0; int flag = 1; while ( (ch=getchar()) != EOF) { if(flag == 1) { ...转载 2018-06-06 14:20:47 · 169 阅读 · 0 评论 -
【C语言】猴子吃桃问题。
我们从正常的思维去思考 猴子吃桃问题#include <stdio.h>int main (){ int n = 1; int sum = 0; int i; for(i=0; i<9; i++) { n = 2*(n+1); sum += n; printf("%d\n",sum); ...转载 2018-06-07 13:19:00 · 12470 阅读 · 1 评论 -
【C语言】球落地又反弹回原来高度一半问题。
【C语言】一个球从100米高处自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。求第10次落地时,共经过多少米?第10次反弹多高?#include <stdio.h>int main (){ double h = 100.0; double sum = h; double n = h/2.0; int i; for(i=0; i<...转载 2018-06-07 13:19:05 · 8228 阅读 · 0 评论 -
【C语言】数字字符串转换成这个字符串对应的数字。
(1) int ascii_to_integer(char *str)函数实现。要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整数。如果字符串参数包含任何非数字字符,函数就返回零。不必担心算数溢出。提示:你每发现一个数字,把当前值乘以10,并把这个值和新的数字所代表的值相加。直接上代码:#include <stdio.h>#include &l...转载 2018-06-11 11:23:43 · 18436 阅读 · 0 评论 -
【C语言】回文数与回文字符串的判断。
任意输入一个数,判断是否为回文数。方法:将高低位互换之后如果仍然相等,则为回文数。#include <stdio.h>int huiwen(unsigned int value){ unsigned int n = value; unsigned int t = 0; while(n) { t = t*10 + n%10; ...转载 2018-06-07 13:18:01 · 2163 阅读 · 0 评论 -
【C语言】输入三个字符串,由小到大排序输出。
仔细观察下面程序:#include <stdio.h>#include <string.h>void swap(char *p1,char *p2){ char *ret = p1; p1 = p2; p2 = ret;}int main (){ int i = 0; char *a[3]; a[0] = "abc...转载 2018-06-07 12:43:09 · 11651 阅读 · 0 评论 -
【C语言】memcpy函数和memmove函数的实现与区别
memcpy与memmove的目的都是将N个字节的源内存地址的内容拷贝到目标内存地址中。我们先实现memcpy的功能:#include <stdio.h>#include <assert.h>void *my_memcpy(void *dst,const void *src,int n){ void *ret = dst; char *p1 = (ch...转载 2018-06-11 11:23:37 · 173 阅读 · 0 评论 -
【C语言】将函数reverse_string(char * string)参数字符串中的字符反向排列。
实现:将参数字符串中的字符反向排列,要求:不能使用C函数库中的字符串操作函数。#include <stdio.h>#include <assert.h>char * reverse_string(char *string){ char ch; char *ret = string; assert(string != NULL); whi...转载 2018-06-07 13:20:01 · 298 阅读 · 0 评论 -
【C语言】my _strlen函数功能的实现
一:创建变量来实现my_strlen(char *str)函数功能先引入一个程序:#include <stdio.h>#include <stdlib.h>int my_strlen(char * str){ int count = 0; if(str == NULL) { exit(EXIT_FAILURE); } ...转载 2018-06-07 13:19:54 · 1244 阅读 · 0 评论 -
【C语言】从标准输入读取字符,并把它们写到标准输出,除了 大写字母转换成小写字母之外,其他的原样输出。
#include <stdio.h>int main (){ char ch; while((ch = getchar()) != EOF) { if(ch >= 'A' && ch <= 'Z') { ch = ch+32; } putcha...转载 2018-06-07 13:19:46 · 1021 阅读 · 1 评论