谭浩强 C语言程序设计第五版 第六章 习题 答案

您所在的位置:网站首页 第一章汉英翻译概述课后答案 谭浩强 C语言程序设计第五版 第六章 习题 答案

谭浩强 C语言程序设计第五版 第六章 习题 答案

2024-07-11 14:46:28| 来源: 网络整理| 查看: 265

谭浩强 C语言程序设计第五版 第六章 习题 答案 第六章:利用数组处理批量数据 1. 用筛选法求100之内的素数

【答案解析】

素数:约数为1和该数本身的数字称为素数,即质数

筛选法:又称为筛法。先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。(另一种解释是当时的数写在纸草上,每要划去一个数,就把这个数挖去,寻求质数的工作完毕后,这许多小洞就像一个筛子。)

【代码实现】

//用筛选法求100以内的素数 #include int main() { int i, j, k = 0; // 将数组汇总每个元素设置为:1~100 int a[100]; for (i = 0; i if (a[i] != 0 && a[j] != 0) { //把不是素数的都赋值为0 if (a[j] % a[i] == 0) a[j] = 0; } } } printf(" 筛选法求出100以内的素数为:\n"); for (i = 0; i int array[] = {2,8,3,9,5,7,1,4,0,6}; int size = sizeof(array) / sizeof(array[0]); // 输出原数组 printf("排序前数组中数据为:"); for (int i = 0; i // 遍历区间[0, size-i)中元素,如果有元素比maxPos位置元素大,maxPos记录该元素位置 if (array[j] > array[maxPos]) maxPos = j; } // 如果最大元素不在区间末尾时,将最大元素与区间末尾元素交换 if (maxPos != size - i - 1) { int temp = array[maxPos]; array[maxPos] = array[size - i - 1]; array[size - i - 1] = temp; } } // 输出原数组 printf("选择排序后数组中数据为:"); for (int i = 0; i 2,8,3,9,5,7,1,4,0,6}; int size = sizeof(array) / sizeof(array[0]); // 输出原数组 printf("排序前数组中数据为:"); for (int i = 0; i if (array[index] > array[maxPos]) maxPos = index; if (array[index] int temp = array[minPos]; array[minPos] = array[begin]; array[begin] = temp; } // 最大与最小元素已经在区间的起始和末尾的位置, // 因此begin往后移动,end往前移动 begin++; end--; } // 输出原数组 printf("选择排序后数组中数据为:"); for (int i = 0; i for (int j = 0; j 1,2,3,4,5,6,7,8,9}; printf("请输入一个整数:"); scanf("%d", &num); printf("原数组序列为:\n"); for (int i = 0; i = 0 && num int array[5] = {8,6,5,4,1}; int begin = 0, end = 4; printf("逆序之前数组为:"); for (int i = 0; i int array[10][10]; for (int i = 0; i // 对角线和第0列上全部为1 if (i == j || 0 == j) array[i][j] = 1; else array[i][j] = array[i - 1][j] + array[i - 1][j - 1]; } } // 打印杨慧三角的前10行 for (int i = 0; i printf("%5d", array[i][j]); } printf("\n"); } return 0; }

【结果截屏】

杨辉三角

7. 输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如: 8 1 6 3 5 7 4 9 2

要求输出1~ n 2 n^2 n2的自然数构成的魔方阵。

【答案解析】

| 17 | 24 | 1 | 8 | 15 | -------------------------- | 23 | 5 | 7 | 14 | 16 | -------------------------- | 4 | 6 | 13 | 20 | 22 | -------------------------- | 10 | 12 | 19 | 21 | 3 | -------------------------- | 11 | 18 | 25 | 2 | 9 |

仔细观察上述矩阵,可以看到以下规律:

魔方阵的生成方法为:在第0行中间置1,对从2开始的其余 n 2 − 1 n^2-1 n2−1个数依次按下列规则存放:

将1放在第1行的中间一列。从2开始直到n*n止,各数依次按此规律存放:每一个数存放的行比前一个数的行数减1,列数加1。如果上一行的行数为1,则下一个数的行数为n(指最下一行)。当上一个数的列数为n时,下一个数的列数应该为1。如果按上面规律确定的位置有数,或者上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

【代码实现】

#include int main() { int a[15][15], n, i, j, k; while (1) { printf("请输入n(1~15):"); scanf("%d", &n); if (n != 0 && n for (j = 1; j i += 2; j -= 1; } else if (i j = 1; } if (a[i][j] == 0) { a[i][j] = k; } else { i += 2; j -= 1; a[i][j] = k; } } for (i = 1; i int max, min, rowindex, colindex, flag = 0; int array[M][N]; printf("请输入%d行%d列的数组:\n", M, N); for (int i = 0; i // 找到i行上最大的元素,记录该元素在列号colindex max = array[i][0]; for (int j = 0; j max = array[i][j]; colindex = j; } } // 找max所在列colindex上最小的元素,并记录其所在的行 min = array[0][colindex]; for (int j = 0; j min = array[j][colindex]; rowindex = j; } } // 如果最小元素与最小元素相同,并且最小元素也在第i行,则为鞍点 if (max == min && i == rowindex) { flag = 1; printf("鞍点为:%d行%d列的元素%d", rowindex, colindex, max); break; } } if (0 == flag) printf("没有鞍点"); return 0; }

【结果截屏】

在这里插入图片描述

9. 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则输出"无此数"。

【答案解析】

二分查找是一个非常高效简单的查找算法,笔试和面试中非常喜欢考察。

折半查找又叫二分查找,查找的前提是序列中元素必须有序,假设区间使用[left, right)标记,待查找元素为key,具体查找的方式如下:当区间[left, right)有效时循环进行一下操作

找到[left, right)区间中间位置如果key等于中间位置元素,则找到,返回该元素在数组中的下标如果key小于中间位置元素,到数组的左半侧继续二分查找如果key大于中间位置元素,到数组的右半侧继续二分查找

如果循环结束时还没有找到,则不存在该元素。

【代码实现】

#include int main() { int array[15] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14}; int left = 0; int right = sizeof(array) / sizeof(array[0]); int key = 0; printf("请输入要查找的数字: "); scanf("%d", &key); // 二分查找 while (left printf("%d\n", mid); break; } else if (key left = mid + 1; } } if (left >= right) printf("无此数\n"); return 0; }

【结果截屏】

假设数组中元素为:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

C语言程序设计第五版谭浩强第五版习题答案第9题

10. 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。

【答案解析】

获取文章中的3行文本,并对每行文本进行以下操作

定义保存结果变量:upp、low、digit、space、other遍历每行文本中的字符如果该字符ch:ch >= ‘a’ && ch = ‘A’ && ch = ‘0’ && ch


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