ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

递归与日常习题总结

2021-11-10 21:34:12  阅读:87  来源: 互联网

标签:字符 return 递归 int char 日常 str 习题


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

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

标签:字符,return,递归,int,char,日常,str,习题
来源: https://blog.csdn.net/m0_61784000/article/details/121169447

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有