本篇提供了关于C语言程序设计中数组部分的经典案例,可供C语言的初学者们进行一个学习和编译练习。
/*Case 1
最大值和最小值
先输入数组的大小和各个数组元素,然后求出数组中的最大值和最小值,以及他们所在的位置,依次输出到屏幕上*/
int main() {
int a[50]; //定义数组存放元素
int MAX, MIN; //定义最大值和最小值变量
int i, n;
int j = 0; //最小值位置
int k = 0; //最大值位置
printf("请输入数组的大小:");
scanf("%d", &n);
printf("请依次输入数组的元素:");
for ( i = 0; i < n; i++)
{
scanf("%d", &a[i]);
}
MIN = a[0]; //默认第一位是最小值
for ( i = 1; i < n; i++) //依次比较换位得到最小值
{
if (a[i]<MIN)
{
MIN = a[i];
j = i + 1; //最小值的位置也依次后移
}
}
MAX = a[0]; //默认第一位是最大值
for (i = 1; i < n; i++) //依次比较换位得到最小值
{
if (a[i] > MAX)
{
MAX = a[i];
k = i + 1; //最大值的位置也依次后移
}
}
printf("最小值的位置是:%d\n", j);
printf("最小值是:%d\n", MIN);
printf("最大值的位置是:%d\n", k);
printf("最小值是:%d\n", MAX);
return 0;
}
/*Case 2
投票
已知有三位候选人参加竞选,先输入投票的人数和投票内容,统计三位候选人的得票,根据总票数输出获胜者*/
int MAX(int x,int y,int z) {
if (x<y)
{
if (y<z)
{
printf("Candidate3的票数最高!");
}
else
{
printf("Candidate2的票数最高!");
}
}
else
{
if (x>z)
{
printf("Candidate1的票数最高!");
}
else
{
printf("Candidate3的票数最高!");
}
}
return MAX;
}
int main() {
int i, n, array[50];
int Candidate1 = 0;
int Candidate2 = 0;
int Candidate3 = 0;
printf("请输入投票者的数量(小于50):");
scanf("%d", &n);
printf("请输入1或2或3来支持对应的候选人:");
for ( i = 0; i < n; i++)
{
scanf("%d", &array[i]);
}
for ( i = 0; i < n; i++)
{
if (array[i]==1)
{
Candidate1++;
}
else if (array[i] == 2)
{
Candidate2++;
}
else if (array[i] == 3)
{
Candidate3++;
}
}
printf("Candidate1:%d\nCandidate2:%d\nCandidate3:%d\n", Candidate1, Candidate2, Candidate3);
MAX(Candidate1,Candidate2,Candidate3);
return 0;
}
/*Case 3
神奇魔方阵
实现一个5行5列的魔方阵(每个元素都不相等,每行和每列以及主副对角线上各元素和相等)*
int main() {
int i, j;
int x = 1, y = 3; //从第一行中间位置开始
int a[6][6] = { 0 }; //定义一个二维数组来存储魔方阵
for ( i = 1; i <= 25; i++) //魔方阵中共25个数字
{
a[x][y] = i; //把此时的i存储到a[x][y]这个位置
if (x==1&&y==5) //如果位置在右上角,下一个数字放在正下方
{
x++;
continue; //结束本次循环
}
if (x==1) //如果放在第一行
{
x = 5; //则下一个数字放在最后一行
}
else //否则将下一个数字放在上一行
{
x--;
}
if (y==5) //如果放在最后一列
{
y = 1; //则下一个数字放在第一列
}
else //否则将下一个数字放在下一列
{
y++;
}
if (a[x][y]!=0) //判断经过上面步骤确定的位置上是否有非零数
{
x = x + 2; //若表达式为真则行数加2
y = y - 1; //列数减1
}
}
for ( i = 1; i <= 5; i++) //输出二维数组
{
for ( j = 1; j <= 5; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
return 0;
}
/*Case 4
校园十大歌手
冒泡排序法*/
void BubbleSort(int s[], int n) { //函数参数:数组与数组大小
int i, j, temp;
for ( i = 0; i < n-1; i++) //从0开始进行n-1轮排序
{ //每轮使较大的数后排
for ( j = 0; j < n-i-1; j++) //每轮两两比较的数递减
{
if (s[j]>s[j+1]) //符合条件就互换
{
temp = s[j];
s[j] = s[j + 1];
s[j + 1] = temp;
}
}
}
}
int main() {
int i; //用于循环控制
int a[10]; //定义一个a数组来存储分数
printf("请输入十大歌手的成绩:");
for ( i = 0; i < 10; i++)
{
scanf("%d",&a[i]);
}
BubbleSort(a, 10); //调用冒泡排序
printf("排序后结果:");
for ( i = 0; i < 10; i++)
{
printf("%d ",a[i]);
}
printf("\n");
return 0;
}
/*Case 5
杨辉三角
打印出杨辉三角的前10行*/
/*Case 5
杨辉三角
打印出杨辉三角的前10行*/
int main() {
int i, j;
int arr[10][10] = {1}; //定义一个10行10列的数组,初始化为1
for ( i = 1; i < 10; i++) //外层循环控制杨辉三角的行数
{
arr[i][0] = 1; //每一行第一个元素都赋值为1
for ( j = 1; j <= i; j++) //内层控制杨辉三角的列数
{
//每个元素等于左上方和正上方两数之和
arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
}
}
for ( i = 0; i < 10; i++) //双重循环打印元素
{
for ( j = 0; j <= i; j++)
{
printf("%-5d", arr[i][j]);
}
printf("\n");
}
return 0;
}
/*Case 6
兔子去哪儿了
一只兔子躲进了10个环形分布的洞的某一个中。
狼在第一个洞没有找到兔子,就隔一个洞,到第三个洞去找;
也没有找到,就隔两个洞,到第六个洞去找。
以后每次多一个洞去找兔子……这样下去,如果一直找不到兔子,请问兔子可能在哪个洞中?*/
int main() {
int n = 0;
int i = 0;
int x = 0;
int a[11];
for ( i = 0; i < 11; i++) //把数组中每个元素都赋值1
{
a[i] = 1;
}
for ( i = 0; i < 500; i++) //进行穷举搜索(假设最大搜寻次数为500)
{
n += (i + 1); //按规律累加
x = n % 10; //大于10时对10取余
a[x] = 0; //找过的地方置为0
}
for ( i = 0; i < 10; i++)
{
if (a[i]) //如果元素是1就说明没找过
printf("可能在第%d个洞\n", i);
}
return 0;
}
/*Case 7
矩阵转置*/
int main() {
int i, j, row, column;
int a[10][10], b[10][10];
printf("请输入行数(小于10):");
scanf("%d", &row);
printf("请输入列数(小于10):");
scanf("%d", &column);
printf("依次输入数组的元素:");
for ( i = 0; i < row; i++)
{
for ( j = 0; j < column; j++)
{
scanf("%d", &a[i][j]);
}
}
printf("矩阵转置之前:\n");
for (i = 0; i < row; i++)
{
for (j = 0; j < column; j++)
{
printf("\t%d", a[i][j]);
}
printf("\n");
}
//矩阵转换过程
for ( i = 0; i < row; i++)
{
for ( j = 0; j < column; j++)
{
//将a数组的i行j列赋值给b数组的j行i列元素
b[j][i] = a[i][j];
}
}
printf("矩阵转置之后:\n");
for (i = 0; i < column; i++)
{
for (j = 0; j < row; j++)
{
printf("\t%d", b[i][j]);
}
printf("\n");
}
return 0;
}
/*Case 8
双色球
由程序随机产生6个红色球号码和1个蓝色球号码*/
int main() {
srand((unsigned int)time(NULL)); //使用系统定时器的值作为随机数种子
int i = 0;
int j = 0;
int temp; //定义一个临时变量,来暂时保存随机数
int red[6]; //定义red数组,保存随机生成的红色球号码
int blue; //定义blue整型变量,保存随机生成的蓝色球号码
for ( i = 0; i < 6; ) //随机生成6个红色球号码
{
temp = rand() % 33 + 1;
for ( j = 0; j < i; j++)
{
//依次判断数组中的已生成红色球号码是否与新生成的号码相同
if (red[j]==temp) //如果相同,则重新生成新的红色球号码
{
break; //跳出内层循环for
}
}
if (i==j)
{
red[i] = temp; //将新生成的红色球号码保存在red数组中
i++; //增加红色球数量
}
}
blue = rand() % 16 + 1; //随机产生蓝色球号码
printf("Red:");
for ( i = 0; i < 6; i++)
{
printf("%d ",red[i]);
}
printf("\n");
printf("Blue:%d\n", blue);
return 0;
}
本篇的所有代码是在VS编译环境下操作的,如有错误,望大家指正!!!