问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言编程题,用指针,不用函数讲一个3*3矩阵转置

发布网友 发布时间:2022-05-09 19:16

我来回答

2个回答

热心网友 时间:2023-10-14 15:38

/****************************
file:func_dec.h
des: fuctions declaration
*****************************/

//fun_name:get_argc()
//usage:得到矩阵维数
//argcs:
//argcs usage:返回矩阵维数
int get_argc();

//fun_name:display()
//usage:打印矩阵
//argcs:链表头指针,矩阵维数
//argcs usage:
void display(struct Node *,int );

//fun_name:free_mem()
//usage:释放内存
//argcs:要释放链表链表头指针
//argcs usage:返回1代表释放成功,否则失败
int free_mem(struct Node *);

///fun_name:fill_blank()
//usage:对副链表进行数字填充
//argcs:副链表头指针,索引节点,填充数字
//argcs usage:
void fill_blank(struct Node *,int ,int fill_num);

//fun_name:creat_link()
//usage:创建一个链表,并返回链表头指针
//argcs:链表初始头指针,要创建矩阵维数
//argcs usage:
struct Node *creat_link(struct Node *,int );

//fun_name:Rotating()
//usage:对链表进行角度旋转处理 90,180,270度
//argcs:链表头指针,矩阵维数,旋转选项
//argcs usage: 1 是90度旋转
// 2 是180度旋转
// 3 是270度旋转
struct Node * Rotating(struct Node *,int ,int );

/************

*********/

struct Node{

int num;

struct Node *next;

};

/******************************
程序名:link
程序功能:实现用链表完成矩阵的旋转转换
作者:Hamlet
版本:1.2
程序说明:相对与1.1版本进行了函数的缩减,将无用的函数删除,但未缩减时间和空间复杂度
func_dec.h是对程序函数声明
struct_dec.h是对结构体声明
遗憾的是本程序没有使用迭代,如果用的话,程序将很漂亮。
开始写作时间:2007-09-14
最后修改时间:2007-09-15
*******************************/

#include "stdio.h"
#include "stdlib.h"
#include "struct_dec.h"
#include "func_dec.h"

//得到矩阵参数
int get_argc(){
int argc = 0;

while(!argc){
printf("input argc:\n");
scanf("%d",&argc);
}
return argc;
}

//打印矩阵
void display(struct Node *head,int argc){
int switch_line = 0;

if(head == NULL)
return ;

while(head != NULL){
printf("%5d",head->num);

switch_line++;
if(!(switch_line%argc))
printf("\n");

head = head->next;
}
}

//内存释放,1代表释放成功
int free_mem(struct Node *head){
struct Node *st_temp;

if(head == NULL)
return 0;

while(head != NULL){
st_temp = head->next;
free(head);
head = st_temp;
}
return 1;
}

void fill_blank(struct Node *head,int search_node,int fill_num){
int current_node = 0;

while(current_node < search_node){
head = head->next;
current_node++;
}
head->num = fill_num;

return ;
}

//创建链表 arcg*argc
//返回链表头指针
struct Node *creat_link(struct Node *head,int argc){
int current_node = 0;//当前所在接点处
int ele_amount = argc*argc;//元素个数

for(;current_node < ele_amount;current_node ++){
struct Node *st_temp = (struct Node*)malloc(sizeof(struct Node));

if(st_temp == NULL){
printf("memory loss!\n");
exit(0);
}

st_temp->num = current_node;

st_temp->next = head;
head = st_temp;
}

return head;
}

/*
函数名称:Rotating()
函数功能:将矩阵旋转
传入参数:struct Node *head,int argc
传出参数:无
参数说明:choice:1代表是旋转90度,2代表旋转180度,3代表旋转270度
180度是旋转两个90度,270度是旋转3个90度。
*/
struct Node * Rotating(struct Node *head,int argc,int choice){

struct Node *vice_head = NULL;

int loop_time = 0;//旋转多少个90度

int r_counter = 0,c_counter = 0;//当前接点对应在数组中的位置 行与列
int current_node = 0;//当前接点标记
int search_node = 0;//索引接点

vice_head = creat_link(vice_head,argc);//创建副链表

struct Node * head_temp = head;

while(current_node < argc*argc){
r_counter = (int)current_node/argc;
c_counter = current_node%argc;

search_node = (argc-c_counter-1)*argc + r_counter;//索引搜索算法函数

fill_blank(vice_head,search_node,head_temp->num);

current_node++;
head_temp = head_temp->next;
}

//数据回拷
head_temp = head;
while(head_temp != NULL){
head_temp->num = vice_head->num;

head_temp = head_temp->next;
vice_head = vice_head->next;
}
free_mem(vice_head);
return head;
}

