用C语言程序输入输出二维数组的的矩形方阵
时间: 2024-04-08 18:33:50 浏览: 95
当使用C语言时,可以使用双重循环来输出二维数组的矩形方阵。以下是一个示例程序:
```c
#include <stdio.h>
int main() {
int array[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}};
int rows = sizeof(array) / sizeof(array[0]);
int cols = sizeof(array[0]) / sizeof(array[0][0]);
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d\t", array[i][j]);
}
printf("\n");
}
return 0;
}
```
这段代码会输出:
```
1 2 3 4
5 6 7 8
```
在这个示例中,我们使用了一个名为`array`的二维整数数组来存储数据。通过计算数组的行数和列数,我们可以在循环中遍历并打印每个元素。每个元素之间使用制表符(`\t`)进行分隔,通过`printf("\n")`换行。
相关问题
c语言计算二维数组对角线元素之和
要计算二维数组对角线元素之和,你可以使用以下代码:
```c
#include <stdio.h>
int main() {
int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int sum = 0;
for (int i = 0; i < 3; i++) {
sum += arr[i][i]; // 主对角线元素
sum += arr[i][2-i]; // 次对角线元素
}
printf("对角线元素之和为: %d\n", sum);
return 0;
}
```
在上面的示例中,我们声明了一个3x3的二维数组 `arr`,并初始化了它。然后,我们使用两个循环来遍历数组,并将对角线元素累加到变量 `sum` 中。最后,我们打印出对角线元素之和。
请注意,这里假设二维数组是一个方阵,即行数等于列数。如果是矩形数组,你需要根据具体情况进行调整。
c语言实现playpair密码
playfair密码是一种古典密码,用于加密和解密机密信息。它的特点是使用一个5x5的矩阵(称为密码方阵)作为密钥,使用字母A-Z进行加密。
首先,我们需要创建一个密码方阵。具体步骤如下:
1. 创建一个包含字母A-Z的字符串,并去除重复字母。
2. 将字符串转换为一个5x5的二维矩阵(密码方阵),格点按顺序填充。
加密过程如下:
1. 将明文分成成对的字母,如果最后只剩一个字母,则添加一个辅助字母(如X)。
2. 对每对字母应用以下规则:
a) 如果两个字母在同一行中,则将每个字母替换为右边相邻的字母。如果该字母是在该行的最右边,则将其替换为该行的最左边字母。
b) 如果两个字母在同一列中,则将每个字母替换为下方相邻的字母。如果该字母是在该列的最底部,则将其替换为该列的最顶部字母。
c) 如果两个字母不在同一行或同一列,则通过两个字母形成的矩形的对角线字母来替换。
解密过程与加密过程相反。
下面是C语言实现playfair密码的示例代码:
```c
#include <stdio.h>
#include <string.h>
char matrix[5][5];
// 创建密码方阵
void createMatrix(char* key) {
int size = strlen(key);
int k = 0;
int visited[26] = {0}; // 记录已使用的字母
for (int i = 0; i < size; i++) {
if (key[i] == 'J') {
key[i] = 'I'; // 将J替换为I
}
if (visited[key[i]-'A'] == 0) {
matrix[k/5][k%5] = key[i];
visited[key[i]-'A'] = 1;
k++;
}
}
for (int i = 0; i < 26; i++) {
if (visited[i] == 0) {
matrix[k/5][k%5] = i + 'A';
k++;
}
}
}
// 在密钥矩阵中查找字母并返回其坐标
void findLetter(char ch, int* row, int* col) {
if (ch == 'J') {
ch = 'I';
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (matrix[i][j] == ch) {
*row = i;
*col = j;
return;
}
}
}
}
// 加密
void encrypt(char* plaintext, char* ciphertext) {
int size = strlen(plaintext) / 2;
for (int i = 0; i < size; i++) {
char ch1 = plaintext[i*2];
char ch2 = plaintext[i*2+1];
int row1, col1, row2, col2;
findLetter(ch1, &row1, &col1);
findLetter(ch2, &row2, &col2);
if (row1 == row2) { // 同一行
ciphertext[i*2] = matrix[row1][(col1+1) % 5];
ciphertext[i*2+1] = matrix[row2][(col2+1) % 5];
} else if (col1 == col2) { // 同一列
ciphertext[i*2] = matrix[(row1+1) % 5][col1];
ciphertext[i*2+1] = matrix[(row2+1) % 5][col2];
} else { // 不同行不同列
ciphertext[i*2] = matrix[row1][col2];
ciphertext[i*2+1] = matrix[row2][col1];
}
}
ciphertext[size*2] = '\0';
}
// 解密
void decrypt(char* ciphertext, char* plaintext) {
int size = strlen(ciphertext) / 2;
for (int i = 0; i < size; i++) {
char ch1 = ciphertext[i*2];
char ch2 = ciphertext[i*2+1];
int row1, col1, row2, col2;
findLetter(ch1, &row1, &col1);
findLetter(ch2, &row2, &col2);
if (row1 == row2) { // 同一行
plaintext[i*2] = matrix[row1][(col1+4) % 5];
plaintext[i*2+1] = matrix[row2][(col2+4) % 5];
} else if (col1 == col2) { // 同一列
plaintext[i*2] = matrix[(row1+4) % 5][col1];
plaintext[i*2+1] = matrix[(row2+4) % 5][col2];
} else { // 不同行不同列
plaintext[i*2] = matrix[row1][col2];
plaintext[i*2+1] = matrix[row2][col1];
}
}
plaintext[size*2] = '\0';
}
int main() {
char key[] = "PLAYFAIREXAMPLE";
char plaintext[] = "HELLOWORLD";
char ciphertext[strlen(plaintext)];
createMatrix(key);
encrypt(plaintext, ciphertext);
printf("加密后的密文: %s\n", ciphertext);
char decryptedPlaintext[strlen(plaintext)];
decrypt(ciphertext, decryptedPlaintext);
printf("解密后的明文: %s\n", decryptedPlaintext);
return 0;
}
```
这段C语言代码实现了playfair密码的加密和解密过程,其中使用了一个方法`createMatrix`来创建密钥矩阵,`encrypt`函数用于加密明文,`decrypt`函数用于解密密文。示例代码中使用了密钥"PLAYFAIREXAMPLE"和明文"HELLOWORLD"进行加密和解密演示。
阅读全文