我是靠谱客的博主 发嗲大侠,最近开发中收集的这篇文章主要介绍【学习轨迹】C语言学习(if判断和while循环)C语言学习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C语言学习

Part2

文章目录

  • C语言学习
    • Part2
      • 1、判断
          • 代码块
          • 解释
        • 判断的条件
          • 优先级
        • 找零计算器plus
        • 比较两个数的大小
        • 三个数比大小
          • 代码块
          • else的匹配情况
        • 对求三个数中最大数的代码改进
          • 单一出口
        • 多路分支
          • 成绩换算
          • ==更智慧的做法:用多路分支的办法做==
          • 浅try一下
      • 2、循环
          • 例题引入
            • 代码块
            • 算法
        • do-while循环
        • 循环小技巧
          • 1、保存初始值
            • 计算以二为底x的对数
          • 2、当循环次数过大时,用小的次数来模拟大的次数以此当作规律

1、判断

在Part1.2中有一道例题:求时间差。

当时留下了这样一个问题,如果我们使用分钟减去分钟,小时减去小时的方法,在不存在分钟借位的时候是可行的,但如果遇到分钟借位该怎么办呢?

我们当然可以使用全换算为分钟的方法来避免这样的事情发生,但如果非要使用这样的方法该怎么办呢?

这是就需要引入判断

代码块
#include<stdio.h>
int main()
{
  int hour1,minute1;
  int hour2,minute2;
  printf("请输入第一个时间:(单位:时,分)");
  scanf_s("%d %d",&hour1,&minute1);
  printf("请输入第二个时间:(单位:时,分)");
  scanf_s("%d %d",&hour2,&minute2);
  int t1,t2;
  t1=hour2-hour1;
  t2=minute2-minute1;
  if(t2<0){
    t2=minute2+60-minute1;
    t1=hour2-hour1-1;
  }
  printf("两个时间相差%d小时%d分钟",t1,t2);
  return 0;
}
解释
if(t2<0){
    t2=minute2+60-minute1;
    t1=hour2-hour1-1;
}

这是一个判断语句,其语法是

if(判断语句)判断其中的语句是否成立,若成立则进入大括号中的语句{

······

}

判断的条件

在这里插入图片描述

优先级

关系运算的优先级比计算的优先级低但比赋值的运算级要高。

找零计算器plus

前面的章节中我们制作过一个找零计算器,但并没有考虑到当价格高于所给票面的情况,如果出现了这样的情况,我们又该如何改进这个计算器呢?

这里就需要用到我们学到的判断了

#include<stdio.h>
int main()
{
  //初始化
  int price=0;
  int bill=0;
  //标识符与输入值对应
  printf("请输入价格");
  scanf_s("%d",&price);
  printf("请输入票面");
  scanf_s("%d",&bill);
  //相减求值
  int a=bill-price;
  //判断
  if(a>=0){
    printf("找您%d元",a);
  }
  else{
    printf("您的钱不够");
  }
  return 0;
}

比较两个数的大小

#include<stdio.h>
int main()
{
  int a=0;
  int b=0;
  printf("请输入两个数:");
  scanf_s("%d %d",&a,&b);
  if(a>b){
    printf("较大的数为%d",a);
  }
  else{
    printf("较大的数为%d",b);
  }
  return 0;
}

三个数比大小

输入三个数a,b,c
a>b?
a>b
a<=b
a>c?
a> c
a为最大值
a< c
c为最大值
b>c?
b>c
b< c
b为最大值
c为最大值
代码块
#include<stdio.h>
int main()
{
  int a=0;
  int b=0;
  int c=0;
  printf("请输入三个数:");
  scanf_s("%d %d %d",&a,&b,&c);
  if(a>b){
    if(a>c){
      printf("最大值为%d",a);
    }
    else{printf("最大值为%d",c);}
  }
  else{
    if(b>c){
      printf("最大值为%d",b);
    }
    else{printf("最大值为%d",c);}
  }
}

在这里插入图片描述

else的匹配情况

else总与最近的if匹配

对求三个数中最大数的代码改进

#include<stdio.h>
int main()
{
	//变量初始化
	int a = 0;
	int b = 0;
	int c = 0;
	int max = 0;
	printf("请输入三个数:");
	scanf_s("%d %d %d", &a, &b, &c);
	//if判断
	if (a > b)
	{
		if (a > c)
		{
			max = a;
		}
		else
		{
			max = c;
		}
	}
	else
	{
		if (b > c)
		{
			max = b;
		}
		else
		{
			max = c;
		}
	}
	printf("三个数中最大的数为%d",max);
	return 0;
}
单一出口

