递归与日常习题总结

使用字符常量需要注意以下几点:

  1. 字符常量只能用单撇号括起来,不能使用单引号或其他括号。

  2. 字符常量中只能包括一个字符,不能是字符串。

  3. 字符常量是区分大小写的。

  4. 单撇号只是界限符,不属于字符常量中旳一部分,字符常量只能是一个字符,不包括单撇号。

  5. 单撇号里面可以是数字、字母等C语言字符集中除’和\以外所有可现实的单个字符,但是数字被定义为字符之后则不能参与数值运算。

合法的浮点数有两种表示形式:

  1. 十进制小数形式。他有数字和小数点组成,必须有小数点。例如(123.)(123.0)(.123)。

  2. 指数形式。如123e3。字母e(或E)之前必须有数字,e后面的指数必须为整数。

  3. 规范化的指数形式里面,小数点前面有且只有一位非零的数字。如1.2345e8

不包含continue

 2.define 不是关键字 是一种预指令

 3.选c

 3.

我们由定义可知  pulptr是与pulArray这个数组一个类型的

所以它指针加一  移动指向正好是它的一个元素大小距离

举个例子吧 

int*p 整形指针p加一  向后偏移一个整形的大小

puplptr加三指向9解引用得到它的内容  +=3使它的内容发生改变变成12 

4.B

D  4或8个字节 

5.

B 需要初始数组的大小

 6.录入一个字符串并且逆序

 这里的str接收数组的首元素地址  

目的是逆序字符串  

那么把第一位和最后一位交换  

第二位与倒数第二位交换

直到交换完即可

7.计算2+22+222+2222+22222

 8.打印1到100中所有整数中出现多少个数字9

public class work {
    public static void main(String[] args) {
        int num = 0;
        int count = 0;
        for (int i = 1; i <= 100; i++) {
            num = i;//把每一次要看的数先备份一下
            while (num > 0) {
                //检查个位是否为9
                if (num % 10 == 9) {
                    count++;
                }
                //把个位消除  然后循环上去看是否十位也为9
                num /= 10;
            }
        }
        System.out.println(count);
    }
}

9.打印乘法口诀表

public class work {
    public static void main(String[] args) {
        int n=0;
        Scanner scanner=new Scanner(System.in);
        n=scanner.nextInt();
        //遍历每一行
        for(int i=1;i<=n;i++){
            //每一行打印的列数由行决定
            //举个例子 第一行1 则表示只打印一列因此为j<=i控制列数
            for(int j=1;j<=i;j++){
                System.out.println(i*j);
            }
        }
    }
}

区域

 递归与栈空间的关系

我们每一次递归都会第一次通过main时会在栈上开辟内存空间

之后每一次递归调用Fun函数都会往上递加空间

当递归到某一次的时候不再递加的时候开始返回

每返回一次 上面的空间都会销毁

如图每当红色箭头表示返回时  都会销毁占用的空间

当返回完成之后  栈空间又重新被归还回来了

但是注意:

递归不可以无限递归下去

因为当往上增加时 有可能会导致栈空间不够而栈溢出 

1.

#include<stdio.h>
//计算字符串的长度
int my_strlen(char* str1)
{
	int count = 0;
	while (*str1 != '\0')
	{
		count++;
		str1++;
	}
	return count;
}
int reserve(char* str)
{
	char* left = str;
	char* right = str + my_strlen(str) - 1;
	while (left < right)
	{
		int temp = *left;
		*left = *right;
		*right = temp;
		left++;
		right--;
	}
}
int main()
{
	//定义一个字符数组
	char arr[] = "abcdef";
	reserve(arr);
	return 0;
}

 方法二用递归的方法

第一步把第一个位置的元素拿出来

第二步把最后一个元素放到最前面

第三步把拿出来的最后一个元素那一个位置放入\0作为中间字符串的结束标志

第四步逆序中间的字符串  递归下去

第五步把拿出来的第一个元素覆盖第三步给\0的位置 

 递归的要素:

1.找到限制条件

2.不断的靠近这个限制条件

实现n的k次方

注意考虑k<0的情况

 当k<0的时候 我们算出来的是小数 因此要用double

我们把这个小数形式转换为正数形式再递归去算

如 2的负1次方等于1/2

好好想想else的那种情况

 不创建临时变量求字符串长度

#include<stdio.h>
int my_strlen(char* str)
{
	if (*str != '\0')
	{
		return 1 + my_strlen(str + 1);
	}
	else
	{
		return 0;
	}
}
int main()
{
	char arr[] = "abcdef";
	my_strlen(arr);
	return 0;
}

 用递归写n的阶乘

int fac(int n)
{
	if (n<= 1)
	{
		return 1;
	}
	else
	{
		return n * fac(n - 1);
	}
}

 斐波那契

1.递归

int fabonaqie(int n)
{
	if (n == 1 || n == 2)
	{
		return 1;
	}
	else
	{
		return fabonaqie(n - 1) + fabonaqie(n - 2);
	}
}

 2.迭代

int fib(int n)
{
	int a = 1;//第一位数
	int b = 1;//第二位数
	int c = 1;
	while (n > 2)
	{
		c = a + b;
		//迭代
		a = b;
		b = c;
		n--;
	}
}

把1234的每一位按位输出

递归实现

int leo(int n)
{
	if (n > 9)
	{
		leo(n / 10);
	}
	else
	{
		printf("%d", n % 10);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值