![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言基础
Allureyou
这个作者很懒,什么都没留下…
展开
-
产生随机数
rand((int)time(NULL));设定随机数种子rand()%100;发生0-99的随机数。高级点的,假如要发生16-59之间的数,你能够这样写:rand()%44+16(这儿44由59-16+1得到)。其他状况依样画葫芦!下面是搜回来的:疑问1: 如何取得一个真实的随机数?要知道,rand()是不能发生真实的随机数的!即使不能发生真实的随机数,也要大约挨近呀!而rand()好象每转载 2017-02-10 23:58:56 · 400 阅读 · 0 评论 -
C语言程序
将长整型数中各位上为奇数的数依次取出,构成一个新数放在t中,高位仍在高位,低位仍在低位。例如:当s中的数为87653142时,t中的数为7531.#include void fun(long s,long *t){ int d; long s1 = 1; *t = 0; while(s > 0) { d = s%10; if(d%2 != 0)原创 2016-11-22 20:11:21 · 402 阅读 · 0 评论 -
printf函数详解
首先直接描述printf函数中的“格式描述串”,它是由一系列的“格式转换说明符号”组成,格式转换说明符号的描述形式如下:%[+][-] 0 m[n][输出精度](1)形式字母:制定输出格式,如表d:十进制整型数i:十进制整型数x:十六进制整型数o:八进制整形数u:无符号十进制整形数c:单个字符s:字符串e:指数形式的浮转载 2016-12-12 21:48:27 · 654 阅读 · 0 评论 -
有关字符串的几个函数(自己编写的)
#include #include char *my_strcpy(char *dest,char *src){ char *cp = dest; while((*(cp++) = *(src++)) != '\0') ; return dest;}/*char *my_strncpy(char *dest,const char *src,int n)原创 2016-12-03 23:20:13 · 495 阅读 · 0 评论 -
setbuf函数使用注意点
程序输出有两种方式:一种是即时处理方式,另一种是先暂存起来,然后再大块写入的方式,前者往往造成较高的系统负担。因此,C语言实现通常都允许程序员进行实际的写操作之前控制产生的输出数据量。这种控制能力一般是通过库函数setbuf实现的。如果buf是一个大小适当的字符数组,那么:setbuf(stdout,buf);语句将通知输入/输出库,所有写入到stdout的输出转载 2016-12-14 22:08:29 · 934 阅读 · 0 评论 -
怎么避免野指针(面试题)
野指针产生的原因:系统随机分配一块内存。野指针造成的错误:内存泄露,但是不一定每次都会产生段错误(因为偶尔一次随机分配的内存是已经申请过的)。如何避免野指针:1.当一个指针没有指向的时候,要给这个指针赋空。int *p=NULL;2.当要给一个指针指向的空间赋值时,要检查这个指针是否是否分配空间。3.当要给一个指针分配空间时,要判断是否分配空间成功。if(p = NUL原创 2016-12-02 22:16:04 · 784 阅读 · 0 评论 -
C语言静态局部变量
用static声明局部变量,有时我们希望局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。#include int main(){ int fac(int n); int i = 1; for(i = 1; i { prin原创 2016-11-19 20:20:14 · 10071 阅读 · 0 评论 -
拷贝的简单程序
int my_strncmp(char *s1,char *s2,int len){ int i; for(i = 0; i { if(*(s1+i) != *(s2+i)) { return -1; } } return 0;}可封装成函数,直接调用就好啦!原创 2016-12-01 22:12:59 · 258 阅读 · 0 评论 -
约瑟夫问题
#includeint getResult(int n,int m){ if(n < 0 || m < 0) { return -1; } int last = 0; for(int i = 2;i <= n;i++) { last = (last+m)%i; } return (last + 1);}int main(){ int n,m; printf("原创 2016-12-10 21:49:11 · 538 阅读 · 1 评论 -
删除字符串中指定的字符串
本程序是创建的多个.c文件,编译的时候要gcc my_strncmp.c delect_ch.c delect_sub_str.c main.c -o mainint my_strncmp(char *s1, char *s2, int len){ int i; for(i = 0; i { if(*(s1 + i) != *(s2 + i原创 2016-11-30 22:51:21 · 833 阅读 · 0 评论 -
C语言程序之整数转换为相应的一个字符数组
#include int main(){ char a[20][6]={"123","542","3.4","2","1.3","9"}; int i; int j; for(i=0;i { for(j=0;a[i][j]!='\0';j++)//循环找出实数 { if(a[i][j]=='.') { printf("%s\n原创 2016-11-16 17:44:46 · 2744 阅读 · 0 评论 -
c语言之链表的头插尾插
存在一点bug#include #include struct node{ int num; struct node*next; };typedef struct node Node;typedef struct node * Link;void creat_link(Link *head){ *head=NULL;}//void inser原创 2016-11-01 12:06:06 · 504 阅读 · 0 评论 -
主函数参数的使用
主函数参数的意义和使用:argc代表传入的参数个数,argv用来保存命令行参数。int main(int argc,int *argv[]){ int i; for(i = 0;i < argc ; i++) { printf(argv[%d] = %s\n",i,argv[i]); }}一般argv[0]代表命令行本身。原创 2016-12-05 22:15:58 · 634 阅读 · 0 评论 -
C语言程序
形参ch中数字字符‘0’~‘9’,则将‘0’转换成‘9’,‘1’转换成‘8’,~~~~~'9'转换成’0‘;若是其他字符则保持不变;并将转换后的结果作为函数返回值。#include char fun(char ch){ if(ch >= '0' && ch return '9'-(ch -'0'); return ch;}int main(){原创 2016-11-23 18:29:37 · 557 阅读 · 0 评论 -
函数指针数组和使用回调函数
#include int add(int a, int b){ return a + b;}int sub(int a, int b){ return a - b;}int mul(int a, int b){ return a * b;}void func(int (*p_func)(int,int),int a, int b) //回调函数原创 2016-12-06 21:58:18 · 341 阅读 · 0 评论 -
C语言实现哈夫曼编码
#include#define n5 //叶子数目#define m(2*n-1) //结点总数#define maxval 10000.0#define maxsize100 //哈夫曼编码的最大位数typedef struct{ char ch; float weight; int lchild,rchild,parent;}hufmtree;typedef转载 2017-01-10 23:33:56 · 3854 阅读 · 0 评论 -
C语言之几大关键字
1.register作用:请求编译器尽可能将变量保存在CPU内部寄存器中,省去了从内存中抓取数据的时间,提高代码的执行效率。什么时候使用:频繁被访问的变量注意点:(1)只能修饰局部变量,不能修饰全局变量和函数。 (2)不能用&来获取变量的地址,因为&只能从内存中取地址,而register变量可能不是在内存中存储。 (3)r原创 2016-12-18 18:58:25 · 391 阅读 · 0 评论 -
位运算之十进制转二进制 十六进制转二进制
利用位运算进行进制间的转换#include #include int inttoBin(unsigned int num){ int i; unsigned int mask = 0x80000000; for(i = 0; i < 32; i++) { if((num & mask) == mask) { printf("1"); } else {原创 2016-12-17 21:59:21 · 1664 阅读 · 0 评论 -
位运算之十进制转二进制码
#include int main(){ int i; unsigned int num; int unsigned mask = 0x80000000; printf("please input number\n"); scanf("%d",&num); for(i = 0; i { if((num &mask) == mask) {原创 2016-12-16 22:45:04 · 1023 阅读 · 0 评论 -
C语言中exit 0和exit 1 的区别
exit好象在stdio.h里面,所以要有包含头文件 return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。 return是返回函数调用,如果返回的是main函数,则为退出程序 exit是在调用处强行退出程序,运行一次程序就结束 ----------------------------------------转载 2016-12-09 21:59:23 · 4617 阅读 · 0 评论 -
C语言程序之倒置字符串但不改变单词的顺序
#include #include #define MAX_SIZE 1024void reverse_string(char *s1, int len){ int i; char temp; for(i = 0; i { temp = *(s1 + i); *(s1 + i) = *(s1 + len - 1 - i原创 2016-11-26 22:23:15 · 1346 阅读 · 0 评论 -
教你复杂的C或C ++声明
曾经碰到过让你迷惑不解、类似于int * (* (*fp1) (int) ) [10];这样的变量声明吗?本文将由易到难,一步一步教会你如何理解这种复杂的 C/C++声明:我们将从每天都能碰到的较简单的声明入手,然后逐步加入const修饰符和typedef,还有函数指针,最后介绍一个能够让你准确地 理解任何C/C++声明的“右左法则”。需要强调一下的是,复杂的C/C++声明并不是好的编程风格;我这原创 2016-12-08 22:02:31 · 324 阅读 · 0 评论 -
C语言程序
计算C语言中的各个数据类型的字节长度#include int main(){ printf("sizeof(int) = %d\n",sizeof(int)); printf("sizeof(double) = %d\n",sizeof(double)); printf("sizeof(short int) = %d\n",sizeof(short int)); pri原创 2016-11-25 22:32:43 · 180 阅读 · 0 评论 -
C语言函数传值传地址规则
#include void swp(int *a,int *b){ int t; t = *a; *a = *b; *b = t;}#include void swp(int *a,int *b){ int t; t = *a; *a = *b; *b = t;}这个程序算法很简单,但是我想阐述的两点:1.什么时候传值和传地址 2.函数是如何调用的1原创 2016-12-07 22:26:33 · 1024 阅读 · 0 评论 -
练习题答案
1、C 本题考查sizeof和strlen对字符串的处理不同之处,sizeof求出字符串的字符个数,包括结尾符。Strlen求出字符串的实际字符,不包括结尾符。所以答案为6,5,C选项正确。2、A 函数fun 的功能是返回两个形参的和。调用函数fun(x,y)时,将变量x=6和y=7的值分别传送变量a和b,并且通过语句return a+b;将13返回给主函数。继续调用函数fun (13,原创 2016-12-13 22:03:39 · 428 阅读 · 0 评论 -
C语言程序
将s所指字符串中所有的数字字符移动到所有非数字字符之后,并保存数字字符串和非数字字符串原有的次序。#include void fun(char *s){ char t1[80],t2[80]; int i = 0; int j = 0; int k = 0; for(i = 0;s[i] != '\0';i++) { if(s[i] > '0' && s[原创 2016-11-24 21:52:32 · 398 阅读 · 0 评论 -
C语言程序输出桢头到帧尾的字符创串
#include char * find_aim_str(char *head, char *tail, char *src){ char *temp; int h_len = strlen(head); int t_len = strlen(tail); while(*src != '\0') {原创 2016-11-28 22:31:04 · 1475 阅读 · 0 评论 -
C语言之找出字符串中的字串
#include #include int zicuan(char src[],char dest[]){ int i = 0; int j = 0; int count = 0; int flag = 0; while(src[i] != '\0') { while((src[i] == dest[j]) && (j { i++;原创 2016-10-31 21:44:59 · 744 阅读 · 0 评论 -
C语言之mystrcat
#include char *mystrcat(char *str1,char *str2){ char *p = str1; while(*str1) str1++; while(*str2) { *str1++ = *str2++; } *str1 = '\0'; return p;} int main(){ char原创 2016-10-24 22:41:06 · 1040 阅读 · 0 评论 -
C语言之myprintf
#include #include int main(){ int i; int n; char str[100]; printf("请输入一个字符串:"); scanf("%s",str); for(i=0;str[i]!='\0';i++) { printf("%c",str[i]); } printf("\n");}原创 2016-10-24 22:39:59 · 1329 阅读 · 1 评论 -
C语言之mygets函数
#include char *my_gets(char *c){ char *p = c;while((*c = getchar()) != '\n'){ c++;}*c = '\0';return p; } int main(){ char c[20] = {0}; printf("Please input a str原创 2016-10-24 22:38:12 · 1102 阅读 · 0 评论 -
Linux的文件类型
Linux的哲学思想:一切皆为文件Linux文件类型Linux操作系统支持一下文件类型:普通文件、目录文件、设备文件及符号链接文件。1.普通文件普通文件也称常规文件,包含各种长度的字符串。核心对这些数据没有进行结构化,只是作为有序的字符序列把它提交给应用程序。应用程序自己组织和解释这些数据,通常把它归并为下述类型之一。(1)文本文件。(2)数据文件(3)可执行的二进制程原创 2016-10-13 16:13:25 · 424 阅读 · 0 评论 -
gdb 调试器
再忙也要写博客!一、启动gdbgdb调试器用来检查程序功能错误。1.启动被调试的程序。2.让被调试的程序在指定的位置停住。所用编辑命令的格式$ gcc -g hello.c -o hello (针对C语言源程序hello.c)$ gcc -g program.cpp -o programe (针对C++源程序program.cpp)在此基础上,可以使用gdb对运行原创 2016-10-13 15:59:21 · 256 阅读 · 0 评论 -
gdb 调试器
再忙也要写博客!一、启动gdbgdb调试器用来检查程序功能错误。1.启动被调试的程序。2.让被调试的程序在指定的位置停住。所用编辑命令的格式$ gcc -g hello.c -o hello (针对C语言源程序hello.c)$ gcc -g program.cpp -o programe (针对C++源程序program.cpp)在此基础上,可以使用gdb对运行原创 2016-10-13 15:50:27 · 290 阅读 · 0 评论 -
单链表
完整的单链表//////////////////////////////////////////////单链表的初始化,建立,插入,查找,删除。//#include #include typedef int ElemType;//////////////////////////////////////////// //定义结点类型 typedef struct No转载 2016-11-03 18:34:34 · 296 阅读 · 0 评论 -
c语言之simp _link
简单链表,还需完善!#include #include struct node{ int num; struct node * next;};typedef struct node Node;typedef struct node * Link;void create_link(Link * head){ *head = NULL;}void原创 2016-11-02 22:07:08 · 579 阅读 · 0 评论 -
C语言之数组
一、一维数组1.1 一维数组的定义1. 一维数组是指数组中的每个元素只带有一个下标的数组。定义方式为:类型说明符 数组名【常量表达式】;。1.2 一维数组元素的引用1. 数组元素的引用形式为:数组名【下标表达式】。2. 一个数组元素实质上市一个变量名,代表内存中的一个存储单元,一个数组占据的是一连串连续的存储单元。3. 引用数组元素时,数组的下标可以是整型常量,也可以是整转载 2016-10-11 17:27:47 · 1018 阅读 · 0 评论 -
静态库与动态库的创建和使用
一、静态库的创建:(1)gcc -c 源文件.c ——》产生.o文件ar rcs/rcd 静态库名(libname.a) 目标文件1 目标文件2二、静态库的使用:(2)gcc -o file file.c -L. -lnamear -t libname.a 列出库中的目标文件ar -d libname.a file.o 删除库原创 2016-10-10 18:31:17 · 329 阅读 · 0 评论 -
C语言中的变量常量
常量:在程序运行过程中,其值不能被改变的量称为常量。常量区分为整型常量、实型常量、字符常量。重点介绍下符号常量:用一个标识符代表一个常量的符号,即以标识符形式出现的常量,符号常量不能再被赋值,习惯上符号常量名用大写,变量名用小写,以示区别。变量:变量代表内存中具有特定属性的一个存储单元,它用来存放数据,也就是变量的值,在程序运行期间,这些值是可以改变的。要求对所用到的变量做强制定义原创 2016-09-28 19:20:18 · 806 阅读 · 0 评论 -
C语言之循环结构
while 循环语句1.一般形式:while(表达式)循环体1.1 while是c语言的关键字。1.2 紧跟其后的表达式可以是C语言中任意合法的表达式,该表达式是循环条件,由它来控制循环体是否执行。1.3 循环体只能是一条可执行语句,当多项操作需要多次重复做时,可以使用复合语句。2.执行过程:2.1第一步:计算紧跟while后括号中表达式的值,当表达式的值为非0时,则接着执原创 2016-10-14 20:53:21 · 557 阅读 · 0 评论