C语言程序设计第二版课后习题--第八章

部分答案参考了官方题解和网上的答案,仅供参考,可能也有部分bug未发现或解决。 exercise8-1 用 read、write、open 和 close 系统调用代替标准库中功能等价的函数,重写第 7 章的 cat 程序,并通过实验比较两个版本的相对执行速度。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 void filecopy(int ifp, int ofp) { char buf[BUFSIZE]; int n; while ((n = read(ifp, buf, BUFSIZE)) > 0) if (write(ofp, buf, n) !...

October 23, 2024 · 9 min · 1869 words · Jagger

C语言程序设计第二版课后习题--第七章

部分答案参考了官方题解和网上的答案,仅供参考,可能也有部分bug未发现或解决。 exercise7-1 编写一个程序,根据它自身被调用时存放在argv[0]中的名字,实现将大写字母转换为小写字母或将小写字母转换为大写字母的功能。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> int main(int argc, char **argv) { int (*handler[2])(int) = {tolower, toupper}; int type = strcmp(argv[0], "./lower") == 0 ? 0 : strcmp(argv[0], "./upper") == 0 ? 1 : -1; if (type == -1) { fprintf(stderr, "Usage: %s [lower|upper]\n", argv[0]); } else { int c; while ((c = getchar()) !...

October 19, 2024 · 7 min · 1380 words · Jagger

C语言程序设计第二版课后习题--第六章

部分答案参考了官方题解和网上的答案,仅供参考,可能也有部分bug未发现或解决。 exercise6-1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #define NKEYS (sizeof keytab / sizeof(keytab[0])) int binsearch(char *word, struct key tab[], int n) { int cond; int low, high, mid; low = 0; high = n - 1; while (low <= high) { mid = (low + high) / 2; if ((cond = strcmp(word, tab[mid]....

October 18, 2024 · 17 min · 3577 words · Jagger

C语言程序设计第二版课后习题--第五章

部分答案参考了官方题解和网上的答案,仅供参考,可能也有部分bug未发现或解决。 exercise5-1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 int getint(int *pn) { int c, sign; while (isspace(c = getch())) /* skip white space */ ; if (!isdigit(c) && c != EOF && c != '+' && c != '-') { ungetch(c); /* it is not a number */ return 0; } sign = (c == '-') ?...

October 12, 2024 · 27 min · 5733 words · Jagger

C语言程序设计第二版课后习题--第四章

部分答案参考了官方题解和网上的答案,仅供参考,可能也有部分bug未发现或解决。代码在gitee上面。 exercise4-1 编写函数 strindex(s, t),它返回字符串 t 在 s 中最右边出现的位置。如果 s 中不包含 t,则返回-1。 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 void getLine(char s[]) { int c, i = 0; while ((c = getchar()) != EOF && c != '\n') s[i++] = c; } int strindex(char s[], char t[]) { int i, j, k; int lens = strlen(s), lent = strlen(t); for (i = lens - 1; i >= 0; i--) { for (j = lent - 1, k = i; j >= 0 && k >= 0 && s[k] == t[j]; j--, k--); if (j < 0) return k + 1; } return -1; } int main() { char s[MAXLEN] = {0}; char t[MAXLEN] = {0}; printf("Please input the string s: \n"); getLine(s); printf("Please input the string t: \n"); getLine(t); printf("The rightmost position of '%s' in '%s' is: %d\n", t, s, strindex(s, t)); return 0; } 运行:...

October 10, 2024 · 10 min · 1975 words · Jagger

C语言程序设计第二版课后习题--第三章

部分答案参考了网络上的答案和官方题解。代码在gitee上面。 exercise3-1 在上面有关折半查找的例子中,while 循环语句内共执行了两次测试,其实只要一次就足够(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次测试。比较两种版本函数的运行时间。 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 #include <stdio.h> #include <time....

October 8, 2024 · 7 min · 1442 words · Jagger

C语言程序设计第二版课后习题--第二章

部分答案参考了官方题解和网上的答案,仅供参考,可能也有部分bug未发现或解决。代码在gitee上面。 exercise2-1 编写一个程序以确定分别由 signed 及 unsigned 限定的 char、short、int 与 long 类型变量的取值范围。采用打印标准头文件中的相应值以及直接计算两种方式实现。后一种方法的实现较困难一些,因为要确定各种浮点类型的取值范围。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <stdio.h> #include <limits.h> int main() { printf("Size of char %d\n", CHAR_BIT); printf("Size of char max %d\n", CHAR_MAX); printf("Size of char min %d\n", CHAR_MIN); printf("Size of short min %d\n", SHRT_MIN); printf("Size of short max %d\n", SHRT_MAX); printf("Size of int min %d\n", INT_MIN); printf("Size of int max %d\n", INT_MAX); printf("Size of long min %ld\n", LONG_MIN); printf("Size of long max %ld\n", LONG_MAX); printf("Size of unsigned char %u\n", UCHAR_MAX); printf("Size of unsigned short %u\n", USHRT_MAX); printf("Size of unsigned int %u\n", UINT_MAX); printf("Size of unsigned long %lu\n", ULONG_MAX); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 13 Size of char 8 Size of char max 127 Size of char min -128 Size of short min -32768 Size of short max 32767 Size of int min -2147483648 Size of int max 2147483647 Size of long min -9223372036854775808 Size of long max 9223372036854775807 Size of unsigned char 255 Size of unsigned short 65535 Size of unsigned int 4294967295 Size of unsigned long 18446744073709551615 exercise2-2 在不使用运算符&&或||的条件下编写一个与上面的 for 循环语句等价的循环语句。...

September 29, 2024 · 7 min · 1368 words · Jagger

C语言程序设计第二版课后习题--第一章

部分答案参考了官方题解和网上的答案,仅供参考,可能也有部分bug未发现或解决。代码在gitee上面。 exercise1-1 在你自己的系统中运行“hello, world”程序。再有意去掉程序中的部分内容,看看会得到什么出错信息。 1 2 3 main() { printf("hello world!"); } 除去头文件 不报错且能运行,但是会有警告warning: implicit declaration of function ‘printf’ [-Wimplicit-function-declaration]。 除去返回类型 不报错且能运行,但是会有警告warning: return type defaults to ‘int’ [-Wimplicit-int]。 exercise1-2 做个实验,当 printf 函数的参数字符串中包含\c(其中 c 是上面的转义字符序列中未曾列出的某一个字符)时,观察一下会出现什么情况。 1 2 3 4 5 6 7 8 9 10 int main(void) { printf("Experiment\f to find out what\f happens when \fprintf 's argument string contains \\c\n"); printf("---------\n"); printf("Experiment\v to find out what \vhappens when printf 's \vargument string contains \\c\n"); printf("---------\n"); printf("Experiment\r to find out what \rhappens when printf 's \rargument string contains \\c\n"); printf("---------\n"); return 0; } 1 2 3 4 5 6 7 8 9 10 11 12 Experiment to find out what happens when printf 's argument string contains \c --------- Experiment to find out what happens when printf 's argument string contains \c --------- argument string contains \c --------- exercise1-3 修改温度转换程序,使之能在转换表的顶部打印一个标题...

September 28, 2024 · 16 min · 3345 words · Jagger