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要放在主函数内!

相关文章
|
1月前
|
C语言
初识C语言2——分支语句和循环语句
初识C语言2——分支语句和循环语句
65 5
|
17天前
|
C语言
【c语言】分支语句
C语言通过三种基本结构——顺序、选择和循环,构建复杂的程序逻辑。本文主要介绍了C语言的选择结构,即if-else语句及其变体,包括简单的if语句、if-else组合、else if多分支判断、嵌套if以及解决悬空else问题的方法。此外,还详细讲解了逻辑运算符和关系运算符的使用,以及如何利用条件操作符简化逻辑判断。最后,文章对比了if-else与switch语句在实现多分支逻辑时的应用,并解释了switch语句中的break和default关键字的作用。
26 8
|
17天前
|
C语言
【c语言】循环语句
循环结构是C语言中用于简化重复操作的重要工具,主要包括while循环、do-while循环和for循环。while循环是最基本的形式,通过不断检查条件来决定是否继续执行循环体。do-while循环则先执行循环体,再检查条件,至少执行一次。for循环逻辑更复杂,但使用频率最高,适合初始化、条件判断和更新变量的集中管理。此外,循环中还可以使用break和continue语句来控制循环的提前终止或跳过当前迭代。最后,循环可以嵌套使用,解决更复杂的问题,如查找特定范围内的素数。
30 6
|
29天前
|
C语言
C语言学习笔记-知识点总结上
C语言学习笔记-知识点总结上
62 1
|
1月前
|
Serverless C语言
C语言控制语句:分支、循环和转向
C语言控制语句:分支、循环和转向
|
27天前
|
C语言
教你快速理解学习C语言的循环与分支
教你快速理解学习C语言的循环与分支
14 0
|
28天前
|
小程序 C语言
初识C语言:走近循环
初识C语言:走近循环
|
26天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
31 3
|
C语言 SDN
《C语言及程序设计》程序阅读——用循环累加
返回:贺老师课程教学链接  写出下面程序运行的结果。(1) #include &lt;stdio.h&gt; int main( ) { int i,m=1; for(i=5; i&gt;=1; i--) { m=(m+1)*2; printf("m=%d\n",m); } return 0; } (2)#include
795 0
|
C语言
《C语言及程序设计》实践项目——用循环累加
返回:贺老师课程教学链接  【项目1:分数的累加】编程序,输出1/3-3/5+5/7-7/9…+19/21的结果提示:如果直接解决上面的问题有困难,可以设计一条“由易到难”的路线,逐渐解决其中要解决的问题,让自己的思路明朗起来。(1)1+2+...+20  ——这个应该会(2)1+1/2+1/3+…+1/20  ——分数的累加,注意两个整型相除,商也为整型,而显然求和结果应该是小数(3)1/2
985 0