为什么在两个一维数组的加减乘除运算 除法测试过程中会出现0 0 0的情况
#include <stdio.h>
#include <stdlib.h>
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");
}
void input_array(int *arr, int len){
printf("请输入%d个整数:\n", len);
for(int i=0; i<len; i++){
scanf("%d", &arr[i]);
}
}
void output_array(int *arr, int len){
printf("数组元素为:[ ");
for(int i=0; i<len; i++){
printf("%d ", arr[i]);
}
printf("]\n");
}
void sort_array(int *arr, int len){
int temp;
for(int i=0; i<len-1; i++){
for(int j=0; j<len-1-i; j++){
if(arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
void search_array(int *arr, int len, int key){
int flag = 0;
for(int i=0; i<len; i++){
if(arr[i] == key){
printf("查找到元素%d,下标为%d\n", key, i);
flag = 1;
break;
}
}
if(flag == 0){
printf("未找到元素%d\n", key);
}
}
void insert_array(int *arr, int *len, int index, int value){
for(int i=*len; i>index; i--){
arr[i] = arr[i-1];
}
arr[index] = value;
(*len)++;
}
void delete_array(int *arr, int *len, int index){
for(int i=index; i<*len-1; i++){
arr[i] = arr[i+1];
}
(*len)--;
}
void merge_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
int i = 0, j = 0, k = 0;
while(i < len1 && j < len2){
if(arr1[i] <= arr2[j]){
arr3[k++] = arr1[i++];
}else{
arr3[k++] = arr2[j++];
}
}
while(i < len1){
arr3[k++] = arr1[i++];
}
while(j < len2){
arr3[k++] = arr2[j++];
}
}
void add_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
for(int i=0; i<len1; i++){
arr3[i] = arr1[i] + arr2[i];
}
}
void sub_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
for(int i=0; i<len1; i++){
arr3[i] = arr1[i] - arr2[i];
}
}
void mul_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
for(int i=0; i<len1; i++){
arr3[i] = arr1[i] * arr2[i];
}
}
void div_array(int *arr1, int len1, int *arr2, int len2, int *arr3){
for(int i=0; i<len1; i++){
if(arr2[i] == 0){
printf("数组2中有元素为0,无法进行除法运算。\n");
return;
}
arr3[i] = arr1[i] / arr2[i];
}
}
void input_matrix(int **matrix, int row, int col){
printf("请输入%d行%d列的矩阵:\n", row, col);
for(int i=0; i<row; i++){
for(int j=0; j<col; j++){
scanf("%d", &matrix[i][j]);
}
}
}
void output_matrix(int **matrix, int row, int col){
printf("矩阵元素为:\n");
for(int i=0; i<row; i++){
for(int j=0; j<col; j++){
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
void transpose_matrix(int **matrix, int row, int col){
int temp;
for(int i=0; i<row; i++){
for(int j=i+1; j<col; j++){
temp = matrix[i][j];
matrix[i][j] = matrix[j][i];
matrix[j][i] = temp;
}
}
}
void add_matrix(int **matrix1, int row1, int col1, int **matrix2, int row2, int col2, int **matrix3){
if(row1 != row2 || col1 != col2){
printf("两个矩阵的行列数不相等,无法进行加法运算。\n");
return;
}
for(int i=0; i<row1; i++){
for(int j=0; j<col1; j++){
matrix3[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
}
void sub_matrix(int **matrix1, int row1, int col1, int **matrix2, int row2, int col2, int **matrix3){
if(row1 != row2 || col1 != col2){
printf("两个矩阵的行列数不相等,无法进行减法运算。\n");
return;
}
for(int i=0; i<row1; i++){
for(int j=0; j<col1; j++){
matrix3[i][j] = matrix1[i][j] - matrix2[i][j];
}
}
}
int main(){
int choice;
int arr1[100], len1 = 0;
int arr2[100], len2 = 0;
int arr3[200];
int **matrix1, **matrix2, **matrix3;
int row1, col1, row2, col2;
int value, index, key;
while(1){
menu();
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice){
case 1:
printf("请输入数组1的长度:");
scanf("%d", &len1);
input_array(arr1, len1);
output_array(arr1, len1);
break;
case 2:
printf("请输入数组1的长度:");
scanf("%d", &len1);
input_array(arr1, len1);
while(1){
printf("请选择要进行的操作:\n");
printf("1. 查找元素\n");
printf("2. 插入元素\n");
printf("3. 删除元素\n");
printf("4. 返回上一级菜单\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice){
case 1:
printf("请输入要查找的元素:");
scanf("%d", &key);
search_array(arr1, len1, key);
break;
case 2:
printf("请输入要插入的元素和插入的位置(从0开始):");
scanf("%d %d", &value, &index);
if(index < 0 || index > len1){
printf("插入位置不合法,请重新输入。\n");
break;
}
insert_array(arr1, &len1, index, value);
output_array(arr1, len1);
break;
case 3:
printf("请输入要删除的元素的位置(从0开始):");
scanf("%d", &index);
if(index < 0 || index >= len1){
printf("删除位置不合法,请重新输入。\n");
break;
}
delete_array(arr1, &len1, index);
output_array(arr1, len1);
break;
case 4:
break;
default:
printf("输入错误,请重新输入。\n");
break;
}
if(choice == 4){
break;
}
}
break;
case 3:
printf("请输入数组1的长度:");
scanf("%d", &len1);
input_array(arr1, len1);
printf("请输入数组2的长度:");
scanf("%d", &len2);
input_array(arr2, len2);
merge_array(arr1, len1, arr2, len2, arr3);
sort_array(arr3, len1+len2);
output_array(arr3, len1+len2);
break;
case 4:
printf("请输入数组1的长度:");
scanf("%d", &len1);
input_array(arr1, len1);
printf("请输入数组2的长度:");
scanf("%d", &len2);
input_array(arr2, len2);
if(len1 != len2){
printf("两个数组长度不相等,无法进行加减乘除运算。\n");
break;
}
printf("数组1加数组2的结果为:");
add_array(arr1, len1, arr2, len2, arr3);
output_array(arr3, len1);
printf("数组1减数组2的结果为:");
sub_array(arr1, len1, arr2, len2, arr3);
output_array(arr3, len1);
printf("数组1乘数组2的结果为:");
mul_array(arr1, len1, arr2, len2, arr3);
output_array(arr3, len1);
printf("数组1除以数组2的结果为:");
div_array(arr1, len1, arr2, len2, arr3);
output_array(arr3, len1);
break;
case 5:
printf("请输入矩阵1的行数和列数:");
scanf("%d %d", &row1, &col1);
matrix1 = (int **)malloc(sizeof(int *) * row1);
for(int i=0; i<row1; i++){
matrix1[i] = (int *)malloc(sizeof(int) * col1);
}
input_matrix(matrix1, row1, col1);
output_matrix(matrix1, row1, col1);
break;
case 6:
printf("请输入矩阵1的行数和列数:");
scanf("%d %d", &row1, &col1);
matrix1 = (int **)malloc(sizeof(int *) * row1);
for(int i=0; i<row1; i++){
matrix1[i] = (int *)malloc(sizeof(int) * col1);
}
input_matrix(matrix1, row1, col1);
transpose_matrix(matrix1, row1, col1);
output_matrix(matrix1, col1, row1);
break;
case 7:
printf("请输入矩阵1的行数和列数:");
scanf("%d %d", &row1, &col1);
matrix1 = (int **)malloc(sizeof(int *) * row1);
for(int i=0; i<row1; i++){
matrix1[i] = (int *)malloc(sizeof(int) * col1);
}
input_matrix(matrix1, row1, col1);
printf("请输入矩阵2的行数和列数:");
scanf("%d %d", &row2, &col2);
matrix2 = (int **)malloc(sizeof(int *) * row2);
for(int i=0; i<row2; i++){
matrix2[i] = (int *)malloc(sizeof(int) * col2);
}
input_matrix(matrix2, row2, col2);
if(row1 != row2 || col1 != col2){
printf("两个矩阵的行列数不相等,无法进行加减运算。\n");
break;
}
matrix3 = (int **)malloc(sizeof(int *) * row1);
for(int i=0; i<row1; i++){
matrix3[i] = (int *)malloc(sizeof(int) * col1);
}
add_matrix(matrix1, row1, col1, matrix2, row2, col2, matrix3);
output_matrix(matrix3, row1, col1);
sub_matrix(matrix1, row1, col1, matrix2, row2, col2, matrix3);
output_matrix(matrix3, row1, col1);
break;
case 8:
printf("程序已退出。\n");
return 0;
default:
printf("输入错误,请重新输入。\n");
break;
}
}
return 0;
}
因为这是整除,1/4 2/5 3/6当然都是0了
void div_array(int *arr1, int len1, int *arr2, int len2, double *arr3){
for(int i=0; i<len1; i++){
if(arr2[i] == 0){
printf("数组2中有元素为0,无法进行除法运算。\n");
return;
}
arr3[i] = arr1[i] / (double)arr2[i];
}
}
主程序里面也要改(为了不影响别的地方,可以用一个arr4,专门是浮点型)
output也要改