int main(){
int argc = 0;// 矩阵维数
int choice = 0;//选项 1-90度 2-180度 3-270度
int loop_time = 0;//旋转次数计数器

struct Node *head = NULL;

argc = get_argc();
head = creat_link(head,argc);

//原矩阵打印
display(head,argc);

printf("1:90 2:180 3:270\n");
printf("input your choice:");

while(!choice)
scanf("%d",&choice);

while(loop_time++ < choice)
head = Rotating(head,argc,choice);
display(head,argc);

if(free_mem(head))
printf("success!\n");
else printf("error!\n");

return 0;
}

转置90,180,270都可以,希望对你有帮助

热心网友 时间:2023-10-14 15:38

#include <stdio.h>
main()
{
int a[3][3],i,j,t;
int (*p)[3]=a;
printf("input a array:\n");
for(i=0;i<3;i++)
{
printf("the %d row:",i+1);
for(j=0;j<3;j++)
scanf("%d",&p[i][j]);
}
printf("first:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4d",p[i][j]);
printf("\n");
}
for(i=0;i<3;i++)
for(j=0;j<i;j++)
{
t=a[i][j];
a[i][j]=a[j][i];
a[j][i]=t;
}
printf("after:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%4d",p[i][j]);
printf("\n");
}
}
//调试成功
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
鞋底是空心格子怎么办 鞋里有格子硌脚怎么办 买的鞋子里面是空心格子底硌脚怎么办 鞋子底是空心格子的怎样办 浅谈NY5196—2002有机茶 有机食品茶叶标准 茶叶的储藏运销:茶叶贮藏期的化学变化 东方美人茶要怎么储存?东方美人茶储存方法 乌龙茶贮运方法 有机乌龙茶是什么贮藏与运输的? 请C++的高手帮我设计一下这个程序,绝对高分悬赏!! 求解JAVA题 JAVA用1、2、2、3、4、5排列组合,最多能排列多少组合并打印出来。要求:4不能放在第三位,4和5不能相连 黄河现在经过安徽省还是河北省? 二分查找的递归实现 黄河经过安徽吗 pdf能编辑吗 WIN10对硬件要求比7还低怎么运行起来比7还卡呢,硬件占用率还傻高 win10监视器硬件加速 我想去朝鲜生活怎么样?在那生活如何? 朝鲜人的生活是什么样的 衣食住行全免费?朝鲜的分配制,具体是一种什么样的制度? 现在的朝鲜,如同八九十年代的中国,朝鲜人的真实生活怎么样? 课文出自史记,被鲁迅先生称为什么 《史记》被鲁迅先生成为 《史记》被鲁迅评价为 有限责任公司资本不必划为等额股份,其中划为不等额股份是什么意思? 【我真感谢他】作文 400字 400字作文 春节期间最想感谢的一个人 我要感谢的一个人 作文,写同学 全命题 400字以上 长江黄河穿过哪几个省? 温控表 TDW2001 电路图 找图的功能用C或C++的实现方法 火龙果怕冻吗? 东芝变频器刹车时间怎么调 VC610变频器刹车怎么调 三菱f800变频器刹车参数设置 dnf中buff强化怎么弄 获得buff强化效果怎么完成 笔记本强冷系统怎么开启 中宏变频器启动慢还没有刹车怎么调参数 高中课程自学网好不好? 勤学网好还是自学网好 360管家诺基亚5310电子书软件怎么下 LG KS360怎么看电子书 阅读器怎么下载 广电机顶盒 电信机顶盒 安卓机顶盒 电脑 。这几个看影音各有什么不同 黄豆酱的嗮制方法? 360安全卫士小说下载阅读器。!!! 我要自学网3d怎么样 在360下了个小说阅读器。里面有个可以朗读的,点了之后发现说要装那个TTS5.1...我网上下了个,又不知道如