mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7
167 字
1 分钟
二维数组 - 课堂练习
2026-05-28

1. 改错题 - 二维数组基本操作#

int main(void)
{
int m, n;
int b[3][2] = { {1,2}, {3,4}, {5,6} };
printf("数组b的首地址:%p\n", b);
printf("第一次输出b中的元素:\n");
for (m = 0; m < 3; m++)
{
for (n = 0; n < 2; n++)
{
printf("%d\t", b[m][n]);
}
printf("\n");
}
b[0][1] = 0;
printf("第二次输出b中的元素:\n");
for (m = 0; m < 3; m++)
{
for (n = 0; n < 2; n++)
{
printf("%d\t", b[m][n]);
}
printf("\n");
}
return 0;
}

2. 军事训练成绩分析程序#

录入三名人员四科的考核成绩,求每个人的总成绩和每个科目的平均成绩。

#include<stdio.h>
#define N 4
#define M 5
int main()
{
double a[N][M];
int i, j;
for (int i = 0;i < N - 1;i++)
{
for (int j = 0;j < M - 1;j++)
{
scanf("%lf", &a[i][j]);
}
}
printf("原始成绩为:\n");
for (int i = 0;i < N - 1;i++)
{
for (int j = 0;j < M - 1;j++)
{
printf("%.2lf ", a[i][j]);
}
printf("\n");
}
printf("\n");
double sum = 0.0, avg = 0.0;
for (int i = 0;i < N - 1;i++)
{
sum = 0;
for (int j = 0;j < M - 1;j++)
{
printf("%.2lf ", a[i][j]);
sum += a[i][j];
}
a[i][4] = sum;
printf("%.2lf", sum);
printf("\n");
}
printf("\n");
for (i = 0;i < M;i++)
{
avg = 0;
for (j = 0;j < N - 1;j++)
{
avg += a[j][i];
}
avg = avg / 3;
a[N - 1][i] = avg;
}
a[N - 1][M - 1] = 0.00;
for (int i = 0;i < N;i++)
{
for (int j = 0;j < M;j++)
{
printf("%.2lf ", a[i][j]);
}
printf("\n");
}
return 0;
}

3. 井字棋游戏#

使用二维数组实现井字棋游戏,支持双人对战和人机对战。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define ROW 3
#define COL 3
#define EMPTY ' '
#define PLAYER1 'X'
#define PLAYER2 'O'
char board[ROW][COL];
void initBoard();
void displayBoard();
int playerMove(int player, char symbol);
int checkWin();
int isDraw();
void initBoard()
{
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
board[i][j] = ' ';
}
}
}
void displayBoard() {
printf("\n ");
for (int j = 0; j < COL; j++) {
printf(" %d ", j + 1);
}
printf("\n");
for (int i = 0; i < ROW; i++) {
printf("%d ", i + 1);
for (int j = 0; j < COL; j++) {
printf(" %c ", board[i][j]);
if (j < COL - 1) printf("|");
}
printf("\n");
if (i < ROW - 1) {
printf(" ");
for (int j = 0; j < COL; j++) {
printf("---");
if (j < COL - 1) printf("|");
}
printf("\n");
}
}
printf("\n");
}
int playerMove(int player, char symbol) {
int row, col;
printf("玩家 %d [%c],请输入落子坐标 (行 列),例如:1 2: ", player, symbol);
scanf("%d %d", &row, &col);
row--; col--;
if (row > ROW - 1 || row < 0 || col > COL - 1 || col < 0) {
printf("坐标超出棋盘范围!\n");
return 0;
}
if (board[row][col] != ' ') {
printf("该位置已有棋子!\n");
return 0;
}
board[row][col] = symbol;
return 1;
}
int checkWin() {
for (int i = 0; i < ROW; i++) {
if (board[i][0] == board[i][1] && board[i][1] == board[i][2] && board[i][0] != EMPTY) {
return board[i][0];
}
}
for (int j = 0; j < COL; j++) {
if (board[0][j] == board[1][j] && board[1][j] == board[2][j] && board[0][j] != EMPTY) {
return board[0][j];
}
}
if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[0][0] != EMPTY) {
return board[0][0];
}
if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[0][2] != EMPTY) {
return board[0][2];
}
return ' ';
}
int isDraw() {
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
if (board[i][j] == ' ') {
return 0;
}
}
}
return 1;
}
int main() {
int mode, gameOver, currentPlayer = 1;
char winner;
srand(time(NULL));
printf("欢迎来到井字棋!\n1. 双人对战\n2. 人机对战\n请选择:");
scanf("%d", &mode);
if (mode != 1 && mode != 2) return 1;
do {
initBoard();
gameOver = 0;
currentPlayer = 1;
while (!gameOver) {
displayBoard();
if (mode == 1) {
if (currentPlayer == 1) {
if (playerMove(currentPlayer, PLAYER1)) {
winner = checkWin();
if (winner != ' ') {
displayBoard(); printf("玩家1获胜!\n"); gameOver = 1;
}
else if (isDraw()) {
displayBoard(); printf("平局!\n"); gameOver = 1;
}
else currentPlayer = 2;
}
}
else {
if (playerMove(currentPlayer, PLAYER2)) {
winner = checkWin();
if (winner != ' ') {
displayBoard(); printf("玩家2获胜!\n"); gameOver = 1;
}
else if (isDraw()) {
displayBoard(); printf("平局!\n"); gameOver = 1;
}
else currentPlayer = 1;
}
}
}
else {
// 人机对战(简化,电脑随机落子)
}
}
char again;
printf("再玩一局?(y/n): ");
scanf(" %c", &again);
if (again != 'y' && again != 'Y') gameOver = 1;
else gameOver = 0;
} while (!gameOver);
printf("谢谢游玩!\n");
return 0;
}

4. 字符串输入scanf#

#include <stdio.h>
int main()
{
char a[15], b[5], c[5];
scanf("%s %s %s", a, b, c);
printf("a=%s\nb=%s\nc=%s\n", a, b, c);
scanf("%s", a);
printf("a=%s\n", a);
}

5. 获取数字字符#

输入一个字符串,提取其中的数字字符并组合成数值输出。

#include <stdio.h>
#define N 80
int main()
{
char s[N];
int num = 0;
gets(s);
int i = 0;
while (s[i] != '\0') {
if (s[i] >= '0' && s[i] <= '9') {
num = num * 10 + (s[i] - '0');
}
i++;
}
printf("%d\n", num);
return 0;
}

6. 获取特殊字符#

将字符数组str1下标为奇数且ASCII码为奇数的元素赋给另一个字符数组str2。

#include <stdio.h>
#define N 80
int main()
{
char str1[N], str2[N];
int i = 0, j = 0;
gets(str1);
for(i=1,j=0;str1[i];i+=2)
{
if(str1[i]%2==1)
{
str2[j++]=str1[i];
}
}
str2[j]=0;
puts(str1);
puts(str2);
return 0;
}
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

二维数组 - 课堂练习
https://blog.sherry.qzz.io/posts/c/二维数组资料/
作者
Sherry
发布于
2026-05-28
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录