《C程序设计》第六章练习答案

news/2025/2/8 6:20:22/

【例6.1】对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。

#include <stdio.h>
int main()
{int i, a[10];for (i = 0; i <= 9; i++){a[i] = i;}for (i = 9; i >= 0; i--){printf("%d ", a[i]);}printf("\n");return 0;
}

【例6.2】用数组来处理求Fibonacci数列问题。

#include <stdio.h>
int main()
{int i;int f[20] = { 1,1 };for (i = 2; i < 20; i++){f[i] = f[i - 2] + f[i - 1];}for (i = 0; i < 20; i++){if (i % 5 == 0)printf("\n");printf("%12d", f[i]);}printf("\n");return 0;
}

【例6.3】有10个地区的面积,要求对它们按由小到大的顺序排序。

#include <stdio.h>
int main()
{int a[10];int i, j, t;printf("input 10 numbers:\n");for (i = 0; i < 10; i++)scanf_s("%d", &a[i]);printf("\n");for (j = 0; j < 9; j++){for (i = 0; i < 9 - j; i++){if (a[i] > a[i + 1]){t = a[i];a[i] = a[i + 1];a[i + 1] = t;}}}printf("the sorted numbers:\n");for (i = 0; i < 10; i++){printf("%d ", a[i]);}printf("\n");return 0;
}

【例6.4】将一个二维数组行和列的元素互换,存到另一个二维数组中。例如:

  a = [ 1 2 3                 b = [ 1 4

           4 5 6 ]                       2 5

                                            3 6 ]

#include <stdio.h>
int main()
{int a[2][3] = { {1,2,3},{4,5,6} };int b[3][2], i, j;printf("array a:\n");for (i = 0; i <= 1; i++){for (j = 0; j <= 2; j++){printf("%5d", a[i][j]);b[j][i] = a[i][j];}printf("\n");}printf("array b:\n");for (i = 0; i <= 2; i++){for (j = 0; j <= 1; j++){printf("%5d", b[i][j]);}printf("\n");}
}

【例6.5】 有一个3X4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。

#include <stdio.h>
int main()
{int i, j, row = 0, column = 0, max;int a[3][4] = { {1,2,3,4},{9,8,7,6},{-10,10,-5,2} };max = a[0][0];for (i = 0; i <= 2; i++){for (j = 0; j <= 3; j++){if (a[i][j] > max){max = a[i][j];row = i;column = j;}}}printf("max=%d\nrow=%d\ncolumn=%d\n",max,row,column);return 0;
}

【例6.6】输出一个已知的字符串。

#include <stdio.h>
int main()
{char c[15] = {'I',' ','a','m',' ','s','t','u','d','e','n','t','.'};int i;for (i = 0; i < 15; i++){printf("%c", c[i]);}printf("\n");return 0;
}

【例6.7】输出一个菱形图。

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

【例6.8】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。

#include <stdio.h>
int main()
{char string[81];int i, num = 0, word = 0;char c;gets_s(string);for (i = 0; (c = string[i]) != '\0'; i++){if (c == ' ')word = 0;else if (word == 0){word = 1;num++;}}printf("There are %d words in this line.\n", num);return 0;
}

【例6.9】有3个字符串,要求找出其中最大值。

#include <stdio.h>
#include <string.h>
int main()
{char str[3][20];char string[20];int i;for (i = 0; i < 3; i++)gets_s(str[i]);if (strcmp(str[0], str[1]) > 0)strcpy_s(string, str[0]);elsestrcpy_s(string, str[1]);if (strcmp(str[2], string) > 0)strcpy_s(string, str[2]);printf("\nthe largest string is:\n%s\n",string);return 0;
}

习题

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(j = 2, n = 0; j <= 100; j++){if (a[j] != 0) {printf("%5d", a[j]);n++;}if (n == 10){printf("\n");n = 0;}}printf("\0");return 0;
}

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

