• C语言习题练习2--循环


     1. 计算n的阶乘

    1. //while for do.while
    2. //1*2*3*4*5
    3. #include
    4. int main()
    5. {
    6. int n = 0;
    7. scanf("%d", &n);//5
    8. //循环产生1~n的数字
    9. int i = 0;
    10. int ret = 1;
    11. for (i = 1; i <= n; i++)
    12. {
    13. ret = ret * i;
    14. }
    15. printf("%d\n", ret);
    16. return 0;
    17. }

    2. 计算 1!+2!+3!+……+10!

    //计算 1!+2!+3!+……+10!

    //1! =1

    //2! =1*2 = 1!*2

    //3! =1*2*3 = 2!*3

    //4! =1*2*3*4=3!*4

    //5!=4!*5

    1. int main()
    2. {
    3. int n = 0;
    4. int i = 0;
    5. int ret = 1;
    6. int sum = 0;
    7. //1 + 2 + 6 = 9
    8. //调试 - 让代码一步步走,我们一步步的观察
    9. for (n = 1; n <= 3; n++)
    10. {
    11. ret = 1;
    12. for (i = 1; i <= n; i++)
    13. {
    14. ret = ret * i;
    15. }
    16. sum = sum + ret;
    17. }
    18. printf("%d\n", sum);
    19. return 0;
    20. }

     改进

    1. int main()
    2. {
    3. int n = 0;
    4. int i = 0;
    5. int ret = 1;
    6. int sum = 0;
    7. //1 + 2 + 6 = 9
    8. //调试 - 让代码一步步走,我们一步步的观察
    9. scanf("%d", &n);//3
    10. for (i = 1; i <= n; i++)
    11. {
    12. ret = ret * i;
    13. sum = sum + ret;
    14. }
    15. printf("%d\n", sum);
    16. return 0;
    17. }

    3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找) 

    1. //在一个【有序数组】中查找具体的某个数字n
    2. //
    3. int main()
    4. {
    5. //数组如果有n个元素,最坏的情况下要找n次
    6. int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    7. int k = 7;//查找7
    8. int i = 0;
    9. int flag = 0;
    10. for (i = 0; i < 10; i++)
    11. {
    12. if (arr[i] == k)
    13. {
    14. printf("找到了,下标是:%d\n", i);
    15. flag = 1;
    16. break;//跳出整个循环
    17. }
    18. }
    19. //break, 找不到的时候也会来到这里
    20. if (flag == 0)
    21. printf("找不到\n");
    22. return 0;
    23. }

    改进----二分法

    1. int main()
    2. {
    3. //数组如果有n个元素,最坏的情况下要找n次
    4. int arr[10] = { 1,2,3,4,5,6,17,18,19,110 };
    5. int k = 7;//查找7
    6. int left = 0;
    7. int right = 9;
    8. int flag = 0;
    9. while (left<=right)
    10. {
    11. int mid = (left + right) / 2;//求出中间元素的下标
    12. if (arr[mid] > k)
    13. {
    14. right = mid - 1;
    15. }
    16. else if (arr[mid] < k)
    17. {
    18. left = mid + 1;
    19. }
    20. else
    21. {
    22. printf("找到了,下标是:%d\n", mid);
    23. flag = 1;
    24. break;
    25. }
    26. }
    27. if (flag == 0)
    28. printf("找不到\n");
    29. return 0;
    30. }
    1. //二分查找
    2. //查找32
    3. //顺序查找
    4. int main()
    5. {
    6. int arr[] = {0,1,2,32,55,58,94,1001};
    7. int k = 32;
    8. int left = 0;
    9. int right = sizeof(arr) / sizeof(arr[0]);
    10. int mid = 0;
    11. int flag = 0;//标志
    12. while (left <= right)
    13. {
    14. int mid = (left + right) / 2;
    15. if (arr[mid] > k)
    16. {
    17. right = mid - 1;
    18. }
    19. else if (arr[mid]
    20. {
    21. left = mid + 1;
    22. }
    23. else
    24. {
    25. printf("找到了,下标是:%d\n", mid);
    26. flag = 1;
    27. break;
    28. }
    29. }
    30. if (flag == 0)
    31. printf("找不到");
    32. return 0;
    33. }

    4. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。

    1)编写代码,演示多个字符从两端移动,向中间汇聚。

    2)程序员生成一个1-100的随机数

    3)猜数字

    猜小了,程序会告诉你猜小了,继续猜

    猜大了,程序会告诉你猜大了,继续猜

    猜对了,程序员会告诉你:恭喜你,猜对了

    4)游戏可以反复的玩

    //rand

    //break只跳出循环,不跳出if,break跳出了while

    1. //程序目的
    2. //welcome to bit!!!!!
    3. //*******************
    4. //w*****************!
    5. //we***************!!
    6. //wel*************!!!
    7. //...
    8. //welcome to bit!!!!!
    9. //
    10. #define _CRT_SECURE_NO_WARNINGS
    11. #include
    12. #include
    13. #include
    14. #include
    15. //刚进入的动态图
    16. void Menu()
    17. {
    18. //char arr[] = "bit";//[b i t \0]
    19. // 0 1 2 3
    20. //strlen(arr)-1;
    21. char arr1[] = "welcome to bit!!!!!";
    22. char arr2[] = "*******************";
    23. int left = 0;//左下标
    24. int right = strlen(arr1)-1;
    25. while (left<=right)
    26. {
    27. arr2[left] = arr1[left];
    28. arr2[right] = arr1[right];//目的使**被字母符号所覆盖
    29. printf("%s\n", arr2);
    30. Sleep(1000);//Sleep函数是实现睡眠,单位是毫秒
    31. //头文件stdlib.h
    32. system("cls");//system是一个库函数,可以执行系统命令,cls是清空屏幕的一个命令
    33. //头文件stdlib.h
    34. left++;
    35. right--;
    36. }
    37. printf("%s\n", arr2);
    38. return 0;
    39. }
    40. #include
    41. #include
    42. //登陆页面
    43. void lo_gin()
    44. {
    45. //假设密码是:字符串“123456”
    46. int i = 0;
    47. char password[20] = {0};//字符数组,可以存放字符串
    48. int flag = 0;//设为初值,若返回的0则输出错误
    49. for (i = 0; i < 3; i++)//三次循环
    50. {
    51. printf("请输入密码:>\n");
    52. scanf("%s", password);//数组名本质上就是地址,所以不需要取地址符号&
    53. //
    54. //判断两个字符串是否相等,要使用strcmp函数,不能直接使用==//头文件
    55. //int ret = strcmp(password, "123456");
    56. //如果第一个字符串小于第二个字符串,返回<0的数字
    57. //如果第一个字符串大于第二个字符串,返回>0的数字
    58. //如果第一个字符串等于第二个字符串,返回0
    59. //
    60. if (0 == strcmp(password,"123456"))//一对字符一对字符相比
    61. {
    62. printf("登录成功\n");
    63. flag = 1;
    64. break;
    65. }
    66. else
    67. {
    68. printf("第%d次密码错误\n", i + 1);
    69. }//此处的if...else是或语句
    70. }
    71. if (flag == 0)
    72. {
    73. printf("三次密码均输入错误,退出程序\n");
    74. }
    75. return 0;
    76. }
    77. #include
    78. #include
    79. #include
    80. void menu()//空函数,不返回任何值
    81. {
    82. printf("**************************\n");
    83. printf("****** 1. play ******\n");
    84. printf("****** 0. exit ******\n");
    85. printf("**************************\n");
    86. }
    87. //rand函数是专门用来生成随机数的
    88. //rand函数返回的是0~RAND_MAX(32767)之间的一个随机数
    89. //#define RAND_MAX 0x7fff
    90. //
    91. //
    92. //
    93. //rand函数在使用之前要使用一个srand函数来设置随机数的生成器
    94. //srand函数在程序中只要调用一次就可以了,不需要频繁调用
    95. //
    96. //
    97. //
    98. //时间戳
    99. //C语言中,time函数会返回时间戳
    100. //
    101. //NULL - 空指针
    102. void game()
    103. {
    104. int num = 0;
    105. //1. 生成随机数
    106. int ret = rand()%100+1;//运用取余符号可以生成1-100的随机数
    107. //printf("%d\n", ret);
    108. //2. 猜数字
    109. while (1)
    110. {
    111. printf("请猜数字:>");
    112. scanf("%d", &num);
    113. if (num < ret)
    114. {
    115. printf("猜小了\n");
    116. }
    117. else if (num > ret)
    118. {
    119. printf("猜大了\n");
    120. }
    121. else
    122. {
    123. printf("恭喜你,猜对了\n");
    124. break;//跳出整个while循环
    125. }
    126. }
    127. }
    128. int main()
    129. {
    130. Menu();
    131. lo_gin();
    132. int input = 0;
    133. srand((unsigned int)time(NULL));//生成一个种子//time的头文件是time.h
    134. do
    135. {
    136. //打印菜单
    137. menu();
    138. printf("请选择:>");
    139. scanf("%d", &input);
    140. switch (input)
    141. {
    142. case 1:
    143. game();//game函数中是猜数字的整个路基逻辑
    144. break;
    145. case 0:
    146. printf("退出游戏\n");
    147. break;
    148. default:
    149. printf("选择错误,重新选择\n");
    150. break;
    151. }
    152. } while (input);
    153. return 0;
    154. }

    4.打印100~200之间的素数

    1. //写一个代码:打印100~200之间的素数
    2. #include
    3. #include//调用数学函数
    4. int i = 0;
    5. int k = 0;
    6. int main()
    7. {
    8. for (i = 100; i <= 200; i++)//输出所有的素数
    9. {
    10. int flag = 1;
    11. for (k = 2; k <= sqrt(i); k++)
    12. {
    13. if (i % k == 0)
    14. {
    15. flag = 0;
    16. break;
    17. }
    18. }//判断一个数是否为素数
    19. if(flag==1)
    20. {
    21. printf("%d ", i);
    22. }
    23. }
    24. return 0;
    25. }

    5.从大到小输出

    //交换记得增加变量

    1. 从大到小排序
    2. #include
    3. int main()
    4. {
    5. int a = 0;
    6. int b = 0;
    7. int c = 0;
    8. scanf("%d %d %d", &a, & b, &c);
    9. if (a < b)
    10. {
    11. int d = a;
    12. a = b;
    13. b = d;
    14. }
    15. if (a < c)
    16. {
    17. int d = a;
    18. a = c;
    19. c = d;
    20. }
    21. if (b < c)
    22. {
    23. int t = b;
    24. b=c;
    25. c = t;
    26. }
    27. printf("%d %d %d", a, b, c);
    28. return 0;
    29. }

    6. 打印1000年到2000年之间的闰年
    闰年:
    1. 能被4整除,并且不能被100整除是闰年
    2. 能被400整除是闰年

    1. int main()
    2. {
    3. int i = 0;
    4. for (i = 1000; i <= 2000; i++)
    5. {
    6. if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
    7. {
    8. printf("%d ", i);
    9. }
    10. }
    11. return 0;
    12. }

    if

    if

    含义为或且并列 

     7.最大公约数

    1)辗转相除法

    1. int main()
    2. {
    3. int m, n = 0;
    4. scanf("%d %d", &m, &n);
    5. int k = 0;//m>n输出n,否则输出m
    6. //24%18=6--此时6就是公约数
    7. //18%6=0
    8. while (k = m % n)//当0循环终止
    9. {
    10. m = n;
    11. n = k;
    12. }
    13. printf("%d", n);
    14. return 0;
    15. }

    2)实验法--计算量大

    1. //实验法
    2. int main()
    3. {
    4. int m = 0;
    5. int n = 0;
    6. //输入
    7. scanf("%d %d", &m, &n);//18 24
    8. int k = (m > n ? n : m);
    9. //假设最大公约数就是m和n的较小值
    10. while (1)
    11. {
    12. if (m % k == 0 && n % k == 0)
    13. {
    14. break;
    15. }
    16. k--;
    17. }
    18. printf("%d\n", k);
    19. return 0;
    20. }

    6.求10 个整数中最大值
     

    1. //求10 个整数中最大值
    2. int main()
    3. {
    4. int arr[10] = {0};
    5. int i = 0;
    6. int sz = sizeof(arr) / sizeof(arr[0]);
    7. int max = arr[0];
    8. for (i = 0; i < 10; i++)
    9. {
    10. scanf("%d", &arr[i]);
    11. }
    12. /*for (i = 0; i < sz;i++)*/
    13. for (i = 0; i < 10; i++)
    14. {
    15. if(arr[i]>max)
    16. {
    17. max = arr[i];
    18. }
    19. }
    20. printf("%d", max);
    21. }

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

    1. int main()
    2. {
    3. int i = 0;
    4. double sum = 0.0;
    5. int flag = 1;
    6. for (i = 1; i <= 100; i++)
    7. {
    8. sum = sum +flag*( 1.0 / i);//记住为1.0不能为1,其必须为浮点类型
    9. flag = -flag;
    10. }
    11. printf("%lf", sum);
    12. return 0;
    13. }

    8.三角形圣诞树

    描述

    输入一个字符,用它构造一个边长为5的三角形圣诞树。

    数据范围:保证输入的字符是一个 char 类型的值

    输入描述:

    输入只有一行,一个字符。

    输出描述:

    该字符构成的三角形圣诞树。

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. int main()
    4. {
    5. //4个空格一个1
    6. //3个空格1空格1
    7. //
    8. char m;
    9. scanf("%c", &m);
    10. int i;
    11. int j;
    12. int k;
    13. for (i = 0; i < 5; i++)
    14. {
    15. for (j = 0; j < 4 - i; j++)
    16. {
    17. printf(" ");
    18. }
    19. for (k = 0; k < i + 1; k++)
    20. {
    21. printf("%c ", m);
    22. }
    23. printf("\n");
    24. }
    25. return 0;
    26. }
  • 相关阅读:
    科技的成就(三十九)
    干货分享 | 速速围观,想要BIM落地,这些应用阶段都不可或缺
    【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)
    搭建nfs
    Springboot丽水土特产销售网站e80z4计算机毕业设计-课程设计-期末作业-毕设程序代做
    python+django+vue酒店入住客房管理系统
    redis特殊数据类型-Geospatial(地理位置)用法
    【Windows Server 2019】NTP服务的配置和管理——使用GUI与CLI设置
    flutter tabbar设置文字背景,不延时
    uni-ui和vue.js有什么区别
  • 原文地址:https://blog.csdn.net/m0_47017197/article/details/127706166