求解c语言问题
这个题目算法:
形式一:就是从1开始自增,自增次数是二维元素个数。
形式二:[a,b],其中a表示行数,b表示列数。
形式三:[a,b],其中a与行数有关,b与列数有关。在循环中a初值取(行数/2)并自减,b初值取(列数/2*-1)并自增。
代码实现方式很多。这里题目指定要二维数组,但没有指定是什么类型的二维数组。考虑代码通用性,我用字符指针型二维数组来写。(二维数组的每个元素都是一个指针,指向一个字符串)。
下面是代码,我详细注释了(你发的问题没有代码模板,贴代码没格式了,我把代码也截图,方便你阅读)。
#include <stdio.h>
#include <malloc.h>
#define ROW 5
#define CLO 5
void printfA(char *a[][CLO],int w);//打印数组
int data1(char *a[][CLO]);//生成并打印第一种形式数据
int data2(char *a[][CLO]);//生成并打印第二种形式数据
int data3(char *a[][CLO]);//生成并打印第二种形式数据
int main()
{
char *a[ROW][CLO];
if(data1(a) || data2(a) || data3(a))
printf("程序运行存在异常,可能部分内存申请失败!终止运行!\n");
return 0;
}
void printfA(char *a[][CLO],int w)//打印数组,并释放所有内存空间,w:每个元素打印的宽度
{
int i,j;
for(i=0;i<ROW;i++,printf("\n"))
for(j=0;j<CLO;j++)
printf("%*s ",w,a[i][j]),free(a[i][j]);
}
int data1(char *a[][CLO])//生成并打印第一种形式数据,异常返回1
{
int i=0;
char **p=&a[0][0],*cp=NULL;//cp就是实际每个元素内容的空间
printf("---开始生成第一种形式数值---\n");
while(i++<ROW*CLO)
{
cp=(char *)malloc(sizeof(char)*3);
if(!cp)return 1;
sprintf(cp,"%d",i),*p=cp,p++;
}
printf("---生成完成,开始打印---\n");
printfA(a,2);
return 0;
}
int data2(char *a[][CLO])//生成并打印第二种形式数据
{
int i,j;
printf("---开始生成第二种形式数值---\n");
for(i=0;i<ROW;i++)
for(j=0;j<CLO;j++)
if((a[i][j]=(char *)malloc(sizeof(char)*6)))
sprintf(a[i][j],"[%d,%d]",i+1,j+1);
else
return 1;
printf("---生成完成,开始打印---\n");
printfA(a,5);
return 0;
}
int data3(char *a[][CLO])//生成并打印第三种形式数据
{
int i,j,r=ROW/2,c;
printf("---开始生成第三种形式数值---\n");
for(i=0;i<ROW;i++,r--)//关联行值从r开始递减
{
c=CLO/2*-1;//每次J循环开始,关联列值从c开始递增
for(j=0;j<CLO;j++)
if((a[i][j]=(char *)malloc(sizeof(char)*8)))
sprintf(a[i][j],"[%d,%d]",r,c++);
else
return 1;
}
printf("---生成完成,开始打印---\n");
printfA(a,8);
return 0;
}