zl程序教程

您现在的位置是:首页 >  Java

当前栏目

【C语言】题集 of ③

2023-02-18 15:50:08 时间

 ?write in front?

?大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流? ?2021年度博客之星物联网与嵌入式开发TOP5,2021博客之星Top100→周榜31→总榜2629? ?本文由 謓泽 原创 CSDN首发? 如需转载还请通知 ?个人主页:打打酱油desu_泽En_CSDN博客? ?系列专栏:【C】系列_打打酱油desu-CSDN博客? ✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本? 

目录

 ?write in front?

?第十一题→将字符串小写字母转换成大写字母?

?第十二题→输入三个数字,从大到小依次的进行排列?

?第十三题→实现一个函数,打印乘法口诀表,口诀表的行列数自己指定?

?第十四题→有1、2、3、4个数字,能组成多少个互不相同且无重复的三位数,都是多少?并且把组成的数的总数给打印出来?

?第十五题→递归实现N的阶乘计算?

?第十一题の代码? 

?第十二题の代码? 

?第十三题の代码? 

?第十四题の代码? 

?第十五题の代码? 

?第十一题→将字符串小写字母转换成大写字母?

这类题目就是很容易的其实,一句概括核心那就是题目当中的内容。 首先设置个字符串数组arr,把它所进行打印。然后求字符串数量,再用for循环再去遍历。打印出来本题目就可以了,其实就是这么容易。 唯一需要考虑的就是如何把小写字母转换成大写字母这个操作,其实这个并不需要去担心。因为我们可以用到一个函数就可以把小写字母转换成大写字母。 C库函数 int tolower(int c)转换给定的字母为小写。 C库函数 int toupper(int c)转换给定的字母为大写,本题目使用的就是这个。 使用库函数的头文件是:#include<ctype.h>

?第十二题→输入三个数字,从大到小依次的进行排列?

首先这道题目很明确的说明了做题的思路。 输入:用scanf()函数输入即可 三个数字:创建三个整形变量。 从大到小依次进行排列:用判断语句 if  就能实现。举出一个例子吧。 如果,a>b 这种就没有任何必要进行交换了,因为本身就是按照大小进行打印了这就。像如果a<b 这种就要把 a 和 b 的值进行交换这样就实现了从大到小依次排列。那么这里要进行三次判断,a,b,c每次都要进行一次。a<b、a<c、b<c 最终打印三个变量即可。

?第十三题→实现一个函数,打印乘法口诀表,口诀表的行列数自己指定?

这道题目在C语言 题目9当中出现过。只不过它是叫我们打印出9*9的乘法口诀表,而这个是叫我们实现一个函数,并且行列数自己决定。这个意思是:假设我输入5,那么打印 5*5 的乘法口诀表。假设我输入的是8,那么打印 8*8的乘法口诀表。相信你已经有思路了那么开始刷题吧。这也是比较经典的题目新手是必须要掌握的。

?第十四题→有1、2、3、4个数字,能组成多少个互不相同且无重复的三位数,都是多少?并且把组成的数的总数给打印出来?

这道题目说实话可能是遇到跟之前相比算是有难度了,有些人一看这道题目可能不知道无从开始,没事让我们来分析下它! 首先:有1、2、3、4个数字,能组成多少个互不相同且无重复的三位数,都是多少? 这个看关键字,1、2、3、4个、无重复的三位数!很明显这道题目要从数学角度来算的话是这个样子的。 那么要把 1、2、3、4 的数字分别得到百位、十位、个位。 能组成多少个互不相同且无重复的三位数。进行 if 判断即可。判断百位 ,十位 ,个位都不相同。注意:创建三个变量 百 十 个。 并且把组成的数的总数给打印出来!创建个变量++即可! 组成数字的总数这个只要能判断成功的话那么就用Count++ 就可以实现。

?第十五题→递归实现N的阶乘计算?

这道题目如果你不知道递归那是完全做不来的,所以我们来说说递归! 程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中是广泛应用的。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题转换位一个与原问题相似的规模较小的问题来去进行求解,递归策略只需少了的程序就可以描述出解题的过程所需要的多次重复计算,大大减少了程序的代码量。递归的人主要思考方式就在于:把大事化小。递归之所以能够实现,是因为函数的每个执行过程在栈中都有自己的形参和局部变量的副本,这些副本和和该函数的其它执行过程是不会发生关系的。 注意:当递归进入到最内层的时候,递归就结束了,就开始逐层退出了,也就是逐层执行 return 语句。当执行最后层的 return 之后,就执行上面一层的递归! 再来说说递归的条件

  • 每一个递归函数都应该只进行有限次的递归调用,否则它就会进入死胡同,永远也不能退出了,这样的程序是没有意义的。
  • 存在限制条件,当满足这个限制条件之后的时候,递归便会不再继续。
  • 每次递归调用之后都会越来越接近这个限制条件

阶层实际上就是假如5的阶层:5x4x3x2x1 同理。

