C语言练习——3
- 一、 操作符练习
- 1.1交换两个变量(不创建临时变量)
- 1.2 打印整数二进制的奇数位和偶数位
- 1.3[二进制中1的个数](https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8)
- 1.4[两个整数二进制位不同个数](https://www.nowcoder.com/questionTerminal/9c3b8a8d9f1c4ae3b709d04625586225)
- 1.5[小乐乐走台阶](https://www.nowcoder.com/practice/ebf04de0e02c486099d78b7c3aaec255?tpId=107&&tqId=33398&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking)
- 二、算术转换练习
- 2.1[矩阵计算](https://www.nowcoder.com/practice/0c83231923c541d2aa15861571831ee5?tpId=107&&tqId=33371&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking)
- 2.2[小乐乐与进制转换](https://www.nowcoder.com/practice/242eafef2a704c0ca130d563b7b3ee2d?tpId=107&&tqId=33392&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking)
- 2.3[矩阵转置](https://www.nowcoder.com/practice/351b3d03e410496ab5a407b7ca3fd841?tpId=107&&tqId=33388&rp=1&ru=/ta/beginner-programmers&qru=/ta/beginner-programmers/question-ranking)
一、 操作符练习
1.1交换两个变量(不创建临时变量)
方法一:
利用算数的方法,先将a+b的值赋给a,然后利用a的新值减去原来的b,便得到了交换后的b的值,同理可得到交换后a的值,但是这种方法由于int的范围不能够处理较大的数。
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("交换前:%d %d\n", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("交换后:%d %d\n", a, b);
return 0;
}
方法二:
利用^操作符,对a和b进行相应的操作,便可以不创建临时变量,便进行两个值的交换。
#include <stdio.h>
int main()
{
int a = 3;
int b = 5;
printf("交换前:a = %d b = %d\n", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("交换后:a = %d b = %d\n", a, b);
}
1.2 打印整数二进制的奇数位和偶数位
题目要求:获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
void print(int n)
{
int i = 0;
printf("奇数位:");
for (i = 30; i >= 0; i -= 2)
{
printf("%d ", (n >> i) & 1);
}
printf("\n");
printf("偶数位:");
for (i = 31; i >= 1; i -= 2)
{
printf("%d ", (n >> i) & 1);
}
printf("\n");
}
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
print(n);
return 0;
}
1.3二进制中1的个数
方法一:
int NumberOf1(int n)
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (((n >> i) & 1 == 1))
{
count++;
}
}
return count;
}
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int ret = NumberOf1(n);
printf("%d", ret);
return 0;
}
方法二:
int NumberOf1(int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int ret = NumberOf1(n);
printf("%d", ret);
return 0;
}
1.4两个整数二进制位不同个数
int different(int m, int n)
{
int i = 0;
int count = 0;
for (i = 0; i < 32; i++)
{
if (((m >> i) & 1) != ((n >> i) & 1))
{
count++;
}
}
return count;
}
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &m, &n);
int ret = different(m, n);
printf("%d", ret);
return 0;
}
1.5小乐乐走台阶
题目描述:小乐乐上课需要走n阶台阶,因为他腿比较长,所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?
输入描述:
输入包含一个整数n (1 ≤ n ≤ 30)
输出描述:
输出一个整数,即小乐乐可以走的方法数。
#include<stdio.h>
int get(int n)
{
if (n <= 2)
return n;
else
return get(n - 1) + get(n - 2);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = get(n);
printf("%d", ret);
return 0;
}
二、算术转换练习
2.1矩阵计算
描述
输入NxM矩阵,矩阵元素均为整数,计算其中大于零的元素之和。
输入描述:
第一行为N M(N: 矩阵行数;M: 矩阵列数,且M,N<=10),接下来的N行为矩阵各行。
输出描述:
一行,其中大于零的元素之和。
#include<stdio.h>
int main()
{
int m = 0;
int n = 0;
scanf("%d %d", &m, &n);
int i = 0;
int j = 0;
int tmp = 0;
int sum = 0;
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
scanf("%d", &tmp);
if (tmp > 0)
{
sum = sum + tmp;
}
}
}
printf("%d\n",sum);
return 0;
}
2.2小乐乐与进制转换
描述
小乐乐在课上学习了二进制八进制与十六进制后,对进制转换产生了浓厚的兴趣。因为他的幸运数字是6,所以他想知道一个数表示为六进制后的结果。请你帮助他解决这个问题。
输入描述:
输入一个正整数n (1 ≤ n ≤ 109)
输出描述:
输出一行,为正整数n表示为六进制的结果
#include <stdio.h>
void Print(int n)
{
if(n>5)
{
Print(n/6);
}
printf("%d",n%6);
}
int main()
{
int n=0;
scanf("%d",&n);
Print(n);
return 0;
}
2.3矩阵转置
描述
KiKi有一个矩阵,他想知道转置后的矩阵(将矩阵的行列互换得到的新矩阵称为转置矩阵),请编程帮他解答。
输入描述:
第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)
从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。
输出描述:
输出m行n列,为矩阵转置后的结果。每个数后面有一个空格。
#include<stdio.h>
int main()
{
int n = 0;//代表行
int m = 0;//代表列
scanf("%d %d", &n, &m);
int i = 0;
int j = 0;
int tmp[10][10] = {0};
//输入
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &tmp[i][j]);
}
}
//输出
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
printf("%d ", tmp[j][i]);
}
printf("\n");
}
return 0;
}