#include <stdio.h>
void selectionSort(int arr[], int n)
{int i, j, min_idx, temp;for (i = 0; i < n - 1; i++){min_idx = i;for (j = i + 1; j < n; j++){if (arr[j] < arr[min_idx]){min_idx = j;}}if (min_idx != i){temp = arr[i];arr[i] = arr[min_idx];arr[min_idx] = temp;}}
}
void printArrsy(int arr[], int n)
{int i;for (i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n");
}
int main()
{int arr[10];int i;printf("please input 10 numbers:");for (i = 0; i < 10; i++){scanf_s("%d", &arr[i]);}selectionSort(arr, 10);printf("array after sort:");printArrsy(arr, 10);return 0;
}

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

#include <stdio.h>
int main()
{int matrix[3][3] = {{1,2,3},{4,5,6},{7,8,9}};int diagonalSum = 0;for (int i = 0; i < 3; i++){diagonalSum += matrix[i][i];}printf("3X3 diagonalSum is: %d\n", diagonalSum);return 0;
}

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

#include <stdio.h>
void insertIntoSortedArray(int arr[], int* n, int num)
{int i;int isAscending = (arr[0] <= arr[*n -1]);if (isAscending){for (i = *n - 1; (i >= 0 && arr[i] > num); i--){arr[i + 1] = arr[i];}}else{for (i = *n - 1; (i >= 0 && arr[i] < num); i--){arr[i + 1] = arr[i];}}arr[i + 1] = num;(*n)++;
}
void printArray(int arr[], int n)
{for (int i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n");
}
int main()
{int arr[100] = {1, 3, 5, 7, 9};int n = 5;int num;printf("please input number: ");scanf_s("%d", &num);insertIntoSortedArray(arr, &n, num);printf("array after sort is: ");printArray(arr, n);return 0;
}

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

#include <stdio.h>
void reverseArray(int arr[], int n)
{int start = 0;int end = n - 1;int temp;while (start < end){temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}
}
void printArray(int arr[], int n)
{for (int i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n");
}
int main()
{int arr[] = { 8, 6, 5, 4, 1 };int n = sizeof(arr) / sizeof(arr[0]);printf("initial array is:");printArray(arr, n);reverseArray(arr, n);printf("array after sort:");printArray(arr, n);
}

6. 输出以下的杨辉三角形(要求输出10行)。

1

1        1

1        2        1

1        3        3        1

1        4        6        4        1

1        5        10        10        5        1

#include <stdio.h>
#define N 10
int main()
{int triangle[N][N];for (int i = 0; i < N; i++){triangle[i][0] = 1;triangle[i][i] = 1;for (int j = 1; j < i; j++){triangle[i][j] = triangle[i - 1][j - 1] + triangle[i - 1][j];}}for (int i = 0; i < N; i++){for (int j = 0; j <= i; j++){printf("%d ", triangle[i][j]);}printf("\n");}
}

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

8        1        6

3        5        7

4        9        2

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


http://www.ppmy.cn/news/1570257.html

相关文章

Windows Docker笔记-制作、加载镜像

引言 在文章《Windows Docker笔记-在容器中运行项目》中&#xff0c;已经在容器中运行了项目。而且在这个容器中&#xff0c;已经调试好了项目运行的环境。 使用docker&#xff0c;就是为了在项目发布到生产环境时&#xff0c;不用再去安装项目运行的环境&#xff0c;直接丢给…

【免费】2011-2020年各省互联网接入端口数数据

2011-2020年各省互联网接入端口数数据 1、时间&#xff1a;2011-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;地区名称、年份、互联网宽带接入端口数(万个) 4、范围&#xff1a;31省 5、指标说明&#xff1a;互联网接入端口数通常指的是用于连接和…

数据分析师使用Kutools for Excel 插件

数据分析师使用Kutools for Excel 插件 Kutools for Excel 是一款功能强大的 Excel 插件&#xff0c;旨在提高 Excel 用户的工作效率&#xff0c;简化复杂的操作。它提供了超过 300 个增强功能&#xff0c;帮助用户快速完成数据管理、格式化、排序、分析等任务&#xff0c;特别…

MySQL实战-解决方案

1. MySQL 主从集群同步延迟问题的解决方案 在主从复制架构中&#xff0c;主库执行写操作后&#xff0c;将更新事件写入 Binlog&#xff0c;从库通过 I/O 线程将 Binlog 数据同步到本地的 Relay Log&#xff0c;再由 SQL 线程解析并执行&#xff0c;从而保持数据一致性。然而&a…

【react】react+umi4

目录 环境信息 创建项目 环境信息 开发环境 Node:18 npm 10&#xff08;9也可以&#xff09; cnpm 如果需要安装环境或者切换node版本可以查看 node安装和配置 创建项目 官网也有相关的教程 umi.js 使用 npx create-umilatest在项目目录创建项目 npx creat…

【SQL server】关于SQL server彻底的卸载删除。

1.未彻底卸载删除SQL Server会出现的问题 如果没有彻底删除之前的SQL server&#xff0c;就可能会出现这个 当要安装新的实例的时候因为之前安装过sql server没有删除干净而导致下图问题&#xff0c;说实例名已经存在。 2.首先要先关闭服务 “开始R”可以快速进入运行&#…

MYSQL索引与视图

一、新建数据库 mysql> create database mydb15_indexstu; mysql> use mydb15_indexstu; 二、新建表 &#xff08;1&#xff09;学生表Student mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-…

【AcWing】蓝桥杯辅导课-二分与前缀和

目录 二分 数的范围 数的三次方跟 机器人跳跃问题 四平方和 分巧克力 前缀和 前缀和 子矩阵的和 K倍区间 激光炸弹 二分 数的范围 789. 数的范围 - AcWing题库 #include<iostream> using namespace std;const int N 1e5 10;int n, q, k, a[N];int main()…