C语言基础-将手动输入的16位数字分别左旋转和右旋转n位

这是我个人学习c语言的练习,如果对你有帮助,请关注我,我将不定期更新,如果疑问或者建议可以在评论区留言沟通。

/*
*Copyright(c)2018 vinnfeng
*文件名:main.c
*描述:将手动输入的**16位数字分别左旋转和右旋转**n位
*作者:V万能的小黑V
*日期:2018年11月21日
*当前版本:1.0
*/
#include <stdio.h>
/*
*函数名称:retate16Left
*描述:将形参num获取的值左旋转n位
×作者:V万能的小黑V
×完成日期:2018年11月21日
×返回:短整形num3为旋转的结果
×当前版本:1.0
*/
unsigned short int rotate16Left(unsigned short int num,int n){
	unsigned short int num1,num2,num3;
	num1 = num >> n;
	num2 = num << (n*3);
	num3 = num1 | num2;
	//printf("111111");
	//printf("%#x\n",num3);
	return num3;
}
/*
*函数名称:rotate16Right
*描述:将形参num获取的值右旋转n位
×作者:V万能的小黑V
×完成日期:2018年11月21日
×返回:短整形num3为旋转的结果
×当前版本:1.0
*/
unsigned short int rotate16Right(unsigned short int num,int n){
	unsigned short int num1,num2,num3;
	num1 = num >> (n*3);
	num2 = num << n;
	num3 = num1 | num2;
	//printf("22222");
	//printf("%#x\n",num3);	
	return num3;
}
/*
*函数名称:main
*描述:实现手动输入16位数字和要旋转的位数,并将原始数字以及左旋转和有旋转的数字打印出来
×作者:V万能的小黑V
×完成日期:2018年11月21日
×输入:短整型num为手动输入的16为数字,整型n为旋转的位数
×当前版本:1.0
*/
int main(void)
{
	unsigned short int num;
	int n;
	printf("请输入一个16进制的数字,以及想要左旋转右旋转的位数,我们将自动为您计算:");	
	scanf("%hx %d",&num,&n);
	//scanf("%d",&n);

	printf("原始数字:%#x\n",num);
	printf("左旋转%d位后的数字为:%#x\n",n,rotate16Left(num,n));
	printf("右旋转%d位后的数字为:%#x\n",n,rotate16Right(num,n));
	return 0;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用以下方法在C语言中打印逆时针旋转的方阵: 1. 先把原方阵的每一行逆序存储在一个新数组中。 2. 然后再把新数组中的每一列作为原方阵的每一行。 3. 最后将新数组中的内容打印出来,就可以得到逆时针旋转的方阵。 以下是一个简单的代码实现: ``` #include <stdio.h> #define ROWS 3 #define COLS 3 void rotate(int mat[ROWS][COLS]) { int i, j, tmp[COLS][ROWS]; for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { tmp[j][ROWS - 1 - i] = mat[i][j]; } } for (i = 0; i < COLS; i++) { for (j = 0; j < ROWS; j++) { mat[i][j] = tmp[i][j]; } } } int main() { int i, j, mat[ROWS][COLS] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; rotate(mat); for (i = 0; i < ROWS; i++) { for (j = 0; j < COLS; j++) { printf("%d ", mat[i][j]); } printf("\n"); } return 0; } ``` 结果: ``` 7 4 1 8 5 2 9 6 3 ``` ### 回答2: 要使用C语言的数组打印逆时针旋转的方阵,可以采取以下步骤: 1. 首先,声明一个二维数组来表示方阵,数组的行和列数相等。例如,声明一个4x4的二维数组。 int matrix[4][4]; 2. 初始化方阵的元素,可以手动输入或根据需求编写逻辑来赋值。例如,给定一个初始方阵如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 3. 创建一个循环来逆时针旋转方阵。在每次旋转的循环迭代中,将上、、下、四个边的元素顺时针移。 int row, col, temp; int size = 4; // 方阵的大小 for (int i = 0; i < size / 2; i++) { int last = size - 1 - i; for (int j = i; j < last; j++) { int offset = j - i; // 保存上边元素的值 temp = matrix[i][j]; // 将边元素移动到上边 matrix[i][j] = matrix[j][last]; // 将下边元素移动到边 matrix[j][last] = matrix[last][last - offset]; // 将边元素移动到下边 matrix[last][last - offset] = matrix[last - offset][i]; // 将保存的上边元素值移动到边 matrix[last - offset][i] = temp; } } 4. 最后,通过循环遍历输出旋转后的方阵。 for (row = 0; row < size; row++) { for (col = 0; col < size; col++) { printf("%d ", matrix[row][col]); } printf("\n"); } 输出结果为: 4 8 12 16 3 7 11 15 2 6 10 14 1 5 9 13 以上就是使用C语言的数组打印逆时针旋转的方阵的步骤。 ### 回答3: 使用C语言的数组打印逆时针旋转的方阵有以下步骤: 1. 定义一个二维数组,用于表示方阵。数组的大小可以根据需要进行调整。 2. 初始化数组元素,按照正常的顺序填充数组。 3. 利用两个变量i、j分别表示行和列的索引,从上角开始,逆时针旋转填充数组。 4. 利用循环控制结构,按照逆时针的顺序填充数组。具体方式为:首先填充最上面的一行,然后填充最边的一列,接着填充最下面的一行,最后填充最边的一列。每次填充完一行或一列后,对应的i或j的值加1或减1。 5. 设置一个计数器变量count,用于记录当前填充的数字,初始值为1。 6. 在每次填充一个元素时,将count的值赋给数组元素,并将count的值加1。 7. 使用两个循环嵌套遍历二维数组,按顺序打印数组元素。 下面是一个示例代码: ```c #include <stdio.h> void printMatrix(int matrix[][3], int size) { for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { printf("%d ", matrix[i][j]); } printf("\n"); } } void rotateMatrix(int matrix[][3], int size) { int count = 1; int i = 0, j = 0; while (count <= size * size) { for (int k = 0; k < size; k++) { matrix[i][j] = count++; i++; } i--; j++; for (int k = 0; k < size - 1; k++) { matrix[i][j] = count++; j++; } j--; i--; for (int k = 0; k < size - 1; k++) { matrix[i][j] = count++; i--; } i++; j--; for (int k = 0; k < size - 2; k++) { matrix[i][j] = count++; j--; } j++; i++; size -= 2; } } int main() { int matrix[3][3]; rotateMatrix(matrix, 3); printMatrix(matrix, 3); return 0; } ``` 上述代码定义了一个3x3的方阵,将方阵进行逆时针旋转填充,然后打印出来。输出结果为: ``` 1 2 3 8 9 4 7 6 5 ``` 这个结果是将原始的正常顺序的3x3方阵的元素逆时针旋转填充得到的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值