点击“文件”——“新建”——“项目”,选择其他项目类型中的“Visual Studio 解决方案”,点击空白解决方案,编辑名称或使用默认名称,选择位置,再点击确定,即可创建新项目。
屏幕右方有一个“解决方案资源管理器”
在解决方案上右键,添加,新建项目,选择控制台程序,起名字,确定。
为了写代码方便,可以改变一下字体。在工具——选项——字体和颜色里改变字体和大小,在工具——选项——文本编辑器——所有语言里勾选行号。一般字体选择Arial Black,大小12。
C#代码的本质是文本,所以不仅可以用vs2013打开,还可以用最简单的Windows记事本打开。
基本代码:Console 控制台
WriteLine()将括号内的内容显示到控制台上
ReadLine()读取用户在控制台输入的内容,读取到程序中。这时会暂停程序,直至输入回车键。
小结:Console是类【工具库】,WriteLine/ReadLine是方法【功能】,Title是属性【修饰】
using是引入命名空间,namespace是定义命名空间【类的住址】对类进行逻辑上的划分,防止重名,class是定义类【做工具】,static是定义方法【做功能】
程序都是在内存中运行的。
程序是用来处理数据的。
变量就是在内存中开辟一块用于存储数据的空间。
在编写代码时经常出现隐藏的错误,这时就需要我们具备排除错误的能力,学会调试。
在Write Line语句中,常常需要不断进行字符和变量的转换,比如弹夹子弹数目:XX,考试成绩:XX等,这时若只用Write Line就显得很长且不美观,所以有了占位符的概念。
这里有一个叫str的字符串,它采用字符格式Format,编写了一段代码,融合了文字字符串和变量,这里就用到了占位符{ },这里将文字字符串写在前,并在需要插入变量的位置输入占位符{数字},然后在后面依次输入变量名称,实现了字符串和变量融合输出的目的。需要注意,占位符里的数字要从0开始每次增1,否则会出现格式异常(format exception)
在Console(控制台)Write Line(输出)使用占位符时,可以运用标准数字字符串格式化来快速改变数字字符格式,如货币、时分、精度、百分数等。
转义符
在输出时,当我们需要输出的符号有其在C#中的特殊应用,如双引号""、单引号’、或者输出空字符,需要在他们前面加上转义符 \
其他字符
此外,在输出时常用的字符还有\r\n回车换行、\t水平制表符
(以上运算符均为二元运算符)
(由多种变量参与运算,结果自动向较大类型提升)
if(条件) else + 结果
(C#和C语言的选择语句基本相同,不再详细记录)
switch(变量名) case + 确定值 break
(常用于变量值确定的多分支结构)
for(初始化;循环条件;增减变量)
(与C语言基本相同)
while (条件)
(与C语言基本相同)
do while(条件);
(与C语言基本相同)
Random random = new Random();
int number = random.Next(1, 101);
int inputnumber;
int count=0;
Console.WriteLine("欢迎玩猜数字游戏,系统已产生一个1到100之间的随机数,请您猜猜它是:");
do
{
count++;
inputnumber = int.Parse(Console.ReadLine());
if (inputnumber > number)
Console.WriteLine("大了!");
else if (inputnumber < number)
Console.WriteLine("小了!");
else if (inputnumber == number)
Console.WriteLine("恭喜你!猜对了!总共猜了{0}次",count);
} while (inputnumber!=number);
方法是类里面的一个概念,是对一系列语句的命名,表示一个功能或行为。visual studio控制台会自动调用Main()方法,除此之外的任何方法想要被使用都需要主动调用,即在Main()中调用方法名。
方法表示功能,那么返回值就是功能的结果
方法中的参数列表表示从主方法读取的数据,也叫形参列表,主方法中的数据叫实参。
使用C#时,我们经常需要调用系统自带的方法甚至是别人编写的方法,这时候就需要我们快速理解方法是怎么使用的
Insert:在字符串的指定位置插入字符。
Index:查找指定字符在字符串中的索引,并返回位置。
Remove:删除指定位置之后的所有字符,并返回新字符串。
Replace:替换指定字符为另一个字符
StratsWith:确定此字符串的开头是否和指定的字符串匹配
///(文档注释):为方法提供注释
方法的定义要根据其访问类型、功能、返回值等综合考虑,最重要的是先明确其功能。
在console控制台显示年历——C#练习代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
//显示年历
Console.WriteLine("请输入年份");
int year = int.Parse(Console.ReadLine());
int month = 1;
for (int i = 0; i < 12; i++)
{
monthlyCalendar(year, month);
month++;
Console.WriteLine("\n");
}
Console.ReadLine();
}
//显示月历
static void monthlyCalendar(int year, int month)
{
//显示表头
Console.WriteLine(month + "月");
Console.WriteLine("日\t一\t二\t三\t四\t五\t六");
for (int i = 0; i < GetWeekByDay(year, month, 1); i++)
{
Console.Write("\t");
}
int days = CountDayOfMonth(year, month);
for (int i = 1; i < days + 1; i++)
{
Console.Write(i);
Console.Write("\t");
int j = GetWeekByDay(year, month, i);
while (j == 6)
{
Console.Write("\n");
break;
}
}
}
///
/// 根据年月日,计算星期数的方法。
///
/// 年份
/// 月份
/// 天
/// 星期数
private static int GetWeekByDay(int year, int month, int day)
{
DateTime dt = new DateTime(year, month, day);
return (int)dt.DayOfWeek;
}
///
/// 计算每月的天数
///
/// 形参年份
/// 形参月份
/// 月份的天数
private static int CountDayOfMonth(int year, int month)
{
switch (month)
{
case 2:
return FebruaryDays(year);
case 4:
return 30;
case 6:
return 30;
case 9:
return 30;
case 11:
return 30;
default:
return 31;
}
}
//计算闰年二月天数
public static int FebruaryDays(int year)
{
if (year % 4 == 0 && year % 100 != 0)
return 29;
else if (year % 400 == 0)
return 29;
else return 28;
}
}
}
参考意见:
1.判断闰年可以用bool和三元运算符,bool方法来判断是否为闰年,再用三元运算符输出天数。
2.使用多层判断嵌套时要注意减少程序复杂度,提高可读性,可以减少嵌套就尽量减少。
利用return 0 短路先排除输入错误的情况,若没错就往下运行。这样减少了嵌套。
3.善用英文起方法名,要易懂,让其他人也能一看就懂。
4.switch case语句若返回值相同,可以省略之前的return,只留最后一个return。
如何查看方法重载信息
方法:
1、光标在括号中间,Ctrl+Shift+空格键
2、写有重载的方法名后,按shift+(
递归的定义:方法内部又调用自身的过程。
核心思想:将问题转移给范围小的子问题。
递归性能不如循环语句,因为每次需要在内存开辟一块空间,但递归能把复杂的问题简单化,所以递归适合复杂且重复的问题
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(GetFactorical(3));
Console.WriteLine(GetIsometric(8));
}
//计算阶乘
private static int GetFactorical(int num)
{
if (num == 1) return 1;
return num * GetFactorical(num - 1);
}
//计算1-2+3-4+5······
private static int GetIsometric(int num)
{
if (num == 1) return 1;
if (num % 2 == 0)
return GetIsometric(num - 1) - num;
else
return GetIsometric(num - 1) + num;
}
}
}
1.声明一块内存 //int [] a;
2.初始化 new 数据类型 [容量]; //a = new int [6];
3.通过索引读写每个元素 // a[0] = 1;
要求:如果成绩不在0–100之间,则提示成绩有误
static void Main()
{
float[] scoreArray = CreatScoreArray();
}
static float[] CreatScoreArray()
{
Console.WriteLine("请输入学生总数:");
int count = int.Parse(Console.ReadLine());
float[] scoreArray = new float[count];
for (int i =0;i<count;)
{
Console.WriteLine("请输入第{0}个学生的成绩:",i+1);
float score = float.Parse(Console.ReadLine());
if (score >= 0 && score <= 100)
scoreArray[i++] = score;
else
Console.WriteLine("成绩有误");
}
return scoreArray;
}
获取最大值方法
private static float GetMax(float[] array)
{
float max = array[0];
for (int i = 0; i < array.Length; i++)
{
if (max < array[i])
max = array[i];
}
return max;
}
1.初始化 + 赋值
2.声明 +初始化 + 赋值(最简便的写法)
//根据年月日确定当天是本年的第几天
static void Main()
{
Console.WriteLine("请输入年月日,以回车隔开:");
int year = int.Parse(Console.ReadLine());
int month = int.Parse(Console.ReadLine());
int day = int.Parse(Console.ReadLine());
Console.WriteLine("当天是本年的第{0}天", totaldays(year, month, day));
}
//计算当天是本年的第几天
static int totaldays(int year, int month, int day)
{
int[] leapyearday = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (IsLeapYear(year)) leapyearday[1] = 29;
int days = 0;
for (int i = 0; i < month - 1; i++)
{
days += leapyearday[i];
}
days += day;
return days;
}
//判断是否为闰年
private static bool IsLeapYear(int year)
{
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return true;
else
return false;
}
依次读取数组数据不仅可以用循环,也可以用foreach
foreach:从头到尾依次读取数组元素