带命令参数的detab函数
摘要:源自《The C Programming Language》P102 pr5-11: 修改程序entab和detab(第一章练习中编写的函数),使它们接受一组作为参数的制表符停止位。如果启动程序时不带参数, 则使用默认的制表符停止位设置。 代码: #include <stdio.h>#include <stdlib.h>#define TABINC 8int main(int argc, char* argv[]){ int c; int pos; int nb; int tab_inc; pos = 1; nb = 0; if(argc == 1) tab_inc =
阅读全文
posted @
2011-07-12 17:12
将军之盾
阅读(506)
推荐(0)
统计输入中的行数,单词数,字符数
摘要:源于《The C Programming Language》P14的一道例题: 统计输入中的行数,单词数,字符数(单词的定义:其中不包括空格,制表符,换行符的字符序列) #include <stdio.h> #define IN 1 #define OUT0 int main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while((c = getchar()) != EOF) ++nc; if(c == '/n') ++nl; if(c == ' ' || c ==
阅读全文
posted @
2011-07-10 15:41
将军之盾
阅读(427)
推荐(0)
打印输入中单词长度的直方图
摘要:源于《The C Programming Language》P17 pr1-13: 编写一个程序,打印输入中单词长度的直方图。 代码 main.c 1 /************************************************************** 2 直方图定义: 3 n:某个长度单词出现的次数(长度为4的单词出现了9次,则n = 9) 4 M:出现最频繁的长度的次数 5 H:定义的直方图的最大长度(本例中为MAXHIST) 6 **************************************************************/ 7 .
阅读全文
posted @
2011-07-10 15:40
将军之盾
阅读(1162)
推荐(0)
在输出终端中消除多余空格
摘要:来源于《The C Programming Language》的一道习题(P13,PR1-9): 编写一个将输入复制到输出的程序,并将其中连续的多个空格用一个空格代替 自己实现: #include <stdio.h> int main() { int c, flag; flag = 0; while((c = getchar()) != EOF) if(c == ' ' && flag == 0) { putchar(c); ++flag; } else if(c == ' ' && flag != 0) ++flag
阅读全文
posted @
2011-07-10 15:37
将军之盾
阅读(247)
推荐(0)
从输入流中读取整形和浮点型数据存储在实参所指的内存空间中
摘要:源自《The C Programming Language》P83 pr5-2: 模仿函数getInt 的实现方法,编写一个读取浮点数的函数getFloat,getFloat函数的返回值应该是什么类型呢? 代码:View Code 1 #include <stdio.h> 2 #include <ctype.h> 3 4 int getInt(int *); 5 int getFloat(double *); 6 7 #define SIZE 100 8 #define MAX_FLT 2147483648 //double 8字节,但2^63太大,此处用2^31作为阈
阅读全文
posted @
2011-06-22 19:40
将军之盾
阅读(388)
推荐(0)
递归形式的itoa及reverse函数的实现
摘要:源自《The C Programming Language》P75 pr4-12, 4-13: 编写递归版本的itoa及reverse函数 代码:View Code 1 #include <stdio.h> 2 #include <string.h> 3 4 void printd(int n); 5 void itoa(int n, char s[]); 6 void reverse(char s[]); 7 8 //int end; 9 //int beg; 10 11 #define MAXLINE 100 12 13 int main() 14 { 15 int
阅读全文
posted @
2011-06-16 01:33
将军之盾
阅读(632)
推荐(0)
逆波兰计算器(C语言)
摘要:源自《The C Programming Language》 P62 ex4.3: 计算例如:(1 - 2) * (4 + 5)的值,采用逆波兰表示法(即后缀表示法) 代码: main.cView Code 1 #include <stdio.h> 2 #include <stdlib.h> //为了使用库函数atof 3 #include <math.h> //使用sin, exp, pow等数学函数 4 #include <string.h> //使用strcmp, strlen等字符串函数 5 #include "getop.h&
阅读全文
posted @
2011-06-08 01:29
将军之盾
阅读(1596)
推荐(0)
atof函数,可以处理科学计数法
摘要:源自《The C Programming Language》P62 pr4-2,代码位于ex4.2中:对atof函数进行扩充,使它能够处理形如:123.45e-6的科学表示法,其中浮点数后面可能会紧跟一个e或E以及一个指数 代码:main.c 1 #include <stdio.h> 2 #include <ctype.h> 3 4 #define MAXLINE 100 5 6 int getLine(char s[], int lim); 7 double atof(char s[]); 8 int pow(int base, int expn); 9 10 int
阅读全文
posted @
2011-06-01 19:43
将军之盾
阅读(1487)
推荐(0)
itoa函数,考虑当待处理整数为-2^(字长-1)的情况
摘要:源自《The C Programming Language》 P53 pr3-4,代码位于ex3.6中: 在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-(2^(字长-1))的情况。请解释原因, 修改函数使得它在任意机器上运行时都能得到正确结果。 代码:main.c 1 #include <stdio.h> 2 #include <string.h> 3 4 #define MAXLINE 100 5 6 void itoa(int n, char s[],int width); 7 void itob(int n, char s[], in
阅读全文
posted @
2011-05-25 23:52
将军之盾
阅读(422)
推荐(0)
关于Run-Time Check Failure #2
摘要:这个问题源自《The C Programming Language》P49 p3-2习题中,当输入一系列字符串后,再键入Ctrl - Z时,出现了。 代码:main.c 1 #include <stdio.h> 2 3 #define MAXLINE 100 4 5 int getLen(char s[], int lim); 6 char* escape(char t[], char s[]); 7 char* unescape(char t[], char s[]); 8 9 int main() 10 { 11 12 int len = 0; 13 char line[MAX
阅读全文
posted @
2011-05-10 01:33
将军之盾
阅读(1690)
推荐(1)
关于clock()函数计时
摘要:clock tick:时钟计时单元(而不把它叫做时钟滴答次数),一个时钟计时单元的时间长短是由CPU控制的, 一个clock tick不是CPU的一个时钟周期,而是C/C++的一个基本计时单位。 clock函数:clock_t clock(); 这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间 的CPU时钟计时单元 (clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。 clock_t定义: #ifndef _CLOCK_T_DEFINED typedef long clock_t; #define _CLOCK_T_DEFINED#endi.
阅读全文
posted @
2011-05-08 23:44
将军之盾
阅读(1077)
推荐(1)
将一个unsigned型数据循环右移n位
摘要:源自《The C Programming Language》P40 pr2-8: 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位从最左端移入)n(二进制)位后所得的值。 代码:main.c 1 #include <stdio.h> 2 3 unsigned rightrot(unsigned x, int n); 4 5 int main() 6 { 7 8 unsigned num = 8; 9 int cnt = 3;10 11 printf("%u\n", rightrot(num, cnt));12 13 retur
阅读全文
posted @
2011-05-05 01:31
将军之盾
阅读(927)
推荐(0)
将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变
摘要:源自《The C Programming Language》P40 pr2-6: 编写一个函数setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为 y中最右边n位的值,x的其余各位保持不变。 代码:main.c 1 #include <stdio.h> 2 3 unsigned setbits(unsigned x, int p, int n, unsigned y); 4 5 int main() 6 { 7 8 unsigned num = 125; //待处理的十进制数 9 int pos = 7; //从数
阅读全文
posted @
2011-05-04 05:24
将军之盾
阅读(992)
推荐(0)
将字符串s1中任何与字符串s2匹配的字符都删掉
摘要:源自《The C Programming Language》P38 pr2-4: 编写函数squeeze(s1, s2),将字符串s1中任何与字符串s2中字符匹配的字符都删除。 代码:main.c 1 #include <stdio.h> 2 3 #define MAXLINE 100 4 5 char s[MAXLINE] = {'\0'}; //用于存储经过squeeze处理后的字符串 6 char* squeeze(char s1[], char s2[]); 7 int any(char s1[], char s2[]); 8 9 int main()10
阅读全文
posted @
2011-04-29 23:47
将军之盾
阅读(1216)
推荐(0)
将由16进制数字组成的字符串转换成与之等价的整形值
摘要:源自《The C Programming Language》P37 pr2-3: 编写函数htoi(s),把由16进制数字组成的字符串(包含可选的前缀0X或0x)转换成与之等价的整形值, 字符串中允许包含的数字包括:0 ~ 9, a ~ f,A ~ F。 参考代码: main.c 1 #include <stdio.h> 2 3 #define YES 1 4 #define NO 0 5 6 int htoi(char s[]); 7 8 int main() 9 {10 11 char hex_str[] = "0x*1fe*";12 13 printf(&
阅读全文
posted @
2011-04-29 04:24
将军之盾
阅读(1194)
推荐(0)
计算char,short,int,long类型变量的取值范围
摘要:源自《The C Programming Language》P28 pr2-1: 编写一个程序以确定分别由signed及unsigned限定的char,short,int,long类型变量的取值范围。 参考代码:main.c 1 #include <stdio.h> 2 #include <limits.h> 3 #include <float.h> 4 5 int main() 6 { 7 8 printf("the range of char: %d ~ %d\n", SCHAR_MIN, SCHAR_MAX); 9 printf(&
阅读全文
posted @
2011-04-27 23:59
将军之盾
阅读(3218)
推荐(2)
删除C语言程序中所以的注释语句(有疑问)
摘要:源自《The C Programming Language》P25 p1-23: 编写一个删除C语言程序中所以的注释语句。要正确处理带引号的字符串和字符常量。在C语言中,注释不允许嵌套。 参考代码:main.c 1 /* 2 #include <stdio.h> 3 4 #define MAXLINE 1000 5 6 int getLine(char s[], int lim); 7 void copy(char to[], char from[]); 8 void delNotes(char **s, int row); 9 10 int main() 11 { 12 13 i
阅读全文
posted @
2011-04-27 01:21
将军之盾
阅读(860)
推荐(0)
把较长的输入行“折”成短一些的两行或多行
摘要:源自《The C Programming Language》P25 pr1-22: 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n列之前的最后一个非空格符之后。 要保证程序能够智能地处理输入行很长以及在指定的列前没有空格或是制表符的情况。 参考代码:main.c 1 #include <stdio.h> 2 3 #define MAXCOL 10 //输入行的折行位置,即输入行的第n列 4 //程序将在输入行的每一处第n列之前对该输入行折行 5 #define TABINC 8 //'\t'等价8个空格 6 7 char line[
阅读全文
posted @
2011-04-26 05:04
将军之盾
阅读(650)
推荐(0)
将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方
摘要:源自《The C Programming Language》P25 pr1-20: 编写程序detab,将输入中的制表符替换成适当数目的空格,使空格充满到下一个制表符终止位的地方。假设 制表符终止位的位置是固定的,比如每隔n列就会出现一个制表符终止位。n应该是变量还是常量呢? 参考代码:main.c 1 #include <stdio.h> 2 3 #define TABINC 8 //定义每个TABINC(8)个位置会出现一个制表位 4 5 int main() 6 { 7 int c, nb, pos; 8 9 nb = 0; //到遇到制表符时,到达下个制表位需要的空格数10
阅读全文
posted @
2011-04-22 18:19
将军之盾
阅读(1086)
推荐(0)
删除每个输入行末尾的空格,制表符,并删除全空格行
摘要:源自《The C Programming Language》P22 pr1-18: 编写一个程序,删除每个输入行末尾的空格,制表符,并删除完全是空格的行 代码: main.c 1 #include <stdio.h> 2 3 #define MAXLINE 10 4 5 int getLine(char s[], int lim); 6 void copy(char to[], char from[]); 7 int calcLen(char s[]); 8 9 int main()10 {11 12 int len, index, row;13 char line[MAXLINE
阅读全文
posted @
2011-04-21 04:35
将军之盾
阅读(1447)
推荐(0)