Q1.交换两个变量的值
三种方法交换两个变量的值:
1.定义一个临时变量(借助第三个变量)
int a = 4, b = 6;
int temp = a; //借助临时变量temp进行数据交换
a = b;
b = temp;
2.无需定义临时变量(使用加法)
int a = 4, b = 6;
a = a + b; // a = 10
b = a - b; // b = 4
a = a - b; // a = 6
3.使用异或运算(相同的异或之后则为0,不相同的异或之后则为1)。当前还没有学习异或运算,可以作为扩展学习。
int a = 4, b = 6;
a = a ^ b; //第一步
b = a ^ b; //第二步
a = a ^ b; //第三步
理解:
a: 0100
b: 0110
第一步:
a = a ^ b; //a: 0010
最后a存储的是a与b,哪一位是相同的,哪一位是不同的,作为标记.
这个标记很重要,因为二进制只有0和1,相同不用变,不相同取反
第二步:
b = a ^ b; //b: 0100
此时a只是一个标记,a(标记)与b异或运算,如果a第i位是0,新的b的i位则与右边的(原来的)b,是相同的,如果a的第i位是1,新的b的i位则与右边的(原来的)b,是不相同的,最后为0100.
第三步:
a = a ^ b; //a: 0110
同理可得(燃鸭)
记结论吧:
异或结论:对m连续异或n两次,返回的结果依旧为m。
n^ m ^n --> m
m ^ n ^n --> m
Q2.输入输出一串字符
定义单个字符是char,而下面代码中的char s[20]定义了一个包含20个字符的字符数组,也就是我们常说的字符串。
#include <cstdio>
using namespace std;
int main(){
char s[20]; //定义了一个包含20个字符的字符数组,也就是我们常说的字符串
scanf("%s",s); //输入字符串s,注意这个字符串不能带空格,带空格就只能读到前面一部分
printf("%s",s); //输出字符串s
return 0;
}
#include <cstdio>
using namespace std;
int main(){
char s[20]; //定义了一个包含20个字符的字符数组,也就是我们常说的字符串
gets(s); //输入字符串s,这个可以带空格,直到回车才结束输入
puts(s); //输出字符串s
return 0;
}
Q3.圆柱体的表面积
输入圆柱体的底面半径r和高h,输出圆柱体的表面积,假设π=3.1415926。
圆柱体表面积=侧面面积+上底面面积+下底面面积=2πrh+πr2+πr2
const double PI=3.1415926; //关键字const ,定义一个常量
s=2*PI*r*h+PI*r*r*2; //圆柱体表面积s=2*PI*r*h+PI*r*r*2
Q4.三位数三个数字之和
运用除法运算和模运算分别取得一个三位数的个位、十位和百位的三个数字,然后将三个数字相加。
bai=n/100; //n为输入的数字,变量bai表示百位,shi表示十位,ge表示个位
shi=(n%100)/10;
ge=n%10;
printf("%d",bai+shi+ge);
Q5.反向输出一个三位数
与第4题类似,分别取得百位、十位、个位以后,逐个输出变量个位、十位、百位的值即可。