当前位置:首页 > 技术 > 正文内容

数组与矩阵操作实践

访客 技术 2026年6月14日 1
#include <stdio.h>
#define ARRAY_SIZE 4
#define ROWS 2

void test_array() {
    int data[ARRAY_SIZE] = {1, 9, 8, 4};
    int index;

    printf("Array size: %d\n", sizeof(data));
    
    for(index = 0; index < ARRAY_SIZE; ++index) {
        printf("%p: %d\n", &data[index], data[index]);
    }
    
    printf("Array address: %p\n", data);
}

void test_matrix() {
    int matrix[ROWS][ARRAY_SIZE] = {{1, 9, 8, 4}, {2, 0, 4, 9}};
    int row, col;

    printf("Matrix size: %d\n", sizeof(matrix));
    
    for(row = 0; row < ROWS; ++row) {
        for(col = 0; col < ARRAY_SIZE; ++col) {
            printf("%p: %d\n", &matrix[row][col], matrix[row][col]);
        }
    }
    
    printf("Matrix address: %p\n", matrix);
    printf("Row 0 address: %p\n", matrix[0]);
    printf("Row 1 address: %p\n", matrix[1]);
}

int main() {
    printf("Test 1: Integer array\n");
    test_array();
    
    printf("\nTest 2: Integer matrix\n");
    test_matrix();
    
    return 0;
}
#include <stdio.h>
#define MAX_SIZE 100

void read_array(int arr[], int size);
double calculate_avg(int arr[], int size);

int main() {
    int nums[MAX_SIZE];
    int count;
    double result;

    while(printf("Enter count: "), scanf("%d", &count) != EOF) {
        read_array(nums, count);
        result = calculate_avg(nums, count);
        printf("Result: %.2f\n\n", result);
    }

    return 0;
}

void read_array(int arr[], int size) {
    for(int i = 0; i < size; ++i) {
        scanf("%d", &arr[i]);
    }
}

double calculate_avg(int arr[], int size) {
    int max_val = arr[0];
    int min_val = arr[0];
    double total = 0.0;

    for(int i = 0; i < size; ++i) {
        total += arr[i];
        
        if(arr[i] > max_val) {
            max_val = arr[i];
        } else if(arr[i] < min_val) {
            min_val = arr[i];
        }
    }

    return (total - max_val - min_val) / (size - 2);
}
Array element addresses show contiguous memory allocation. Row addresses differ by column size in multi-dimensional arrays.
#include <stdio.h>
#define MAX_DIM 100

void display_matrix(int mat[][MAX_DIM], int dim);
void initialize_matrix(int mat[][MAX_DIM], int dim, int value);

int main() {
    int matrix[MAX_DIM][MAX_DIM];
    int size, val;

    while(printf("Enter size and value: "), scanf("%d%d", &size, &val) != EOF) {
        initialize_matrix(matrix, size, val);
        display_matrix(matrix, size);
        printf("\n");
    }

    return 0;
}

void display_matrix(int mat[][MAX_DIM], int dim) {
    for(int r = 0; r < dim; ++r) {
        for(int c = 0; c < dim; ++c) {
            printf("%d ", mat[r][c]);
        }
        printf("\n");
    }
}

void initialize_matrix(int mat[][MAX_DIM], int dim, int value) {
    for(int i = 0; i < dim; ++i) {
        for(int j = 0; j < dim; ++j) {
            mat[i][j] = value;
        }
    }
}
Array parameter passing demonstrates memory address relationships. Matrix operations confirm uniform element initialization.
#include <stdio.h>
#define MAX_SIZE 100

void read_values(int arr[], int size);
double find_median(int arr[], int size);

int main() {
    int numbers[MAX_SIZE];
    int count;
    double median_val;

    while(printf("Enter count: "), scanf("%d", &count) != EOF) {
        read_values(numbers, count);
        median_val = find_median(numbers, count);
        printf("Median: %g\n\n", median_val);
    }

    return 0;
}

void read_values(int arr[], int size) {
    for(int i = 0; i < size; ++i) {
        scanf("%d", &arr[i]);
    }
}

