【C语言】题集 of ⑤

简介: 程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中是广泛应用的。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题转换位一个与原问题相似的规模较小的问题来去进行求解,递归策略只需少了的程序就可以描述出解题的

🚀write in front🚀  

📝个人主页:打打酱油desu_泽En_CSDN博客

🆔本文由 泽En 原创 CSDN首发🐒 如需转载还请通知⚠

🏅2021年度博客之星物联网与嵌入式开发TOP5→作者周榜56→总排名3255🏅

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

📣系列专栏:【C】题目_打打酱油desu-CSDN博客

💬总结:希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🖊

✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 ♐

🎆第二十一题→假设输入数字5,实现1+2+3+4+5=16,同样输入任何数字产生这样每个数字相加之和(递归方法实现)🎆

程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中是广泛应用的。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题转换位一个与原问题相似的规模较小的问题来去进行求解,递归策略只需少了的程序就可以描述出解题的过程所需要的多次重复计算,大大减少了程序的代码量。递归的人主要思考方式就在于:把大事化小。递归之所以能够实现,是因为函数的每个执行过程在栈中都有自己的形参和局部变量的副本,这些副本和和该函数的其它执行过程是不会发生关系的。

注意:当递归进入到最内层的时候,递归就结束了,就开始逐层退出了,也就是逐层执行 return 语句。当执行最后层的 return 之后,就执行上面一层的递归!再来说说递归的条件

每一个递归函数都应该只进行有限次的递归调用,否则它就会进入死胡同,永远也不能退出了,这样的程序是没有意义的。

存在限制条件,当满足这个限制条件之后的时候,递归便会不再继续。

每次递归调用之后都会越来越接近这个限制条件。

🎆第二十二题→用指针实现两个值的交换,不能创建临时变量来进行交换替换🎆

题目说要用指针实现两个值的交换,那么很明显我们要把两个变量存在到指针变量当中。

其次,不能创建临时变量来进行交换。其实这个很好办用按位异或就可以了,那么我们要知道按位异或是什么才行接下来来介绍下什么是按位异或(^∀^●)ノシ

那么我们要知道按位异或的运算规则才行。

0^0=0; 0^1=1; 1^0=1; 1^1=0;

🎆第二十三题→编写代码,演示多个字符从两端移动,向中间汇聚。(循环一次延迟1s再然后清屏,最后打印出字符)🎆

首先演示字符串从两端进行移动,那么我们肯定是需要先创建两个字符串数组才行。假设:

char arr1[] = "Cyuyuanyyds";

char arr2[] = "###########";

其次向中间汇聚,这个循环+左右下标每次循环一次--++直道循环条件表达式不满足就退出。

再这里介绍下清屏函数和延迟函数的使用:头文件是#include<Windows.h>

Sleep();//延时函数,注意:S要大写

system("cls");//清屏函数

🎆第二十四题→用 switch 分支语句输入星期一到星期天,如果输入不是星期一到星期天范围就打印 eroor (switch语句实现)🎆

这道题目主要就是看你对switch的理解了,是一道再容易不过的题目了。

C语言可以使用 [switch] 语句直接处理多分支选择的情况,将我们程序代码的可读性提高!

[switch]语句是多分支选择语句,在我们程序代码中,如果我们觉得用的分支语句较多的时候。这个时候我们就可以用到[switch]语句来代替 [if - else]分支语句。

例如:如果只需要检验某一个整形变量的可能取值,那么这个时候可以用更简便的[switch]语句。[switch]语句的一般形式如下:

switch(表达式)

{

   case 常量表达式 1:

       语句 1;

   case 常量表达式 2:

       语句 2;

        …

   case 常量表达式 n:    

       语句 n;

   default :

       默认情况语句块;

}

计算表达式当中的值,并且逐个与常量表达式进行比较。当表达式的值与某个常量表达式相等的时候,即执行其后的语句,然后不再进行判断。继续执行后面所有的[case]语句,如表达式的值没有一个和[case]当中的常量表达式相等的时候,则执行[default]默认情况语句块。

🎆第二十五题→请输入密码,然后输入 Y 是确认密码,N 是确认失败🎆

