打印魔方阵
#define N 19 int main() {int a[N][N] = {0}, i, j, k, n; /*数组元素全部初始化为0,表示没有数据填入*/ scanf("%d",&n); //输入方阵阶数(奇数) i = 0; //1的行数应该是0 j = n/2; //计算1应该在的列数 a[i][j] = 1; //将1填入表中 for(k = 2; k <= n*n; k++){ if(--i < 0) //行数减一,若超出上边界,填到最后一行 i += n; if(++j == n) //列数加一,若超出右边界,填到最左边一列 j -= n; if(a[i][j] != 0){ //若该位置已有数存在 if((i+=2) > n-1) //行数加2,若超过下边界 i -= n; //计算上一个数下方的行号 if((j-=1) < 0) //列数减1,若超过左边界 j += n; //计算上一个数下方的列号 } a[i][j] = k; //将k填入 } for(i = 0; i < n; i++) { for(j = 0; j < n; j++) printf("%4d", a[i][j]); printf("\n"); } getch(); return 0; }
猜数游戏
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() {int n, i, k; randomize(); n = random(101); for(i = 1; i <= 5; i++) { printf( “\n请输入一个数,您还有%d次机会: ”, 6-i ); scanf(“%d”, &k); if( k == n ) break; if(k > n) printf(“\n不对,大了!”); else printf(“\n不对,小了!”); } if(i <= 5) //因break而退出 printf(“\n恭喜您,猜对了! 答案正是%d\n”, n); else //循环自然退出 printf(“\n抱歉,没猜对! 正确答案是%d\n”, n); getch(); return 0; }
二维数组的排序输出
# define NUMBER 10 int main() { int a[NUMBER+1][5], i, j, k, t, n; for(i = 1; i <= NUMBER; i++){ printf( "请输入第 %d个学生的数据: ", i ); scanf("%d,%d,%d,%d",&a[i][0],&a[i][1], &a[i][2],&a[i][3]); a[i][4] = a[i][1] + a[i][2] + a[i][3]; } for(i = 1; i < NUMBER; i++) { //选择法排序 k = i; for(j = i+1; j <= NUMBER; j++) if(a[j][4] > a[k][4]) k = j; for(n = 0; n <= 4; n++){ //交换两行的5对数据 t = a[i][n]; a[i][n] = a[k][n]; a[k][n] = t; } } printf(" 学号 数学 英语 计算机 总分 名次\n"); for(i = 1; i <= NUMBER; i++) for(j = 0; j <= 5; j++){ if(j != 5) printf(" %3d ", a[i][j] ); else printf(" %3d \n", i ); //输出名次 } getch(); return 0; }
寻找假币
#include "time.h" #include "stdlib.h" int main() {int i, j, k, m, s1, s2, c[81]; for(i = 1; i <= 80; i++) //先将所有元素都置为1,都是真币 c[i] = 1; randomize(); c[random(80)+1] = 0; //随机设定一枚假币 k = 1; //存储假币所在组中第一枚硬币的序号 m = 27; //第一次称,每组27个硬币 for(i = 1; i <= 4; i++){ //循环4次,表示总共称4次 s1 = s2 = 0; //每次计算总重量前,都要先清零 for(j = k; j < m+k; j++){ //计算左右两组的硬币总重量 s1 += c[j]; s2 += c[j+m]; } if(s1 > s2) //假币在第2组 k += m; if(s1 == s2) //假币在第3组 k += 2*m; m /= 3; //继续分组,下次循环每组m/3个硬币 } printf("假币的序号是:%d\n", k); getch(); return 0; }
计算矩阵相乘
for(k =0; k<=3; k++) c[i][j] += a[i][k] * b[k][j];
#define M 3 #define K 4 #define N 2 int main() {int a[M][K] = {3,9,12,10,1,8,6,7,5,4,2,11}; int b[K][N] = {5,8,2,1,7,3,6,4}, c[M][N] = {0}; int i, j, k; clrscr(); for(i = 0; i < M; i++){ for(j = 0; j < N; j++){ for(k = 0; k < K; k++) c[i][j] += a[i][k] * b[k][j]; printf(“%5d”, c[i][j]); } printf(“\n”); } getch(); return 0; }
向排好序的数组中插入数据
for(i = 0; i <= 9; i++) if(x < a[i]) break;
k = i; //用k记录下i的值,以便后面循环再用i作循环变量 for(i = 9; i >= k; i--) a[i+1] = a[i]; 完成这一步后,便可以把x插入到a[k]了: a[k] = x; 下面是完整的程序代码: #include <stdio.h> int main() {int a[11] = {-2,0,3,8,11,15,17,20,24,32}; int x, i, k; scanf(“%d”, &x); for(i = 0; i <= 9; i++) if(x < a[i]) break; k = i; for(i = 9; i >= k; i--) /*自第k个数据之后的所有数据后移*/ a[i+1] = a[i]; a[k] = x; //将x插入 for(i = 0; i <= 10; i++) printf(“%5d”, a[i]); getch(); return 0; }
for(i = 9; i >= 0 && a[i] > x; i--) a[i + 1] = a[i];
for(i = 9; i >= 0 && a[i] > x; i--) a[i+1] = a[i]; a[i+1] = x;