【初阶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;
}


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

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

相关文章
|
5天前
|
存储 人工智能 算法
数据结构实验之C 语言的函数数组指针结构体知识
本实验旨在复习C语言中的函数、数组、指针、结构体与共用体等核心概念,并通过具体编程任务加深理解。任务包括输出100以内所有素数、逆序排列一维数组、查找二维数组中的鞍点、利用指针输出二维数组元素,以及使用结构体和共用体处理教师与学生信息。每个任务不仅强化了基本语法的应用,还涉及到了算法逻辑的设计与优化。实验结果显示,学生能够有效掌握并运用这些知识完成指定任务。
28 4
|
1月前
|
存储 编译器 C语言
【c语言】数组
本文介绍了数组的基本概念及一维和二维数组的创建、初始化、使用方法及其在内存中的存储形式。一维数组通过下标访问元素,支持初始化和动态输入输出。二维数组则通过行和列的下标访问元素,同样支持初始化和动态输入输出。此外,还简要介绍了C99标准中的变长数组,允许在运行时根据变量创建数组,但不能初始化。
37 6
|
1月前
|
存储 算法 C语言
C语言:什么是指针数组,它有什么用
指针数组是C语言中一种特殊的数据结构,每个元素都是一个指针。它用于存储多个内存地址,方便对多个变量或数组进行操作,常用于字符串处理、动态内存分配等场景。
|
1月前
|
存储 C语言
C语言:一维数组的不初始化、部分初始化、完全初始化的不同点
C语言中一维数组的初始化有三种情况:不初始化时,数组元素的值是随机的;部分初始化时,未指定的元素会被自动赋值为0;完全初始化时,所有元素都被赋予了初始值。
|
1月前
|
C语言
C语言数组
C语言数组
19 0
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
34 3
|
11天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
27 6
|
1月前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
36 10
|
24天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
30天前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
60 7