分支与循环语句的练习

简介: 分支与循环语句的练习

分支与循环语句的练习


1.计算 n的阶乘


int main()
{
  int i = 0;
  int n = 0;//计算n的阶层
  printf("请输入一个数:\n");
  scanf("%d",&n);
  int ret = 1;
  for (i = 1; i <= n; i++)
  {
    ret = ret * i;
  }
  printf("%d的阶层是:%d\n", n, ret);
  return 0;
}


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


int main() 
{
  int i = 0;
  int sum = 0;
  int ret = 1;
  int n = 0;
  scanf("%d", &n);  
  for (i = 1; i <=n; i++)
  {
    ret = ret * i;
    sum = sum + ret;
  }
  printf("%d\n", sum);
  return 0;
}


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


int main()
{
  int k = 5;//记录要查找的数字
  int arr[] = { 1,2,3,4,5,6,7,8};
  int size = sizeof(arr) / sizeof(arr[0]);//计算数组的大小
  int left = 0;
  int right = size - 1;
  int flag = 0;
  while (left <= right)
  {
    int mid = (left + right) / 2;
    if (arr[mid] == k)
    {
      printf("找到了!下标是:%d\n", mid);
      flag = 1;
      break;
    }
    if (arr[mid] > k)
    {
      right = mid - 1;
    }
    if (arr[mid] < k)
    {
      left = mid + 1;
    }
  }
  if (flag == 0)
  {
    printf("没有找到!\n");
  }
  return 0;
}


图解:


  • 我们使用mid记录中间数的下标,此时的mid为(0+7)/2 = 3,该mid下标对应的元素是4,4比我们要查找的5要小,因为该数组是有序的,所以此时mid下标左边的数都一定会比5要小,所以我们的搜索范围就成了mid的右边的元素,所以这时右下标不用变动,左下标改成mid+1

3260aa475b314ce6af77bc44a1d63271_ad24a1cce8e94e6b8abab08d1d5bddca.png

  • 此时的mid就变成了5,该mid下标对应的元素是6,比我们要查找的5要大,所以此时mid的右边的元素都比5要大,搜索范围再一次缩小,left不变,因为mid下标对应的元素也比我们的要查找的数大,所以有下标从mid的左边开始,right变成mid-1。

f31f7e67e6e5439142da8bf69cd1db67_3119fc4e717b490e95f819708061ec00.png

  • 第三次查找时,mid变成了4,而此时的left和right相等。此时将flag设置为1,打印mid(即返回目标值的下标)。退出循环


4. 演示多个字符从两端移动,向中间汇聚。


int main()
{
  char arr1[] = "####################";
  char arr2[] = "wecome to university";
  int left = 0;
  int right = strlen(arr1)-1;
  while (left <= right)
  {
    arr1[left] = arr2[left];
    arr1[right] = arr2[right];
    printf("%s\n", arr1);
    Sleep(500);//休息0.5s
    system("cls"); //清理屏幕  引头文件<windows.h>
    left++;
    right--;
  }
  printf("%s\n", arr1);
  return 0;
}


5. 猜数字游戏


void game()
{
  int ret = rand() % 100 + 1;
  int guess = 0;
  while (1)
  {
    printf("你猜的数字是:>\n");
    scanf("%d", &guess);
    if (guess > ret)
      printf("猜大了!\n");
    if (guess < ret)
      printf("猜小了!\n");
    if (guess == ret)
    {
      printf("恭喜你猜对了!\n");
      Sleep(1000);//需要windows.h头文件
      break;
    }   
  }
}
void menu()
{
  printf("1:play\n");
  printf("0:exit\n");
}
int main()//猜数字游戏
{
  srand((unsigned int)time(NULL));//以时间戳生成随机数种子
  int input = 0;
  do
  {
    system("cls");//每次开始猜的时候清空屏幕,需要stdlib.h头文件
    menu();
    printf("please select:>\n");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      printf("退出成功!\n");
      break;
    default:
      printf("输入错误,请重新输入!\n");
      break;
    }
  } while (input);
  return 0;
}


6. 关机程序


int main()//关机程序
{
  char input[20] = { 0 };
  system("shutdown -s -t 60");//需要<stdlib.h>头文件
  printf("您的电脑将会在60秒之后关机,请输入密码:>\n密码是:我是猪\n");
  while (1)
  {
    scanf("%s", input);
    if (strcmp("我是猪", input) == 0)//需要<string.h>头文件
    {
      system("shutdown -a");//解除关机
      printf("恭喜你输入正确!\n");
      break;
    }
    else
    {
      printf("请重新输入:>\n");
    }
  }
  return 0;
}


7. 打印100-200的素数


int main()//寻找100-200的素数
{
  int i = 0;
  int j = 0;
  int count = 0;
  for (i = 101; i <= 200; i+=2)//100-200的偶数不可能是素数
  {
    int flag = 1;//这条语句一定要写在for循环内部
    for (j = 2; j <= sqrt(i); j++)//这里直接<=sqrt 筛掉很多数据 要包含<math.h>
    {
      if (i % j == 0)
      {
        flag = 0;
        break;
      }
    }
    if (flag == 1)
    {
      printf("%d\n", i);
      count++;
    }
  }
  printf("共有%d个素数!\n",count);
  return 0;
}


8. 求两个数的最大公约数(辗转相除法)


int main()
{
  int a = 0;
  int b = 0;
  int k = 0;
  printf("please input two number:>\n");
  scanf("%d %d", &a, &b);
  while (k = a%b)//a
  {
    a = b;
    b = k;
  }
  printf("%d\n", b);
  return 0;
}

b0bbbb209ce789967cf1d4828df65048_172d51cd820b426d918c9cc90d7b8a41.png


9.打印闰年


闰年:

  1. 能被4整除但不能被100整除。
  2. 能被400整除。
#include <stdio.h>
int main()
{
  int year = 0;
  for(year=1000; year<=2000; year++)
  {
    //判断year是否为闰年
    if(year%4==0)  // 如果year能够被4整除,year可能为闰年
    {
      if(year%100!=0) // 如果year不能内100整除,则一定是闰年
      {
        printf("%d ", year);
      }
    }
    if(year%400 == 0)  // 每400年再润一次
    {
      printf("%d ", year);
    }
  }
  return 0;
}

相关文章
|
1月前
|
C语言
分支和循环语句
分支和循环语句
23 1
|
1月前
|
算法 Unix 数据安全/隐私保护
分支和循环语句2
分支和循环语句2
39 0
|
6月前
|
算法 数据安全/隐私保护
分支和循环语句(2)
分支和循环语句(2)
62 1
|
1月前
|
存储 缓存 Linux
分支与循环语句1
分支与循环语句1
25 0
|
1月前
|
缓存 编译器 Go
分支语句和循环语句
分支语句和循环语句
55 0
|
6月前
|
数据安全/隐私保护 C语言
分支语句与循环语句(2)
分支语句与循环语句(2)
41 0
|
6月前
|
C语言
分支语句和循环语句(1)
分支语句和循环语句(1)
36 0
|
7月前
|
编译器
分支语句与循环语句题
分支语句与循环语句题
46 0
|
7月前
|
算法 数据安全/隐私保护
分支语句与循环语句——练习
分支语句与循环语句——练习
38 0
|
7月前
|
编译器 C语言 C++
分支语句和循环语句上
分支语句和循环语句
38 0
分支语句和循环语句上