#include <stdio.h> #include <string.h> #define ROWS 5 #define COLUMNS 20 /* @Filename: ex603.c @Author: Ju Chengdong @Version: 1.0 @Date: 2021-03-18 @Description: Sort Words @Features: 基于字符数组指针(行指针)实现 */ /* * 函数名称:assign * 函数功能:通过键盘输入为多个一维字符数组(字串)赋值 * 形式参数:arr为一维字符数组指针(行指针);rows为int型,单词字串个数 * 返 回 值:无 */ void assign(char (*arr)[COLUMNS], int rows){ // 请编码实现assign函数
时间: 2023-06-19 15:09:01 浏览: 141
void assign(char (*arr)[COLUMNS], int rows){
printf("Please enter %d words:\n", rows);
for(int i=0; i<rows; i++){
scanf("%s", arr[i]);
}
}
// 注意:这里是二维字符数组,所以arr的类型为char (*)[COLUMNS],不是char**。
相关问题
/* * 函数名称:assign * 函数功能:通过键盘输入为多个一维字符数组(字串)赋值 * 形式参数:arr为一维字符数组指针(行指针);rows为int型,单词字串个数 * 返 回 值:无 */ void assign(char (*arr)[COLUMNS], int rows){ // 请编码实现assign函数 } /* * 函数名称:show * 函数功能:输出显示所有单词(字串) * 形式参数:arr为一维字符数组指针(行指针);rows为int型,单词字串个数 * 返 回 值:无 */ void show(char (*arr)[COLUMNS], int rows){ // 请编码实现show函数 } /* * 函数名称:sort * 函数功能:对多个一维字符数组(字串)进行排序 * 形式参数:arr为一维字符数组指针(行指针);rows为int型,单词字串个数 * 返 回 值:无 */ void sort(char(*arr)[COLUMNS], int rows){ // 请编码实现sort函数 } int main(void){ //ch为二维字符数组,包含ROWS个单词,每个单词最多COLUMNS个字母 char ch[ROWS][COLUMNS]; memset(ch,0,sizeof(ch)); //p是一个指向字符数组的指针,称为行指针,请参见教材Page189 //必须给p指定长度,否则编译不报错,运行也不报错,但会不正常 //p与ch等价,因此既可引用p,也可引用ch char (*p)[COLUMNS] = ch; //从键盘输入ROWS个单词,为ch赋值 assign(p, ROWS); //对ch中的ROWS个单词进行排序 sort(p, ROWS); //输出显示单词排序结果 show(p, ROWS); return 0; }
这是一个关于多个一维字符数组的排序和显示的程序。主函数定义了一个二维字符数组 ch,包含 ROWS 个单词,每个单词最多 COLUMNS 个字母。然后定义一个字符数组指针 p,指向 ch。程序中有三个函数:
1. assign:通过键盘输入为多个一维字符数组(字串)赋值。
2. show:输出显示所有单词(字串)。
3. sort:对多个一维字符数组(字串)进行排序。
需要补全这三个函数的实现。具体实现如下:
```c
#include <stdio.h>
#include <string.h>
#define ROWS 10
#define COLUMNS 20
void assign(char (*arr)[COLUMNS], int rows){
printf("请输入 %d 个单词:\n", rows);
for(int i=0; i<rows; i++){
scanf("%s", arr[i]);
}
}
void show(char (*arr)[COLUMNS], int rows){
printf("单词排序结果为:\n");
for(int i=0; i<rows; i++){
printf("%s\n", arr[i]);
}
}
void sort(char(*arr)[COLUMNS], int rows){
char temp[COLUMNS];
for(int i=0; i<rows-1; i++){
for(int j=0; j<rows-1-i; j++){
if(strcmp(arr[j], arr[j+1]) > 0){
strcpy(temp, arr[j]);
strcpy(arr[j], arr[j+1]);
strcpy(arr[j+1], temp);
}
}
}
}
int main(void){
//ch为二维字符数组,包含ROWS个单词,每个单词最多COLUMNS个字母
char ch[ROWS][COLUMNS];
memset(ch,0,sizeof(ch));
//p是一个指向字符数组的指针,称为行指针,请参见教材Page189
//必须给p指定长度,否则编译不报错,运行也不报错,但会不正常
//p与ch等价,因此既可引用p,也可引用ch
char (*p)[COLUMNS] = ch;
//从键盘输入ROWS个单词,为ch赋值
assign(p, ROWS);
//对ch中的ROWS个单词进行排序
sort(p, ROWS);
//输出显示单词排序结果
show(p, ROWS);
return 0;
}
```
在 sort 函数中,使用了 strcmp 函数来比较字符串大小,使用了 strcpy 函数来交换两个字符串。在 main 函数中,先将指针 p 指向 ch,然后调用 assign 函数为 ch 赋值,调用 sort 函数对 ch 进行排序,最后调用 show 函数输出排序结果。
请写一个c语言程序,对于一个m行m列(2<m<20)的方阵,求其每一行、每一列及主、辅对角线元素之和(注:主对角线是方阵从左上角到右下角的一条斜线,辅对角线是方阵从右上角到左下角的一条斜线),然后按照从大到小的顺序依次输出这些值。
以下是一个简单的C语言程序,用于计算给定矩阵的行和、列和以及主对角线和辅助对角线和,并按降序输出:
```c
#include <stdio.h>
#define MAX_ROWS 19
// 函数声明
int row_sum(int matrix[][MAX_ROWS], int m);
int col_sum(int matrix[][MAX_ROWS], int m);
int main_diagonal_sum(int matrix[][MAX_ROWS], int m);
int anti_diagonal_sum(int matrix[][MAX_ROWS], int m);
void print_sorted(int array[], int count) {
int i;
for (i = count - 1; i >= 0; i--) {
printf("%d ", array[i]);
}
printf("\n");
}
int main() {
int m, n;
printf("Enter number of rows and columns (2 < m < 20): ");
scanf("%d %d", &m, &n);
if (m != n || m < 2 || m > 19) {
printf("Invalid input! Exiting...\n");
return 0;
}
int matrix[m][m];
// 输入矩阵
printf("Enter the matrix:\n");
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &matrix[i][j]);
}
}
int row_sums[MAX_ROWS] = {0};
int col_sums[MAX_ROWS] = {0};
int main_diag_sum = main_diagonal_sum(matrix, m);
int anti_diag_sum = anti_diagonal_sum(matrix, m);
// 计算行和列和
for (int i = 0; i < m; i++) {
row_sums[i] = row_sum(matrix, m);
col_sums[i] = col_sum(matrix, m);
}
// 打印结果
printf("Row sums: \n");
print_sorted(row_sums, m);
printf("Column sums: \n");
print_sorted(col_sums, m);
printf("Main diagonal sum: %d\n", main_diag_sum);
printf("Anti-diagonal sum: %d\n", anti_diag_sum);
return 0;
}
// 辅助函数:计算一行和一列的和
int row_sum(int matrix[][MAX_ROWS], int m) {
int sum = 0;
for (int j = 0; j < m; j++) {
sum += matrix[0][j]; // 仅取第一行
}
return sum;
}
int col_sum(int matrix[][MAX_ROWS], int m) {
int sum = 0;
for (int i = 0; i < m; i++) {
sum += matrix[i][0]; // 仅取第一列
}
return sum;
}
// 主对角线和辅助对角线的和
int main_diagonal_sum(int matrix[][MAX_ROWS], int m) {
int sum = 0;
for (int i = 0; i < m; i++) {
sum += matrix[i][i];
}
return sum;
}
int anti_diagonal_sum(int matrix[][MAX_ROWS], int m) {
int sum = 0;
for (int i = 0; i < m; i++) {
sum += matrix[i][m - 1 - i];
}
return sum;
}
```
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![txt](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)