这里我们引入了一个变量max而不是直接在大括号内输出printf(),这样有利于我们对最大数进行其他的操作而不仅仅是printf()。

多路分支

成绩换算

在这里插入图片描述

#include<stdio.h>
int main()
{
  int grades;
  printf("请输入您的成绩");
  scanf_s("%d",&grades);
  if(grades>=90)
  {
    printf("您的等级为A");
  }
  else if(grades>=80)
  {
    printf("您的等级为B");
  }
  else if(grades>=70)
  {
    printf("您的等级为C");
  }
  else if(grades>=60)
  {
    printf("您的等级为D");
  }
  else
  {
    printf("您的等级为E");
  }
  return 0;
}
更智慧的做法:用多路分支的办法做

​ 我们可以注意到当十位数字为9或10时,等级一律为A;当十位数字为8时,等级一律为B,以此类推,也就是十位数字决定了成绩的等级,所以我们可以用一个更为智慧的方法,使用多路分支的办法去做这件事。

#include<stdio.h>
int main()
{
  int grades;
  printf("请输入您的成绩");
  scanf_s("%d",&grades);
  int a=grades/10;
  switch(a)
  case 10:
  case 9:
    printf("A");
    break;
  case 8:
    printf("B");
    break;
  case 7:
    printf("C");
    break;
  case 6:
    printf("D");
    break;
  default:
    printf("E");
    break;
  return 0;
}
浅try一下

在这里插入图片描述

#include<stdio.h>
int main()
{
  int x,f,flag;
  printf("请输入一个x的值");
  scanf_s("%d",&x);
  flag=(x>0)?1:(x<0)?2:3;
  switch(flag)
  {
    case 1:f=-1;break;
    case 2:f=2*x;break;
    case 3:f=0;break;
  }
  return 0;
}

在第七行代码中,我们使用了一个判断:

若x>0则flag等于1;若x不大于零则进行冒号后面的判断。

2、循环

例题引入

判断一个数是几位数?

代码块
#include<stdio.h>
int main()
{
  int x;
  int n=0;
  printf("请输入一个x的值");
  scanf_s("%d",&x);
  n++;
  x=x/10;
  while(x>0)
  {
    n++;
    x=x/10;
  }
  printf("这个数是%d位数",n);
  return 0;
}
算法

1、初始化n,使n=0。

2、n=n+1;,开始进行计数。

3、x=x/10,从右开始计算位数,x除以10之后会消去最右边的一位数来进行下面的计算。

4、进入循环,条件是x>0,若x不大于零则n直接输出为1,若x大于零则继续循环第三步,直到x<0为止。

5、输出n,即计算的次数。

do-while循环

#include<stdio.h>
int main()
{
  int x;
  int n=0;
  printf("请输入一个数");
  scanf_s("%d",&x);
  do
  {
    x=x/10;
    n++;
  }while(x>0);
  printf("这个数是%d位数",n);
  return 0;
}

这里我们使用了另一种写循环的方式,先写循环体后写条件,也就是当循环进了一次后再进行条件判断是否会进行下一次。

这样写简化了流程,同时可以使程序第一次运行就进入循环。

循环小技巧

1、保存初始值
计算以二为底x的对数
#include<stdio.h>
int main()
{
  int x,
  int n=0;
  printf("请输入一个x的值");
  scanf_s("%d",&x);
  int t=x;
  while(t>1)
  {
    t=t/2;
    n++;
  }
  printf("log 2 of %d is %d",x,n);
  return 0;
}

如果我们没有将x的值储存而是直接进行这个程序的运行,那么我们最后得到的将会是这样:

在这里插入图片描述

这样我们初始输入的x的值会随着while循环而改变而不是维持它的初始值,所以我们需要用一个变量储存x,同时用另一个变量去进行计算。

2、当循环次数过大时,用小的次数来模拟大的次数以此当作规律

在这里插入图片描述

#include<stdio.h>
int main()
{
  int count=3;
  while(count>=0)
  {
    count--;
    printf("%d",count);
  }
  printf("发射");
  return 0;
}

当count的值为100时,我们不能够通过一次一次的试验来得到结果,这时我们可以将count的值选为3,以此来找到规律。

在这里插入图片描述

此时循环进行了四次,最后输出了-1,count的值为-1。

最后

以上就是发嗲大侠为你收集整理的【学习轨迹】C语言学习(if判断和while循环)C语言学习的全部内容,希望文章能够帮你解决【学习轨迹】C语言学习(if判断和while循环)C语言学习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部