- 博客(40)
- 资源 (9)
- 收藏
- 关注
原创 The C Programming Language 练习题4-6
题目 给计算器程序增加处理变量的命令(提供26 个具有单个英文字母变量名的变量很容易)。增加一个变量存放最近打印的值。题目分析 由于判断条件太多,导致程序非常复杂,实现二次赋值有些麻烦,终于还是想明白了。中间加了很多打印便于分析,就不去除了,下一题还要用:)代码实现#include <stdio.h>#include <stdlib.h> /* for atof() */#include
2017-10-21 16:41:17 434
原创 The C Programming Language 练习题4-5
题目 给计算器程序增加访问sin、exp 与pow 等库函数的操作。有关这些库函数的详细信息,参见附录B.4节中的头文件#include <stdio.h>#include <stdlib.h> /* for atof() */#include <string.h>#include <math.h>#define MAXOP 100#define NUMBER '0'#define M
2017-10-19 19:19:28 291
原创 The C Programming Language 练习题4-3
题目 在有了基本框架后,对计算器程序进行扩充就比较简单了。在该程序中加入取模(%)运算符,并注意考虑负数的情况。题目分析 取模运算比较简单,直接在case部分加入即可。 考虑负数需要看‘-’后面是否数字。代码实现int getop(char s[]){ int i, c, d; while ((s[0] = c = getch()) == ' ' || c == '\t')
2017-10-18 18:20:25 697
原创 The C Programming Language 练习题4-2
题目 对atof函数进行扩充,使它可以处理形如123.45e-6的科学表示法,其中,浮点数后面可能会紧跟一个e或E以及一个指数(可能有正负号)。题目分析 教材中atof函数已经处理到指数之前的位置,扩充只需判断后面是否有指数。代码实现#include <ctype.h>#include <stdio.h>double atof(char s[]){ double val, power
2017-10-11 22:53:18 829
原创 The C Programming Language 练习题4-1
题目 编写函数 strindex(s, t),它返回字符串t在s中最右边出现的位置。如果s中不包含t,则返回-1。题目分析 可以参考教材中寻找s中每行是否包含t的代码。代码实现#include <stdio.h>int stringdex(char s[], char t[]){ int i, j, k, m; m = 0; for (i = 0; s[i] != '\
2017-10-11 15:30:48 249
原创 The C Programming Language 练习题3-6
题目 修改itoa函数,使得该函数可以接收三个参数。其中,第三个参数为最小字段宽度。为了保证转换后所得的结果至少具有第三个参数指定的最小宽度,在必要时应在所得结果的左边填充一定的空格。题目分析 先进行抓换,然后判断字符串长度是否小于最小宽度。代码实现#include <stdio.h>#include <string.h>void reverse(char s[]){ int c,
2017-10-10 20:25:45 282
原创 The C Programming Language 练习题3-5
题目 编写函数 itob(n, s, b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。例如,itob(n, s, 16)把整数n格式化成十六进制整数保存在s中。代码实现#include <stdio.h>void itob(int n, char s[], int b);void reverse(char s[]);int main(){ int n, b,
2017-10-10 19:51:05 293
原创 The C Programming Language 练习题3-4
题目 在数的对二的补码表示中,我们编写的itoa函数不能处理最大的负数,即n等于-2 ^(字长-1)的情况。请解释其原因。修改该函数,使它在任何机器上运行时都能打印出正确的值。题目分析 因为在计算机中,负数的存储是以补码形式存放。所以本机最大负数-2147483648存储形式是(1000 0000 0000 0000 0000 0000 0000 0000),所以理论上原代码中”n = -n”
2017-10-10 17:14:15 419
原创 The C Programming Language 练习题3-3
题目 编写函数 expand(s1, s2),将字符串s1 中类似于a-z 一类的速记符号在字符串s2中扩展为等价的完整列表abc…xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与-a-z等类似的情况。作为前导和尾随的-字符原样排印。题目分析 逐个读取字符串1中的字符,如果初现‘-’则判断下位是什么。a-c-e我理解为要输出abcde这样的序列。代码实现#includ
2017-10-09 23:45:57 346
原创 The C Programming Language 练习题3-2
题目 编写一个函数escape(s, t),将字符串t 复制到字符串s 中,并在复制过程中将换行符、制表符等不可见字符分别转换为\n、\t等相应的可见的转义字符序列。要求使用swich语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为实际字符。题目分析 写的代码好像无法识别’\t’这个标志,只好用空格来代替。代码实现#include <stdio.h>int main(){
2017-10-08 21:17:34 335
原创 The C Programming Language 练习题3-1
题目 在上面有关折半查找的例子中,while循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。比较两种版本函数的运行时间。题目分析 想半天没想明白,后来找到了作者答案,一起贴上来吧。代码实现#include <stdio.h>int binsearchtemp(int x, int v[], int n){ in
2017-10-08 20:00:13 664
原创 The C Programming Language 练习题2-10
题目 重新编写将大写字母转换为小写字母的函数lower,并用条件表达式替代其中的if-else结构。代码实现#include <stdio.h>#define MAXLINE 1000int main(){ int i; char c, line[MAXLINE]; i = 0; while(((c = getchar()) != '\n') && i < MAX
2017-10-08 15:35:54 360
原创 The C Programming Language 练习题2-9
题目 在求对二的补码时,表达式x &= (x – 1)可以删除x中最右边值为1 的一个二进制位。请解释这样做的道理。用这一方法重写bitcount函数,以加快其执行速度。题目分析 x &= (x-1)等效于 x = x & ( x - 1),x-1意味着最后一位必然会跟x相反,所以再与x相与最后一位肯定为0。 另外,根据2进制的特点,可以利用这一点来计算数中1的个数。代码实现#include
2017-10-08 14:47:11 278
原创 The C Programming Language 练习题2-8
题目 编写一个函数rightrot(x, n),该函数返回将x循环右移(即从最右端移出的位将从最左端移入)n(二进制)位后所得到的值。题目分析 先统计有效数字位,然后分布挪移。编程实现#include <stdio.h>unsigned rightrotemp(unsigned x, int n);int m;int main(){ int a, b; a = 2888;
2017-10-08 13:38:28 245
原创 The C Programming Language 练习题2-7
题目 编写一个函数 invert(x, p, n),该函数返回对x 执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位求反(即,1 变成0,0 变成1),x的其余各位保持不变。题目分析 假设从第p位开始向左操作。代码实现#include <stdio.h>unsigned inverttemp(unsigned x, int p, int n);int main(){ int
2017-10-07 22:01:55 387
原创 The C Programming Language 练习题2-6
题目 编写一个函数 setbits(x, p, n, y),该函数返回对x执行下列操作后的结果值:将x中从第p位开始的n个(二进制)位设置为y中最右边n位的值,x的其余各位保持不变。题目分析
2017-10-06 00:10:28 501
原创 The C Programming Language 练习题2-5
题目 编写函数 any(s1, s2),将字符串s2中的任一字符在字符串s1中第一次出现的位置作为结果返回。如果s1中不包含s2中的字符,则返回-1。(标准库函数strpbrk具有同样的功能,但它返回的是指向该位置的指针。)题目分析 不太理解任一字符如何操作,就把每个字符在字符串1中的位置都做标注。实现方法跟2-4类似。编程实现#include <stdio.h>#define MAXLINE
2017-10-02 01:14:09 280
原创 The C Programming Language 练习题2-4
题目 squeeze(s1, s2),将字符串s1 中任何与字符串s2 中字符匹配的字符都删除。题目分析 先将s2中每个字符串拿出来在s1中寻找,然后生成不包含此字符的新的s1字符串,然后再找下一个。编程实现#include <stdio.h>#define MAXLINE 1000void squeeze(char s1[], char s2[]);int main(){ int
2017-10-01 15:42:44 176
原创 The C Programming Language 练习题2-3
题目 编写函数 htoi(s),把由十六进制数字组成的字符串(包含可选的前缀0x或0X)转换为与之等价的整型值。字符串中允许包含的数字包括:0~9、a~f以及A~F。题目分析 判断分成几部分: 1.0x和0X的前缀判断 2.0~9部分 3.a~f部分 4.A~F部分 计算方法: 如十六进制数0xabcd,则转换方法就是10*16^3+11*16^2+12*16^1+13*16^0=4
2017-09-30 21:43:56 284
原创 The C Programming Language 练习题2-2
题目 在不使用运算符&&或||的条件下编写一个与上面的for 循环语句等价的循环语句。题目分析 原语句:for (i=0; i<lim-1 && (c=getchar()) != '\n' && c != EOF; ++i)有三个判断条件,所以需要使用3个if语句。编程实现#include <stdio.h>#define MAXLINE 1000int main(){ int i,
2017-09-30 18:38:39 297
原创 The C Programming Language 练习题2-1
题目 编写一个程序以确定分别由signed及unsigned 限定的char、short、 int与long类型变量的取值范围。题目分析 在< limits.h>文件中已经定义了上述各变量的取值范围,直接输出即可。编程实现 include < stdio.h>include < limits.h>int main() { printf(“Prints the value from the
2017-09-27 15:45:44 463
原创 The C Programming Language 练习题1-24
题目 编写一个程序,查找C语言程序中的基本语法错误,如圆括号、方括号、花括号不配对等。要正确处理引号(包括单引号和双引号)、转义字符序列与注释。题目分析 1.情况较多,需要判断三种括号是否在单引号、双引号、转义字符序列和注释中。 2.将代码中三种括号存入三个字符数组中。编程思路 1.先不考虑特殊情况 2.将代码先读入字符数组中,然后挨个判断是哪种括号。
2017-09-23 17:43:06 343
原创 The C Programming Language 练习题1-23
题目 编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。在C语言中,注释不允许嵌套。题目分析 注释分两种情况,一种是/……/中的文本,另外一种是“//”后面的一行。编程思路 1.判断当前行是否有“/”或“//”出现。如果“/”或者“//”之前有双引号或单引号,则不做处理。 2.输出不带注释的语句。代码实现(这个代码写的非常绕,我都不好意思说了)int main()
2017-09-22 19:08:41 286
原创 The C Programming Language 练习题1-22
题目: 编写一个程序,把较长的输入行“折”成短一些的两行或多行,折行的位置在输入行的第n 列之前的最后一个非空格之后。要保证程序能够智能地处理输入行很长以及 在指定的列前没有空格或制表符时的情况。题目分析 需要判断输入的每行字符串长度,如果长度超过n,则将此行拆分为多个长度不超过n的行。 拆分点的判断。如果字符串长度超过n,在第n个位置的字符如果不是空格,则将第n个字符换到下一行,如
2017-09-22 17:13:16 655
原创 The C Programming Language 练习题1-21
练习 1-21 编写程序 entab,将空格串替换为最少数量的制表符和空格,但要保持单词之间的间隔不变。假设制表符终止位的位置与练习1-20 的detab程序的情况相同。当使用一个制表符或者一个空格都可以到达下一个制表符终止位时,选用哪一种替换字符比较好?题目分析 此习题要求将字符串中的空格键替换为最少的制表符和空格的组合,Windows默认制表符占8个字符空间,例如有15个空格,那么要用2个制表
2017-09-21 23:17:21 957
原创 The C programming Language 1-13
#include #define MAXLENGTH 15int main(){ int c, i, j, k; int ndigit[10]; for (i = 0; i ndigit[i] = 0; i = j = k = 0; while ((c = getchar()) != EOF)
2017-09-16 17:22:07 521
HuaweiUpdateExtractor_0.9.9.5
2018-02-09
Android google 服务包
2014-03-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人