C语言学习笔记—P7(分支和循环语句<2>+图解+题例)

简介: C语言学习笔记(分支和循环语句<2>+图解+题例)

前言:

●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

时间转换:

#define  _CRT_SECURE_NO_WARNINGS
#include <stdio.h>  
        //给定秒数 seconds ,把秒转化成小时、分钟和秒
    //包括一个整数,即给定的秒数。
    //包含三个整数,依次为输入整数对应的小时数、分钟数和秒数(可能为零),中间用一个空格隔开
int main()    
{
  int h = 0;//小时数
  int m = 0;//分钟数
  int s = 0;//秒数
  int seconds = 0;
  //输入
  scanf("%d", &seconds);
  //计算
  h = seconds / 3600;
  m = (seconds % 3600) / 60;
  s = (seconds % 3600) % 60;  //s = seconds % 60;
  //输出
  printf("%d %d %d", h ,m, s);
  return 0;
}
image.gif

image.gif编辑

求5个整数平均值:

#include <stdio.h>  //求5个整数平均值
int main()
{
  //输入  方法:1.放入数组 2.接收即相加计算
  int score = 0;
  int sum = 0;
  int i = 0;
  float avg = 0.0f;
  for (i = 0; i < 5; i++)
  {
    scanf("%d", &score);
    sum += score;
  }
  //计算
  avg = sum / 5.0;  //avg = sum / 5;
  //输出
  printf("%.1f\n", avg);//%.1f表示保留小数一位  //printf("%f\n", avg);
  return 0;
}
image.gif

image.gif编辑

#include <stdio.h>  //求5个整数平均值
int main()
{
  int data[5] = { 0 };
  int sum = 0;
  int i = 0;
  float avg = 0.0f;
  for (i = 0; i < 5; i++)
  {
    scanf("%d", &data[i]);
  }
  for (i = 0; i < 5; i++)
  {
    sum += data[i];
  }
  avg = sum / 5.0;
  printf("%.1f\n", avg);
  return 0;
}
image.gif

image.gif编辑

输出学生信息:

#include <stdio.h>  //输出学生信息
int main()
{
  printf("Name    Age    Gender\n");
  printf("---------------------\n"); 
  printf("Jack    18     man   \n");
  return 0;
}
image.gif

image.gif编辑

反向输出一个四位数:

#include <stdio.h>  //反向输出一个四位数
int main()
{
  int n = 0;
  scanf("%d", &n);
  while (n)
  {
    printf("%d", n % 10);
    n = n / 10;
  }
  return 0;
}
image.gif

image.gif编辑

扩展:

八进制:%8、/8         十六进制:%16、/16

解法 2:反向输出一个四位数

#include<stdio.h>
int main() {
    int a, b, c, d;
    scanf("%1d%1d%1d%1d", &a, &b, &c, &d);
    printf("%d%d%d%d", d, c, b, a);
}
image.gif

image.gif编辑

image.gif编辑image.gif编辑

switch语句:

#include <stdio.h>
int main() 
{
  int x = 3;
  int y = 3;
  switch (x % 2) {
  case 1:
    switch (y)
    {
    case 0:
      printf("first");
    case 1:
      printf("second");
      break;
    default: printf("hello");
    }
  case 2:
    printf("third");
  }
  //hellothird
  return 0;
}
image.gif

image.gif编辑

写代码将三个整数按从大到小输出:

//写代码将三个整数按从大到小输出
#include <stdio.h>  
int main()
{
  int a = 0;
  int b = 0;
  int c = 0;
  scanf("%d %d %d", &a, &b, &c);
  //最大值放在a中,最小值放在c中
  //a和b的较大值放在a中
  if (a < b)
  {
    int tmp = a;
    a = b;
    b= tmp;
  }
  //把a和c的较大值放在a中
  if (a < c)
  {
    int tmp = a;
    a = c;
    c = tmp;
  }
  //把b和c的较大值放在b中
  if (b < c)
  {
    int tmp = b;
    b = c;
    c = tmp;
  }
  printf("%d %d %d", a,b,c);
}
image.gif

