求解c语言问题

 我来答
自我编程
2019-06-17 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

这个题目算法:

形式一:就是从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;

}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式