【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(二)

简介: 【初阶C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)(二)

6. 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定


#include <stdio.h>
//实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
//如:输入9,输出9 * 9口诀表,输出12,输出12 * 12的乘法口诀表。
//
//1*1=1
//2*1=2 2*2=4
//3*1=3 3*2=6 3*3=9
//
void print_table(int m)
{
  int i = 0;
  for (i = 1; i <= m; i++)
  {
  //打印一行
  int j = 0;
  for (j = 1; j <= i; j++)
  {
    printf("%-2d*%-2d=%-3d ", i, j, i * j);
  }
  printf("\n");
  }
}
int main()
{
  int n = 0;
  scanf("%d", &n);//9 12 5
  //打印对应的乘法口诀表
  print_table(n);
  return 0;
}


7. 编写一个函数实现n的k次方,使用递归实现


图解演示

代码如下

#include <stdio.h>
double Pow(int n, int k)
{
  if (k > 0)
  return n * Pow(n, k - 1);
  else if (k == 0)
  return 1.0;
  else
  return 1.0 / Pow(n, -k);
}
int main()
{
  int n = 0;
  int k = 0;
  scanf("%d %d", &n, &k);
  printf("%lf\n", Pow(n, k));
  return 0;
}


8. 计算一个数的每位之和(递归实现)


题目内容:

写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和。


例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19


输入:1729,输出:19


思路

DigitSum(1729)

DigitSum(172) + 9

DigitSum(17) + 2 +9

DigitSum(1) + 7 + 2 + 9


#include <stdio.h>
int DigitSum(int n)
{
  if (n > 9)
  return DigitSum(n / 10) + n % 10;
  else
  return n;
}
int main()
{
  int n = 0;
  scanf("%d", &n);
  int ret = DigitSum(n);
  printf("%d\n", ret);
  return 0;
}


9. 字符串逆序(递归实现)


题目内容:

编写一个函数 reverse_string(char * string)(递归实现)


实现:将参数字符串中的字符反向排列,不是逆序打印。


要求:不能使用C函数库中的字符串操作函数。

比如:

char arr[] = "abcdef"

逆序之后数组的内容变成:fedcba

#include <stdio.h>
#include <string.h>
int my_strlen(char* str)  //模拟strlen的实现
{
  int count = 0;
  while (*str != '\0')
  {
  count++;
  str++;
  }
  return count;
}
void reverse_string(char* str)  //非递归的方法
{
  int left = 0;
  int right = my_strlen(str)-1;
  while (left<right)
  {
  char tmp = *(str + left);
  *(str + left) = *(str + right);
  *(str + right) = tmp;
  left++;
  right--;
  }
}
void reverse_string(char* str)  //递归的方法
{
  int len = my_strlen(str);
  char tmp = *str;//1
  *str = *(str + len - 1);//2
  *(str + len - 1) = '\0';//3
  if(my_strlen(str+1)>=2)
  reverse_string(str+1);//4
  *(str + len - 1) = tmp;//5
}
int main()
{
  //char arr[] = "abcdef";
  char arr[] = "abcdef";
  reverse_string(arr);
  printf("%s\n", arr);
  return 0;
}


10. 将数组A中的内容和数组B中的内容进行交换。(数组一样大)


#include<stdio.h>
int main()
{
  int arr1[5] = { 1,3,5,7,9 };
  int arr2[5] = { 2,4,6,8,0 };
  int i = 0;
  int sz = sizeof(arr1) / sizeof(arr1[0]);
  int tmp = 0;
  for (i = 0; i < sz; i++)
  {
  tmp = arr1[i];
  arr1[i] = arr2[i];
  arr2[i] = tmp;
  }
  for (i = 0; i < sz; i++)
  {
  printf("%d ", arr1[i]);
  }
  printf("\n");
  for (i = 0; i < sz; i++)
  {
  printf("%d ", arr2[i]);
  }
  printf("\n");
  return 0;
}


11. 创建一个整形数组,完成对数组的操作


要求:

实现函数init() 初始化数组为全0

实现print() 打印数组的每个元素

实现reverse() 函数完成数组元素的逆置。

自己设计以上函数的参数,返回值。


