矩阵逆时针旋转90度

xiaoxiao2021-02-28  122

#include <stdio.h> int main(){ int a[4][4],b[4][4],i,j; /*a 存放原始数组数据,b 存放旋转后数组数据*/ printf("please input original matrix elements -> 16 numbers: \n"); /*输入一组数据存放到数组 a 中,然后旋转存放到 b 数组中*/ for(i=0;i<4;i++){ for(j=0;j<4;j++){ scanf("%d",&a[i][j]); printf("m",a[i][j]); b[3-j][i]=a[i][j]; //原矩阵的第i行变为了旋转矩阵的第i列; //原矩阵的第j列变为了旋转矩阵的倒数第j行; //(可看作先矩阵转置,然后按转置矩阵的行数i逆序输出,先输出转置矩阵的最后一行...便得到旋转后的矩阵) } printf("\n"); } printf("rotated matrix:\n"); for(i=0;i<4;i++){ for(j=0;j<4;j++){ printf("m",b[i][j]); } printf("\n"); } return 0; }


scanf

#include <stdio.h> int main(){ int a; int i; printf("###for_1 start###\n"); for (i=0; i<2; ++i) { scanf("%d", &a); printf("$i=%d a=%d\n",i, a); } printf("\n**i=%d a=%d\n###for_1 end###\n\n\n\n",i, a); printf("###for_2 start###\n",i, a); for (i=0; i<2; i++) { scanf("%d", &a); printf("$i=%d a=%d\n",i, a); } printf("\n**i=%d a=%d\n",i, a); printf("###for_2 end###\n"); return 0; } //在for循环中的i++和++i效果一样,实际上,i++和++i在单独用(没有赋值给变量)时没有区别。 /* for_1中,我输入了3个数(1,2,3),第3个数在for_2中第一次循环中被程序读取了,所以直接出 现了"$i=0 a=3";然后我再向缓冲区输入2个数(3,4),结果只printf了一次。由此可以看出 scanf的用法。 */

1.假设输入是一根连接到你程序上的管子,你所有的输入都会像水一样按顺序灌进程序。每当你按下(换行符),新的输入就会全部加入这个管子中等待被程序接受。scanf干了什么呢?如果管子中还有水,它就试图按一定格式从管道中取出水来,如果格式不对或者管子是空的,就会结束并等待下一个输入。相当于你一次放入几个数到管子中,但程序还是一个一个取数的,一个一个输出的。

2.假如在你的程序中输入了一个字母会怎么样,请搜索“stdin流阻塞”。

3.首先,在你没有回车时,你所输入的字符是保存在终端的,并没有给电脑处理当你键入回车,系统才开始对它进行处理,第一个数字,处理完显示出来,然后依次显示剩余的数字,直到遇到回车。原理大概就这样,scanf格式输入以遇到第一个空白字符为结束编制,我们常输入回车就起这个作用,但是如果后边也需要输入,同时书写格式与它完全不同,可以省略回车,因为在下次输入完你就会输入回车。 【转发】

转载请注明原文地址: https://www.6miu.com/read-71124.html

最新回复(0)