随笔分类 - C
摘要:如题: 如果有数组a[3] = {1,2,3};要按照排列组合的方式进行排列,输入格式如下: 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2, 3,2,1 用递归的方法进行编码:代码如下: 1 #include <stdio.h> 2 3 int n = 0; 4 5 void swap(int *a, int *b) //用于交换数据 6 { 7 int m; 8 m = *a; 9 *a = *b; 10 *b = m; 11 } 12 void perm(int list...
阅读全文
摘要:GCC 选项GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到. 很多的 GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就象大多数 Linux 命令一样你不能在一个单独的连字符后跟一组选项. 例如, 下面的两个命令是不同的:gcc -p -g test.cgcc -pg test.c第一条命令告诉 GCC 编译 test.c 时为 prof 命令建立剖析(profile)信息并且把调试信息加入到可执行的文件里. 第二条命令只告诉 GCC 为 gprof 命令建立剖析信息.当你不用任何选项编译一个程序时,
阅读全文
摘要:查看源程序一、显示源代码GDB 可以打印出所调试程序的源代码,当然,在程序编译时一定要加上-g的参数,把源程序信息编译到执行文件中。不然就看不到源程序了。当程序停下来以后, GDB会报告程序停在了那个文件的第几行上。你可以用list命令来打印程序的源代码。还是来看一看查看源代码的GDB命令吧。list <linenum>显示程序第linenum行的周围的源程序。list <function>显示函数名为function的函数的源程序。list显示当前行后面的源程序。list -显示当前行前面的源程序。一般是打印当前行的上5行和下5行,如果显示函数是是上2行下8行,默认是
阅读全文
摘要:队列是一种先进先出的数据存储结构,一般操作系统中用的比较多,本文主要介绍对顺序队列的入队列,出队列,遍历队列操作。 定义顺序队列: 我们可以用一个数组来表示一个顺序存储结构,两个整数来分别指向数组的下标,表示队列的头指针和尾指针;typedef struct queue{ int data[MAX]; int front; //头指针 int rear; //尾指针}queue; 定义队列之后首先就是初始化队列: 初始化队列的时候队列一定是空的,队列的头指针和尾指针必须指向数组的首端;queue *init(){ queue *h; ...
阅读全文
摘要:1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int menu() //选择菜单 5 { 6 int result; 7 printf("**********请选择:***********\n"); 8 printf("**********1.插入:***********\n"); 9 printf("**********2.删除:***********\n");10 printf("**********3.遍历:***********\n");1
阅读全文
摘要:矩阵是线性代数中的一个知识,刚开始学习的时候可能感觉不到它有什么用处,最初的感觉就是对二维数据的操作。其实现实生活中矩阵的用处太大了,设计领域相当的广泛。在此只讨论稀疏矩阵的转置问题; 可能看到矩阵就会想到二维数组,比如这样一个矩阵: 你可能会想到用二维数组来存放此矩阵中的元素,就像这样:int text[][5] = {{0,5,6,0,4},{0,0,0,0,0},{1,0,0,0,0},{1,0,0,0,0},{0,2,0,0,1}};这样好像也没有什么不好。我们再来看看这个矩阵,五行五列,可以包含二十五个元素,但是此矩阵只有七个元素。但是我们在存放数据的时候分配了二十五块int...
阅读全文
摘要:switch语句中的default位置可以随意放,一开始我想不通,就看了下简单反汇编的,发现原来只是靠default的标记,程序执行时先测试表达式是否满足某个case,若都不满足就跳到default去执行。本人目前还没进军反汇编界,请大牛不要取笑。 下面以两个简单的例子说明:1)main(){int a = 0;int o = 0;a = 4;switch(a){case 1:o = 10;printf("%d\n",o);case 2:o = 20;printf("%d\n",o);default:o = 100;printf("%d\n&q
阅读全文
摘要:编译器将程序分解成符号的方法是,从左到右一个字符一个字符的读入,如果该字符可能组成一个字符,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分;如果可能,继续读入下一个字符,重复上述判断,直到读入的字符组成的字符串已不再可能组成一个有意义的符号。a---b这个表达式你要怎么解释?a-- - b?还是a- --b?这个要根据编译器的词法分析器来确定了;写个程序如下:1 #include <stdio.h>2 void text(int a)3 {4 int a=10;5 int b=1;6 printf("%d\t a:%d\n"
阅读全文
摘要:位运算加速技巧1.如果乘上一个2的倍数数值,可以改用左移运算(Left Shift) 加速 300%x = x * 2;x = x * 64;//改为:x = x << 1; // 2 = 21x = x << 6; // 64 = 262.如果除上一个 2 的倍数数值,可以改用右移运算加速 350%x = x / 2;x = x / 64;//改为:x = x >> 1;// 2 = 21x = x >> 6;// 64 = 263.数值转整数加速 10%x = int(1.232)//改为:x = 1.232 >> 0;4.交换两
阅读全文
摘要:对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用。简而言之,回调函数是一个通过函数指针调用的函数。如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数。为什么要使用回调函数呢?我们先看一个小例子: 1 Node * Search_List (Node * node, const int value) 2 { 3 while (node != NULL) 4 { 5 ...
阅读全文
摘要:枚举,一种构造类型,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。枚举的目的就是提高程序的可读性;枚举的特殊属性:初始化一个枚举类型:enum day {Sun=0,Mon,Tue,Wed,Thu,Fri,Sat};定义Sun为0,后面的Mon Tue Wed 就为1 2 3enum day {Sun,Mon=10,Tue,Wed,Thu,Fri,Sat};此时Sun为0 Mon=10 Tue=11 Wed=12······· 1 #include<stdio.h> 2 #incl
阅读全文
摘要:主要思想,main函数开始的时候从文件中读取数据,然后把数据做成一个链表存放到内存。然后开始通过菜单选项进行想要的操作(增加信息,修改信息,删除信息·····)。最后要推出程序的时候删除存放数据的文件,然后在创建一个文件把操作后的数据依次写入文件中。(练手程序,没什么技术含量!) 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 struct stu 5 { 6 int num; 7 char name[20]; 8 }; 9 typedef struct stul 10 { 11
阅读全文
摘要:main()函数参数的一般形式: int main(int argc, char *argv[])int argc用来表示参数的数量,argv[]数组是用来存放参数的值;但是在linux下的gcc编译中传参的时候会出现一点问题,直接上代码好了:1 #include<stdio.h>2 int main(int argc, char *argv[])3 {4 printf("the first argc is %s\n",argv[0]);5 printf("the second argc is %s\n",argv[1]);6 printf(
阅读全文
摘要:学过C的都知道gets()函数是用来接收字符串的一个函数,以前用的时候感觉挺好使的,但是今天碰到了一个问题。 本人写的程序如下:1 #include <stdio.h>2 int main(void)3 {4 char name[10];5 gets(name);6 puts(name);7 } 这个程序最简单不过了,就是一个字符串输出输入的问题,但是使用linux下的gcc编译老是不能通过,提示的问题是: “the 'gets' function is dangerous and shout not be used.” 让我很纠结,为什么这个函数不让使用,...
阅读全文
摘要:相信只要是程序猿都会知道rand()函数是用来取随机数的一个库函数,但是它出的结果真的是一组随机数吗?我们来看看这段代码运行的结果: 1 #include<stdio.h> 2 #include<stdlib.h> 3 int main(void) 4 { 5 int j; 6 for(j=0;j<5;j++) 7 { 8 printf("rand():%d\n",rand()); 9 } 10 }linux下gcc每次运行结果如下:windows vc6.0每次运行结果如下:(本人windows系统为64位机)(由于编译器的不同,可能...
阅读全文
摘要:大家都知道C中的strcpy()函数是用来复制字符串的库函数。先附上代码看看strcpy()函数的功能: 1 #include<stdio.h> 2 #include<string.h> 3 #define MAX 20 4 5 int main(void) 6 { 7 char a[MAX]="abc"; 8 char b[MAX]="abcdefghi"; 9 strcpy(a,b);10 puts(a);11 puts(b);12 } 很明显,结果如下: 此函数中还有两个高级属性—— ①:它是char *类型,它返回的是第一
阅读全文
摘要:getchar()在C程序中的功能是接收一个字符,当我们在连续输入字符的时候getchar()会给你意想不到的效果。下面是net小伙做的一些测试:首先看下面的这个程序: 1 #include<stdio.h> 2 #include<stdlib.h> 3 int main(void) 4 { 5 int a,b,c; 6 printf("please input num a:\n"); 7 scanf("%d",&a); 8 printf("please input num b:\n"); 9 scan
阅读全文
摘要:优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右()圆括号(表达式)/函数名(形参表).成员选择(对象)对象.成员名->成员选择(指针)对象指针->成员名2-负号运算符-表达式右到左单目运算符(类型)强制类型转换(数据类型)表达式++自增运算符++变量名/变量名++单目运算符--自减运算符--变量名/变量名--单目运算符*取值运算符*指针变量单目运算符&取地址运算符&变量名单目运算符!逻辑非运算符!表达式单目运算符~按位取反运算符~表达式单目运算符sizeof长度运算符sizeof(表达式)3/除表达式/表达式左到右双目运算符*乘表
阅读全文
摘要:本文转载【K&R C】1978 年,Dennis Ritchie 和 Brian Kernighan 合作推出了《The C Programming Language》的第一版(按照惯例,经典著作一定有简称,该著作简称为 K&R),书末的参考指南 (Reference Manual) 一节给出了当时 C 语言的完整定义,成为那时 C 语言事实上的标准,人们称之为 K&R C。从这一年以后,C 语言被移植到了各种机型上,并受到了广泛的支持,使 C 语言在当时的软件开发中几乎一统天下。【C89 (ANSI C)】随着 C 语言在多个领域的推广、应用,一些新的特性不断被各种编
阅读全文
摘要:【在ilovezks(ilovezks)的大作中提到:】:我想求教一个问题::c语言中FLOAT是如何表示的?尾数,阶码是如何在32位上安排的,即哪几位是:尾数,哪几位是阶码,那一位是符号位。听说与CPU有关,是真的吗?在C++里,实数(float)是用四个字节即三十二位二进制位来存储的。其中有1位符号位,8位指数位和23位有效数字位。实际上有效数字位是24位,因为第一位有效数字总是“1”,不必存储。有效数字位是一个二进制纯小数。8位指数位中第一位是符号位,这符号位和一般的符号位不同,它用“1”代表正,用”0“代表负。整个实数的符号位用“1”代表负,“0”代表正。在这存储实数的四个字节中,将最
阅读全文