double find_median(int arr[], int size) {
    for(int i = 0; i < size-1; ++i) {
        for(int j = 0; j < size-1-i; ++j) {
            if(arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }

    if(size % 2 == 1) {
        return arr[size/2];
    } else {
        return (arr[size/2 - 1] + arr[size/2]) / 2.0;
    }
}
#include <stdio.h>
#define MAX_DIM 100

void input_matrix(int mat[][MAX_DIM], int dim);
void output_matrix(int mat[][MAX_DIM], int dim);
void rotate_right(int mat[][MAX_DIM], int dim);

int main() {
    int matrix[MAX_DIM][MAX_DIM];
    int size;

    printf("Enter size: ");
    scanf("%d", &size);
    input_matrix(matrix, size);

    printf("Original matrix:\n");
    output_matrix(matrix, size);

    rotate_right(matrix, size); 

    printf("Rotated matrix:\n");
    output_matrix(matrix, size);

    return 0;
}

void input_matrix(int mat[][MAX_DIM], int dim) {
    printf("Enter %dx%d matrix (row-wise):\n", dim, dim);
    for(int r = 0; r < dim; ++r) {
        for(int c = 0; c < dim; ++c) {
            scanf("%d", &mat[r][c]);
        }
    }
}

void output_matrix(int mat[][MAX_DIM], int dim) {
    for(int r = 0; r < dim; ++r) {
        for(int c = 0; c < dim; ++c) {
            printf("%d ", mat[r][c]);
        }
        printf("\n");
    }
}

void rotate_right(int mat[][MAX_DIM], int dim) {
    int temp_col[dim]; 

    for(int i = 0; i < dim; ++i) {
        temp_col[i] = mat[i][dim - 1];
    }

    for(int c = dim - 1; c > 0; --c) {
        for(int r = 0; r < dim; ++r) {
            mat[r][c] = mat[r][c - 1];
        }
    }

    for(int i = 0; i < dim; ++i) {
        mat[i][0] = temp_col[i];
    }
}
#define MAX_SIZE 100

void dec_to_base(int num, int base);

int main() {  
    int value;  
    while(printf("Enter decimal: "), scanf("%d", &value) != EOF) {  
        dec_to_base(value, 2);   
        dec_to_base(value, 8);   
        dec_to_base(value, 16);   
        printf("\n");  
    }  
    return 0;  
}

void dec_to_base(int num, int base) {  
    int remainders[MAX_SIZE];   
    int index = 0;  
    int current = num;

    if(current == 0) {  
        printf("0");  
        return;  
    }

    while(current > 0) {  
        remainders[index] = current % base;  
        current = current / base;  
        index++;  
    }

    for(int i = index - 1; i >= 0; i--) {  
        if(base == 16 && remainders[i] >= 10) {  
            printf("%c", 'A' + (remainders[i] - 10));  
        } else {  
            printf("%d", remainders[i]);  
        }  
    }  
    printf("\n");
}
#include <stdio.h>
#define MAX_DIM 100

void read_grid(int grid[][MAX_DIM], int size);
void print_grid(int grid[][MAX_DIM], int size);
int check_magic(int grid[][MAX_DIM], int size); 

int main() {
    int matrix[MAX_DIM][MAX_DIM];
    int size;
    while(printf("Enter size: "), scanf("%d", &size) != EOF) {
        printf("Enter square matrix:\n");
        read_grid(matrix, size);
        printf("Displayed matrix:\n");
        print_grid(matrix, size);
        if(check_magic(matrix, size))
            printf("It's a magic square\n\n");
        else
            printf("Not a magic square\n\n");
    }
    return 0;
}

void read_grid(int grid[][MAX_DIM], int size) {
    for(int r = 0; r < size; ++r) {
        for(int c = 0; c < size; ++c) {
            scanf("%d", &grid[r][c]);
        }
    }
}

void print_grid(int grid[][MAX_DIM], int size) {
    for(int r = 0; r < size; ++r) {
        for(int c = 0; c < size; ++c) {
            printf("%4d", grid[r][c]);
        }
        printf("\n");
    }
}

int check_magic(int grid[][MAX_DIM], int size) {
    int magic_sum = size * (size * size + 1) / 2;
    int row_sum, col_sum, diag_sum;

    for(int r = 0; r < size; ++r) {
        row_sum = 0;
        for(int c = 0; c < size; ++c) {
            row_sum += grid[r][c];
        }
        if(row_sum != magic_sum) return 0;
    }

    for(int c = 0; c < size; ++c) {
        col_sum = 0;
        for(int r = 0; r < size; ++r) {
            col_sum += grid[r][c];
        }
        if(col_sum != magic_sum) return 0;
    }

    diag_sum = 0;
    for(int i = 0; i < size; ++i) {
        diag_sum += grid[i][i];
    }
    if(diag_sum != magic_sum) return 0;

    diag_sum = 0;
    for(int i = 0; i < size; ++i) {
        diag_sum += grid[i][size - 1 - i];
    }
    if(diag_sum != magic_sum) return 0;

    return 1;
}
标签: C语言

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。