C程序设计(第5版)谭浩强习题解答 第6章 利用数组处理批量数据

C程序设计(第5版)谭浩强习题解答

第6章 利用数组处理批量数据

1.用筛选法求100之内的素数

#include <stdio.h>
#include <math.h>
int main()
{int i, j, n, a[101];for (i = 1; i <= 100; i++)a[i] = i;a[1] = 0;for (i = 2; i < sqrt(100); i++)for (j = i + 1; j <= 100; j++){if (a[i] != 0 && a[j] != 0)if (a[j] % a[i] == 0)a[j] = 0;}printf("\n");for (i = 2, n = 0; i <= 100; i++){if (a[i] != 0){printf("%5d", a[i]);n++;}if (n == 10){printf("\n");n = 0;}}printf("\n");return 0;
}

2. 用选择法对10个整数排序

#include <stdio.h>
int main()
{int i, j, min, temp, a[11];printf("enter data:\n");for (i = 1; i <= 10; i++){printf("a[%d]=", i);scanf("%d", &a[i]);}printf("\n");printf("The orginal numbers:\n");for (i = 1; i <= 10; i++)printf("%5d", a[i]);printf("\n");for (i = 1; i <= 9; i++){min = i;for (j = i + 1; j <= 10; j++)if (a[min] > a[j]) min = j;temp = a[i];a[i] = a[min];a[min] = temp;}printf("\nThe sorted numbers:\n");for (i = 1; i <= 10; i++)printf("%5d", a[i]);printf("\n");return 0;
}

3. 求一个3 X 3的整形矩阵对角线元素之和

#include <stdio.h>
int main()
{int a[3][3], sum = 0;int i, j;printf("enter data:\n");for (i = 0; i < 3; i++)for (j = 0; j < 3; j++)scanf("%3d", &a[i][j]);for (i = 0; i < 3; i++)sum = sum + a[i][i];printf("sum=%6d\n", sum);return 0;
}

4. 有一个已经排好序的数组,要求输入一个数后,按原来顺序的规律将它插入数组中

#include <stdio.h>
int main()
{int a[11] = { 1,4,6,9,13,16,19,28,40,100 };int temp1, temp2, number, end, i, j;printf("array a:\n");for (i = 0; i < 10; i++)printf("%5d", a[i]);printf("\n");printf("insert data:");scanf("%d", &number);end = a[9];if (number > end)a[10] = number;else{for (i = 0; i < 10; i++){if (a[i] > number){temp1 = a[i];a[i] = number;for (j = i + 1; j < 11; j++){temp2 = a[j];a[j] = temp1;temp1 = temp2;}break;}}}printf("Now array a:\n");for (i = 0; i < 11; i++)printf("%5d", a[i]);printf("\n");return 0;
}

5. 将一个数组中的值按逆序重新存放。例如:原来顺序为,6,5,4,1。要求改为1,4,5,6,8。

#include <stdio.h>
#define N 5
int main()
{int a[N], i, temp;printf("enter array a:\n");for (i = 0; i < N; i++)scanf("%d", &a[i]);printf("array a:\n");for (i = 0; i < N; i++)printf("%4d", a[i]);for (i = 0; i < N / 2; i++)            //循环的作用是将对称的元素的值互换{temp = a[i];a[i] = a[N - i - 1];a[N - i - 1] = temp;}printf("\nNow,array a:\n");for (i = 0; i < N; i++)printf("%4d", a[i]);printf("\n");return 0;
}

6. 输出一下的杨慧三角(要求输出10行)

                                1   1   11   2   11   3   3   11   4   6   4   11   5  10  10   5   1……
#include <stdio.h>
#define N  10
int main()
{int i, j, a[N][N];for (i = 0; i < N; i++){a[i][i] = 1;a[i][0] = 1;}for (i = 2; i < N; i++)for (j = 1; j <= i - 1; j++)a[i][j] = a[i - 1][j - 1] + a[i - 1][j];for (i = 0; i < N; i++){for (j = 0; j <= i; j++)printf("%6d", a[i][j]);printf("\n");}printf("\n");return 0;
}

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

                                8   1   63   5   74   9   2
