|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
// 将 4×4 的数组进行转换后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j,k,m,q = 0,n = 0;
int a[4][4],b[4][4]; /* a存放原始数组数据,b存放旋转后数组数据 */
printf(" 系统随机输入 16 个数 \n");
printf("\n");
for(i = 0;i < 4;i++)
{
for(j = 0;j < 4;j++)
{
for(k = 1;k < 1000;k++)
{
m = rand() % 100;
a[i][j] = m;
}
}
}
for(i = 0;i < 4;i++) /* 打印 a 数组 */
{
for(j = 0;j < 4;j++)
{
printf(" %d",a[i][j]);
}
printf("\n");
printf("\n");
}
loop:
printf(" 逆时针旋转90度请输入 1 ;垂直翻转请输入 2 ;水平翻转请输入 3 :\n");
scanf("%d\n",&q);
printf("\n");
switch(q)
{
case 1:{
for(i = 0;i < 4;i++) /* 数组开始旋转转换 */
{
for(j = 0;j < 4;j++)
{
b[3-j][i] = a[i][j];
}
}
printf("\n");
printf(" 旋转转换后的 b 数组:\n");
printf("\n");
for(i = 0;i < 4;i++) /* 打印旋转后的 b 数组 */
{
for(j = 0;j < 4;j++)
{
printf(" %d",b[i][j]);
}
printf("\n");
printf("\n");
}
}
break;
case 2:{
printf("\n");
printf(" 垂直翻转后的 b 数组:\n");
printf("\n");
for(i = 0;i < 4;i++) /* 垂直翻转 b 数组 */
{
for(j = 0;j < 4;j++)
{
b[3 - i][j] = a[i][j];
}
}
for(i = 0;i < 4;i++) /* 打印垂直翻转后的 b 数组 */
{
for(j = 0;j < 4;j++)
{
printf(" %d",b[i][j]);
}
printf("\n");
printf("\n");
}
}
break;
case 3:{
printf("\n");
printf(" 水平翻转后的 b 数组:\n");
printf("\n");
for(i = 0;i < 4;i++) /* 水平翻转 b 数组 */
{
for(j = 0;j < 4;j++)
{
b[i][3 - j] = a[i][j];
}
}
for(i = 0;i < 4;i++) /* 打印水平翻转后的 b 数组 */
{
for(j = 0;j < 4;j++)
{
printf(" %d",b[i][j]);
}
printf("\n");
printf("\n");
}
printf("\n");
}
break;
}
goto loop;
}
本帖最后由 sunrise085 于 2020-7-25 16:22 编辑
可能是你对scanf理解不太好
scanf是按照你规定的格式从缓冲区读取字符。
它会严格按照你在引号内的格式进行读取的
一般情况下引号之间只写格式化要求,不写任何其他字符,因为一般情况下你写了什么其他字符,就需要你输入什么字符,一旦输入不对,就会出错,所以,你需要把'\n'删掉。
scanf 中的'\n'很特别。你输入一个数后,它是不会立即显示的,要等再接收到一个非(空格、制表符、回车)的输入scanf语句才结束。
但请注意的是,最后输入的那个非(空格、制表符、回车)的东西是不会被这个scanf读进来的,而是留在输入流里。
可以看看我之前关于scanf的一些回答
|
|