相信大家一定对C语言不陌生,但是大家对C语言掌握多少了呢?今天由我带大家通过一道编程习题来检验一下对C语言的掌握程度。【主要涉及到的知识点:循环,二维数组。如果对程序稍加改进,也可以将函数等一系列较难的知识点融入进去】
题目:键盘录入矩阵的行和列,生成对应的螺旋数组。
示例:
请输入矩阵的行:3
请输入矩阵的列:3
对应输出;
1 2 3
8 9 4
7 6 5
【解析】这道题的难点在于循环条件,只要大家仔细观察,就可以发现,最后一个数与矩阵的行和列的积是相等的,因此,这个条件需要作为最外层的判断,判断螺旋矩阵是否生成完毕,完成后需要跳出循环;然后,我们可以将螺旋矩阵分成上下左右四个部分,用四个for循环便可以输出对应的数字,每次循环完一遍上下左右四个部分,就需要将四个循环的判断条件进行修正,即减1。
C语言代码如下:
#include
int main()
{
int a[10][10]={0};//定义数组
int l=0;//控制长度
int i,j;//数组循环下标
int c,k;//矩阵的长和宽
int num=1,z;//定义数字,总的数字
printf("矩阵的行:");
scanf("%d",&c);
printf("矩阵的列:");
scanf("%d",&k);
z = c*k;
while(num<=z){
i=0;
j=0;
//从左到右循环
for(i+=l,j+=l;j
if (num>z){
break;
}else{
a[i][j]=num++;
}
}
//从上到下
for (j--,i=i+1;i
if (num>z){
break;
}else{
a[i][j]=num++;
}
}
//从右到左
for (i--,j=j-1;j>=l;j--){
if (num>z){
break;
}else{
a[i][j]=num++;
}
}
//从下到上
for (j++,i=i-1;i>l;i--){
if (num>z){
break;
}else{
a[i][j]=num++;
}
}
l++;
//break;
}
for(i=0;i
for(j=0;j
printf("%3d",a[i][j]);
}
printf("\n");
}
getchar();
return 0;
}
有任何问题或想法,可以联系我!