image.gif编辑

打印1-100中3 的倍数:

#include<stdio.h>
int main()
{
  int i = 0;
  //方法1
  //for (i = 1; i <= 100; i++)
  //{
  //  //判断i是否是3的倍数
  //  if (i % 3 == 0)
  //  {
  //    printf("%d\t", i);
  //  }
  //}
  //方法2
  for (i = 3; i <= 100; i+=3)
  {
    printf("%d\t", i);
  }
  return 0;
}
image.gif

求两个数的最大公约数:

方法1
#include<stdio.h>
int main()
{
    int m = 0;
    int n = 0;
    scanf("%d %d", &m, &n);
    //求最大公约数
    int ret = 0;
    //1. 求m和n 较小值,假设就是最大公约数
    if (m > n)
      ret = n;
    else
      ret = m;
    while (1)
    {
      if (m % ret == 0 && n % ret == 0)
      {
        break;
      }
      ret--;
    }
    //打印
    printf("%d\n", ret);
    return 0;
  }
}
image.gif
//方法2——辗转相除法
#include<stdio.h>
int main()
{
  int m = 0;
  int n = 0;
  scanf("%d %d", &m, &n);//18 24
  //求最大公约数
  int ret = 0;
  while (ret=m%n)
  {
    m = n;
    n = ret;
  }
  printf("%d\n", n);
  return 0;
}
image.gif

image.gif编辑

打印1000-2000之间的闰年:

//闰年判断的规则
//1. 能被4整除,并且不能被100整除是闰年
//2. 能被400整除是闰年
//
int main()
{
  int y = 0;
  int count = 0;
  for (y = 1000; y <= 2000; y++)
  {
    //判断y是不是闰年
    //if (y % 4 == 0 && y % 100 != 0)
    //{
    //  count++;
    //  printf("%d ", y);
    //}
    //if (y % 400 == 0)
    //{
    //  count++;
    //  printf("%d ", y);
    //}
    if (((y % 4 == 0) && (y % 100 != 0)) || (y % 400==0))
    {
      count++;
      printf("%d\t", y);
    }
  }
  //输出个数
  printf("\ncount = %d\n", count);
  return 0;
}
image.gif

image.gif编辑

打印100-200之间的素数:

代码9
打印100~200之间的素数
素数也是质数
只能被1和他本身整除的数字就是素数
7
2 3 4 5 6
#include <stdio.h>
int main()
{
  int y = 0;
  for (y = 100; y <= 200; y++)
  {
    //判断y是不是素数
    //拿2~y-1的数字去试除y就行
    int n = 0;
    int flag = 1;//假设y是素数
    for (n = 2; n < y; n++)
    {
      if (y % n == 0)
      {
        flag = 0;//y不是素数
        break;
      }
    }
    if (flag == 1)
      printf("%d\t", y);
  }
  return 0;
}
image.gif
//打印素数优化
#include <stdio.h>
#include <math.h>
int main()
{
  int y = 0;
  int count = 0;
  for (y = 101; y <= 200; y+=2)
  {
    //判断y是不是素数
    //拿2~y-1的数字去试除y就行
    int n = 0;
    int flag = 1;//假设y是素数
    for (n = 2; n <= sqrt(y); n++)
    {
      if (y % n == 0)
      {
        flag = 0;//y不是素数
        break;
      }
    }
    if (flag == 1)
    {
      printf("%d ", y);
      count++;
    }
  }
  printf("\ncount = %d\n", count);
  return 0;
}
image.gif

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

