运算符的优先级 C语言运算符优先级(超详细)
sizeof(表达式):不是函数 是长度运算符
函数 封装函数的好处
提高代码可维护性:修改代码功能或bug
代码复用、减少冗余代码:避免重复编写相同逻辑,一方面也能降低出错风险
便于测试:避免重复测试相同逻辑
提高代码可扩展性:与可维护性类似,便于扩展代码功能
隐藏实现细节,提高安全性(项目中更能体会到)
函数的语法定义 return_type function_name( parameter list ) { body of the function }
返回值类型 函数名(参数列表 变量类型 变量名, 变量类型 变量名) { 函数体 return 返回值; }
void 无返回值类型 也可以有return
return作用: 1.结束一个函数 2.返回一个值
函数声明 return_type function_name( parameter list );
有三种调用类型:值传递 址传递 引用调用
实例 以交换两个数为例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #include <iostream> using namespace std;void func () { return ; }void myswap1 (int * pa, int * pb) { int temp; temp = *pa; *pa = *pb; *pb = temp; }void myswap2 (int ** ppa, int ** ppb) { int * temp; temp = *ppa; *ppa = *ppb; *ppb = temp; }int main () { int a = 10 , b = 20 ; int * pa = &a, * pb = &b; cout << a << " " << b << endl; cout << pa << " " << pb << endl; myswap1 (&a, &b); myswap2 (&pa, &pb); cout << a << " " << b << endl; cout << pa << " " << pb << endl; return 0 ; }
指针 房子理论
定义易混淆:
1 2 3 int * pa; int *pa; int * pa, a, b;
一句话学懂指针变量
指针变量中放的是谁的地址,*指针变量就是谁 作业 620 输出一个数的二进制有多少个1 方法1:右移和1与
遍历二进制位
暴力求解,拿到这个数的二进制中的每一位,通过移位运算,让最低位按位与1。
运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <iostream> using namespace std; int main () { int cnt = 0 ; int n; cin >> n; for (int i = 0 ; i < 32 ; i++) { if (((n >> i) & 1 ) == 1 ) cnt++; } printf ("%d\n" , cnt); return 0 ; }
方法2:巧妙按位与
n = n&(n-1); 这个表达式会让n的二进制中最右边的1就消失了。大大提高了代码效率,有多少个1,循环就进行多少次
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 #include <iostream> using namespace std;int main () { int n; cin >> n; int cnt = 0 ; while (n) { n = n & (n - 1 ); cnt++; } cout << cnt << endl; return 0 ; }
1409 最大跨度值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <iostream> using namespace std;int main () { int n; cin >> n; int x, _min = 1000 , _max = 0 ; for (int i = 0 ; i < n; i++) { cin >> x; if (_max < x) { _max = x; } if (_min > x) { _min = x; } } cout << _max - _min << endl; return 0 ; }
1432 最大公约数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #include <iostream> using namespace std;int gcd (int a, int b) { int c = 0 ; while (b!=0 ) { c = a % b; a = b, b = c; } return a; }int main () { int a, b; cin >> a >> b; int ans = gcd (a, b); cout << ans << endl; return 0 ; }
1407求整数的和与均值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <stdio.h> int main () { int n; scanf ("%d" , &n); int sum = 0 , x; for (int i = 1 ; i <= n; i++) { scanf ("%d" , &x); sum += x; } printf ("%d %.5lf" , sum, sum * 1.0 / n); return 0 ; }
1429计算星期几 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #include <iostream> using namespace std;int main () { int a, b, m = 7 ; cin >> a >> b; int ans = 1 ; for (int i = 1 ; i <= b; i++) { ans *= a % m; ans %= m; } if (ans == 0 ) cout << "Sunday" << endl; else if (ans == 1 ) cout << "Monday" << endl; else if (ans == 2 ) cout << "Tuesday" << endl; else if (ans == 3 ) cout << "Wednesday" << endl; else if (ans == 4 ) cout << "Thursday" << endl; else if (ans == 5 ) cout << "Friday" << endl; else cout << "Saturday" << endl; return 0 ; }