62,作业讲解开始

文章探讨了C语言中的递归函数、字符串逆序操作、字符串长度计算、字符数组处理、算术运算、位移操作以及一些基础语法,如函数调用、类型转换和优先级规则。
摘要由CSDN通过智能技术生成
题目:
  1. 递归不能无限递归下去(错误)
  2. 下列代码调用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;
    }

  3. //字符串逆序 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);
    }

  4.              

    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);
    }

       

  5. 实现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);
    }

  6. //c错

  7. 小括号里的叫逗号表达式它的值就是最后一个逗号代表的值,前面的也计算;   

            数组名的类型就是    去掉名字就是  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") 前加空格;  跳过下一个字符前的所有空白

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值