//strcmp - string compare
//返回0,说明2个字符串相等
//返回大于0的数字
//返回小于0的数字
//
#include<stdio.h>
#include <string.h>
int main()
{
  int i = 0;
  char password[20] = "";
  //假设密码是"123456"
  for (i = 0; i < 3; i++)
  {
    printf("请输入密码:>");
    scanf("%s", password);//password不取地址的原因是password是数组名,数组名本来就是地址
    if (strcmp(password, "123456") == 0)//比较2个字符串是否相等,不能使用==,而应该使用strcmp这个函数
    {
      printf("登陆成功\n");
      break;
    }
    else
    {
      printf("密码错误\n");
    }
  }
  if (i == 3)
  {
    printf("三次密码均错误,退出程序\n");
  }
  return 0;
}
image.gif

image.gif编辑

//strcmp - string compare

//返回0,说明2个字符串相等

//返回大于0的数字

//返回小于0的数字

猜数字游戏程序:

//猜数字游戏
//电脑随机生成一个1~100之间的数字
//猜数字
//玩家猜小了,电脑会告诉:猜小了
//玩家猜大了,电脑会告诉:猜大了
//玩家猜对了,电脑会告诉:恭喜你,猜对了
//C语言中生成的随机数的方式是rand函数
//0~RAND_MAX 0x7fff
//0~32767
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
void menu()
{
  printf("***************************\n");
  printf("*****    1. play     ******\n");
  printf("*****    0. exit     ******\n");
  printf("***************************\n");
}
void game()
{
  int guess = 0;
  //猜数字游戏的过程
  //生成随机数
  int r = rand() % 100 + 1;//0~99-->1~100
  //猜数字
  while (1)
  {
    printf("猜数字:>");
    scanf("%d", &guess);
    if (guess < r)
    {
      printf("猜小了!\n");
    }
    else if (guess > r)
    {
      printf("猜大了!\n");
    }
    else
    {
      printf("恭喜你,猜对了!\n");
      break;
    }
  }
}
int main()
{
  int input = 0;
  srand((unsigned int)time(NULL));//时间-设置随机数的生成器
  do
  {
    //打印菜单
    menu();
    printf("请选择:>");
    scanf("%d", &input);
    switch (input)
    {
    case 1:
      game();
      break;
    case 0:
      printf("退出游戏!\n");
      break;
    default:
      printf("选择错误!\n");
      break;
    }
  } while (input);
  return 0;
}
image.gif

image.gif编辑

注:

1.C语言中生成的随机数的方式是rand函数

2.srand((unsigned int)time(NULL));//时间-设置随机数的生成器

srand要放在主函数内!

相关文章
|
2月前
|
C语言
【C语言】循环语句
C语言中循环语句的相关知识点
28 2
【C语言】循环语句
|
2天前
|
存储 算法 C语言
C语言手撕实战代码_循环单链表和循环双链表
本文档详细介绍了用C语言实现循环单链表和循环双链表的相关算法。包括循环单链表的建立、逆转、左移、拆分及合并等操作;以及双链表的建立、遍历、排序和循环双链表的重组。通过具体示例和代码片段,展示了每种算法的实现思路与步骤,帮助读者深入理解并掌握这些数据结构的基本操作方法。
|
24天前
|
C语言
【C语言篇】分支语句详解(超详细)
在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要顺序是满⾜实际需求的就可以。 不过我们通常是把 default ⼦句放在最后处理的。
|
24天前
|
机器学习/深度学习 C语言
【C语言篇】循环语句详解(超详细)
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环.
|
1月前
|
C语言
C语言的循环语句
C语言的循环语句
31 6
|
1月前
|
C语言
C语言分支语句
C语言分支语句
16 4
|
2月前
|
C语言
|
2月前
|
C语言
|
2月前
|
C语言
C语言学习笔记-W3
w3 条件,循环和数组
24 0
|
2月前
|
Linux C语言
【编程小实验】C语言实现:无限循环写入文本文件,支持Ctrl+C中断与数据追加(附完整源码)
在Linux中,文件I/O(输入/输出)是程序与文件进行交互的基本方式,包括读取文件内容和向文件写入数据。这通常通过标准的C库函数来实现,下面是一些基本的文件读写操作和代码示例。