首先我们要输入密码,那么我们就要创建一个数组。然后用输入函数scanf()进行输入密码

输入密码我们可以用getchar()输入函数,作用是向显示设备进行输入①个无符号字符。

但是在这里我们需要注意下:当我们程序scanf()函数在读取缓冲区时候有\n(原因是因为我们回车输入的是'\n'),切记缓冲区会保留'\n'并不会把它读取。

所以,我们应该把'\n'的这个字符给读取了,所以我们因该实现一个功能搭建while()循环直到把缓冲区的'\n'读取完毕。

程序实现:while ((ch = getchar()) != '\n');

读取完毕之后,我们再用getchar()输入函数输入①个单个字符。

然后,用判断输入 Y 是确认成功,N 是确认失败。如果不是输入这两个字符,那么就会打印出:宁输入的格式有误。

目录

🚀write in front🚀  

✨第二十一题代码✨

✨第二十二题代码✨

✨第二十三题代码✨

✨第二十四题代码✨

✨第二十五题代码✨

✨第二十一题代码✨

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int face(int n)
{
  if (n <= 1)
    return 1;
  else
    return (n+face(n - 1));//注意优先级 
}
int main(void)
{
  int n;
  printf("请输入你的数字:");
  scanf("%d", &n);
  int ret = face(n);
  printf("N = %d\n", ret);
  return 0;
}

运行结果🖊

请输入数字:5
ret = 15

1+recursion(0) = 1
2+recursion(1) = 3
3+recursion(3) = 6
4+recursion(6)=10
5+recursion(10)=15

✨第二十二题代码✨

#include<stdio.h>
void swap(int *x, int *y) 
{
    //按位异或     假设 是 x = 1,y = 2
  *x ^= *y;//x = x^y // 0001 ^ 0010 = 0011 = 3 此时x = 3
  *y ^= *x;//y = x^y // 0011 ^ 0010 = 0001 = 1 此时y = 1 
  *x ^= *y;//x = x^y // 0011 ^ 0001 = 0010 = 2 此时x = 2    结果 x = 2,y = 1 
}
int main(void) 
{
  int a, b;
  printf("请输入两个数字:");
  scanf("%d %d", &a, &b);
  printf("a,b交换前: a = %d,b = %d\n", a, b);
  swap(&a, &b);
  printf("a,b交换后: a = %d,b = %d\n", a, b);
  return 0;
}

运行结果🖊

请输入两个数字:10 20
a,b交换前:a = 10,b = 20
a,b交换后:a = 10,b = 20

✨第二十三题代码✨

#include<stdio.h>
#include<string.h>//strlen长度的头文件
#include<windows.h>//system("");执行命令头文件
int main(void)
{
  char arr1[] = "nageshijieshimeng";
  char arr2[] = "#################";
  int left = 0;//👈下标 访问下标元素从0开始
  int right = strlen(arr1) - 1;//长度字符串 👉下标 下标比元素个数少1,所以需要减1
  while (left <= right)//当👈下标<=👉下标(字符)时候则停止循环
  {
    arr2[left] = arr1[left];  //把[arr1]n=[arr2]#   左边left第一个字符
    arr2[right] = arr1[right];//把[arr2]g=[arr2]#   右边right第一个字符
    printf("%s\n", arr2);
    Sleep(1000);  //延迟1000ms = 1s
    system("cls");//清空当前屏幕
    left++;
    right--;
  }
  printf("%s\n", arr2);//最后打印出结果
  return 0;
}

运行结果🖊

C########s
Cy######ds
Cyu####yds
Cyuy##yyds
Cyuyanyyds
Cyuyanyyds

✨第二十四题代码✨

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
  int input = 0;
  printf("Please enter:");
  scanf("%d", &input);
  switch (input)
  {
  case 1:
    printf("Monday\n");
    break;
  case 2:
    printf("Tuesday\n");
    break;
  case 3:
    printf("Wednesday\n");
    break;
  case 4:
    printf("Thursday\n");
    break;
  case 5:
    printf("Friday\n");
    break;
  case 6:
    printf("Saturday\n");
    break;
  case 7:
    printf("Sunday\n");
    break;
  default:
    printf("eroor\n");
  }
}

