C语言经典案例——第四章 数组

本篇提供了关于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] 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;
}

C语言经典案例——第四章 数组_第1张图片

 /*Case 2
投票
已知有三位候选人参加竞选,先输入投票的人数和投票内容,统计三位候选人的得票,根据总票数输出获胜者*/

int MAX(int x,int y,int z) {
	if (xz)
		{
			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;
}

C语言经典案例——第四章 数组_第2张图片

 /*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;
}

 C语言经典案例——第四章 数组_第3张图片

 /*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;
}

C语言经典案例——第四章 数组_第4张图片

 /*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;
}

C语言经典案例——第四章 数组_第5张图片

 /*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;
}

C语言经典案例——第四章 数组_第6张图片

 /*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;
}

C语言经典案例——第四章 数组_第7张图片

 /*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;
}

C语言经典案例——第四章 数组_第8张图片

C语言经典案例——第四章 数组_第9张图片

C语言经典案例——第四章 数组_第10张图片

本篇的所有代码是在VS编译环境下操作的,如有错误,望大家指正!!!

 

你可能感兴趣的:(题目,c语言,c++)