当前位置: 首页 > news >正文

C语言程序设计——程序流程控制方法(一)

C语言关系运算符

---
==等于a==b
!=不等于a!=b
<、>小于和大于a>b 、a<b
<=、>=小于等于、大于等于a>=b 、a<=b
!!(0)、!(NULL)

在C99之后,C语言开始支持布尔类型,头文件是stdbool.h。在文中我所演示的所有代码均是C99版。
在C语言上上述关系运算符中,如果上述关系成立,就为返回值为1,不成立九为,返回值为0。在写代码的时候需要着重注意一下等于的运算符是两个等号,一个等号叫做赋值,这个在编码时候注意。

逻辑归一化 !!(x)
在C语言中空字符,0,空数组,NULL代表假,布尔值均为0,其它则为真,比如100、-2,{4,5,6}等,它就是真,但是以布尔值来讲是只有0和1的,所以为了在布尔运算上统一我们需要把这些,真真假假的数据归一化。就需要使用!!操作,把当前数据的布尔值调整为0或1

分支结构

if语句

if(表达式){代码段;
}
else if(表达式){代码段;
}
else{代码段;
}

程序输入一个正整数n,代表学生的成绩,根据分数输出分数挡位
n = 0,FOOLISH
0<n<60,FAIL
60<=n<75,MEDIUM
75<=n<=100,GOOD

#include<stdio.h>int main(){int n;while(~scanf("%d", &n)){if(!n){printf("FOOLISH\n");}else if(n < 60){printf("FAIL\n");}else if(n < 75){printf("MEDIUM\n"); }else if(n <= 100){printf("GOOD\n");}}
}

switch语句

switch (a){case 1:代码块1;case 2: 代码块2;case 3: 代码块3;default:代码块4;
}

请使用switch结构完成如下任务,程序读入一个整数n:
如果n = 1,则输出one
如果n = 2,则输出two
如果n = 3,则输出three
否则输入error

在这里插入图片描述
可以看到输出结果不是我们预期的目的,在这里需要说明一下,case为条件入口,程序进入case对应的代码段,一次执行后续的代码,知道遇到break,或者switch末尾。所以在本题中,要注意在case后加上break。

#include<stdio.h>int main(){int n;while(~scanf("%d", &n)){switch(n){case 1: printf("one\n");break;case 2: printf("two\n");break;case 3: printf("three\n");break;default: printf("error\n");}}
}

在使用switch语句中,要保证参数n能唯一映射,整型或者字符型的数据。所以在使用时switch的使用场景没有if的使用场景更多。

判断日期的合法性

题目要求:输入一个日期,判断这个日期是否存在
1,3,5,7,8,10,12月有21天
4,6,9,11月有30天
闰年的2月是29天
非整百年,能被4整除的为闰年,在整百年中能被400整除的是闰年。
如果日期合法,输出YES,不合法,则输出NO

思路:首先根据题目来讲我们需要三个变量来接受年月日的输入,然后12个月的日期我们需要一个数组来存储各个月的日期,来减少工作量,然后需要一个判断的合法的函数来接收年月日,判断是否合法,根据返回值,再用printf()输出结果

int main(){int year, month, day;int date[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};while(~scanf("%d %d %d", &year, &month, &day)){	printf("%s\n",judge_date(year, month, day, date)? "YES" : "NO");}
}

主函数完成后,我们来完成judge_date()函数。首先我们要先判断当前年份是否为闰年,这里我们判断闰年也是一个独立的功能,我们再需要另一个函数judge_year()实现,如果是闰年,则返回1,如果不是则返回0。那么在数组中我们只需要把28与judge_year()的返回值相加即可。然后考虑年月日的逻辑,年是可以为任意整数的,因为有公元前和公元后,所以year没有需要注意的地方,月份的后只可以是1~12,日就是要大于0小于数组中各个月份对应的数。

int judge_date(int year, int month, int day, int *date){int temp = 0;temp = judge_year(year);date[2] = date[2]+temp;if(month > 12 || month < 1) return 0;if(day > date[month] || day < 1 ) return 0;return 1;
}

下面按照题目介绍完成judge_year()函数

int judge_year(int year){if ((year % 4 == 0 && year % 100 != 0 ) ||year % 400 == 0) return 1;return 0;
}

在这个函数完成之后就完成了题目要求,但是这里会有一个小bug,因为我们使用的是循环读入,在judge_date()函数中,我们可以看到如果是闰年后,28+1成了29,但是一次循环后,数组中的数据并没用还原,所以我们需要再把二月的数据初始为28。另外我们还可以优化一下的是,我们可以把对月份的判断放在首位,一旦月份不合法直接结束程序,不需要先对数组进行操作。

#include<stdio.h> int judge_year(int year){if ((year % 4 == 0 && year % 100 != 0 ) ||year % 400 == 0) return 1;return 0;
}int judge_date(int year, int month, int day, int *date){if(month > 12 || month < 1) return 0;date[2] = date[2] + judge_year(year);if(day > date[month] || day < 1 ) return 0;date[2] = 28;return 1;
}int main(){int year, month, day;int date[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};while(~scanf("%d %d %d", &year, &month, &day)){	printf("%s\n",judge_date(year, month, day, date)? "YES" : "NO");}
}

在这里插入图片描述

http://www.lryc.cn/news/275168.html

相关文章:

  • torch.backends.cudnn.benchmark
  • SQL Server从0到1——写shell
  • 计算圆弧的起始角度、终止角度和矩形信息并使用drawArc绘制圆弧
  • C++ Trie树模版 及模版题 || Trie字符串统计
  • Linux基础命令@echo、tail、重定向符
  • uniapp:签字版、绘画板 插件l-signature
  • Python Pillow(PIL)库的用法介绍
  • uniapp 【专题详解 -- 时间】云数据库时间类型设计,时间生成、时间格式化渲染(uni-dateformat 组件的使用)
  • k8s之flink的几种创建方式
  • 应用OpenCV绘制箭头
  • 信息学奥赛一本通1032:大象喝水查
  • 聊聊jvm的direct buffer统计
  • C/C++ 位段
  • Peter算法小课堂—树的应用
  • FineBI:简介
  • 原神单机版【完全无脑搭建】⭐纯单机⭐*稳定版*
  • 用通俗易懂的方式讲解:万字长文带你入门大模型
  • Invalid options in vue.config.js: “plugins“ is not allowed
  • 四、C语言中的数组:数组的创建与初始化
  • html5中各标签的语法格式总结以及属性值说明
  • 力扣(leetcode)第412题Fizz Buzz(Python)
  • 苦学golang半年,写了一款web服务器
  • uniapp vue2 车牌号输入组件记录
  • Unity 点击对话系统(含Demo)
  • vue接入高德地图
  • Linux的基本指令(5)
  • 华为商城秒杀时加密验证 device_data 的算法研究
  • Wrk压测发送Post请求的正确姿势
  • 【管理篇 / 登录】❀ 06. macOS下使用USB配置线登录 ❀ FortiGate 防火墙
  • linux系统shell语言的自动化交互