要求输出1~n²的自然数构成的魔方阵。
#include <stdio.h>
int main()
{int a[15][15], i, j, k, p, n;p = 1;while (p == 1){printf("enter n(n=1--15):");scanf("%d", &n);if ((n != 0) && (n <= 15) && (n % 2 != 0))p = 0;}for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)a[i][j] = 0;j = n / 2 + 1;a[1][j] = 1;for (k = 2; k <= n * n; k++){i = i - 1;j = j + 1;if ((i < 1) && (j > n)){i = i + 2;j = j - 1;}else{if (i < 1) i = n;if (j > n) j = 1;}if (a[i][j] == 0)a[i][j] = k;else{i = i + 2;j = j - 1;a[i][j] = k;}}for (i = 1; i <= n; i++){for (j = 1; j <= n; j++)printf("%5d", a[i][j]);printf("\n");}return 0;
}

8. 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。

#include <stdio.h>
#define N 4
#define M 5                   //数组为4行5列 
int main()
{int i, j, k, a[N][M], max, maxj, flag;printf("please input matrix:\n");for (i = 0; i < N; i++)           //输入数组 for (j = 0; j < M; j++)scanf("%d", &a[i][j]);for (i = 0; i < N; i++){max = a[i][0];               //开始时假设a[i][0]最大 maxj = 0;                    //将列号0赋给maxj保存 for (j = 0; j < M; j++)         //找出第i行中的最大数 if (a[i][j] > max){max = a[i][j];         //将本行的最大数存放在max中 maxj = j;              //将最大数所在的列号存放在maxj中 }flag = 1;                   //先假设是鞍点,以flag为1代表 for (k = 0; k < N; k++)if (max > a[k][maxj])     //将最大数和其同列元素相比 {flag = 0;             //如果max不是同列最小,表示不是鞍点令flag1为0 continue;}if (flag)                  //如果flag1为1表示是鞍点 {printf("a[%d][%d]=%d\n", i, maxj, max);   //输出鞍点的值和所在行列号 break;}}if (!flag)	                   //如果flag为0表示鞍点不存在 printf("It is not exist!\n");return 0;
}

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

