#include <stdio.h>
#include <math.h>
int main()
{
int i, j, n, a[101];
for (i = 1; i <= 100; i++)
a[i] = i;
a[1] = 0;
for (i = 2; i < sqrt(100); i++)
for (j = i + 1; j <= 100; j++)
{
if (a[i] != 0 && a[j] != 0)
if (a[j] % a[i] == 0)
a[j] = 0;
}
printf("\n");
for (i = 2, n = 0; i <= 100; i++)
{
if (a[i] != 0)
{
printf("%5d", a[i]);
n++;
}
if (n == 10)
{
printf("\n");
n = 0;
}
}
printf("\n");
return 0;
}
2. 用选择法对10个整数排序
#include <stdio.h>
int main()
{
int i, j, min, temp, a[11];
printf("enter data:\n");
for (i = 1; i <= 10; i++)
{
printf("a[%d]=", i);
scanf("%d", &a[i]);
}
printf("\n");
printf("The orginal numbers:\n");
for (i = 1; i <= 10; i++)
printf("%5d", a[i]);
printf("\n");
for (i = 1; i <= 9; i++)
{
min = i;
for (j = i + 1; j <= 10; j++)
if (a[min] > a[j]) min = j;
temp = a[i];
a[i] = a[min];
a[min] = temp;
}
printf("\nThe sorted numbers:\n");
for (i = 1; i <= 10; i++)
printf("%5d", a[i]);
printf("\n");
return 0;
}
3. 求一个3 X 3的整形矩阵对角线元素之和
#include <stdio.h>
int main()
{
int a[3][3], sum = 0;
int i, j;
printf("enter data:\n");
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%3d", &a[i][j]);
for (i = 0; i < 3; i++)
sum = sum + a[i][i];
printf("sum=%6d\n", sum);
return 0;
}
4. 有一个已经排好序的数组,要求输入一个数后,按原来顺序的规律将它插入数组中
#include <stdio.h>
int main()
{
int a[11] = { 1,4,6,9,13,16,19,28,40,100 };
int temp1, temp2, number, end, i, j;
printf("array a:\n");
for (i = 0; i < 10; i++)
printf("%5d", a[i]);
printf("\n");
printf("insert data:");
scanf("%d", &number);
end = a[9];
if (number > end)
a[10] = number;
else
{
for (i = 0; i < 10; i++)
{
if (a[i] > number)
{
temp1 = a[i];
a[i] = number;
for (j = i + 1; j < 11; j++)
{
temp2 = a[j];
a[j] = temp1;
temp1 = temp2;
}
break;
}
}
}
printf("Now array a:\n");
for (i = 0; i < 11; i++)
printf("%5d", a[i]);
printf("\n");
return 0;
}
#include <stdio.h>
#define N 5
int main()
{
int a[N], i, temp;
printf("enter array a:\n");
for (i = 0; i < N; i++)
scanf("%d", &a[i]);
printf("array a:\n");
for (i = 0; i < N; i++)
printf("%4d", a[i]);
for (i = 0; i < N / 2; i++) //循环的作用是将对称的元素的值互换
{
temp = a[i];
a[i] = a[N - i - 1];
a[N - i - 1] = temp;
}
printf("\nNow,array a:\n");
for (i = 0; i < N; i++)
printf("%4d", a[i]);
printf("\n");
return 0;
}
6. 输出一下的杨慧三角(要求输出10行)
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
……
#include <stdio.h>
#define N 10
int main()
{
int i, j, a[N][N];
for (i = 0; i < N; i++)
{
a[i][i] = 1;
a[i][0] = 1;
}
for (i = 2; i < N; i++)
for (j = 1; j <= i - 1; j++)
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
for (i = 0; i < N; i++)
{
for (j = 0; j <= i; j++)
printf("%6d", a[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
7. 输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如:
8 1 6
3 5 7
4 9 2
要求输出1~n²的自然数构成的魔方阵。
#include <stdio.h>
int main()
{
int a[15][15], i, j, k, p, n;
p = 1;
while (p == 1)
{
printf("enter n(n=1--15):");
scanf("%d", &n);
if ((n != 0) && (n <= 15) && (n % 2 != 0))
p = 0;
}
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
a[i][j] = 0;
j = n / 2 + 1;
a[1][j] = 1;
for (k = 2; k <= n * n; k++)
{
i = i - 1;
j = j + 1;
if ((i < 1) && (j > n))
{
i = i + 2;
j = j - 1;
}
else
{
if (i < 1) i = n;
if (j > n) j = 1;
}
if (a[i][j] == 0)
a[i][j] = k;
else
{
i = i + 2;
j = j - 1;
a[i][j] = k;
}
}
for (i = 1; i <= n; i++)
{
for (j = 1; j <= n; j++)
printf("%5d", a[i][j]);
printf("\n");
}
return 0;
}
8. 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。
#include <stdio.h>
#define N 4
#define M 5 //数组为4行5列
int main()
{
int i, j, k, a[N][M], max, maxj, flag;
printf("please input matrix:\n");
for (i = 0; i < N; i++) //输入数组
for (j = 0; j < M; j++)
scanf("%d", &a[i][j]);
for (i = 0; i < N; i++)
{
max = a[i][0]; //开始时假设a[i][0]最大
maxj = 0; //将列号0赋给maxj保存
for (j = 0; j < M; j++) //找出第i行中的最大数
if (a[i][j] > max)
{
max = a[i][j]; //将本行的最大数存放在max中
maxj = j; //将最大数所在的列号存放在maxj中
}
flag = 1; //先假设是鞍点,以flag为1代表
for (k = 0; k < N; k++)
if (max > a[k][maxj]) //将最大数和其同列元素相比
{
flag = 0; //如果max不是同列最小,表示不是鞍点令flag1为0
continue;
}
if (flag) //如果flag1为1表示是鞍点
{
printf("a[%d][%d]=%d\n", i, maxj, max); //输出鞍点的值和所在行列号
break;
}
}
if (!flag) //如果flag为0表示鞍点不存在
printf("It is not exist!\n");
return 0;
}