第5章 数组
示例代码:
示例代码 5-1
/*
输入5名学生的分数并显示它们的总分和平均分
*/
#include
int main(void)
{
int uchida;
int satoh;
int hiraki;
int masaki;
int sum = 0;
puts("请输入分数。");
printf("1号:"); scanf("%d", &uchida);
printf("2号:"); scanf("%d", &satoh);
printf("3号:"); scanf("%d", &hiraki);
printf("4号:"); scanf("%d", &masaki);
printf("5号:"); scanf("%d", &masaki);
sum += uchida;
sum += satoh;
sum += hiraki;
sum += masaki;
sum += masaki;
printf("总分:%5d\n", sum);
printf("平均分:%5.1f\n", (double)sum / 5);
return (0);
}
示例代码 5-2
/*
依次把1,2,3,4,5赋值给数组每个元素并显示
*/
#include
int main(void)
{
int vc[5]; // 包含5个元素的数组
vc[0] = 1;
vc[1] = 2;
vc[2] = 3;
vc[3] = 4;
vc[4] = 5;
printf("vc[0] = %d\n", vc[0]);
printf("vc[1] = %d\n", vc[1]);
printf("vc[2] = %d\n", vc[2]);
printf("vc[3] = %d\n", vc[3]);
printf("vc[4] = %d\n", vc[4]);
return (0);
}
示例代码 5-3
/*
依次把1/2/3/4/5赋值给数组每个元素并显示 (使用for语句)
*/
#include
int main(void)
{
int i;
int vc[5]; // 包含5个元素的数组
for (i = 0; i < 5; i++)
vc[i] = i + 1;
for (i = 0; i < 5; i++)
printf("vc[%d] = %d\n", i, vc[i]);
return (0);
}
示例代码 5-4
/*
将数组的全部元素赋值为(0.0)并显示
*/
#include
int main(void)
{
int i;
double vd[5];
for (i = 0; i < 5; i++)
vd[i] = 0.0;
for (i = 0; i < 5; i++)
printf("vd[%d] = %.1f\n", i, vd[i]);
return (0);
}
示例代码 5-5
/*
从头开始顺次为数组各元素进行初始化(1,2,3,4,5)并进行显示
*/
#include
int main(void)
{
int i;
int vc[5] = {1, 2, 3, 4, 5};
for (i = 0; i < 5; i++)
printf("vc[%d] = %d\n", i, vc[i]);
return (0);
}
示例代码 5-6
/*
把数组中的全部元素赋值到另一个数组中
*/
#include
int main(void)
{
int i;
int va[5] = {15, 20, 30};
int vb[5];
for (i = 0; i < 5; i++)
vb[i] = va[i];
puts(" va vb");
puts("------");
for (i = 0; i < 5; i++)
printf("%3d%3d\n", va[i], vb[i]);
return (0);
}
示例代码 5-7
/*
输入数组元素的值并显示
*/
#include
int main(void)
{
int i;
int vx[5];
for (i = 0; i < 5; i++) {
printf("vx[%d]:", i);
scanf("%d", &vx[i]);
}
for (i = 0; i < 5; i++)
printf("vx[%d]=%d\n", i, vx[i]);
return (0);
}
示例代码 5-8
/*
对数组中的全部元素进行倒序排列
*/
#include
int main(void)
{
int i;
int vx[5];
for (i = 0; i < 5; i++) {
printf("vx[%d]:", i);
scanf("%d", &vx[i]);
}
for (i = 0; i < 2; i++) {
int temp = vx[i];
vx[i] = vx[4 - i];
vx[4 - i] = temp;
}
for (i = 0; i < 5; i++)
printf("vx[%d]=%d\n", i, vx[i]);
return (0);
}
示例代码 5-9
/*
输入5名学生的分数并显示出它们的总分和平均分
*/
#include
int main(void)
{
int i;
int tensu[5]; // 5名学生的分数
int sum = 0; // 总分
puts("请输入学生的分数。");
for (i = 0; i < 5; i++) {
printf("%2d号:", i + 1);
scanf("%d", &tensu[i]);
sum += tensu[i];
}
printf("总分:%5d\n", sum);
printf("平均分:%5.1f\n", (double)sum / 5);
return (0);
}
示例代码 5-10
/*
输入5名学生的分数并显示出它们的总分和平均分
*/
#include
#define NUMBER 5 // 学生人数
int main(void)
{
int i;
int tensu[NUMBER]; // 5名学生的分数
int sum = 0; // 总分
puts("请输入学生的分数。");
for (i = 0; i < NUMBER; i++) {
printf("%2d号:", i + 1);
scanf("%d", &tensu[i]);
sum += tensu[i];
}
printf("总分:%5d\n", sum);
printf("平均分:%5.1f\n", (double)sum / NUMBER);
return (0);
}
示例代码 5-11
/*
输入5名学生的分数并显示出其中的最高分和最低分
*/
#include
#define NUMBER 5 // 学生人数
int main(void)
{
int i;
int tensu[NUMBER]; // 5名学生的分数
int max, min; // 总分
puts("请输入学生的分数。");
for (i = 0; i < NUMBER; i++) {
printf("%2d号:", i + 1);
scanf("%d", &tensu[i]);
}
min = max = tensu[0];
for (i = 1; i < NUMBER; i++) {
if (tensu[i] > max) max = tensu[i];
if (tensu[i] < min) min = tensu[i];
}
printf("最高分:%d\n", max);
printf("最低分:%d\n", min);
return (0);
}
示例代码 5-12
/*
输入5名学生的分数并显示出60分以上的一览表
*/
#include
#define NUMBER 5 // 学生人数
int main(void)
{
int i;
int snum = 0; // 及格学生人数
int tensu[NUMBER]; // NUMBER名学生的分数
int succs[NUMBER]; // 及格学生一览表(保存及格学生的下标)
puts("请输入学生的分数。");
for (i = 0; i < NUMBER; i++) {
printf("%2d号:", i + 1);
scanf("%d", &tensu[i]);
if (tensu[i] >= 60)
succs[snum++] = i; // 添加到及格学生一览表中
}
puts("及格学生一览表");
puts("--------------");
for (i = 0; i < snum; i++)
printf("%2d号(%3d分)\n", succs[i] + 1, tensu[succs[i]]);
return (0);
}
示例代码 5-13
/*
输入学生的分数并显示出分布情况
*/
#include
#define NUMBER 80 // 人数上限
int main(void)
{
int i, j;
int num; // 实际的人数
int tensu[NUMBER]; // 学生的分数
int bunpu[11] = {0}; // 分布图
printf("请输入学生人数:");
do {
scanf("%d", &num);
if (num < 1 || num > NUMBER)
printf("\a人数范围[1到%d] :", NUMBER);
} while (num < 1 || num > NUMBER);
puts("请输入学生的分数。");
for (i = 0; i < num; i++) {
printf("%2d号:", i + 1);
do {
scanf("%d", &tensu[i]);
if (tensu[i] < 0 || tensu[i] > 100)
printf("\a分数范围[0到100]:");
} while (tensu[i] < 0 || tensu[i] > 100) ;
bunpu[tensu[i] / 10]++;
}
puts("\n----分布图----");
printf(" 100:");
for (j = 0; j < bunpu[10]; j++)
putchar('*');
putchar('\n');
for (i = 9; i >= 0; i--) {
printf("%3d - %3d:", i * 10, i * 10 + 9);
for (j = 0; j < bunpu[i]; j++)
putchar('*');
putchar('\n');
}
return (0);
}
示例代码 5-14
/*
计算2行3列矩阵的和
*/
#include
int main(void)
{
int i, j;
int ma[2][3] = {{1, 2, 3}, {4, 5, 6}};
int mb[2][3] = {{6, 3, 4}, {5, 1, 2}};
int mc[2][3] ={0};
for (i = 0; i < 2; i++)
for (j = 0; j < 3; j++)
mc[i][j] = ma[i][j] + mb[i][j];
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++)
printf("%3d", mc[i][j]);
putchar('\n');
}
return (0);
}
示例代码 5-15
/*
计算出1000以内的质数(第1版)
*/
#include
int main(void)
{
int i, no;
unsigned long counter = 0;
for (no = 2; no <= 1000; no++) {
for (i = 2; i < no; i++) { // 能被整除的不是质数
counter++; // 退出上述循环
if (no % i == 0)
break;
}
if (no == i) // 直到最后也未被整除
printf("%d\n", no);
}
printf("乘除运算的次数:%lu\n", counter);
return (0);
}
示例代码 5-16
/*
计算出1000以内的质数(第2版)
*/
#include
int main(void)
{
int i, no;
unsigned long counter = 0;
no = 2; // 2是偶数中唯一的质数
printf("%d\n", no++);
for (; no <= 1000; no += 2) { // 只把奇数作为判断对象
for (i = 2; i < no; i++) { // 能被整除的不是质数
counter++; // 退出上述循环
if (no % i == 0)
break;
}
if (no == i) // 直到最后也未被整除
printf("%d\n", no);
}
printf("乘除运算的次数:%lu\n", counter);
return (0);
}
示例代码 5-17
/*
计算出1000以内的质数(第3版)
*/
#include
int main(void)
{
int i, no;
unsigned long counter = 0;
no = 2; // 2是偶数中唯一的质数
printf("%d\n", no++);
for (; no <= 1000; no += 2) { // 只把奇数作为判断对象
for (i = 3; i < no; i += 2) { // 只判断能否被奇数整除
counter++; // 退出上述循环
if (no % i == 0)
break;
}
if (no == i) // 直到最后也未被整除
printf("%d\n", no);
}
printf("乘除运算的次数:%lu\n", counter);
return (0);
}
示例代码 5-18
/*
计算出1000以内的质数(第4版)
*/
#include
int main(void)
{
int i, no;
int prime[500]; // 用来保存质数的数组
int ptr = 0; // 已经的到的质数个数
unsigned long counter = 0;
prime[ptr++] = 2;
prime[ptr++] = 3;
for (no = 5; no <= 1000; no += 2) { // 只把奇数作为判断对象
for (i = 1; i < ptr; i++) { // 尝试能否被已经得到的质数整除
counter++;
if (no % prime[i] == 0) // 能被整除的不是质数
break; // 退出上述循环
}
if (ptr == i) // 直到最后也未被整除
prime[ptr++] = no; // 添加到数组中
}
for (i = 0; i < ptr; i++)
printf("%d\n", prime[i]);
printf("乘除运算的次数:%lu\n", counter);
return (0);
}
示例代码 5-19
/*
计算出1000以内的质数(第5版)
*/
#include
int main(void)
{
int i, no;
int prime[500]; // 用来保存质数的数组
int ptr = 0; // 已经的到的质数个数
unsigned long counter = 0;
prime[ptr++] = 2;
prime[ptr++] = 3;
for (no = 5; no <= 1000; no += 2) { // 只把奇数作为判断对象
int flag = 0;
for (i = 1; counter++, prime[i] * prime[i] <= no; i++) {
counter++;
if (no % prime[i] == 0) { // 能被整除的不是质数
flag = 1;
break;
} // 退出上述循环
}
if (!flag) // 直到最后也未被整除
prime[ptr++] = no; // 添加到数组中
}
for (i = 0; i < ptr; i++)
printf("%d\n", prime[i]);
printf("乘除运算的次数:%lu\n", counter);
return (0);
}
练习代码:
练习代码e5-1
/*
依次把0,1,2,3,4赋值给数组每个元素并显示 (使用for语句)
*/
#include
int main(void)
{
int i;
int vc[5]; // 包含5个元素的数组
for (i = 0; i < 5; i++)
vc[i] = i;
for (i = 0; i < 5; i++)
printf("vc[%d] = %d\n", i, vc[i]);
return (0);
}
练习代码e5-2
/*
依次把5,4,3,2,1赋值给数组每个元素并显示 (使用for语句)
*/
#include
int main(void)
{
int i;
int vc[5]; // 包含5个元素的数组
for (i = 0; i < 5; i++)
vc[i] = 5 - i;
for (i = 0; i < 5; i++)
printf("vc[%d] = %d\n", i, vc[i]);
return (0);
}
练习代码e5-3
/*
从头开始顺次为数组各元素进行初始化(5,4,3,2,1)并进行显示
*/
#include
int main(void)
{
int i;
int vc[5] = {5, 4, 3, 2, 1};
for (i = 0; i < 5; i++)
printf("vc[%d] = %d\n", i, vc[i]);
return (0);
}
练习代码e5-4
/*
把数组中的全部元素倒序赋值到另一个数组中
*/
#include
int main(void)
{
int i;
int va[5] = {15, 20, 30};
int vb[5];
for (i = 0; i < 5; i++)
vb[i] = va[4 - i];
puts(" va vb");
puts("------");
for (i = 0; i < 5; i++)
printf("%3d%3d\n", va[i], vb[i]);
return (0);
}
练习代码e5-5
/*
对数组中的全部元素进行倒序排列
*/
#include
int main(void)
{
int i;
int vx[8];
for (i = 0; i < 8; i++) {
printf("vx[%d]:", i);
scanf("%d", &vx[i]);
}
for (i = 0; i < 5; i++) {
int temp = vx[i];
vx[i] = vx[7 - i];
vx[7 - i] = temp;
}
for (i = 0; i < 8; i++)
printf("vx[%d]=%d\n", i, vx[i]);
return (0);
}
练习代码e5-6
/*
double类型赋值给int类型
*/
int main(void)
{
double a;
int b;
a = b = 1.5;
printf("a = %f\n", a);
printf("b = %d\n", b);
return (0);
}
练习代码e5-7
/*
计算矩阵x和y的积
*/
int main(void)
{
int x[2][3] = {{1, 2, 3}, {4, 5, 6},};
int y[3][2] = {{1, 5}, {5, 3}, {8, 1}};
int z[2][2] = {0};
int i, j;
for (i = 0; i < 3; i++)
z[0][0] += x[0][i] * y[i][0];
for (i = 0; i < 3; i++)
z[0][1] += x[0][i] * y[i][1];
for (i = 0; i < 3; i++)
z[1][0] += x[1][i] * y[i][0];
for (i = 0; i < 3; i++)
z[1][1] += x[1][i] * y[i][1];
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
printf("%3d", z[i][j]);
putchar('\n');
}
system("pause");
return (0);
}