【C语言】有关的经典题型内含数组及递归函数题型讲解(入门适用)
创始人
2024-06-01 14:27:31
0

在这里插入图片描述

C语音经典题型

    • 1. 在屏幕上输出9*9乘法口诀表
    • 2. 求10 个整数中最大值
    • 3. 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果
    • 4. 编写程序数一下 1到 100 的所有整数中出现多少个数字9
    • 5. 能把函数处理结果的二个数据返回给主调函数
    • 6. 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
    • 7. 编写一个函数实现n的k次方,使用递归实现
    • 8. 计算一个数的每位之和(递归实现)
    • 9. 字符串逆序(递归实现)
    • 10. 将数组A中的内容和数组B中的内容进行交换。(数组一样大)
    • 11. 创建一个整形数组,完成对数组的操作

1. 在屏幕上输出9*9乘法口诀表

//在屏幕上输出9*9乘法口诀表
//1*1=1
//2*1=2 2*2=4
//3*1=3 3*2=6 3*3=9
//...
//
#include 
int main()
{int i = 0;for (i = 1; i <= 9; i++){//打印一行的数据int j = 0;for (j = 1; j <= i; j++){printf("%d*%d=%-3d ", i, j, i * j);  //-3d向左对齐}printf("\n");}return 0;
}

2. 求10 个整数中最大值

#include 
//求10 个整数中最大值int main()
{int arr[] = { -1,-2,-3,-4,-5,-6,-7,-8,-9,-10 };//            0 1 ...int m = arr[0];int i = 0;for (i = 1; i < 10; i++){if (arr[i] > m)m = arr[i];}printf("%d\n", m);return 0;
}

注意:
不能将m定义为0,如果定义为零,只能满足正数形式,并不能满足负数。

3. 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果

#include 
//计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值,打印出结果int main()
{int i = 0;float sum = 0.0;int flag = 1;for (i = 1; i <= 100; i++){sum += flag*1.0f/i;flag = -flag;}printf("%f\n", sum);return 0;
}

4. 编写程序数一下 1到 100 的所有整数中出现多少个数字9

#include 
//编写程序数一下 1到 100 的所有整数中出现多少个数字9int main()
{int i = 0;int count = 0;for (i = 1; i <= 100; i++){if (i % 10 == 9)count++;if (i / 10 == 9)//注意不是else if,否则结果会为19count++;}printf("%d\n", count);return 0;
}

注意: 个位和十位都要判断有没有数字9。

5. 能把函数处理结果的二个数据返回给主调函数

#include 
被调用的函数
void test(int arr[])  //形参用数组的形式
{arr[0] = 3;arr[1] = 5;
}//主调函数
int main()
{int arr[2];test(arr);printf("%d %d\n", arr[0], arr[1]);return 0;
}void test(int*p1, int*p2)  //形参用二个指针
{*p1 = 3;*p2 = 5;
}//主调函数
int main()
{int x = 0; int y = 0;test(&x, &y);printf("%d %d\n", x,y);return 0;
}int x;
int y;void test()   //用俩个全局变量
{x = 3;y = 5;
}//主调函数
int main()
{test();printf("%d %d\n", x, y);return 0;
}

注意: return 这二个数是不可取的。

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

#include //实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定
//如:输入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 
double Pow(int n, int k)
{if (k > 0)return n * Pow(n, k - 1);else if (k == 0)return 1.0;elsereturn 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 
int DigitSum(int n)
{if (n > 9)return DigitSum(n / 10) + n % 10;elsereturn 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 
#include 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 (leftchar 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';//3if(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
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 
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 (leftint 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;
}

如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞作为鼓励,并评论收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...