第一章 开发入门
1-01 从一段代码开始
①计算机语言
概念:人类与计算机沟通的工具
常见的计算机语言:C.PHP.Ruby.Java.C#.Basic.js.C++. ...等等
②源代码
概念:用某种计算机语言编写的内容(目前C#源代码)
代码的执行:源代码→编译器compiler(负责编译的工具)→
编译compile→
机器代码101010100011111010
③编译
将源代码转换成机器代码
拓展:软件开发中的常见术语
①二进制
在我们现实世界中,有十个数字(0-9),因此,到达十的时候,数字不够用了,就必须要进一,这叫做逢十进一。
而计算机只能识别高电平和低电平两种状态,它只能使用两个数字(0-1)来表示,因此,到达二的时候,数字不够用,就必须要进一,这叫做逢二进一。
下面的表格表示了十进制数字和二进制数字的对应关系:
十进制数字 二进制数字
0 0
1 1
2 10
3 11
4 100
②指令
指令是能够被CPU理解并执行的二进制命令
CPU全称Central Processing Unit,译为中央处理器,它是计算机的一个重要组件。你可以把CPU想象成计算机的大脑,这个繁忙的大脑每时每刻都在处理各种命令。
这些命令可能是让它作一个加减运算,也可能是让它把某个文字存放起来,又或者是读取出来。
但CPU毕竟是个电子元件,它并不能理解所有的命令,你不能让它给你来个少林功夫+唱歌跳舞。
所以,我们把能够被CPU理解并执行的命令称为指令。而CPU作为一个电子元器件,能够理解的命令格式,一定是二进制的。因此,指令,也必定是二进制的。
③程序
程序的概念其实非常简单,一条指令能够做一件事,多条指令能够做多件事。把多条指令按照一定的序列串起来、排好队,就是程序。这些指令一个一个交给CPU执行,就可以完成丰富的功能,就像下图这样:
计算机语言发展进程
计算机语言大致经过了机器语言、汇编语言、高级语言三个阶段的发展历程。
①汇编语言
汇编语言使用助记符来替代机器指令
机器语言这种反人类的设计,阻碍了软件的发展。
因此,后来出现一种语言,它使用一些人类世界中的单词,来代表机器指令,这样的单词,叫做助记符,而这种语言,叫做汇编语言。
②高级语言
高级语言更加符合人类的思维习惯
汇编语言虽然使用了很多助记符,但它仍然要关注计算机硬件的执行原理,比如:寄存器、控制器、逻辑部件、缓冲区等等等等。因此,汇编语言仍然难以被人类学习和理解。
我们开发的软件,功能上已经够复杂的了,还要在编程时考虑计算机底层的硬件原理……
简直痛不欲生,生,生离死别,别,别了,世界!
高级语言解决了这一问题,使用高级语言,你不用再去考虑计算机硬件是怎么执行的,你可以将目光更加专注于功能的开发。
实际上,高级语言也会考虑一部分计算机的底层原理,只不过这一部分非常之少,相对于汇编来说,已经是极大的改善了。
高级语言有很多,比如:C#、java、C、js、Python等等等等。
③语句
语句是指代码中一句可独立运行的代码
简单来说,语句就是代码中的一句话,这句话表达了一个功能点,一个完整的代码,可以由一条,也可以由很多条语句组成。
比如,这节课中的代码就是一条输出语句,用于在控制台中输出内容:
Console.WriteLine("Hello,World");
当然你可以写多条语句,就像这样:
Console.WriteLine("Hello,World");
Console.WriteLine("你好");
④语法
语法是指代码中单词、符号的组合规则
和现实场景一样,语法,就是规定你应该怎么说话,应该如何组织字、词、符号。
在现实场景中,你可以问我:“吃了吗?”,这是符合语法的,但如果你说:“吗了吃!”,我不仅听不懂你在说什么,而且感觉你在骂我……
同样的,在计算机语言中,也有很多的语法规则,这里,我先介绍C#语言中的三个基本语法规则:
所有的单词,区分大小写
就是说,两个单词如何相同,但大小写不同,C#会认为它们是两个不同的单词。
比如:Console和console是两个不同的单词。
所有的符号都必须是英文符号
这个很好理解,你可以写:
Console.WriteLine("Hello,World");
但不可以写:
Console。WriteLine("Hello,World");
但这里有个例外,就是双引号和单引号中的字符不作限制,以后你就会知道了。
所有的语句都必须以分号结束
和很多语言一样,C#语言也是使用分号作为每一条语句的结尾。
⑤总结
下面,用于一个表格,对以上的术语进行总结:
术语名 解释
二进制 二进制是计算机使用的一种计数方式
指令 指令是能够被CPU理解并执行的二进制命令
程序 程序,也就是软件,它是指多个指令的有序排列
计算机语言发展历程 机器语言 -> 汇编语言 -> 高级语言
机器语言 机器语言是能够直接被计算机理解并执行的语言
汇编语言 汇编语言使用助记符来替代机器指令
高级语言 高级语言更加符合人类的思维习惯
语句 语句是指代码中一句可独立运行的代码
语法 语法是指代码中单词、符号的组合规则
1-02 code compile run
1 .code 编码
· 使用C#语言
· 用Windows记事本编写( *注意:代码间标点用英文状态)
· 实现在控制台输出“hello,world”的功能
2. compile 编译
· 使用C#编译器exe(位置:C:\Windows\Microsoft.NET\Framework\v4.0.30319)
· 将编译结果保存到exe文件中
3. run 运行
使用命令行(快捷键Ctrl+R)→ cmd
拓展: 认识.NET
1.再谈C#的编译过程
为什么不是机器代码?
CPU的差异性;操作系统平台的差异性
中间代码
C#语言的编译器CSC,为了解决跨机器跨平台的问题,不会将源代码直接编译为机器代码,而是将其编译成中间代码,称为IL。
中间代码,既不是源代码,也不是机器代码,你可以把它想象成一种介于源代码与机器代码之间的代码。在阅读难易程度上,它的易读性比源代码高,比机器代码低。
编译成中间代码起什么作用呢?注意!巧妙的地方来啦!
世界上,没有任何一个操作系统,也没有任何一款CPU,能够识别这种中间代码。全世界,只有一款软件可以识别,这款软件就是.NET。
.NET可以识别并执行中间代码,它会根据当前的运行环境(CPU和操作系统),将中间代码转换为最合适的平台代码(可以理解为机器代码),交给CPU和操作系统执行。
也就是说,用C#开发的程序,编译好后,可以放到任何一台计算机、任何一种操作系统上执行,前提条件是,它要安装一个软件.NET。
win7、win8、win10操作系统安装后,会自动安装.NET。windows xp或之前版本的操作系统则不会。
如果你是windows xp或之前版本的操作系统,想要运行.NET程序,需要单独下载.NET安装。但是我不会告诉你在哪里下载又怎么安装。因为我的建议是,作为看一个开发人员,赶快,麻溜儿的给我去升级操作系统!
如果你使用的是mac,这篇文章会帮助到你:http://jingyan.baidu.com/article/14bd256e79797dbb6d2612c8.html
于是,我们可以得到C#语言从源代码到执行的完成过程:→
这样一来,使用C#语言开发程序,只需要编译一次,就可以将编译结果放到任何一台计算机上正确执行,真正做到了跨机器、跨平台。
当然别忘了,前提条件是,该计算机要安装.NET,因为这一切,都是.NET的功劳。
实际上,.NET平台不仅仅可以解决跨机器跨平台的问题,它还有很多强大的功能,下面介绍它的几个重要功能。
2. NET的组成部分
.NET运行时
.NET运行时,全称Common Language Runtime,缩写为CLR,中文译为:公共语言运行时。
前面提到的,.NET可以根据当前的运行环境,将中间代码转换为特定最终代码的功能,就是CLR提供的。
.NET跟语言无关!不管你是用java还是php,不管是用C还是VB,只要你能把源代码转换成中间代码,.NET的CLR就可以执行,它不用管你的源代码到底是什么语言。
正是因为这一特性,.NET可以支持各种各样的计算机语言,它把这些能够编译成中间代码的语言叫做公共语言,而CLR正是用于执行这些语言编译结果的,所以,它叫做公共语言运行时。
也正是因为这一特性,.NET获得了很多语言的支持,你使用以下这些语言编写代码,都可以顺利的交给.NET运行
公共类库
可以把公共类库想象成一个超大型的知识库,知识库中存在大量的、已经完成的代码,这些已经写好的代码可以极大的方便你的开发。只要是.NET支持的语言,都可以从这个知识库中获取它各个层面的功能。不同的语言,只是表达方式有差异罢了。
实际上,在控制台中输出内容,并非一件简单的事情,你之所以可以用这段简单的代码就可以达到输出内容的目的,正是因为这句代码使用了公共类库中的功能。公共类库中已经给你写好了输出代码,你只需要使用C#的语法使用即可。
1-03 开发工具
IDE(intergrated development environment集成开发环境)
Java:Eclipse
Html:WebStorm
C#:Visual Studio
使用VS2013
新建工程
编写代码
编译和运行
找到编译文件
迁移工程
拓展 :Visual Studio安装教程
本文介绍如何在windows平台中安装Visual Studio,如果你是mac,请安装VS Code
Visual Studio 是一款优秀的IDE,但它不免费,并且价格不菲。
庆幸的是,微软在2014年发布了免费版的Visual Studio,将其称为Visual Studio 社区版(Visual Studio Community),该版本专门面向学生和个人开发人员,并且随着以后VS每一次的更新换代,都会发布对应的免费社区版。
虽然社区版(免费)缺少了企业版(收费)的一些功能,但不用担心,对于学习阶段的开发者,完完全全够用。
所以,没时间解释了,赶快上车!
1 下载
第1步
在浏览器中打开下面的地址:
https://www.visualstudio.com/zh-hans/downloads/
通过该地址,会得到VS最新一代的社区版,比如,在我写这篇文章的时候,该链接会得到VS2015社区版。
估计看到这里,有些小伙伴就要纠结了:那这样一来,不是和视频教学中使用版本不一样了吗?
乖,不要在意这些细节,VS的每个版本其实大同小异,都差不多,不用担心。
第2步
打开该地址后,找到页面的这个区域,然后点击+号:
第3步
找到展开后的这个区域,然后选择单选框和下拉列表,如下图所示,选择好后点击Download下载:
下载完成后,进入下一阶段 —— 安装。
2 安装
注意:VS的安装时间比较长,可能长达一个小时,中途不要中断!
第1步
你下载的文件是一个后缀名为ISO的镜像文件,需要使用虚拟光驱打开。
win8和win10操作系统都自带虚拟光驱功能,但不排除某些不可描述的原因,导致有些win8系统没有自带虚拟光驱功能。
那如何查看自己的操作系统是否自带虚拟光驱功能呢?
最简单的方式就是看图标!如果你发现刚刚下载的文件是一个类似光盘的图标,双击打开即可。
如果不是,参考这里:
http://jingyan.baidu.com/article/fec4bce220196ef2618d8b1a.html
这里其实还有一种情况,就是图标是光盘图标,但是双击后没有反应。如果是这种情况,其实已经加载虚拟光驱成功了。你可以进入我的电脑,会发现多了一个光驱,大概是这个样子:
进入这个光驱即可。
第2步
打开虚拟光驱后,双击这个文件,进入安装:
第3步
一开始,安装程序会进行一些初始化的操作,这里需要耐心等待一段时间。
第4步
一段时间后,会看到如下界面:
这里的安装位置你可以更改,强烈建议你不要改,如果一定要改,必须保证如下几点:
- 目录中不得包含中文和中文符号
- 最终的安装目录必须是一个空白的文件夹
- 以上两点念三遍
安装类型保持默认即可。
然后点击安装。
第5步
- 别让你的电脑在安装过程中断电
- 不要在安装的过程中用电脑玩游戏
- 不要在安装的过程中使用很占资源的应用
- 更加不要点击取消,你会后悔的
- 实际上,我建议你去睡一会儿
第6步
当一切都安装好后,点击启动。
第7步
启动后,会提示你使用微软的live账号登录,这一步必须完成,因为尽管社区版免费,但仅针对使用live账号的人免费。如果你没有live账号,可以点击注册。
注册账号并不复杂,赶紧的。
第8步
登录后,会提示你完善账号信息,其中Full name(你的全名)是必填,其他不管,填好后,点击Continue:
点击后可能会让你选择风格和语言
语言选择C#
风格随便,我推荐深色
选择完成后,点击启动Visual Studio
第9步
在VS为你的第一次使用完成准备后,就会进入该界面:
说明什么,朋友?
大声的告诉我,你成功了!
等等,为了你以后能够顺利的打开VS,你可以在开始菜单中找到Visual Studio 2015,然后添加它的桌面快捷方式。
好了,以上,就是安装VS社区版的过程,祝安装顺利。
1-04 认识主函数
· 定义:程序启动时运行的函数。又称main函数,入口函数,启动函数
· 运行时,程序从上到下依次运行函数体中的每一句代码
· 主函数运行结束后,程序结束
第二章 变量和数据类型
2-01 数据和数据类型
数据:有用的信息
数据类型:对数据的分类
C#语言中的数据类型(常见)
char 字符类型
单个文字(汉子、字母、数字、标点符号)
书写方式:用成对的英文单引号表示(eg: ‘汉‘ ‘A‘ ‘2‘ ‘?‘ )
string 字符串类型
不限数量的文字(汉字、字母、数字、标点符号)
书写方式;用成对的英文双引表示(eg: "汉" " " "hello,world" )
int 整数类型
简称整型,用于表示一个整数
书写方式:直接书写(eg:0 100 -1 -100)
double 小数类型
用于表示包含小数点的数字
书写方式:直接书写(eg:0.0 1.1 -1.1 -1.123)
2-02 认识变量
变量:一块存储数据的内容空间,并且该内存区域的数据内容可以变化
变量的声明
指定一块内存空间,用于存放数据
语法: 数据类型 变量名 (eg:①int number; ②string str;)
变量的赋值:将数据存放到变量的内存空间
eg:int number; string=s;
number=6; s="yes"
*注意:①生命和赋值的变量名一致
②赋值的类型与声明要一致
③“=”叫做赋值符号,不是等号
总结
变量用于在内存中存储数据
变量存储的数据可变
变量必须先声明后赋值
2-03 变量命名
概念:给变量取个名称
变量命名的规范
硬性要求(必须遵循的规则)
1.变量名只能由数字、字母、下划线组成
2.变量名不得以数字开头
3.变量名不能与关键字相同(eg:int,double,char,...在VS中,使用蓝色标记关键字)
4.同一个函数中变量名不得相同
软性要求
变量名首字母小写
除第一个单词外,其他单词首字母大写
变量名要能够望文知义
*使用驼峰命名法,做到望文知义
2-04 变量的技巧
合并声明
对多个同类型的重复声明,可以在一条声明语句中完成
声明时初始化
在声明一个变量的同时,对变量进行初始化
变量三要素:数据类型,变量名,变量值
2-05 数据运算(1)
数据运算
数字运算
字符串运算
数字运算规则:支持运算:加(+)、减(-)、乘(*)、除(/)、求余(%)
返回类型:与运算类型相同
int类型与int→int;double类型与double→double;double与int→double
2-06 数据运算(2)
字符串运算
数据类型 变量名;
等效→ 数据类型 变量名=变量值
变量名=变量值;
运算规则:拼接(+)→结果 字符串1字符串2
←
字符串 → 任意类型
(string) (int、double)
返回类型:字符串
2-07 数据运算案例分析
变量值的复制
代码的实现:→ int x=1;
int x=y;
变量的自增或自减
代码实现:→ int x=1;
x=x+5;
x=x-4;
多个数据的运算:两个以上的数据参与运算
int x=1,y=2;
x=x+y-1;
*注意每一步的返回类型
变量值交换
eg: int x=1,y=2;
int z=x;
x=y;
y=z;
2-08 输入语句
概念:在控制台中获取用户输入的内容
作用:程序暂停执行,等待用户输入
输入语句的代码书写:Console.ReadLine();
*返回类型:string(将用户输入的内容形成字符串数据)
总结
让程序暂停执行,等待用户输入
用户按下回车键后,获取用户输入的内容,类型为string
用户按下回车键后,程序继续执行,直到主函数结束
2-09 类型转换
1.将任意类型转换为string
转换代码:带转换的数据.ToString();
eg: int a=10;
string b=a.ToString;
返回类型:string
2.int类型与double类型的互转
取值范围小的数字类型→取值范围大的数字类型(隐式转换)
double的取值范围>int的取值范围
取值范围大的数字类型→取值范围小的数字类型(显式转换)
*int类型只能表示整数,显示转换(强制转换)有可能造成数据丢失
3.string转换为数字
① string→int
int.Parse(待转换的字符串)
返回类型:int
② string→double
double.Parse(待转换的字符串)
返回类型:double
总结
拓展:char类型的数值转换
char转为int
在C#语言中,使用Unicode编码来存储字符。
比如汉字 ‘汉’,对应的Unicode编码是27721,在计算机内存中,将使用汗27721对应的二进制来存储。
因此,如果要把 ‘汉’ 转换为int类型的数字,转换的结果就是27721。
为什么char类型的数据赋值给int类型的变量可以使用隐式转换呢?
是因为char类型的数据在内存中存储时使用的是Unicode编码,Unicode编码占16位(两个字节),而int类型占32位(4个字节)。因此,char类型的数据占位少,取值范围小,而int类型的数据占位多,取值范围大。所以,这样的赋值是安全的,不会造成数据丢失,可以隐式转换。
int转为char
int类型的数据转换为char类型时必须使用显示转换。
char类型的取值范围小于int,因此,将取值范围大的int类型转换为取值范围小的char类型是不安全的,所以要用显示转换。
字符数据的运算
char类型的数据,在进行数学运算(+、-、*、/、%)时,会将它当做int进行运算,运算的返回类型是int。
也就是说,字符也可以参与数学运算,在运算的时候,会把这个字符的编码进行运算,运算的返回结果是一个整数int。
比如,’a’+’1’,这个代码计算的是’a’的编码加上’1’的编码,返回的是编码相加的整数。’a’的编码是97,’1’的编码是49,计算结果是一个int类型的整数146。
2-10 圆的面积计算器
实现代码
class Program
{
static void Main(string[] args)
{
Console.Write("请输入圆的半径(单位米):");
String input = Console.ReadLine();
double r = double.Parse(input);
double pi=3.14;
double area = pi * r * r;
double premeter = pi * r * 2;
string result = "圆的面积为:" + area + "平方米";
Console.WriteLine(result);
result = "圆的周长为:" + premeter + "米";
Console.WriteLine(result);
Console.Write("按回车键结束程序");
Console.ReadLine();
}
}
2-11 转义符
在代码中书写一个斜杠(\),用于改变斜杠后出现字符的意义
常见的转义符
举例
2-12 数字类型
数字类型
整数类型
实数类型
位:是计算机的最小存储单元,一位,可以存放一个二进制数字
其实,位的概念非常简单,我们知道,在计算机中,无论是数字还是字符,无论是图片还是音乐,存储时,都是使用二进制格式的数字来存储,这个二进制数字的其中一位就是“位”的概念。
比如,一个字符’a’,在unicode编码下,它的二进制格式是:
0000 0000 0110 0001
那么我们可以认为,一个’a’字符,在计算机中占16位。
以上,就是位的概念。
浮点数
float 单精度←最多7个有效数字(小数点后)
double 双精度←最多15个有效数字
数值后缀
1.23→double
1.23f→float
1.23m→decimal
...
数字类型的使用原则
对于计算精度要求精度很高的实数,使用decimal(财务计算,科学实验分析等)
对于内存使用要求苛刻的软件,尽量在保证取值范围的前提下使用占位较少的类型
如果没有上述要求,整数用int,实数用double
位:是计算机的最小存储单元,一位,可以存放一个二进制数字
其实,位的概念非常简单,我们知道,在计算机中,无论是数字还是字符,无论是图片还是音乐,存储时,都是使用二进制格式的数字来存储,这个二进制数字的其中一位就是“位”的概念。
比如,一个字符’a’,在unicode编码下,它的二进制格式是:
0000 0000 0110 0001
那么我们可以认为,一个’a’字符,在计算机中占16位。
以上,就是位的概念。
2-13 代码注释
概念:即使用一些描述语句,让你的代码便于阅读和理解,注释的内容,没有任何实质功能,不参与编译,只存在于源代码中。
书写代码注释
单行注释→//注释内容
多行注释→
/*
注释内容
注释内容
*/
文档注释
什么时候使用注释
代码不易理解
代码非常复杂
代码量大
在团队协作开发中,会有其他人阅读你的代码
2-14 软件中的错误与调试
编译错误(导致源代码无法通过编译)
发现错误:查看开发工具VS的错误列表
解决错误:根据错误提示,做出相应修改
错误特点:容易发现,容易修改
运行错误(在运行过程中报错)
发现错误:在调试模式下运行,并运行到报错的语句
解决错误:根据错误提示,做出相应修改
错误特点:难以发现,难以修改
逻辑错误(运行结果和预期不符)
发现错误:仔细核对运行结果,看与预期是否一致
解决错误:使用VS的断点调试,检查每一步的执行结果
(在代码前面打上打上一个红色的点)
错误特点:极难发现,极难修改
第三章 运算符和表达式
3-01 认识运算符
概念:又叫操作符,是一个用于运算的符号,它作用于一个或多个操作数(操作数:参与运算的数据)
运算符的分类
按操作的数量
一元(目)预算符 ← 作用于一个操作数
二元(目)预算符 ←作用于两个操作数
三元(目)预算符 ←作用于三个操作数
按运算符的功能
算术运算符 ← 用于数学运算
逻辑运算符 ← 用于判断真假
位运算符 ← 用于二进制运算
其他
3-02 常见的运算符:小括号
书写方式 ( )
功能作用
类型转换
改变运算顺序
函数调用
3-03 常见运算符:算术运算符
加加运算符
书写方式
变量名++
1.计算返回结果,与变量相同
2.将变量的值自增1
++变量名
1.计算返回结果,为变量值加1
2.将变量的值自增1
减减运算符
书写方式
变量名--
1.计算返回结果,与变量相同
2.将变量的值自减1
--变量名
1.计算返回结果,为变量值减1
2.将变量的值自减1
常见的算术运算符:+ - * / % ++ --
运算顺序:++ -- → * / % → + -
3-04 常见运算符:赋值运算符
变量=运算代码(將运算代码赋值给变量)
赋值运算符:= += -= *= /= %=
3-05 常见运算符:逻辑运算符
== != > >= < <= && || !
等于 不等于 大于 大于等于 小于 小于等于 并且 或者 非
&&:对两个bool类型进行运算,运算的结果:真真为真,其他为假:
||:对两个bool类型进行运算,运算的结果:假假为假,其他为真;
!:一元运算符,对一个bool类型的数据求反。数据为真,其结果为假;数据为假,其结果为真。
返回类型:bool (布尔)→ true 或者false
3-06 常见运算符:三目运算符
又叫做三元运算符,他需要三个操作数参与运算
书写方式:操作数1 ? 操作数2 : 操作数3
↓ △(? : 为英文符号)
bool类型 相同类型
返回结果:如果操作数1判定结果为真,则将操作数2作为返回结果;
如果操作数1判定结果为假,则将操作数3作为返回结果。
举例:
3-07 位运算符(只做了解)
用于对数字进行二进制运算
位运算符
&与 11取1,其他取0
|或 00取0,其他取1
^异或 相同取0,不同取1
<<左移 左移指定的位数
>>右移 右移指定的位数
~取补 1变0,0变1
3-08 表达式
一条有意义的语句,并且该语句至少包含一个操作数和一个操作符。
每一个表达式,都有一个返回类型。
每个表达式都可以与其他表达式进行运算,只要类型符合要求。
如图
常见表达式返回类型总结
①声明变量:void(无返回类型)
②变量赋值:返回类型和变量类型相同
③算术运算:返回类型为取值返回大的类型
④逻辑运算:bool(所有的逻辑运算(>、<、=、!=、<=、>=、&&、||、!),返回类型固定为bool)
⑤类型转换:返回类型为转换的目标
⑥字符串拼接:string
⑦函数调用:
输出语句:void
输入语句:string
ToString:string
xxx.Parse:xxx
3-09 运算符优先级
使用多个运算符的常见场景
赋值运算 (永远最后运行)
数学运算:按照数学中的运算顺序进行:先运行括号,有嵌套则从里到外运行,在运行乘除,求余;最后运行加减
类型转换(指显示转换)和函数调用:先运行函数调用,再进行类型转换
逻辑运算:將&&和||符号两端的表达式看做一个整体
三目运算:表达式1 ? 表达式2 : 表达式3
其他:使用小括号或分开书写来控制运算顺序
3-10 健康计算器
健康计算器实现代码:
/*
标准体重计算公式
男:(身高-80)*0.7
女:(身高-70)*0.6
健康:在标准体重正负10%范围内
偏胖:高于标准体重10%
偏瘦:低于标准体重10%
*/
Console.Write("请输入性别(男或女):");
string sex=Console.ReadLine();
Console.Write("请输入身高(厘米):");
double height = double.Parse(Console.ReadLine());
Console.Write("请输入体重(千克)");
double weight = double.Parse(Console.ReadLine());
double standardweight =sex== "男" ? (height - 80) * 0.7 : (height - 70) * 0.6;
double minhealthweight = standardweight * 0.9;
double maxhealthweight = standardweight * 1.1;
string result=weight<=minhealthweight &&weight >=maxhealthweight?"身体非常健康,请继续保持!":
(weight<minhealthweight?"身体偏瘦,请补充营养":"身体偏胖,请多运动");
Console.WriteLine(result);
Console.ReadLine();
C#基础(上)结束。