educoder程序设计基础C语⾔实训⼀维数组和⼆维数组
1. 数组的概念
程序设计所涉及和处理的数据类型有:整型、实型、字符型,它们都属于C语⾔的基本数据类型。但在实际应⽤中,需要处理的数据往往是复杂多样的,C语⾔提供了⼀些更为复杂的数据类型,称为构造类型。数组是最基本的构造类型,可以⽅便地处理⼀批具有相同性质的数据的问题。
2. 什么地⽅要⽤到数组
关于数组我们就可以把它看作是⼀个类型的所有数据的⼀个集合,并⽤⼀个数组下标来区分或指定每⼀个数。例如⼀个班级通常会有⼏⼗个⼈,但是⽼师来认识他们的时候⾸先会把他们看作是某某班的成员,然后再利⽤他们的学号来区分每⼀个学⽣,这时候,班级就是⼀个数组,⽽学号就是数组的下标,当我们指明是⼏号学号的时候就到了这个学⽣。
同样在编程中,如果有⼀组相同数据类型的数据,例如有10个数字,这时候如果我们要⽤变量来存放它们的话,就要分别使⽤10个变量,⽽且要记住这10个变量的名字,这会⼗分的⿇烦,这时候就可以⽤⼀个数组变量来存放他们。使⽤数组会让程序变的简单,⽽且避免了定义多个变量的⿇烦。
3. 数组的形式
数组有多种形式,通常分为⼀维数组、⼆维数组及多维数组。数组的正确定义和引⽤是我们必须要掌握的知识。利⽤数组中每个元素的规律变化可以⽅便的对数组进⾏操作。
4. 实训
第1关:排序问题
任务描述
本关任务:将⼗个数进⾏从⼤到⼩的顺序进⾏排列。
编程要求
根据提⽰,在右侧编辑器Begin-End处补充代码。
输⼊
输⼊⼗个整数。
输出
以从⼤到⼩的顺序输出这个⼗个数。
测试说明
样例输⼊:
1 2 3 4 5 6 7 8 9 10
样例输出:
10 9 8 7 6 5 4 3 2 1
开始你的任务吧,祝你成功!
int a[10];
int i,j,t;
for(i=0; i<10; i++)
scanf("%d",&a[i]);
for(j=0; j<9; j++)
for(i=0; i<9-j; i++)
if(a[i]<a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
for(i=0; i<10; i++)
printf("%d ",a[i]);
/*********End**********/
return0;
}
第2关:查整数
任务描述
题⽬描述:给出⼀个包含n个整数的数列,问整数a在数列中的第⼀次出现是第⼏个。
编程要求
根据提⽰,在右侧编辑器Begin-End处补充代码。
输⼊
第⼀⾏包含⼀个整数n。
第⼆⾏包含n个⾮负整数,为给定的数列,数列中的每个数都不⼤于10000。
第三⾏包含⼀个整数a,为待查的数。
输出
如果a在数列中出现了,输出它第⼀次出现的位置(位置从1开始编号),否则输出-1。
测试说明
样例输⼊:
6
1 9 4 8 3 9
9
样例输出:
2
提⽰:
数据规模与约定。
1 <= n <= 1000
开始你的任务吧,祝你成功!
int n;
scanf("%d",&n);
int a[n];
int num;
int i;
int flag=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&num);
for(i=0;i<n;i++)
{
if(a[i]==num)
{
flag=1;
printf("%d",i+1);
break;
}
}
if(flag==0)
printf("-1");
/*********End**********/
return0;
}
第3关:计算数组中元素的最⼤值及其所在的⾏列下标值
任务描述
题⽬描述:按如下函数原型编程从键盘输⼊⼀个m⾏n列的⼆维数组,然后计算数组中元素的最⼤值及其所在的⾏列下标值。其中m和n的值由⽤户键盘输⼊。已知m和n的值都不超过10。
输⼊
输⼊数组⼤⼩:"%d,%d"
下⾯输⼊数组中元素。
输出
输出格式:
数组⼤⼩输⼊提⽰信息:“Input m, n:”
数组元素输⼊提⽰信息:"Input %d*%d array: "
输出格式:“max=%d, row=%d, col=%d”
样例输⼊
5,5
1 2 3 4 5
4 5 6 100 2
3 2 1 5 6
1 2 3 5 4
3 5 6
4 8
样例输出
Input m, n:Input 5*5 array:
max=100, row=2, col=4
开始你的任务吧,祝你成功!
int m,n,j,i,max,row,col;
printf("Input m, n:");
scanf("%d,%d",&m,&n);
int a[m][n];
printf("Input %d*%d array:\n",m,n);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
}
max=a[0][0];
row=1;
col=1;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(max< a[i][j])
{
max=a[i][j];
row=i+1;
col=j+1;
}
printf("max=%d, row=%d, col=%d",max,row,col);
/*********End**********/
return0;
}
第4关:⼆分查
任务描述
题⽬描述:将n个从⼩到⼤排序的整数(n<1000000)从1~n进⾏编号,并⼀个待查的整数m,请使⽤⼆分法进⾏查。####相关知识(略)
####编程要求
根据提⽰,在右侧编辑器Begin-End处补充代码。
输⼊
输⼊包括3⾏,第⼀⾏为整数n,第⼆⾏包括n个整数,以空格分隔,第三⾏为整数m。
输出
如果能够在序列中到整数m,则输出编号(如果存在多个编号,返回编号最⼩的),如果不存在,则输出None。
测试说明
样例输⼊:
10
1 2 4 5 6 7 8 9 10 11
10
样例输出:
9
开始你的任务吧,祝你成功!
int a[N];
int main(void)
{
/*********Begin*********/
int n, x, i, j, mid;
/* 读⼊数据 */
scanf("%d",&n);
for(i =0; i < n; i++)
scanf("%d",&a[i]);
scanf("%d",&x);
/* ⼆分查 */
int ans =-1;
i =0, j = n -1;
while(i <= j){
mid =(i + j)/2;
if(a[mid]== x){
ans = mid;
break;
}else if(a[mid]> x)
j = mid -1;
else if(a[mid]< x)
一个完整的c语言程序i = mid +1;
}
if(ans ==-1)
printf("None\n");
else
printf("%d\n", ans +1);
/*********End**********/
return0;
}
第5关:鞍点
任务描述
题⽬描述:出具有m⾏n列⼆维数组Array的“鞍点”,即该位置上的元素在该⾏上最⼤,在该列上最⼩,其中1<=m,n<=10。
编程要求
输⼊
输⼊数据有多⾏,第⼀⾏有两个数m和n,下⾯有m⾏,每⾏有n个数。
输出
按下列格式输出鞍点:
Array[i][j]=x
其中x代表鞍点,i和j为鞍点所在的数组⾏和列下标,我们规定数组下标从0开始。
⼀个⼆维数组并不⼀定存在鞍点,此时请输出None
我们保证不会出现两个鞍点的情况,⽐如:
3 3
1 2 3
1 2 3
3 6 8
测试说明
平台会对您的代码进⾏运⾏测试,如果实际输出与预期输出相同,则算通关。
样例输⼊:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论