#include <stdio.h>
void init(int arr[], int sz)
{
  int i = 0;
  for (i = 0; i < sz; i++)
  {
  arr[i] = 0;
  }
}
void print(int arr[], int sz)
{
  int i = 0;
  for (i = 0; i < sz; i++)
  {
  printf("%d ", arr[i]);
  }
  printf("\n");
}
void reverse(int arr[], int sz)
{
  int left = 0;
  int right = sz - 1;
  while (left<right)
  {
  int tmp = arr[left];
  arr[left] = arr[right];
  arr[right] = tmp;
  left++;
  right--;
  }
}
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };
  int  sz = sizeof(arr) / sizeof(arr[0]);
  print(arr, sz);
  reverse(arr, sz);
  print(arr, sz);
  init(arr, sz);
  print(arr, sz);
  return 0;
}


如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞作为鼓励,并评论收藏一下,谢谢大家!!!

制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

相关文章
|
26天前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
82 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
26天前
|
传感器 算法 安全
【C语言】两个数组比较详解
比较两个数组在C语言中有多种实现方法,选择合适的方法取决于具体的应用场景和性能要求。从逐元素比较到使用`memcmp`函数,再到指针优化,每种方法都有其优点和适用范围。在嵌入式系统中,考虑性能和资源限制尤为重要。通过合理选择和优化,可以有效提高程序的运行效率和可靠性。
84 6
|
1月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
55 5
|
1月前
|
存储 程序员 编译器
C 语言数组与指针的深度剖析与应用
在C语言中,数组与指针是核心概念,二者既独立又紧密相连。数组是在连续内存中存储相同类型数据的结构,而指针则存储内存地址,二者结合可在数据处理、函数传参等方面发挥巨大作用。掌握它们的特性和关系,对于优化程序性能、灵活处理数据结构至关重要。
|
1月前
|
存储 C语言 计算机视觉
在C语言中指针数组和数组指针在动态内存分配中的应用
在C语言中,指针数组和数组指针均可用于动态内存分配。指针数组是数组的每个元素都是指针,可用于指向多个动态分配的内存块;数组指针则指向一个数组,可动态分配和管理大型数据结构。两者结合使用,灵活高效地管理内存。
|
1月前
|
存储 NoSQL 编译器
C 语言中指针数组与数组指针的辨析与应用
在C语言中,指针数组和数组指针是两个容易混淆但用途不同的概念。指针数组是一个数组,其元素是指针类型;而数组指针是指向数组的指针。两者在声明、使用及内存布局上各有特点,正确理解它们有助于更高效地编程。
|
C语言
《C语言及程序设计》实践参考——递归函数
返回:贺老师课程教学链接 【项目-递归函数】 (1)立方累加和:用递归函数求f(n)=13+23+...+n3f(n)=1^3+2^3+...+n^3,要求先将f(n)f(n)数学表达式表示成递归的形式,然后再编程序实现。 [参考解答] 递归公式: f(n)={1,n3+f(n−1),n=1n&gt;1 f(n) = \begin{cases} 1, & \text
1296 0
|
26天前
|
存储 C语言 开发者
【C语言】字符串操作函数详解
这些字符串操作函数在C语言中提供了强大的功能,帮助开发者有效地处理字符串数据。通过对每个函数的详细讲解、示例代码和表格说明,可以更好地理解如何使用这些函数进行各种字符串操作。如果在实际编程中遇到特定的字符串处理需求,可以参考这些函数和示例,灵活运用。
56 10
|
26天前
|
存储 程序员 C语言
【C语言】文件操作函数详解
C语言提供了一组标准库函数来处理文件操作,这些函数定义在 `<stdio.h>` 头文件中。文件操作包括文件的打开、读写、关闭以及文件属性的查询等。以下是常用文件操作函数的详细讲解,包括函数原型、参数说明、返回值说明、示例代码和表格汇总。
44 9
|
26天前
|
存储 Unix Serverless
【C语言】常用函数汇总表
本文总结了C语言中常用的函数,涵盖输入/输出、字符串操作、内存管理、数学运算、时间处理、文件操作及布尔类型等多个方面。每类函数均以表格形式列出其功能和使用示例,便于快速查阅和学习。通过综合示例代码,展示了这些函数的实际应用,帮助读者更好地理解和掌握C语言的基本功能和标准库函数的使用方法。感谢阅读,希望对你有所帮助!
37 8