运行结果🖊

可能运行结果:
Please enter:7
Sunday

✨第二十五题代码✨

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
  char password[20] = { 0 };
  int ret = 0;
  printf("请输入密码:");
  //password是数组名,数组名本身就已经取地址了。
  scanf("%s", password);
  //当我们程序scanf函数在读取缓冲区时候有\n,所以我们应该把\n的这个字符给读取了!注意缓冲区会保留\n
  int ch;
  while ((ch = getchar()) != '\n');//搭建while循环直到把缓冲区的'\n'读取完毕
  printf("请确认密码(Y/N):");
  ret = getchar();//读取完毕之后,再进行getchar()的一个输入
  if (ret == 'Y')
  {
    printf("确认成功!\n");
  }
  if (ret == 'N')
  {
    printf("确认失败!\n");
  }
  if (ret != 'Y'&&'N')
  {
    printf("宁输入的格式有误!\n");
  }
  return 0;
}

运行结果🖊

请输入密码:123456

请确认密码(Y/N):Y
确认成功

目录
相关文章
|
7月前
|
C语言
C语言好题解析(二)
C语言好题解析(二)
42 1
|
7月前
|
算法 C语言
C语言好题解析(四)
C语言好题解析(四)
52 0
|
8天前
|
C语言
【C语言】——三道基础程序练习
【C语言】——三道基础程序练习
30 1
|
7月前
|
算法 C语言
C语言好题解析(三)
C语言好题解析(三)
87 1
|
7月前
|
C语言
C语言好题解析(一)
C语言好题解析(一)
49 1
|
7月前
|
C语言
【初阶C语言】随意拿捏循环语句
【初阶C语言】随意拿捏循环语句 上节课我们学完了分支语句(if和switch语句),这节课请继续跟着本娥学习循环语句
58 0
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)
|
存储 Java C#
【简单地过一遍C语言基础部分】所有知识点,点到为止!(仅一万多字)(二)
就在前几天,C语言入门到进阶部分的专栏——《维生素C语言》终于完成了。全文共计十八个章节并附带三张笔试练习篇,美中不足的是,第一章和第二章是以截图形式展现的。由于本人一开始是在有道云笔记上写的初稿,当时想方便省事(有道云排版个人感觉确实比较美观)就直接以截图的形式完成了第一章和第二章。本人考虑到因为是截图,不能复制文中出现的代码,不方便读者进行复制粘贴,所以我打算重新写一下第一章和第一章的内容,并且重新进行了排版。
114 0
【简单地过一遍C语言基础部分】所有知识点,点到为止!(仅一万多字)(二)
|
编译器 C语言
【简单地过一遍C语言基础部分】所有知识点,点到为止!(仅一万多字)(一)
就在前几天,C语言入门到进阶部分的专栏——《维生素C语言》终于完成了。全文共计十八个章节并附带三张笔试练习篇,美中不足的是,第一章和第二章是以截图形式展现的。由于本人一开始是在有道云笔记上写的初稿,当时想方便省事(有道云排版个人感觉确实比较美观)就直接以截图的形式完成了第一章和第二章。本人考虑到因为是截图,不能复制文中出现的代码,不方便读者进行复制粘贴,所以我打算重新写一下第一章和第一章的内容,并且重新进行了排版。
103 0
【简单地过一遍C语言基础部分】所有知识点,点到为止!(仅一万多字)(一)
|
存储 C语言
【简单地过一遍C语言基础部分】所有知识点,点到为止!(仅一万多字)(三)
就在前几天,C语言入门到进阶部分的专栏——《维生素C语言》终于完成了。全文共计十八个章节并附带三张笔试练习篇,美中不足的是,第一章和第二章是以截图形式展现的。由于本人一开始是在有道云笔记上写的初稿,当时想方便省事(有道云排版个人感觉确实比较美观)就直接以截图的形式完成了第一章和第二章。本人考虑到因为是截图,不能复制文中出现的代码,不方便读者进行复制粘贴,所以我打算重新写一下第一章和第一章的内容,并且重新进行了排版。
78 0
【简单地过一遍C语言基础部分】所有知识点,点到为止!(仅一万多字)(三)

热门文章

最新文章