write in front
大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流
2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^星级博主~掘金⇿InfoQ创作者~周榜34»总榜2005
本文由 謓泽原创 CSDN首发如需转载还请通知⚠
个人主页:打打酱油desuCSDN博客
欢迎各位→点赞 + 收藏⭐️ + 留言
系列专栏:【C】题目_謓泽的博客-CSDN博客[〇~①]
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本
『C~题集』of ⑧
write in front
第三十六题→求斐波那契数!输入数字求对应的斐波那契数列
第三十七题→计算1到100的数,求个位上的数字9和十位上的数字9给打印出来,并且用Count计算打印出来数字的总和
第三十八题→分别计算 1/1+1+2/1+3/1+4/1+5/+……+1/99+1/100 和 1/1-1/2-1/3-1/4-1-5-……-1/99-1/100 的值
第三十九题→模拟实现字符串函数,任意输入~求字符串函数长度
第四十题零→任意输入字符串实现逆序打印,不能使用C自带的字符串库函数
第三十六题→代码
第三十七题→代码
第三十八题→代码
第三十九题→代码
第四十零题→代码
第三十六题→求斐波那契数!输入数字求对应的斐波那契数列
在这里来讲解下什么是斐波那契数列。
斐波那契数列指的是这样一个数列:0,1,1,2,3,5,8,13,21,34,55,89…
自然中的斐波那契数列。
这个数列从第3项开始,每一项都等于前两项之和。
在数学上,斐波那契数列以如下被以递推的方法定义
F(0)=0
F(1)=1
F(n)=**
F(n – 1)+F(n – 2)**
但是,在这里我们不介意大家去使用递归的方式,因为:递归n次,时间复杂度O(2^n),这非常的那啥,所以,必须优化。那么如果你想要让你的代码效率提高的话就必须要用其它的方法,用递归时间复杂度↑了。
第三十七题→计算1到100的数,求个位上的数字9和十位上的数字9给打印出来,并且用Count计算打印出来数字的总和
首先,计算1~100的数这个我们可以采用循环来解决,实际上这种题目一看就是循环来解决的。循环一共有 for 和 while 循环两种通常我们都是会采用 for 循环来解决这道题目的。因为,for 循环的效率实际上会比 while 的效率好。注:指代不同的场合当中哟。
求个位上的数字也就是个位数9的数字,十位上的数字也就是十位数有9的数字。
判断语句就可以解决,表达式当中用取模运算符(%)就可以求出个位上的数字,用除法运算符(/)就可以求出十位上的数字,注:题目要求数字为:9
然后,把上面数字进行打印。每次打印一个数字就 Count++,最后把Count也给打印出来,这道题目也就解决了。这道题目实际上就是对你取模(%)和除号(/)在变成的理解怎么样了,这道题目不难很容易的。
第三十八题→分别计算 1/1+1+2/1+3/1+4/1+5/+……+1/99+1/100 和 1/1-1/2-1/3-1/4-1-5-……-1/99-1/100 的值
分别计算 1/1+1+2/1+3/1+4/1+5/+……+1/99+1/100。
分别计算1/1-1/2-1/3-1/4-1-5-……-1/99-1/100。
一个是先除以再相加再除以再相加,另一个是先除以再相减再除以。从中我们可以发现它的规律这其实就是本题的关键,然后总值大小是1~100,那么这样的话这道题目就可以很好的给解决了。由于这道题目是都具有相除的话,那么在这里我们使用的类型就可以是浮点型类型,推荐使用双精度类型,注:双精度浮点类型的格式符是%lf、而单精度的格式符是%f。
第三十九题→模拟实现字符串函数,任意输入~求字符串函数长度
其实上述题目无非就是叫我们实现 strlen 的功能,那我们需要知道 strlen() 的函数声明的。
size_t strlen ( const char * str );
Size_t→是一个无符号(unisgned int)整型类型。
str→ 要计算长度的字符串。注意:它是字符指针类型,而且它是 const 所定义的,也就是一个常量字符串。
解题思路→无非就是数组传参到形式参数当中,之所以用指针是因为,数组名传参实际上传递的是首元素的地址,地址要用指针变量去进行存储。
第四十题零→任意输入字符串实现逆序打印,不能使用C自带的字符串库函数
首先,我们创建一个函数来实现字符串当中的逆序打印,题目规定不能使用字符串当中库函数,那么本题目很有可能是会使用的但是不让我们去使用的库函数字符串函数,所以我们就必须要自己创建函数使用。
逆序是本题的关键当然这个特别容易,都是老套路了和变量的交换没有什么区别的。
输入函数这里推荐大家去使用 gets() 函数,那我们来说说 gets() 输入函数 和 scanf() 输入函数的区别吧↓
scanf():不能接受空格、制表符Tab、回车等; 当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。 可以读取所有类型的变量。
gets():能够接受空格、制表符Tab和回车等; 可接受回车键之前输入的所有字符,并用’\n’替代 ‘\0’.回车键不会留在输入缓冲区中 ,用到读取字符串,用回车结束输入。
第三十六题→代码
#include//斐波那契数列:前两个数之和等于第三个数字/* 1 1 2 3 5 8 13 21 34 a b c 1 2 3 4 5 6 7 8 9*/int Fib(int n){int a = 1;int b = 1;int c = 1;while (n > 2)//只要求第2个以后的斐波那契数就执行while循环{c = a + b;a = b;b = c;n--;//n = n - 1;每次执行一次就减一直到n=2为止。}return c;}int main(void){int n = 0;int let = 0;printf("请输入数字:");scanf_s("%d", &n);ret = Fib(n);printf("ret = %d\n", ret);return 0;}
运行结果
请输入数字:9
ret = 34
第三十七题→代码
#define _CRT_SECURE_NO_WARNINGS 1#includeint main(void){int i = 0;int Count = 0;for (i = 0; i < 101; i++){//个位if (i % 10 == 9){printf("%d ", i);Count++;}//十位if (i / 10 == 9){printf("%d ", i);Count++;}}printf("\nCount=%d\n", Count);return 0;}
运行结果
9 19 29 39 49 59 69 79 89 90 91 92 93 94 95 96 97 98 99 99
Count=20
第三十八题→代码
#define _CRT_SECURE_NO_WARNINGS 1#include int main(void){int i = 1;double sum1 = 0;double sum2 = 0;for (i = 1; i < 100; i++){//注意→相除的话保留记得把1修改成1.0变成浮点型类型形式sum1 = 1.0 / i + sum1;//sum1保存上一次值相加sum2 = 1.0 / i - sum2;//sum2保存上一次值相加}printf("sum1 = %lf\n", sum1);printf("sum2 = %lf\n", sum2);return 0;}
运行结果
sum1 = 5.177378
sum2 = 0.698172
第三十九题→代码
#define _CRT_SECURE_NO_WARNINGS 1#include#include#include//assert的头文件int My_strlen(const char *arr){unsigned int Count = 0;//统计字符不可能是为负数的! assert(arr!=NULL);//这里加入到断言就能确保我们输入字符串的时候不会是空指针while (*arr != '\0'){Count++;//自增++*arr++;//++,直到遇到'\0'就退出}return Count;//返回计算机长度}int main(void){char enter[20] = { 0 };printf("请输入字符串:");scanf("%s", &enter);int ret = My_strlen(enter);printf("The total number of input strings:%d\n",ret);return 0;}
运行结果如下
请输入字符串:C语言天下第一
The total number of input strings:7
第四十零题→代码
#define _CRT_SECURE_NO_WARNINGS 1#include#include//2.模拟strlen()函数的使用int my_strlen(char *str){int count = 0;while (*str != '\0'){*str++;count++;}return count;}//1.实现逆序打印void print(char *str){assert(str != NULL);int left = 0;int right = my_strlen(str) - 1;while (left <= right){char tep = str[left];str[left] = str[right];str[right] = tep;left++;right--;}}int main(void){char arr[20] = { 0 };puts("请输入字符串↓");gets(arr);print(arr);printf("逆序の字符串↓\n%s\n", arr);return 0;}
运行结果如下
请输入字符串↓
8 Printf();
逆序の字符串↓
;)(tnirP 8