【C语言】题集 of ⑦

简介: 🎉第三十一题→模拟实现strcat()函数🎉来介绍下什么是strcat()函数,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<stdio.h>
#include<assert.h>
char *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
#include<stdio.h>
int 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]);
  }
  for (i = 0; i < 10; i++)
  {
    for (j = 0; j < 10 - i - 1; j++)
    {
      if (arr[j] > arr[j + 1])
      {
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
    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

✨第三十三题代码✨

#include<stdio.h>
void 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
#include<stdio.h>
void 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
#include<stdio.h>
int My_strlen(char *str)
{
  if (*str != '\0')
    return 1 + My_strlen(1 + str);
  else
    return 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了。

目录
相关文章
|
存储 算法 C语言
【C语言】题集 of ⑥
是考察你对循环的理解,本道题目要特别注意下循环当中的表达式,以及创建个sum总值用于每次循环i相乘sum,直到循环结束打印sum。
146 0
|
算法 物联网 数据安全/隐私保护
【C语言】题集 of ⑤
程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中是广泛应用的。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题转换位一个与原问题相似的规模较小的问题来去进行求解,递归策略只需少了的程序就可以描述出解题的
180 0
|
数据安全/隐私保护 C语言 C++
【C语言】题集 of ④
🍊第十六题→用数组求10位同学的平均数🍊 这道题目已经给了我们些信息了。首先是要拥有数组初始化元素是10,求十位同学,这个实际上循环十次就可以解决了。平均数最后总的数加起来z'z除以10即可。最终进行打印求出每位同学的平均数。就是这么的容易。对于新手来说多思考下就可以了,实在搞不明白多去调试代码,调试是你最好的
126 0
|
算法 C语言
【C语言】题集 of ③
设置个字符串数组arr,把它所进行打印。然后求字符串数量,再用for循环再去遍历。打印出来本题目就可以了,其实就是这么容易。 唯一需要考虑的就是如何把小写字母转换成大写字母这个操作,其实这个并不需要去担心。因为我们可以用到一个函数就可以把小写字母转换成大写字母。 C库函数 int tolower(int c)转换给定的字母为小写。
162 0
|
存储 C语言
【C语言】题集 of ②
🍁第六题→判断100~200之间的素数,并且计次总的素数🍁 首先做这道题目我们首先要明白一点什么是素数才行!素数就是解答这道题目的关键。 素数:能被 1 整除 和 自身整除 的数字叫做素数! 让我们来分析一下题目,首先判断100到200之间素数,那么用循环 for循环 + i
137 0
|
C语言
C语言及程序设计提高例程-37 操作字符串数组
贺老师教学链接  C语言及程序设计提高 本课讲解 例:求最小姓氏 #include &lt;stdio.h&gt; #include &lt;string.h&gt; char *min_name(char [][10], int); int main( ) { char name[5][10]= {"Zhao", "Qian", "Sun", "Li", "Zhou"};;
1149 0
|
编译器 C语言
【C语言】题集 of ①
🍪第一题→给两个正整数 a 和 b,输出 a 与 b 的和(自定义函数也行)🍪 这个题目是非常容易可以说也是刚学C语言大多数所接触的,题目告诉我们给两个正整数,那么我们就必须先知道什么是正整数。那么这个时候我们就不得不说到C语言的数据类型了,其中C语言的数据类型就有一种类型名为:整形。整形是C语言的一个关键字,我们知道关键字是不能用来当作是变量的。所以,在题目当中指定了 变量 a 和 变量b。然后再用到一个变量进行接收,"你可以理解为 a,b是玩具,当我们这个玩具给玩完了之后,我们需要
212 0
|
Java 编译器 C语言
初识c语言系列-1-第一个c语言程序
初识c语言系列-1-第一个c语言程序
初识c语言系列-1-第一个c语言程序
|
Java 编译器 Linux
【C】C语言的介绍以及第一个C语言程序
C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU )以及超级电脑等作业平台。

热门文章

最新文章