#include <stdio.h>
#define  N 15
int main()
{int i, number, top, bott, mid, loca, a[N], flag = 1, sign;char c;printf("enter data:\n");scanf("%d", &a[0]);i = 1;while (i < N){scanf("%d", &a[i]);if (a[i] >= a[i - 1])i++;elseprintf("enter this data again:\n");}printf("\n");for (i = 0; i < N; i++)printf("%5d", a[i]);printf("\n");while (flag){printf("input number to look for:");scanf("%d", &number);sign = 0;top = 0;            //top是查找区间的起始位置bott = N - 1;         //bott是查找区间的最末位置if ((number < a[0]) || (number > a[N - 1]))  //要查的数不在查找区间内loca = -1;        //表示找不到while ((!sign) && (top <= bott)){mid = (bott + top) / 2;if (number == a[mid]){loca = mid;printf("Has found %d, its position is %d\n", number, loca + 1);sign = 1;}else if (number < a[mid])bott = mid - 1;elsetop = mid + 1;}if (!sign || loca == -1)printf("cannot find %d.\n", number);;printf("continu or not(Y/N)?");scanf(" %c", &c);if (c == 'N' || c == 'n')flag = 0;}return 0;
}

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

#include <stdio.h>
int main()
{int i, j, upp, low, dig, spa, oth;char text[3][80];upp = low = dig = spa = oth = 0;for (i = 0; i < 3; i++){printf("please input line %d:\n", i + 1);gets(text[i]);for (j = 0; j < 80 && text[i][j] != '\0'; j++){if (text[i][j] >= 'A'&& text[i][j] <= 'Z')upp++;else if (text[i][j] >= 'a' && text[i][j] <= 'z')low++;else if (text[i][j] >= '0' && text[i][j] <= '9')dig++;else if (text[i][j] == ' ')spa++;elseoth++;}}printf("\nupper case: %d\n", upp);printf("lower case: %d\n", low);printf("digit     : %d\n", dig);printf("space     : %d\n", spa);printf("other     : %d\n", oth);return 0;
}

11. 输出一下图案:

                                * * * ** * * ** * * ** * * ** * * *
#include <stdio.h>
int main()
{char a[5] = { '*','*','*','*','*' };int i, j, k;char space = ' ';for (i = 0; i < 5; i++){printf("\n");printf("    ");for (j = 1; j <= i; j++)printf("%c", space);for (k = 0; k < 5; k++)printf("%c", a[k]);}printf("\n");return 0;
}

12. 有一行电文,以按下面规律译成密码:

                                A--->Z   a--->zB--->Y   b--->YC--->X   c--->x……
即第1个字母编程第26个字母,第i个字母编程第(26-i+1)个字母,非字母字符不变,要求编程序将密码译回原文,并输出密码和原文。
//6.12.1
#include <stdio.h>
int main()
{int j, n;char ch[80], tran[80];printf("input cipher code:");gets(ch);printf("\ncipher code  :%s", ch);j = 0;while (ch[j] != '\0'){if ((ch[j] >= 'A') && (ch[j] <= 'Z'))tran[j] = 155 - ch[j];else if ((ch[j] >= 'a') && (ch[j] <= 'z'))tran[j] = 219 - ch[j];elsetran[j] = ch[j];j++;}n = j;printf("\noriginal text:");for (j = 0; j < n; j++)putchar(tran[j]);printf("\n");return 0;
}//6.12.2
#include <stdio.h>
int main()
{int j, n;char ch[80];printf("input cipher code:\n");gets(ch);printf("\ncipher code:%s\n", ch);j = 0;while (ch[j] != '\0'){if ((ch[j] >= 'A') && (ch[j] <= 'Z'))ch[j] = 155 - ch[j];else if ((ch[j] >= 'a') && (ch[j] <= 'z'))ch[j] = 219 - ch[j];elsech[j] = ch[j];j++;}n = j;printf("original text:");for (j = 0; j < n; j++)putchar(ch[j]);printf("\n");return 0;
}

13. 编一程序,将两个字符串连接起来,不要用strcat函数

#include <stdio.h>
int main()
{char s1[80], s2[40];int i = 0, j = 0;printf("input string1:");scanf("%s", s1);printf("input string2:");scanf("%s", s2);while (s1[i] != '\0')i++;while (s2[j] != '\0')s1[i++] = s2[j++];s1[i] = '\0';printf("\nThe new string is:%s\n", s1);return 0;
}

14. 编写一个程序,将连个字符串s1和s2比较,如果s1 > s2,输出一个整数;若s1 = s2,输出0;若s1 < s2,输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相对应字符的ASCII码的差值。例如,“A"和“C”相比,由于"A” < “C”,应输出负数,同时由于‘A’与‘C’的ASCII码差值为2,因此应输出"-2"。同理:“And”和"Aid"相比较,根据第2个字符比较结果,“n"比"i"大5,因此应输出"5”。

#include <stdio.h>
int main()
{int i, resu;char s1[100], s2[100];printf("input string1:");gets(s1);printf("\ninput string2:");gets(s2);i = 0;while ((s1[i] == s2[i]) && (s1[i] != '\0'))i++;if (s1[i] == '\0' && s2[i] == '\0')resu = 0;elseresu = s1[i] - s2[i];printf("\nresult:%d.\n", resu);return 0;
}

15. 编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strcpy函数。复制时,‘\0’也要赋值过去。’\0’之后的字符不复制。

#include <stdio.h>
#include <string.h>
int main()
{char s1[80], s2[80];int i;printf("input s2:");scanf("%s", s2);for (i = 0; i <= strlen(s2); i++)s1[i] = s2[i];printf("s1:%s\n", s1);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/661028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

笔记--扩展欧几里得算法

AcWing.877.欧几里得算法 给定 n n n 对正整数 a a ai, b b bi&#xff0c;对于每对数&#xff0c;求出一组 x x xi, y y yi&#xff0c;使其满足 a a ai x x xi b b bi y y yi g c d ( a gcd(a gcd(ai , b ,b ,bi ) ) )。 输入格式 第一行包含整数 n n n。 接下来 …

【Spring框架】@Cacheable注解:缓存最佳实践

在Java开发中&#xff0c;性能优化是一个永恒的话题。对于使用Spring框架的应用程序来说&#xff0c;Cacheable 注解提供了一种简单有效的方式来提升性能&#xff0c;特别是对于那些计算成本高或数据变化不频繁的操作。本文将深入探讨 Cacheable 的使用方法和注意事项&#xff…

在Vue 3中,理解使用defineEmits函数来定义组件的事件。

在Vue 3中&#xff0c;可以使用defineEmits函数来定义组件的事件。defineEmits函数接受一个对象作为参数&#xff0c;该对象的键是事件名&#xff0c;值是一个回调函数或一个函数数组。这些回调函数将被组件中的$emit方法触发。 以下是一个示例&#xff1a; import { defineC…

C#使用OpenCvSharp4库中5个基础函数-灰度化、高斯模糊、Canny边缘检测、膨胀、腐蚀

C#使用OpenCvSharp4库中5个基础函数-灰度化、高斯模糊、Canny边缘检测、膨胀、腐蚀 使用OpenCV可以对彩色原始图像进行基本的处理&#xff0c;涉及到5个常用的处理&#xff1a; 灰度化 模糊处理 Canny边缘检测 膨胀 腐蚀 1、测试图像lena.jpg 本例中我们采用数字图像处…

Java玩转《啊哈算法》解密QQ号之队列

行有不得&#xff0c;反求诸己 文章目录 开头代码地址引子案例分析代码 队列封装升级演示 开头 各位好&#xff01;本人在看《啊哈算法》&#xff0c;写的确实不错。 但略微遗憾的是&#xff0c;书籍示例代码是c语言&#xff0c;不是本人常用的Java。 那就弥补遗憾&#xff…

【C语言】va_list(可变参数处理)

C 语言中的 va_list 类型允许函数接受可变数量的参数&#xff0c;这在编写需要处理不定数量参数的函数时非常有用。va_list 类型是在 stdarg.h 头文件中定义的&#xff0c;它允许函数处理可变数量的参数。下面我们将详细介绍 va_list 的用法以及实际应用示例。 一、va_list的用…

【力扣刷题练习】415. 字符串相加

题目描述&#xff1a; 给定两个字符串形式的非负整数 num1 和num2 &#xff0c;计算它们的和并同样以字符串形式返回。 你不能使用任何內建的用于处理大整数的库&#xff08;比如 BigInteger&#xff09;&#xff0c; 也不能直接将输入的字符串转换为整数形式。 题目解答&am…

分布式搜索引擎_学习笔记_3

分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合&#xff08;aggregations&#xff09;**可以让我们极其方便的实现对数据的统计、分析、运算。例如&#xff1a; 什么品牌的手机最受欢迎&#xff1f;这些手机的平均价格、最高价格、最低价格&#xff1f;这些手机每月的销售…

Postgresql使用update

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 解决问题一、关联表更新1.关联一张表2.关联多张表 二、根据状态更新为不同的值 解决问题 通过多张关联表更新主表的字段&#xff0c;根据状态更新为不同的值。 一、…

2670--------找出不同元素数目差数组

题目&#xff1a; 给你一个下标从 0 开始的数组 nums &#xff0c;数组长度为 n 。 nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示&#xff0c;其中 diff[i] 等于前缀 nums[0, ..., i] 中不同元素的数目 减去 后缀 nums[i 1, ..., n - 1] 中不同元素的数…

matlab中的图窗属性和坐标轴的属性

图窗的Position和Outerposition Position 指定窗口的尺寸和窗口在屏幕中的位置。 Outerposition 指定窗口外轮廓的大小和位置。 两者都是用一个4维向量来定义&#xff0c;格式为[左 底 宽 高]。 可通过set函数修改Position和Outerposition&#xff0c;如下&#xff1a;在屏幕左…

跨平台销售策略:通过API同步不同市场的商品数据

在数字化时代&#xff0c;零售商和品牌经常需要在不同的在线市场上展示和销售商品。为了保持竞争力并确保一致的客户体验&#xff0c;商家必须确保其商品信息在所有渠道上保持同步和准确。这种需求催生了跨平台销售策略&#xff0c;其中一个关键组成部分就是利用应用程序编程接…

spice-gtk注册glib错误信息

首先生成spice统一的错误域 #define SPICE_CLIENT_ERROR spice_client_error_quark()GQuark spice_client_error_quark(void) {return g_quark_from_static_string("spice-client-error-quark"); } 方法1&#xff1a;通过g_set_error()函数 g_set_error(err, SPICE_C…

color - 让你的输出带点颜色

color color 是一个可以让你输出带颜色文本的库。 安装 go get github.com/fatih/color示例 输出到控制台 // 这会直接输出到控制台 color.Cyan("Prints text in cyan.")// 每个调用末尾会自动加上换行 color.Blue("Prints %s in blue.", "text&…

VMware vCenter告警:vSphere UI运行状况警报

vSphere UI运行状况警报 不会详细显示告警的具体内容&#xff0c;需要我们自己进一步确认告警原因。 vSphere UI运行状况警报是一种监控工具&#xff0c;用于检测vSphere环境中的潜在问题。当警报触发时&#xff0c;通常表示系统遇到了影响性能或可用性的问题。解决vSphere UI…

软件测试之软件缺陷管理

什么是软件缺陷 标准的定义&#xff1a;从产品内部看&#xff0c;缺陷是软件产品开发或维护过程中存在的错误、毛病等各种问题&#xff1b;从产品外部看&#xff0c;缺陷是系统所需要实现的某种功能的失效或违背 软件缺陷的生命周期 一个缺陷的正常生命周期是 新建&#xff…

【Java】Java的对象参数踩坑总结

文章目录 前言失败的修改成功的修改原理分析基本类型参数对象引用参数 举一反三&#xff1a;不修改对象参数怎么写&#xff1f; 前言 今天写代码的时候&#xff0c;犯了一个很基础很低级的错误。实在惭愧&#xff0c;在此花点顺手记录一下&#xff0c;养成习惯。 需求是需要把…

如何分辨坏信息?

每当有社会热点&#xff0c;大家也许都会遇到一个困扰&#xff1a; 铺天盖地的信息&#xff0c;实在是太多了。究竟哪一些值得信任&#xff0c;哪些不值得信任&#xff1f;哪些可以接受&#xff0c;哪些最好保持怀疑&#xff1f; 我想用这篇文章&#xff0c;彻底把这个问题讲清…

CSS定位

定位的组成&#xff1a; 这个属性只有当position属性设置为absolute、fixed、relative时才有效。而且在position属性取值不同时&#xff0c;它们的含义也不同。left和right属性值除了可以设置为绝对的像素数外&#xff0c;还可以设置百分数。 定位模式&#xff1a; 静态定位st…

易语言系列学习1

通过本文章你会学习到 如果 如果真 获取编辑框内容 关闭本程序 监听按键让它等价于点击某个按钮 运算&#xff1a;或 且 非&#xff08;注意中间要有一个空格&#xff0c;否则会报错&#xff09; 效果 .版本 2.程序集 窗口程序集_启动窗口.子程序 _按钮2_被单击. 如果真 (编…