题目:
- 递归不能无限递归下去(错误)
- 下列代码调用fun(2)的返回值 答案:16
int Fun(int n) { if(n ==5) return 2; else return 2*Fun(n+1); } int main() { int ret = Fun(2); printf("%d",ret); return 0; }
- 啊
//字符串逆序 xunhuan int main() { char arr[] = "abcdefg"; //int changdu=sizeof(arr)/sizeof(arr[0]);//包含了\0 //int you=sz-2 int zuo = 0; int you = strlen(arr) - 1; while (zuo < you) { char tem = arr[zuo]; arr[zuo] = arr[you]; arr[you] = tem; zuo++; you--; } printf("%s\n", arr); return 0; }
int Astrlen(char* str) { int count = 0; while (*str != '\0') { count++; str++; } return count; } void daofang(char* str) { int tmp = *str; int len = Astrlen(str); *str = *(str + len - 1); *(str + len - 1) = '\0'; if (Astrlen(str+1) >= 2) { daofang(str+1); } *(str + len - 1) = tmp; } int main() { char arr[] = "abcdef"; daofang(arr); printf("%s", arr); }
-
int qiuhe(int b) { int sum = b%10; if(b>=10) sum = sum+qiuhe(b / 10); return sum; } int main() { int a=0; scanf("%d", &a); int sum= qiuhe(a); printf("%d", sum); }
- 实现n的k次方
double jieceng(int n, int k) { if (k > 0) { return n * jieceng(n, k - 1); } else if (k == 0) return 1; else return 1.0 / jieceng(n, -k); } int main() { int n; int k; scanf("%d%d", &n, &k); double a=jieceng(n, k); printf("%lf", a); }
-
//c错
-
小括号里的叫逗号表达式它的值就是最后一个逗号代表的值,前面的也计算;
数组名的类型就是 去掉名字就是 eg:int [10];
8.
9.
>> << 移位//只针对整数;
<<左移:左边丢弃右补0;1位有乘二的作用
>>右移:逻辑右移:右边丢弃左边补0;算数右移动:右边丢弃左边补0/1(负数)大多是算数右移;
正数,原反补相同。
负数,原反补要算。反码:符号位不变其他按位取反。补码:反码加1;
整数在内存中是补码;
位移操作符
& 按位与 全1为1 10为0 00为0;
| 按位或 全0为0
^ 按位异或 相同为0 不同为1; 支持交换律;
用法不用第三个变量交换a,b的值;
a=a^b;//这里a是类似ab的和 b=a^b;//把和中的b去掉就是a的值 a=a^b;//把和中a的值去掉就是b的值 //不会溢出 or //会溢出 a=a+b; b=a-b; a=a-b;
int a=0;初始化;
a=1;赋值;
a=x=y+1;= 先x=y+1;后a=x;
复合赋值符
+= = +
>>= = >>
单目操作符//一个操作数;
!逻辑反操作
&取地址操作符; 得到的是变量起始地址;int* p=&a; p就是指针变量,类型int*
sizeof类型(int)创建的变量或者变量所占空间大小; 单位:字节;sizeof(变量);sizeof int//这样写不对
strlen(是库函数)
~ 按位取反;
-- 前置 先--后用;后置 先用后--
++ 前置 先++后用;后置 先用后++
* 间接 访问 解引用
(类型名) 强制类型转换;
&&逻辑与; 多个&&(a&&b&&c)判断左边为假后后面就不算了;
||逻辑或 多个||(a||b||c)判断左边为真后后面就不算了;
三目操作符
表达式1?表达式2:表达式3 表达式1为;真执行表达式2;假执行表达式3
逗号表达式
从左往右计算机;最后一个表达式的结果就是整个表达式的结果;
下标引用 []
arr[8];
函数调用操作符 ()
hanshu();//传值不会影响本身;传指针可以影响;
结构成员操作符 -> .
s.name; ps(指针)->name;==(*ps).name
整型提升//因为计算机运算器是整型的
类型 不够整型,补码计算前,正数、负数补0/1补够整型; 无符号补0;
所以只输出c
运算就变4个字节了;
寻常算数转换(大小超过整型)
小的位数那个转为和大的一样;
优先级
相邻操作符优先级 //只针对相邻的两个操作符
多个操作符在一起可能会产生歧义
eg:
如果a,b,c,d,e,f;之间有联系;那么先后执行的结果就不一样;
eg:
如果c值先确定的那么 --c + c;
如果c值不是先确定的 那么 --c+(--c//自减的结果)
eg
scanf没有读到数返回EOF;
scanf(" %C") 前加空格; 跳过下一个字符前的所有空白