?第十一题の代码? 

#include<stdio.h>
#include<ctype.h>
int main(void)
{
	char arr[20] = { 0 };
    printf("打印前:%s\n",arr);
	scanf("%s", arr);
	printf("********************\n");
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		arr[i] = toupper(arr[i]);
	}
	printf("打印后:%s\n", arr);
}

运行结果?

  • 打印前:hello cyuyan
  • 打印后:HELLO CYUYAN

?第十二题の代码? 

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
	int a, b, c, max;
	scanf("%d %d %d", &a, &b, &c);
	if (a<b)
	{
		max = a, a = b, b = max;
	}
	if (a<c)
	{
		max = a, a = c, c = max;
	}
	if (b<c)
	{
		max = b, b = c, c = max;
	}
	printf("%d %d %d\n", a, b, c);
	return 0;
}         

 运行结果? 

  • 3 4 5
  • 5 4 3

?第十三题の代码? 

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void formula_table(int Custons)
{
	int row = 0;
	for (row = 1; row <= Custons; row++)
	{
		int col = 0;
		for (col = 1; col <= row; col++)
		{
			printf("%d * %d = %-4d ", col, row, row*col);
		}
		printf("\n");
	}
}
int main(void)
{
	unsigned int Custon = 0;
	printf("请输入行列数:");
	scanf("%d", &Custon);
	formula_table(Custon);
	return 0;
}

运行结果? 请输入的行列数:6 1 * 1= 1 2 * 1= 2 2 * 2= 4 3 * 1= 3 3 * 2= 6 3 * 3= 9 4 * 1= 4 4 * 2= 8 4 * 3= 12 4 * 4= 16 5 * 1= 5 5 * 2= 10 5 * 3= 15 5 * 4= 20 5 * 5= 25 6 * 1= 6 6 * 2= 12 6 * 3= 18 6 * 4= 24 6 * 5= 30 6 * 6= 36 请输入的行列数:9 1 * 1= 1 2 * 1= 2 2 * 2= 4 3 * 1= 3 3 * 2= 6 3 * 3= 9 4 * 1= 4 4 * 2= 8 4 * 3= 12 4 * 4= 16 5 * 1= 5 5 * 2= 10 5 * 3= 15 5 * 4= 20 5 * 5= 25 6 * 1= 6 6 * 2= 12 6 * 3= 18 6 * 4= 24 6 * 5= 30 6 * 6= 36 7 * 1= 7 7 * 2= 14 7 * 3= 21 7 * 4= 28 7 * 5= 35 7 * 6= 42 7 * 7= 49 8 * 1= 8 8 * 2= 16 8 * 3= 24 8 * 4= 32 8 * 5= 40 8 * 6= 48 8 * 7= 56 8 * 8= 64 9 * 1= 9 9 * 2= 18 9 * 3= 27 9 * 4= 36 9 * 5= 45 9 * 6= 54 9 * 7= 63 9 * 8= 72 9 * 9= 81

?第十四题の代码? 

#define _CRT_SECURE_NO_WARNINGS 1
#define number 4
#include<stdio.h>
int main(void)
{
	int a = 0;
	int b = 0;
	int c = 0;//创建三个变量
	int Count = 0;//计算总数
	for (a = 1; a <= number; a++)//百位
	{
		for (b = 1; b <= number; b++)//十位
		{
			for (c = 1; c <= number; c++)//个位
			{
				if (a != b && b != c && a != c)//判断(无重复数字)
				{
					printf("%d%d%d ", a, b, c);
					Count++;//Count = Count + 1
				}
			}
		}
		printf("\n");//换行
	}
	printf("Count = %d\n", Count);
	return 0;
}

运行结果?

  • 123 124 132 134 142 143
  • 213 214 231 234 241 243
  • 312 314 321 324 341 342
  • 412 413 421 423 431 432
  • Count = 24

?第十五题の代码? 

#include<stdio.h>
int face(int n)
{
	if (n <= 1)
		return 1;
	else
		return n*face(n - 1);
}
int main(void)
{
	int n = 0;
	printf("请输入你的数字:");
	scanf_s("%d", &n);
	int ret = face(n);
	printf("%d\n", ret);
}

运行结果? 请输入你的数字:5 ret = 120 5 * face(4) → 调用形式face(5) 4 * face(3) → 调用形式face(4) 3 * face(2) → 调用形式face(3) 2 * face(1) → 调用形式face(2) 1 * face(0) → 调用形式face(1) 1 * wu       → 调用形式face(1)  表达式当前调用的值:1 2 * face(1) → 调用形式face(2)  表达式当前调用的值:2 3 * face(2) → 调用形式face(3)  表达式当前调用的值:6 4 * face(3) → 调用形式face(4)  表达式当前调用的值:24 5 * face(4) → 调用形式face(5)  表达式当前调用的值:120 1 * wu = 0 2 * 1 = 2 3 * 2 = 6 4 * 6 = 24 5 * 24 = 120