【C语言】学习笔记 第7章 基本类型 编程题 Bertha 。 2024-03-22 09:15 53阅读 0赞 ### 【C语言】学习笔记 ### #### 文章目录 #### * * 【C语言】学习笔记 * * 第7章 基本类型 * * 编程题 #### 第7章 基本类型 #### ![在这里插入图片描述][be8f61bea668486fa28c4ab8d1e25a35.png_pic_center] 计算机处理的是数而不是符号。我们用对行为的算术化程度 来衡量我们的理解力(和控制力)。 ##### 编程题 ##### 【1】如果 i \* i 超出了 int 类型的最大取值,那么 6.3 节的程序 square2.c 将失败(通常会显示奇怪的答 案)。 ![在这里插入图片描述][66a2d66a18e243fab9651abb114d2dfd.png_pic_center] 运行该程序,并确定导致失败的 n 的最小值。尝试把变量 i 的类型改成 short 并再次运行该 程序。(不要忘记更新 printf 函数调用中的转换说明!)然后尝试将其改成 long。从这些实验中, 你能总结出在你的机器上用于存储整数类型的位数是多少吗? ![在这里插入图片描述][ed631c108d5b4541a7c676c98d79cc0d.png_pic_center] ![在这里插入图片描述][9f05fcee38ae40c086caaa5d7de93e9e.png_pic_center] ![在这里插入图片描述][8695909502f142a2af06ac5f7272d237.png_pic_center] 可以看见,46341 的平方就已经超过了32 位int 类型的最大值 2147483647,直接溢出了, 修改为short int: ![在这里插入图片描述][b072aa985c2b49e180c5a32c15893536.png_pic_center] ![在这里插入图片描述][b449dc28ce4048fe82a28f570caf9516.png_pic_center] 效果也很明显,182的时候,182平方会超过16位短整型的最大数32767,进而溢出。 修改为long 类型: ![在这里插入图片描述][9d4b8b9a5530457aa3075313389a1148.png_pic_center] 效果也很明显,和int 一样。 **【说明】** 在笔者的Windows11 操作系统下,使用MinGW 编译器,int 是32位,long int 也是32位。 【2】修改 6.3 节的程序 square2.c,每 24 次平方运算后暂停,并显示下列信息: Press Enter to continue... 显示完上述消息后,程序应该使用 getchar 函数读入一个字符。getchar 函数读到用户输入的回车 键才允许程序继续。 #include<stdio.h> int main(void) { int i, n; printf("This program prints a table of squares.\n"); printf("Enter number of entries in table: "); scanf("%d", &n); getchar(); for (i = 1; i <= n; i++) { printf("%10d%10d\n", i, i * i); if (i % 24 == 0) { printf("Press Enter to continue..."); while (getchar() != '\n'); } } return 0; } ![在这里插入图片描述][99be0acf4e91468ea0595834fe28a622.png_pic_center] 【3】修改 7.1 节的程序 sum2.c,对 double 型值组成的数列求和。 ![在这里插入图片描述][bb60e2bbc17b4eec8f7aae63e5c9845e.png_pic_center] #include<stdio.h> int main(void) { double lf, sum = 0; printf("This program sums a series of double integers.\n"); printf("Enter integers (0 to terminate): "); scanf("%lf", &lf); while (lf != 0) { sum += lf; scanf("%lf", &lf); } printf("The suum is: %lf\n", sum); return 0; } ![在这里插入图片描述][140162c24c524f5bb0bfc4c63ef16b19.png_pic_center] 【4】编写可以把字母格式的电话号码翻译成数值格式的程序: Enter phone number: CALLATT 2255288 (如果没有电话在身边,参考这里给出的字母在键盘上的对应关系:2=ABC、3=DEF、4=GHI、5=JKL、 6=MNO、7=PQRS、8=TUV、9=WXYZ。)原始电话号码中的非字母字符(例如数字或标点符号)保持不变: Enter phone number: 1-800-COL-LECT 1-800-265-5328 可以假设任何用户输入的字母都是大写字母。 #include<stdio.h> int main(void) { char c; printf("Enter phone number: "); while ((c = getchar()) != '\n') { if (c >= 'A' && c <= 'C') printf("%d", 2); else if (c >= 'D' && c <= 'F') printf("%d", 3); else if (c >= 'G' && c <= 'I') printf("%d", 4); else if (c >= 'J' && c <= 'L') printf("%d", 5); else if (c >= 'M' && c <= 'O') printf("%d", 6); else if (c >= 'P' && c <= 'S') printf("%d", 7); else if (c >= 'T' && c <= 'V') printf("%d", 8); else if (c >= 'W' && c <= 'Z') printf("%d", 9); else printf("%c", c); } return 0; } ![在这里插入图片描述][39a7f89e4ae24b178f2f83fbb35f9694.png_pic_center] 【5】在十字拼字游戏中,玩家利用小卡片组成英文单词,每张卡片包含一个英文字母和面值。面值根据 字母稀缺程度的不同而不同。(面值与字母的对应关系如下:1——AEILNORSTU;2——DG;3—— BCMP;4——FHVWY;5——K;8——JX;10——QZ。)编写程序,通过对单词中字母的面值求和 来计算单词的值: Enter a word: pitfall Scrabble value: 12 编写的程序应该允许单词中混合出现大小写字母。提示:使用 toupper 库函数。 #include <stdio.h> #include <ctype.h> int main(void) { char c; int sum = 0; printf("Enter a word: "); while ((c = getchar()) != '\n') { c = toupper(c); if (c == 'D' || c == 'G') sum += 2; else if (c == 'J' || c == 'X') sum += 8; else if (c == 'Q' || c == 'Z') sum += 10; else if (c == 'K') sum += 5; else if (c == 'B' || c == 'C' || c == 'M' || c == 'P') sum += 3; else if (c == 'F' || c == 'H' || c == 'V' || c == 'W' || c == 'Y') sum += 4; else sum += 1; } printf("Scrabble value: %d", sum); return 0; } ![在这里插入图片描述][36322bcb063a4cd8b793e37d7030e502.png_pic_center] 【6】编写程序显示 sizeof(int)、sizeof(short)、sizeof(long)、sizeof(float)、sizeof(double) 和 sizeof(long double)的值。 #include <stdio.h> int main(void) { printf("Size of int is : %zu\n", sizeof(int)); printf("Size of short is : %zu\n", sizeof(short)); printf("Size of long is : %zu\n", sizeof(long)); printf("Size of float is : %zu\n", sizeof(float)); printf("Size of double is : %zu\n", sizeof(double)); printf("Size of long double is : %zu\n", sizeof(long double)); return 0; } > 不同计算机运行结果可能不同 ![在这里插入图片描述][e02b515bc2504a6189a537699871ee0e.png_pic_center] 【7】修改第 3章的编程题 6,使得用户可以对两个分数进行加、减、乘、除运算(在两个分数之间输入`+`、 `-`、`*`或`/`符号)。 ![在这里插入图片描述][2d2a1432dabb44bc9152e7bb73b97342.png_pic_center] #include<stdio.h> int main(void) { int num1, denom1, num2, denom2, result_num, result_denom; char operate; printf("Enter two fractions separated by a operator sign: "); scanf("%d/%d%c%d/%d", &num1, &denom1, &operate, &num2, &denom2); switch (operate) { case '+': result_num = num1 * denom2 + num2 * denom1; result_denom = denom1 * denom2; break; case '-': result_num = num1 * denom2 - num2 * denom1; result_denom = denom1 * denom2; break; case '*': result_num = num1 * num2; result_denom = denom1 * denom2; break; case '/': result_num = num1 * denom2; result_denom = denom1 * num2; break; } printf("The result is %d/%d\n", result_num, result_denom); return 0; } ![在这里插入图片描述][ec7cf00886f7407488e520fbd14addbd.png_pic_center] 【8】修改第 5章的编程题 8, ![在这里插入图片描述][c65efad885cd4bbf9d95a8b7a1b45160.png_pic_center] 要求用户输入 12小时制的时间。输入时间的格式为时:分后跟 A、P、AM或 PM(大小写均可)。数值时间和 AM/PM 之间允许有空白(但不强制要求有空白)。有效输入的示 例如下: 1:15P 1:15PM 1:15p 1:15pm 1:15 P 1:15 PM 1:15 p 1:15 pm 可以假定输入的格式就是上述之一,不需要进行错误判定。 #include<stdio.h> int main(void) { int hour, minute; int input_minutes; char am_pm; printf("Enter a 24-hour time: "); scanf("%d:%d %c", &hour, &minute, &am_pm); if (am_pm == 'A' || am_pm == 'a') { input_minutes = hour * 60 + minute; } else { input_minutes = hour * 60 + minute + 12 * 60; } if (input_minutes < (615) / 2) { printf("Closet departure time is 9:45 PM, arriving at 11:58 PM."); } else if (input_minutes < (8 * 60 + 9 * 60 + 43) / 2) { printf("Closet departure time is 9:43 AM, arriving at 10:16 AM."); } else if (input_minutes < (9 * 60 + 43 + 11 * 60 + 19) / 2) { printf("Closet departure time is 11:19 AM, arriving at 1:31 PM."); } else if (input_minutes < (12 * 60 + 47 + 14 * 60) / 2) { printf("Closet departure time is 12:47 PM, arriving at 3:00 PM."); } else if (input_minutes < (14 * 60 + 15 * 60 + 45) / 2) { printf("Closet departure time is 2:00 PM, arriving at 4:08 PM."); } else if (input_minutes < (15 * 60 + 45 + 19 * 60) / 2) { printf("Closet departure time is 3:45 PM, arriving at 5:55 PM."); } else if (input_minutes < (19 * 60 + 21 * 60 + 45) / 2) { printf("Closet departure time is 7:00 PM, arriving at 9:20 PM."); } else { printf("Closet departure time is 9:45 PM, arriving at 11:58 PM."); } return 0; } ![在这里插入图片描述][6cd0a920cb2341c79b8f3790a711b7b3.png_pic_center] 【9】编写程序,要求用户输入 12 小时制的时间,然后用 24 小时制显示该时间: Enter a 12-hour time: 9:11 PM Equivalent 24-hour time: 21:11 #include<stdio.h> int main(void) { int hour, minute; int input_minutes; char am_pm; printf("Enter a 12-hour time: "); scanf("%d:%d %c", &hour, &minute, &am_pm); if (am_pm == 'A' || am_pm == 'a') { printf("Equivalent 24-hour time: %d:%d", hour, minute); } else { printf("Equivalent 24-hour time: %d:%d", hour + 12, minute); } return 0; } ![在这里插入图片描述][b95aaa9ddb34484890c43f2ec5633bf9.png_pic_center] 【10】编写程序统计句子中元音字母(a、e、i、o、u)的个数: Enter a sentence: And that's the way it is. Your sentence contains 6 vowels. #include <stdio.h> #include <ctype.h> int main(void) { int counter = 0; char c; printf("Enter a sentence: "); while ((c = getchar()) != '\n') { c = toupper(c); if (c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') counter++; } printf("Your sentence contains %d vowels.", counter); return 0; } ![在这里插入图片描述][11954c4224f94565a2672c0baf2a9a1e.png_pic_center] 【11】编写一个程序,要求用户输入英文名和姓,并根据用户的输入先显示姓,其后跟一个逗号,然后显 示名的首字母,最后加一个点: Enter a first and last name: Lloyd Fosdick Fosdick, L. 用户的输入中可能包含空格(名之前、名和姓之间、姓氏之后)。 #include<stdio.h> int main(void) { char fname = ' '; char c; int lname = 0; printf("Enter a first and last name: "); while ((c = getchar()) != '\n') { if (c != ' ' && fname == ' ') fname = c; else if (c == ' ' && lname == 0) lname = 1; else if (c != ' ' && lname == 1) printf("%c", c); } printf(", %c.", fname); return 0; } ![在这里插入图片描述][1efab26872ca49bda0f28f27f1cf7032.png_pic_center] 【12】编写程序对表达式求值: Enter an expression: 1+2.5*3 Value of expression: 10.5 表达式中的操作数是浮点数,运算符是+、-、\*和/。表达式从左向右求值(**所有运算符的优先级都 一样**)。 #include <stdio.h> int main(void) { char operate; float number, result = 0; printf("Enter an expression: "); scanf("%f", &result); while ((operate = getchar()) != '\n') { scanf("%f", &number); if (operate == '+') result += number; else if (operate == '-') result -= number; else if (operate == '*') result *= number; else if (operate == '/') result /= number; } printf("Value of expression: %f\n", result); return 0; } ![在这里插入图片描述][fc0148089ac04226948aaa55b226e013.png_pic_center] 【13】编写程序计算句子的平均词长: Enter a sentence: It was deja vu all over again. Average word length: 3.4 简单起见,程序中把标点符号看作其前面单词的一部分。平均词长显示一个小数位。 #include <stdio.h> int main(void) { int words = 1; int allchars = 0; char c; printf("Enter a sentence: "); while ((c = getchar()) != '\n') { if (c == ' ') words++; else allchars++; } printf("Average word length: %.1f\n", 1.0 * allchars / words); return 0; } ![在这里插入图片描述][ce872d5753314962b926290f585c104b.png_pic_center] 【14】编写程序,用牛顿方法计算正浮点数的平方根: Enter a positive number: 3 Square root: 1.73205 设 x 是用户输入的数。牛顿方法需要先给出 x 平方根的猜测值 y(我们使用 1)。后续的猜测值通过计 算 y 和 x/y 的平均值得到。下表中给出了求解 3 的平方根的过程。 ![在这里插入图片描述][c040f0abe2054cbd90c1294e388c603f.png_pic_center] 注意,y 的值逐渐接近 x 的平方根。为了获得更高的精度,程序中应使用 double 类型的变量代替 float类型的变量。当y的新旧值之差的绝对值小于0.000 01和y的乘积时程序终止。提示:调用fabs 函数求 double 类型数值的绝对值。(为了使用 fabs 函数,需要在程序的开头包含`<math.h>`头。) #include <stdio.h> #include <math.h> int main(void) { double x, newy, y = 1.0; printf("Enter a positive number: "); scanf("%lf", &x); do { newy = (y + x / y) / 2; if (fabs(newy - y) < 0.00001 * y) break; else y = newy; } while (1); printf("Square root: %f\n", y); return 0; } ![在这里插入图片描述][8109fbdc1e2f4b7d81f5208724587565.png_pic_center] 【15】编程计算正整数的阶乘: Enter a positive integer: 6 Factorial of 6: 720 #include <stdio.h> #include <math.h> int main(void) { int n, result = 1; printf("Enter a positive integer: "); scanf("%d", &n); for (int i = 1; i <= n; i++) { result *= i; } printf("Factorial of %d: %d", n, result); return 0; } ![在这里插入图片描述][9c2240e618ff41b0807e40364dcd1060.png_pic_center] (a) 用 short 类型变量存储阶乘的值。为了正确打印出 n 的阶乘,n 的最大值是多少 `short类型通常是16位,因此最大值是32 767,最多只能计算7 的阶乘 = 5040` (b) 用 int 类型变量重复(a)。 `int类型通常是32为,最大值为2147483647,最多只能计算到12的阶乘 = 479001600` © 用 long 类型变量重复(a)。 `long类型通常和int 长度一样` (d) 如果你的编译器支持 long long 类型,用 long long 类型变量重复(a)。 `long long类型最多能够计算20的阶乘` (e) 用 float 类型变量重复(a)。 (f) 用 double 类型变量重复(a)。 `double 最多能计算170的阶乘,其结果是近似值,约为` 7.2574 × 1 0 306 7.2574 \\times 10^\{306\} 7.2574×10306 (g) 用 long double 类型变量重复(a)。 在(e)~(g)这几种情况下,程序会显示阶乘的近似值,不一定是准确值。 [be8f61bea668486fa28c4ab8d1e25a35.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/d5ddc54823e841e08a3b9ffe20aa645f.png [66a2d66a18e243fab9651abb114d2dfd.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/0e70e753063d42cc9b77f63a360608ca.png [ed631c108d5b4541a7c676c98d79cc0d.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/c95be100405842b98f4ef09e854c6da3.png [9f05fcee38ae40c086caaa5d7de93e9e.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/eaee5cfac7ea404e91bff5419c1f8fe4.png [8695909502f142a2af06ac5f7272d237.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/80d011d186f34928b220b2eb0c020038.png [b072aa985c2b49e180c5a32c15893536.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/22ac0e33dfc841cc9b57356dd677c3e5.png [b449dc28ce4048fe82a28f570caf9516.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/8bb66005a8344f26aed2689d38392159.png [9d4b8b9a5530457aa3075313389a1148.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/60b9013c400c49a7a8ea5f98331e5840.png [99be0acf4e91468ea0595834fe28a622.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/7aafb8177fe5458b813db18a529ef2d6.png [bb60e2bbc17b4eec8f7aae63e5c9845e.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/51ec0b9744004d6ab9964c233a0cbeac.png [140162c24c524f5bb0bfc4c63ef16b19.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/e628150124624d03b49ceefe90328214.png [39a7f89e4ae24b178f2f83fbb35f9694.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/a82d910a0a46493a90648c0166e53417.png [36322bcb063a4cd8b793e37d7030e502.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/e020ef94285e45deb1a4847946adf7b2.png [e02b515bc2504a6189a537699871ee0e.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/59a3f3c6ead5457fbda88215ad459abc.png [2d2a1432dabb44bc9152e7bb73b97342.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/de45374cc60042d1bfd9b1c08dbd9dd8.png [ec7cf00886f7407488e520fbd14addbd.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/d7412ae1caec4fef8491c4eb2523323d.png [c65efad885cd4bbf9d95a8b7a1b45160.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/8013cf4c7ea14c93bd0c95a050b9fb09.png [6cd0a920cb2341c79b8f3790a711b7b3.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/55df729747e94c7d877cefbbd67b94e8.png [b95aaa9ddb34484890c43f2ec5633bf9.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/b80dbb87be1c47fdb56010d5f2f018b0.png [11954c4224f94565a2672c0baf2a9a1e.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/3a94cd58761e4327b1de3ee7bc838bc4.png [1efab26872ca49bda0f28f27f1cf7032.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/beb77f60334d48489ad4c3803400395c.png [fc0148089ac04226948aaa55b226e013.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/5b97f1526bd94afb902744e86f50bcdd.png [ce872d5753314962b926290f585c104b.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/43415fc07c3646b6b02ff08e2b866717.png [c040f0abe2054cbd90c1294e388c603f.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/bde4629350ec4d0ab1e0eddad326e39e.png [8109fbdc1e2f4b7d81f5208724587565.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/31f2df6059db4e3dba6694a600402b76.png [9c2240e618ff41b0807e40364dcd1060.png_pic_center]: https://image.dandelioncloud.cn/pgy_files/images/2024/03/22/7d3aabd8506f4449abe8a89d8838a84b.png
相关 【C语言】学习笔记 第2章 C语言基本概念 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第2章 C语言基本概念 编程题 第2章 C语言基本 红太狼/ 2024年03月23日 16:18/ 0 赞/ 47 阅读
相关 【C语言】学习笔记 第9章 函数 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第9章 函数 编程题 第9章 函数 ![在这里 今天药忘吃喽~/ 2024年03月22日 10:19/ 0 赞/ 23 阅读
相关 【C语言】学习笔记 第7章 基本类型 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第7章 基本类型 编程题 第7章 基本类型 ! Bertha 。/ 2024年03月22日 09:15/ 0 赞/ 54 阅读
相关 【C语言】学习笔记 第7章 基本类型 7.6 sizeof运算符 【C语言】学习笔记 文章目录 【C语言】学习笔记 第7章 基本类型 7.6 sizeof运算符 第7 古城微笑少年丶/ 2024年03月22日 09:15/ 0 赞/ 53 阅读
相关 【C语言】学习笔记 第7章 基本类型 7.4 类型转换 【C语言】学习笔记 文章目录 【C语言】学习笔记 第7章 基本类型 7.4 类型转换 小咪咪/ 2024年03月22日 09:15/ 0 赞/ 67 阅读
相关 【C语言】学习笔记 第7章 基本类型 7.5 类型定义 【C语言】学习笔记 文章目录 【C语言】学习笔记 第7章 基本类型 7.5 类型定义 一时失言乱红尘/ 2024年03月22日 09:15/ 0 赞/ 53 阅读
相关 【C语言】学习笔记 第7章 基本类型 7.3 字符类型 【C语言】学习笔记 文章目录 【C语言】学习笔记 第7章 基本类型 7.3 字符类型 素颜马尾好姑娘i/ 2024年03月22日 09:15/ 0 赞/ 52 阅读
相关 【C语言】学习笔记 第7章 基本类型 7.2 浮点类型 【C语言】学习笔记 文章目录 【C语言】学习笔记 第7章 基本类型 7.2 浮点类型 爱被打了一巴掌/ 2024年03月22日 09:15/ 0 赞/ 57 阅读
相关 【C语言】学习笔记 第7章 基本类型 7.1 整数类型 【C语言】学习笔记 文章目录 【C语言】学习笔记 第7章 基本类型 7.1 整数类型 迷南。/ 2024年03月22日 09:15/ 0 赞/ 62 阅读
相关 【C语言】学习笔记 第6章 循环 编程题 【C语言】学习笔记 文章目录 【C语言】学习笔记 第6章 循环 编程题 第6章 循环 ![在这里 左手的ㄟ右手/ 2024年03月22日 08:44/ 0 赞/ 70 阅读
还没有评论,来说两句吧...