数组典型题目
3、从键盘输入11个数存入一维数组中,将左半部分的元素值取倒数后重新存入该数组中,并输出所有元素。
解法1:
main()
{float a[11];
int i;
for(i=0;i<11;i++)
scanf("%f",&a[i]);
for(i=0;i<5;i++) /*左半部分下标为0到4*/
a[i]=1/a[i];
for(i=0;i<11;i++)
printf("%f,",a[i]);
printf("\n");
}
解法2:
#define N 11
main()
{float a[N];
int i;
for(i=0;i<N;i++)
scanf("%f",&a[i]);
for(i=0;i<N/2;i++) /*左半部分下标为0到N/2-1*/
a[i]=1/a[i];
for(i=0;i<N;i++)
printf("%f,",a[i]);
printf("\n");
}
4、从键盘输入11个数存入一维数组中,将右半部分的元素值取相反数后重新存入该数组中,并输出所有元素。
解法1:
main()
{float a[11];
int i;
for(i=0;i<11;i++)
scanf("%f",&a[i]);
for(i=6;i<11;i++) /*右半部分下标为6到10*/
a[i]=-a[i];
for(i=0;i<11;i++)
printf("%f,",a[i]);
printf("\n");
}
解法2:#define N 11
main()
{float a[N];
int i;
for(i=0;i<N;i++)
scanf("%f",&a[i]);
for(i=(N+1)/2;i<=N-1;i++) /*右半部分下标为(N+1)/2到N-1*/
a[i]=-a[i];
for(i=0;i<N;i++)
printf("%f,",a[i]);
printf("\n");
}
5、求出斐波那契数列的前20项并输出。
main()
{long f[20]={1,1};
int i;
for(i=2;i<=19;i++)
f[i]=f[i-2]+f[i-1];
for(i=0;i<=19;i++)
printf("%12ld",f[i]);
}
6、从键盘输入10个数,求出其中的最大数并输出。
main()
{int a[10],max,i;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<=9;i++)
{if(a[i]>max)
max=a[i];
}
printf("max=%d\n",max);
}
main()
{int a[10],max,min,i;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
max=a[0];
for(i=1;i<=9;i++)
{if(a[i]>max)
max=a[i];
}
min=a[0];
for(i=1;i<=9;i++)
{if(a[i]<min)
min=a[i];
}
printf("max=%d\n",max);
printf("min=%d\n",min);
}
8、从键盘输入11个数存入一维数组a中,再将其中的值按相反的顺序存入数组b中并输出。
解法1:
main()
{int a[11],b[11],i;
for(i=0;i<11;i++)
scanf("%d",&a[i]);
for(i=0;i<11; i++)
{b[i]=a[10-i];
printf("%d,",b[i]);
}
printf("\n");
}
8A、从键盘输入11个数存入一维数组中,将其中的值前后倒置后重新存入该数组中并输出。
解法1:
main()
{int a[11],i,j,t;
for(i=0;i<=10;i++) /*用循环输入11个元素*/
scanf("%d",&a[i]);
i=0;j=10;
while(i<j)
{t=a[i];a[i]=a[j];a[j]=t; /*交换对应元素的值*/
i++;j--;
}
for(i=0;i<=10;i++) /*用循环输出11个元素*/
printf("%d,",a[i]);
printf("\n");
}
9、从键盘输入11个数存入一维数组中,将该数组中左半部分与右半部分的值平移交换后重新存入该数组中并输出。
解法1:
main()
{int a[11],i,t;
for(i=0;i<11;i++) /*用循环输入11个元素*/
scanf("%d",&a[i]);
for(i=0;i<=4; i++)
{t=a[i];
a[i]=a[i+6];
a[i+6]=t; /*交换对应元素的值*/
}
for(i=0;i<11;i++) /*用循环输出11个元素*/
printf("%d,",a[i]);
printf("\n");
}
12A、从键盘输入10个学生的姓名和成绩,用选择法按成绩降序排序并输出(要求姓名和成绩对应关系保持不变)。
main()
{int p[10],i,j,t;
char a[10][30],m[30];
for(i=0;i<=9;i++)
gets(a[i]); /*输入姓名存入数组a的第i行*/
for(i=0;i<=9;i++)
scanf("%d",&p[i]); /*输入成绩*/
}
for(i=0;i<=8;i++)
{for(j=i+1;j<=9;j++)
{if(p[i]<p[j])
{t=p[i];p[i]=p[j];p[j]=t; /*交换成绩*/
strcpy(m,a[i]);strcpy(a[i],a[j]);strcpy(a[j],m); /*交换姓名*/
}
}
}
for(i=0;i<=9;i++)
{printf("%s,",a[i]); /*输出姓名*/
printf("%d\n",p[i]); /*输出成绩*/
}
}
13、从键盘输入一组数据按行优先次序存入数组a[3][4]中,再按列优先次序输出。
main()
{int a[3][4],i,j;
for(i=0;i<=2;i++) /*行优先次序,外循环控制行号*/
for(j=0;j<=3;j++) /*内循环控制列号*/
scanf("%d",&a[i][j]);
for(j=0;j<=3;j++) /*列优先次序,外循环控制列号*/
{for(i=0;i<=2;i++) /*内循环控制行号*/
{printf("%6d",a[i][j]);}
printf("\n");
}
}
15A、已知一个二维数组a[2][3]={{1,2,3},{4,5,6}},将其转置后存入另一个二维数组b[3][2]中。
main()
{int a[2][3]={{1,2,3},{4,5,6}},b[3][2],i,j;
for(i=0;i<3;i++) /*按行给数组b的元素赋值*/
{for(j=0;j<2;j++) /*并分行显示数组b内容*/
{b[i][j]=a[j][i];
printf("%6d",b[i][j]);
}
printf("\n"); /*注意该语句的位置*/
}
}
16、从键盘输入一组数据存入数组a[3][3]中,求其主对角线元素之和。
main()
{float a[3][3],s=0;
int i,j;
for(i=0;i<=2;i++) /*外循环控制行号*/
for(j=0;j<=2;j++) /*内循环控制列号*/
scanf("%f",&a[i][j]);
for(i=0;i<=2;i++)
s=s+a[i][i]; /*主对角线元素行列号相同*/
printf("s=%f\n",s);
}
17、从键盘输入一组数据存入数组a[3][3]中,求其主对角线下方元素之和。
main()
{float a[3][3],s=0;
int i,j;
for(i=0;i<=2;i++) /*外循环控制行号*/
for(j=0;j<=2;j++) /*内循环控制列号*/
scanf("%f",&a[i][j]);
for(i=0;i<=2;i++)
{for(j=0;j<i;j++)
s=s+a[i][j];
}
printf("s=%f\n",s);
}
18、从键盘输入一组数据存入数组a[4][4]中,求其四周元素之和。
main()
{float a[4][4],s=0;
int i,j;
for(i=0;i<=3;i++) /*外循环控制行号*/
for(j=0;j<=3;j++) /*内循环控制列号*/
scanf("%f",&a[i][j]);
for(i=0;i<=3;i++)
{for(j=0;j<=3;j++)
{if(i==0||i==3||j==0||j==3) /*行列号等于0或者等于3*/
s=s+a[i][j];
}
}
printf("s=%f\n",s);
}