在C语言测试过程中,第六部分的功能
请输入要进行计算的行数和列数:
1 4
请选择要进行的运算:
1. 加法
2. 减法
3. 乘法
4. 除法
4
2 / -858993460 = 0
#include <stdio.h>
#define ROW 3 // 宏定义二维数组的行数
#define COL 4 // 宏定义二维数组的列数
void input_array(int arr[][COL]); // 录入二维数组函数声明
void output_array(int arr[][COL]); // 输出二维数组函数声明
void menu(); // 菜单函数声明
void max_min_avg(int arr[][COL]); // 求二维数组最大值、最小值、平均值函数声明
void bubble_sort(int arr[][COL], int choice); // 冒泡排序函数声明
void operate_array(int arr[][COL]); // 数组元素加减乘除函数声明
void transpose_array(int arr[][COL]); // 二维数组转置函数声明
void count_string(); // 统计字符串的个数函数声明
int main() {
int arr[ROW][COL]; // 定义二维数组
int choice; // 定义菜单选项变量
while (1) { // 循环显示菜单界面
menu(); // 调用菜单函数
scanf("%d", &choice); // 获取用户选择的菜单选项
switch (choice) { // 根据用户选择的菜单选项执行相应的操作
case 1:
input_array(arr); // 录入二维数组
break;
case 2:
output_array(arr); // 输出二维数组
break;
case 3:
max_min_avg(arr); // 求二维数组最大值、最小值、平均值
break;
case 4:
bubble_sort(arr, choice); // 对二维数组进行升序排序
break;
case 5:
bubble_sort(arr, choice); // 对二维数组进行降序排序
break;
case 6:
operate_array(arr); // 数组元素加减乘除
break;
case 7:
transpose_array(arr); // 二维数组转置
break;
case 8:
count_string(); // 统计字符串的个数
break;
default:
printf("输入有误,请重新输入!\n"); // 提示用户输入有误
break;
}
if (choice == 8) { // 如果用户选择退出程序,则跳出循环
break;
}
}
return 0;
}
void input_array(int arr[][COL]) { // 录入二维数组函数定义
printf("请输入%d行%d列的二维数组:\n", ROW, COL);
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
scanf("%d", &arr[i][j]);
}
}
printf("录入成功!\n");
}
void output_array(int arr[][COL]) { // 输出二维数组函数定义
printf("二维数组的值为:\n");
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
void menu() { // 菜单函数定义
printf("------菜单------\n");
printf("1. 录入二维数组\n");
printf("2. 输出二维数组\n");
printf("3. 求二维数组最大值、最小值、平均值\n");
printf("4. 对二维数组进行升序排序\n");
printf("5. 对二维数组进行降序排序\n");
printf("6. 数组元素加减乘除\n");
printf("7. 二维数组转置\n");
printf("8. 统计字符串的个数\n");
printf("请输入菜单选项:\n");
}
void max_min_avg(int arr[][COL]) { // 求二维数组最大值、最小值、平均值函数定义
int max = arr[0][0], min = arr[0][0], sum = 0;
float avg;
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (arr[i][j] > max) {
max = arr[i][j];
}
if (arr[i][j] < min) {
min = arr[i][j];
}
sum += arr[i][j];
}
}
avg = (float)sum / (ROW * COL);
printf("二维数组的最大值为:%d\n", max);
printf("二维数组的最小值为:%d\n", min);
printf("二维数组的平均值为:%.2f\n", avg);
}
void bubble_sort(int arr[][COL], int choice) { // 冒泡排序函数定义
int temp;
for (int i = 0; i < ROW * COL - 1; i++) {
for (int j = 0; j < ROW * COL - i - 1; j++) {
if (choice == 4) { // 如果选择升序排序
if (arr[j / COL][j % COL] > arr[(j + 1) / COL][(j + 1) % COL]) {
temp = arr[j / COL][j % COL];
arr[j / COL][j % COL] = arr[(j + 1) / COL][(j + 1) % COL];
arr[(j + 1) / COL][(j + 1) % COL] = temp;
}
} else { // 如果选择降序排序
if (arr[j / COL][j % COL] < arr[(j + 1) / COL][(j + 1) % COL]) {
temp = arr[j / COL][j % COL];
arr[j / COL][j % COL] = arr[(j + 1) / COL][(j + 1) % COL];
arr[(j + 1) / COL][(j + 1) % COL] = temp;
}
}
}
}
printf("排序成功!\n");
}
void operate_array(int arr[][COL]) { // 数组元素加减乘除函数定义
int row, col, choice;
int result; // 存储计算结果
printf("请输入要进行计算的行数和列数:\n");
scanf("%d %d", &row, &col);
printf("请选择要进行的运算:\n");
printf("1. 加法\n");
printf("2. 减法\n");
printf("3. 乘法\n");
printf("4. 除法\n");
scanf("%d", &choice);
switch (choice) { // 根据用户选择的运算符进行计算
case 1:
result = arr[row - 1][col - 1] + arr[col - 1][row - 1];
printf("%d + %d = %d\n", arr[row - 1][col - 1], arr[col - 1][row - 1], result);
break;
case 2:
result = arr[row - 1][col - 1] - arr[col - 1][row - 1];
printf("%d - %d = %d\n", arr[row - 1][col - 1], arr[col - 1][row - 1], result);
break;
case 3:
result = arr[row - 1][col - 1] * arr[col - 1][row - 1];
printf("%d * %d = %d\n", arr[row - 1][col - 1], arr[col - 1][row - 1], result);
break;
case 4:
result = arr[row - 1][col - 1] / arr[col - 1][row - 1];
printf("%d / %d = %d\n", arr[row - 1][col - 1], arr[col - 1][row - 1], result);
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
}
void transpose_array(int arr[][COL]) { // 二维数组转置函数定义
int temp;
for (int i = 0; i < ROW; i++) {
for (int j = i + 1; j < COL; j++) {
temp = arr[i][j];
arr[i][j] = arr[j][i];
arr[j][i] = temp;
}
}
printf("转置成功!\n");
}
void count_string() { // 统计字符串的个数函数定义
char str[100];
int upper = 0, lower = 0, digit = 0, other = 0;
printf("请输入一个字符串:\n");
scanf("%s", str);
for (int i = 0; str[i] != '\0'; i++) {
if (str[i] >= 'A' && str[i] <= 'Z') {
upper++;
} else if (str[i] >= 'a' && str[i] <= 'z') {
lower++;
} else if (str[i] >= '0' && str[i] <= '9') {
digit++;
} else {
other++;
}
}
printf("大写字母个数:%d\n", upper);
printf("小写字母个数:%d\n", lower);
printf("数字个数:%d\n", digit);
printf("特殊符号个数:%d\n", other);
}
为何会出现这样的情况?应该如何修改?请教各位,如果能帮忙修改我将感激不尽!
四则运算传入的实参并没有初始化,就是一些随机的值
这个程序好像整个不对
你是做矩阵运算还是简单的四则运算?为什么用数组?整个没有输入数据到数组里
例如 你定义
#define mul(a,b) a*b
就像下面输出结果是41而不是66
int main()
{
int a=5,b=6;
int c=mul(a+b,b);
printf("%d\n",c);
}
mul(a+b,b)并不是按(a+b)*b 而是 a+b*b输出结果 并没有运算规则 他是完整的把a+b 传递给了a 其实说成没有运算规则不严谨 只是没有按照我们给他的设想去计算,它比较死,一股脑传递过去 自然成了a+b*b
#define mul(a,b) (a)*(b)
结果自然是66
对不起,ChatGPT无法理解您的问题的具体细节和上下文。请您提供更详细的信息,比如您的具体需求、实际出现的问题、运行环境、代码片段等等,这样才能够帮您找到合适的解决方案。感谢您的配合!