【C语言】题集 of ⑦
🚀write in front🚀
🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~周榜50~总榜2308🏅
🆔本文由 謓泽 原创 CSDN首发🐒 如需转载还请通知⚠
📝个人主页 ⇥ 打打酱油desu_泽En_CSDN博客💬
🎁欢迎各位 ⇥ 点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏 ⇥【C】系列_打打酱油desu-CSDN博客🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
🔥目录🔥
🚀write in front🚀
🎉第三十一题→模拟实现strcat()函数🎉
🎉第三十二题→随机输入十个数字,数字按照从大到小排列🎉
🎉第三十三题→用一个函数在函数内部创建一个变量来交换两个值的变量🎉
🎉第三十四题→接收一个整型值(无符号形式),按照顺序打印出每一位🎉
🎉第三十五题→模拟实现字符串函数打印长度,用递归的形式,不能创建临时变量🎉
✨第三十一题→代码✨
✨第三十二题→代码✨
✨第三十三题→代码✨
✨第三十四题→代码✨
✨第三十五题→代码✨
✨最后✨
🎉第三十一题→模拟实现strcat()函数🎉
来介绍下什么是strcat()函数,strcat() 函数的声明方式如下 👇
char *strcat(char *dest, const char *src)
将源字符串的副本追加到目标字符串。
dest → 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串。
src → 指向要追加的字符串,该字符串不会覆盖目标字符串。
该函数返回一个指向最终的目标字符串 dest 的指针。
把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
模拟实现的思路很简单其实 👇
Ⅰ→dest 找到目标字符串'\0'
Ⅱ→再把源数据追加到字符串'\0'的后面,注意:是包含'\0'的。
🎉第三十二题→随机输入十个数字,数字按照从大到小排列🎉
随机输入十个数字,创建⑩个元素的整形数组,用 for 循环进行遍历,再输入函数即可。
数字从大到小排列,把第一个数字和所有数字(2~10)比较下,第一个数字大于第二个数字的话就不交换双方的值(依次类推),小于的话就进行交换。如果你知道冒泡排序你就知道怎么做了(╹ڡ╹ )
最后就开始输出打印我们随即输入⑩个数字从大到小的进行排列
做这种题目的思路还是比较强的,所以我们一定要多做这种类型的题目才能够孰能生巧。
注意:从大到小来进行排列(降序排列)。
🎉第三十三题→用一个函数在函数内部创建一个变量来交换两个值的变量🎉
注意→在你交换值的时候需要取出它们的地址,因为相当于你以及改变它们的内存编号了!我们指望它能够把a和b的值进行交换,也就是说我们在这个过程中会把swap()函数的值进行交换。所以,我们的外部函数和内部函数是必须要建立联系。那么我们就要把地址给传递过去,通过地址的内存单元的编号我们才能够找回来。
通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。
通过引用传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作。
传递指针可以让多个函数访问指针所引用的对象,而不用把对象声明为全局可访问。
🎉第三十四题→接收一个整型值(无符号形式),按照顺序打印出每一位。例如:1234,输出 1 2 3 4(递归的形式)🎉
本道题目最关键的点实际上就是递归!那么首先我们要清楚递归它是个什么玩意。
概述:一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出。
那么递归它也是具有限制条件的,不然它就会造成死递归,这个就相当于死循环一样。
- 存在限制条件,当满足这个限制条件之后的时候,递归便会不再继续。
- 每次递归调用之后都会越来越接近这个限制条件。
其实每个人对递归的理解都是有不同的,这种最终还是需要你去多多练习相对应题目才行。
🎉第三十五题→模拟实现字符串函数打印长度,用递归的形式,不能创建临时变量🎉
题目内容:模拟实现字符串函数打印长度,用递归的形式,不能创建临时变量。
在做这道题的时候我们先讲解下什么是递归↓
【C语言】卍字通晓→函数+递归_謓泽的博客-CSDN博客
相信你看了这篇文章就知道什么是递归了(●'◡'●)
strlen() 函数的声明方式如下↓
size_t strlen ( const char * str );
获取字符串长度。
返回 C 字符串 str 的长度。
str → 要计算长度的字符串。
字符串的'\0'作为结束标志,strlen函数的返回值是在字符串中出现的字符个数(不包含'\0')
注意:函数的返回值是无符号的 unsigned 容易出错の。
Size_t→是一个无符号(unisgned int)整型类型。
✨第三十一题→代码✨
#define _CRT_SECURE_NO_WARNINGS 1#include#includechar *My_strcat(char *dest, const char *src){assert(dest && src != NULL);char *ret = dest;while (*dest != '\0')//'\0'的ASCLL码值就是0{dest++;}//dest指向的是'\0'while (*dest++ = *src++){;}return ret;}int main(void){char arr1[20] = "hello C";char arr2[20] = "yuyan";printf("%s\n", My_strcat(arr1, arr2));return 0;}
🖊运行结果
hello Cyuyan
✨第三十二题→代码✨
#define _CRT_SECURE_NO_WARNINGS 1#includeint main(void){int arr[10] = { 0 };int i = 0;int j = 0;int k = 0;puts("请输入数字:");for (i = 0; i < 10; i++){scanf("%d", &arr[i]);//第一:输入10个数字}//第一个元素进行比较for (j = 0; j < 10; j++){//第二~九的元素进行比较for (k = j + 1; k < 10; k++){//判断从大到小,依次从第一个元素比较2~9元素,大于的话不交换,小于的话交换。if (arr[j] < arr[k]){int tep = 0;//创建临时变量tep = arr[j];arr[j] = arr[k];arr[k] = tep;}}printf("program result:%d\n", arr[j]);}return 0;}
🖊可能运行结果
请输入数字:1 2 3 4 5 6 7 8 9 10
program result:10 9 8 7 6 5 4 3 2 1
✨第三十三题→代码✨
#includevoid swap(int *x, int *y){int tep = *x;*x = *y;*y = tep;}int main(void){int a = 10;int b = 20;printf("交换之前:a=%d,b=%d\n", a, b);swap(&a, &b);printf("------------------\n");printf("交换之后:a=%d,b=%d\n", a, b);return 0;}
🖊运行结果
交换之前:10,20
交换之后:20,10
✨第三十四题→代码✨
#define _CRT_SECURE_NO_WARNINGS 1#includevoid print(unsigned int number){if (number > 9) //限制条件{print(number / 10);//调用这个函数,直到表达式为假执行下面语句,1234 123 12 1}printf("%d ", number % 10);}int main(void){unsigned int number = 0;printf("请输入数字:");scanf("%u", &number);print(number);return 0;}
🖊可能运行结果
请输入数字:1234
1 2 3 4
✨第三十五题→代码✨
#define _CRT_SECURE_NO_WARNINGS 1#includeint My_strlen(char *str){if (*str != '\0')return 1 + My_strlen(1 + str);elsereturn 0;}int main(void){char arr[20] = {0};printf("请输入字符:");scanf("%s", &arr);printf("str = %d\n", My_strlen(arr));return 0;}
🖊运行结果
可能输入字符:HelloC
str = 6
注意→它的这个假设你输入的字符是:Hello C的话这里包括空格,程序就会在空格符上停止了。所以,在这里的话就是 str = 5。实际上这里因该是7,那么你可以把scanf()的输入函数改成gets(),这样str = 7了。
✨最后✨
结束🔚,→👍,❌🙅,👀👀👀