来自网络,联系侵删
167 字
1 分钟
二维数组 - 课堂练习
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 5int 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 80int 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/二维数组资料/ 部分信息可能已经过时
相关文章 智能推荐



























