C#

2015.4.26

C#基础
1.进制转换
2.VS 界面内容
3.数据类型
(1)值类型
a.整型
b.浮点型
c.日期
...
(2)引用类型
a.字符串
b.class
4.变量(在内存中存储数据)
5.类型转换
6.运算符(对变量进行运算)
(1)数学运算符/算术运算符
(2)比较运算符
(3)逻辑运算符
7.语句(实现程序执行)
(1)顺序语句
(2)条件语句/分支语句
(3)循环语句
(4)跳转语句(循环过程发生中断)
(5)异常语句
8.类类型
(1)string类(处理字符串)
(2)DateTime(处理时间)
(3)Random(随机)
(4)Math(处理数字)
9.数组
(1)一维
(2)二维
(3)多维
10.集合
11.结构体
12.函数
SQLserver 数据库(相当于Excel表格)
表(通过表的形式存储数据)
(1)界面操作 ssms
(2)创建 会话列表
(3)增删改查
实现方式:a.鼠标
          b.T-SQL
HTML+Js+CSS
(1)基本标签及属性
(2)字体标签、内容标签
(3)布局、样式
(4)表单元素
(5)Js 轻量化语言/脚本语言
winform
C#+SQL server+winform自身
建立客户端应用程序 C/S
eg.计算器、记事本、word、浏览器
   进销存、ERP(企业人事管理系统)、CRM(客户信息管理系统)、QQ早期登陆界面
webform
C#+SQL server+HTML+webform自身
网站程序运行 B/S
muc 与winform功能相似
php 团购、商城网站
    只能操作HTML
ASP 企业网站

2015.4.27

进制:十 二(运行最快) 八 十六

64位 32位---二进制位的个数

                    二

                   ↑↓


           ↙↗     十      ↖↘
            

               ↗↙     ↘↖

     八                          十六

二进制→十进制

 1101 →( 13 )

八进制→十进制

  456 →( 302 )

十六进制→十进制

     2F →( 47 )

二、八、十六进制转十进制计算方法:

1.写底数

2.写指数

3.乘系数

4.累加

十进制→二进制

    45 →( 101101 )

计算方法:

1.除二取余

2.除到商0为止

3.一定记好余数,倒排

十进制→八进制

    45 →( 55 )

计算方法:

第一步改为除八取余,二、三步同上

十进制→十六进制

    45→( 2D )

第一步改为除十六取余,二、三步同上

二进制→八进制

1010100 →( 124 )

11110010 →( 362 )

计算方法:

1.从右到左,三位一组,位数不足前面补0

2.算每组的值

八进制→二进制

    76 →( 111110 )
    
    54 →( 101100 )

二进制→十六进制

111110 →( 3E )

十六进制→二进制

      2F →( 101111 )

计算方法:

1.从右到左,四位一组,位数不足前面补0

2.算每组的值

C#编程

Console.WriteLine("这是第一行内容");
Console.WriteLine("这是第二行内容");
string s = Console.ReadLine();
Console.WriteLine("你输出的内容是" + s);  s是代码状态

Main函数:

 static void Main(string[] args)
  {

   }

程序需要写在Main函数的花括号内

一、输出

Console.WriteLine("要输出的字符串");  输入内容自动换行

Attetion tips:
1.代码大小写敏感:代码大小写必须书写正确,不正确即报错,程序不识别
2.所有符号全都要用英文状态:字符串前后小括号、分号以及字符串结束分号
3.最后不要漏掉分号:字符串结束不加分号则报出错且调试不执行

技巧get√:
1.写的代码尽量使用智能感知功能 不仅提升速度也防止遗忘
2.先写总体,再完善细节
3.自动完成单词功能Alt+向右光标键 因为代码输入大小写敏感,输入错误即报错且调试不执行


Console.Write("要输出的字符串");  输入内容不会自动换行

二、输入

string s =Console.ReadLine();

string 字符串

s 专门存放字符串内容的容器

= 赋值,把右侧的送到左侧去

Console.ReadLine() 从控制台读取输入的内容

这句话的意思是:从控制台读取被你所输入的内容,把输入的内容放到一个专门存放数据的容器里

三、注释

方法一:选中相应的行,点击工具栏中的“注释选中行”

方法二:选中相应的行,使用快捷键:Ctrl+K Ctrl+C(加注释)【有的版本是Ctrl+E Ctrl+C】

                                  Ctrl+K Ctrl+U(取消注释)【有的版本是Ctrl+E Ctrl+U】

方法三:手动注释:在代码行之前加// 注释一整行

                                          加/*  */ 注释一段内容

案例:输入姓名、年龄、单位,变成一个句子显示出来
Console.Write("姓名:");
string a = Console.ReadLine();
Console.Write("年龄:");
string b = Console.ReadLine();
Console.Write("单位:");
string c = Console.ReadLine();
Console.WriteLine("我的名字叫" + a + ",我今年" + b + "岁了,我在" + c + "实训");

在Main函数花括号内输入上述内容→调试→开始执行

2015.4.29
输入:Console.Readline();
输出:Console.WriteLine();
拼接字符串用+  eg."第一个字符串"+"第二个字符串"
Tab键:\t
反斜杠:\\
单引号:\’
双引号:\”
回车:\r
换行:\n
// 注释内容,单行注释
/*被注释的区域*/ 注释一段区域

\a:报警

数据类型

基本数据类型:

整型(存整数) 重点记忆int

               了解short long byte

浮点型(存小数) 重点记忆double(双精度)  eg.圆周率3.14

                 了解float(单精度)
                
                     demical(小数精度比double高,整数空间比double小)

布尔型(是非型) bool eg.性别、开关

字符型 char

引用类:

重点记忆 字符串型 string(用得最多)

变量(作用相当于U盘)(放数据的容器,用数据类型指定)

变量名命名规则:

1.变量名组成:字母、数字、下划线、@、汉字

2.首字母不能用数字,只能用字母、下划线、@、汉字命名

3.不能与关键字重名

定义:

数据类型 变量名[=值];  //[]内的值可以不写

eg. int a=1;

常量

const 数据类型 常量名=值;

常量一旦定义后,就不能用代码修改其中的值了

常量只有定义的时候可以放在等号的左边

变量名前加关键字即常量(作用相当于光盘)(常量不能赋值,只能取值)

eg.const int a=1;
【常量只能定义时赋值】【等号将右边的值传送到左边】

数据转换

计算机运算的时候必须使用同一类型数据进行运算,如果不是同一类型数据则需要进行类型转换

类型转换的分类:

自动转换:只要不出现丢数据的可能,就自动转  byte → short → int → long → float → double

强制转换:

1.在被转换的数据左边加上小括号(要被转换的数据类型)

2.使用Convert Toxxxx(要被转换的数据)

例子:

int d=(int)3.14;
int d=Convert.ToInt32(3.14);
float f=(float)3.14;
float f=Convert.ToSingle(3.14);

如果是字符串转换基本数据的话,必须使用Convert.Toxxxx(字符串)

运算符

一、算术运算符:7个

+ - * / % ++ --

注意:1.做除法运算的时候,如果两个操作数同为整数,则运算结果为整数,不会出现小数

      2.上面这些运算,如果两个操作数不是同一类型,在运算的时候会自动进行类型转化

取余用途有哪些?

1.判断能不能整除

2.用来把数变成某个范围的数

自增与自减操作:

语法:变量名++
 
      ++变量名

eg. a++   ++a

意义:a++   ++a(等效于a=a+1)

      1.把a的值取出来

      2.把a的值加上1

      3.把加完的结果再赋给a

5++;为什么不正确 //5是常量,常量无法赋值

const int b =5;  b++;为什么不正确  //b是常量,常量无法赋值

++a与a++的区别

1.如果这一行语句中,只有唯一的++ --运算,不再有其他运算的话,前++后++效果是一样的

2.如果这一行语句中,除了++ --还有其他运算,前++最先执行,后++最后执行

例如:

int a=5;
int b;
b=a++;   相当于b=a,a=a+1
Console.WriteLine(a); 
Console.WriteLine(b); 
输出结果 a=6,b=5

int a=5;
int b;
b=++a;   相当于a=a+1,b=a
Console.WriteLine(a); 
Console.WriteLine(b);
输出结果 a=6,b=6

二、关系运算符:6个 判断True False

==   !=   >   >=   <   <=

int a=5;
int b=6;
Console.WriteLine(a==b);  False
Console.WriteLine(a!=b);  True
Console.WriteLine(a>b);   False
Console.WriteLine(a<b);   True
Console.WriteLine(a>=b);  False
Console.WriteLine(a<=b);  True

注意:不要把==写成=

三、逻辑运算符:3个

&& || !

int a=5;
int b=6;    

a>6 && b<=10;

→ 结果是False

18<a<35 → a>18 && a<35

a<18 或 a>35 → a<18 || a>35

&&——只有两个条件都成立,结果才成立True;如有一个不成立,或者两个都不正确,结果就False
||——除非两个都不成立,结果才不成立False;只要有一个成立,结果就成立True。
!——取反运算。

int a=16;
bool b=a>18 && a<35;  输出结果为false
bool c=!(a>18 && a<35);  输出结果为true

四、其它运算
=   赋值运算,把右侧的值赋给左侧,因此它的左侧只能是变量,不能是常量或表达式。

+=   -=   *=   /=   %=    复合运算符

int a = 5;  
a += 10;

→ 相当于a = a+10

1. 执行a+10

2.把相加的结果赋给a

?   :    条件运算符

式子一【逻辑(关系)式】?式子二【运算(变量)】:式子三
True运行式子二
False运行式子三

例子1
int a = 10;
int b = 5;
bool c = a>b?a:b;(意思是a和b中取最大值赋给c)

例子2
int a =10;
int b =20;
int c =15;
int d a>b?a:b;
int max c>d?c:d;
Console.WriteLine(max);

作业:

1.从键盘输入三个数字中找出最大值来

2.把24小时制时间换算成12小时制---老狼几点了

1.
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());
int c = Convert.ToInt32(Console.ReadLine());
int d = a > b ? a : b;
int max = c > d ? c : d;
Console.WriteLine(max);

2.
Console.WriteLine("手机显示时间");
int n = Convert.ToInt32(Console.ReadLine());
int m = n > 12 ? n - 12 : n;
string ap =n>12?"下午":"上午";
Console.WriteLine(ap+m+"点了");

语句

三类语句:顺序、分支、循环

(一)if(表达式)
      {

       }
小括号内表达式成立则进入花括号内容

tips:

1.表达式,就是用来返回bool型的表达式

2.if的小括号后面千万不要加分号

eg.


int age=20;

if(age<18)
{
     Console.WriteLine("未成年");
}

string s ="18+22=?";
Console.Write(s);
int n =Convert.ToInt32(Console.ReadLine());
if(18+22==n)

{
    Console.WriteLine("你太聪明了!")

}

(二)if(表达式)
      {

       }
      else
      {

       }

例:
1.输入年龄,大于等于18显示“成年”,否则显示“未成年”
2.显示:你能跑过豹子吗?
接收输入,如果输入的是“能”,输出结果“你比禽兽还禽兽”
          如果输出的是“不能”,输出结果“禽兽不如”
3.让用户输入一个年份,判断是否是闰年
闰年判断方法:
             a.能被400整除
      b.能被4整除,但不能被100整除。
本题解题思路:
①从键盘接收一个年份,并转化整数 year。
②判断是否满足上面的两个条件。
(year%400 == 0)||(year%4==0 && year%100!=0)
③根据判断结果分别显示“平年”“闰年”
4.输入实际体重,输入实际身高,计算标准体重,判断实际体重标准还是不标准
标准体重(kg)= 身高(cm)-100
上下浮动5kg算正常
本题解题思路:
①输入身高(h)和体重(w)。
②算标准体重 = 身高-100。bw=h-100;
③拿标准体重和实际体重比较。 bw-w>=-5 && bw-w<=5
④显示标准还是不标准。

1.
string s ="年龄";

Console.Write(s);

int age =Convert.ToInt32(Console.ReadLine());

if(age>=18)

  {
       Console.WriteLine("成年");
   }
else

  {
       Console.WriteLine("未成年");
   }


2.
Console.Write("你能跑过豹子吗?");

string s = Console.ReadLine();

if (s == "能")
  {
        Console.WriteLine("你比禽兽还禽兽");
   }
else
  {
        Console.WriteLine("禽兽不如");


3.
Console.Write("year");

int year = Convert.ToInt32(Console.ReadLine());

if (year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))

  {
         Console.WriteLine("闰年");
   }

else
  {
         Console.WriteLine("平年");
   }


4.
Console.Write("h");

int h = Convert.ToInt32(Console.ReadLine());

Console.Write("w");

int w = Convert.ToInt32(Console.ReadLine());

int bw = h - 100;

if (bw - w >= -5 && bw - w <= 5)

  {
          Console.WriteLine("标准");
   }
else
  {
          Console.WriteLine("不标准");
   }            
第4题tips:
1.h、w、bw用int标记,不能用string,需Convert.ToInt32转化为相同数据类型
2.系统显示报错时,在错误列表双击报错项,根据提示在报错处进行修改

2015.5.4

if语句复习

一、基本if语句
if(条件表达式)
{
}

二、if...else语句
if(条件表达式)
{
}
else
{
}

三、if...else if...层次语句
if(条件表达式)
{
}
else if(条件表达式)
{
}
else if(条件表达式)
{
}
....
else
{
}

四、if嵌套语句
if(条件表达式)
{
 if(条件表达式)
 {
 }
 .....
}
else
{
 if(条件表达式)
 {
 }
 .....
}

作业:
1.输入年、月、日,判断输入的日期格式是否正确

2.做猜拳的游戏。
0-剪刀,1-石头,2-布

if(电脑是剪刀)
{
 if(人是剪刀)
 {
  平局
 }
 else if(人是石头)
 {
  你胜了
 }
 else if(人是布)
 {
  电脑胜了
 }
 else
 {
   请按套路出牌
 } 
}
else if(电脑是石头)
{
 if(人是剪刀)
 {
  电脑胜了
 }
 else if(人是石头)
 {

  平局
 }
 else if(人是布)
 {
  你胜了
 }
}
else
{
 ......
}

循环:反复执行某行段代码。
循环的四要素:初始条件,循环条件,循环体,状态改变。

     for (初始条件;循环条件;状态改变)
            {
                循环体
            }
初始条件、循环条件,状态改变决定循环次数,初始条件只执行一次,循环条件、循环体、状态改变在满足循环条件前一直循环

案例:
(一)100以内与7相关的数。
1.从1一直找到100
2.对每个数判断是否满足以下条件之一

能被7整除 a%7==0
个位是7 a%10 == 7
十位是7 a/10==7

for(int a =1;a<=100;a++)

if(a%7==0||a%10==7||a/10==7)

Console.Write(a+"\t");

(二)简陋的彩票生成器。

Random rand =new Random();

for(int a =1;a<=7;a++)

int n =rand.Next(36)+1;

Console.WriteLine(n);

(三)100以内所有数的和。

int sum =0;

for(int i =1;i<=100;i++)

sum =sum+1;

Console.Writeline(n);

2015.5.5

循环复习

循环:
初始条件,循环条件,状态改变,循环体。
for(初始条件;循环条件;状态改变)
{
 循环体
}
for(int i=1;i<=10;i++)
{
 
}

for语句统摄的内容需用{}括起


例子:
100以内与7有关的数。
求100以内所有数的和。

break&continue语句

break;——中断循环,跳出循环。——吃到苍蝇了

continue;——停止本次循环,进入下次循环。——吃到沙子了。

循环嵌套:
循环里面再套循环。

作业:
1.打印乘法口诀表。

for(int i=1;i<=9;i++)

for(int j=1;j<=9;j++)

Console.Write(j+"*"+"i"+"="+(j*i)+"\t");

Console.WriteLine();
2.打印以下图形:

①8*8正方形

for(int i=1;i<=8;i++)

for(int j=1;j<=8;j++)

Console.Write("●");

Console.WriteLine();

②五行,每行点分别是1、2、3、4、5的直角三角形(直角在左侧)


●●
●●●
●●●●
●●●●●

for(int i=1;i<=5;i++)

for(int j=1;j<=i;j++)

Console.Write("●");

Console.WriteLine();

③五行,每行点分别是5、4、3、2、1的直角三角形(②向下翻转)

●●●●●
●●●●
●●●
●●
●      

for(int i=1;i<=5;i++)

for(int j=1;j<=6-i;j++)

Console.Write("●");

Console.WriteLine();

④五行,每行点分别是1、2、3、4、5的直角三角形(②向左翻转)

                      行i           方框个数k

□□□□●               1                  4
□□□●●               2                  3
□□●●●               3                  2
□●●●●               4                  1
●●●●●               5                  0

for(int i=1;i<=5;i++)

for(int k=1;k<=5-i;k++)

Console.Write("  ");

for(int j=1;j<=i;k++)

Console.Write("●");

Console.WriteLine();


⑤五行,每行点分别是5、4、3、2、1的直角三角形(②先向左翻转再向下翻转)

                      行i             方框个数k            圆点个数j                  

●●●●●                1                  0                       5
□●●●●                2                  1                       4
□□●●●                3                  2                       3
□□□●●                4                  3                       2
□□□□●                5                  4                       1

for(i=1;i<=5;i++)

for(k=1;k<=i-1;k++)

Console.Write("□");

for(j=1;j<=6-i;j++)

Console.Write("●");

Console.WriteLine();

⑥五行,每行点分别是1、2、3、4、5的等腰三角形   

                      行i              方框个数k            圆点个数j

□□□●                 1                     3                      1
□□●●●               2                     2                      3
□●●●●●             3                     1                      5
●●●●●●●           4                     0                      7

for(i=1;i<=5;i++)

for(k=1;k<=5-i;k++)

Console.Write("□");

for(j=1;j<=2*i-1;j++) 

Console.Write("●");

Console.WriteLine();

⑦五行,每行点分别是5、4、3、2、1的等腰三角形(⑥向下翻转)

●●●●●●●
  ●●●●●
    ●●●
      ●

④~⑦将方框换成空格(注意:一定是输入两个空格)即可显示不带方框的图案,即Console.Write("□");→Console.Write("  ");

两类问题的解决:
一、穷举
把各种可能的情况都走一遍,使用if条件筛选出满足条件的情况。
1.小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元整好花掉,可能有哪些购买结合?

洗发水i 香皂j 牙刷k
for(int i=0;i<=6;i++)

for(int j=0;j<=50;j++)
for(int k=0;k<=20;k++)
if(i*15+j*2+k*5==100)
Console.WriteLine(i="+i";j="+j+";k="+k);  

2.公鸡2文钱一只,母鸡1文钱一只,小鸡半文钱一只,花花100文钱,买100只鸡,该如何买呢?(百鸡百钱)

公鸡i 母鸡j 小鸡k
for(int i=0;i<=50;i++)
for(int j=0;j<=100;j++)
for(int k=0;k<=100;k++)
if(i+j+k==100 && 2*i+1*j+0.5*k == 100)
Console.WriteLine("i="+i";j="+j+";k="+k);   

3.大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,该如何调配?(百马百石)【同百鸡百钱】

4.有1分钱,2分钱,5分钱的硬币,要组合出2角钱来,有哪些组合方式?

for(int i=0;i<=20,i++)

for(int j=0;j<=10;j++)

for(int k=0;k<=4;k++)

if(i+j+k==20&&1*i+2*j+5*k==20)

Console.WriteLine();
5.123()45()67()8()9=100

for(int a=-1;a<=1,a++)

for(int b=-1;b<=1,b++)

for(int c=-1;c<=1,c++)

for(int d=-1;d<=1,d++)

for(int e=-1;e<=1,e++)

for(int f=-1;f<=1,f++)

if(123+a*45=b*67+c*8+d*9==100)

Console.WriteLine("a="+a+";b="+b+";c="+c+";d="+d);

6.某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件:
●A和B两人中至少去一人;  a+b>=1
●A和D不能一起去;  a+d!=2
●A、E和F三人中要派两人去; a+e+f==2
●B和C都去或都不去;  b+c!=1
●C和D两人中去一个;  c+d==1
●若D不去,则E也不去。  d+e==0||d==1
问应当让哪几个人去?

for(int a=0;a<=1;a++)

for(int b=0;b<=1;b++)
for(int c=0;c<=1;c++)
for(int d=0;d<=1;d++)
for(int e=0;e<=1;e++)
for (int f = 0; f <= 1; f++)

if (a + b >= 1 && a + d != 2 && a + e + f == 2 && b + c != 1 && c + d == 1 && (d + e == 0 || d == 1))

Console.WriteLine("a="+a+";b="+b+";c="+c+";d="+d+";e="+e+";f="+f);

二、迭代
从初始情况按照规律不断求解中间情况,最终推导出结果。
1.公园里有一只猴子和一堆桃子,猴子每天吃掉桃子总数的一半,把剩下一半中扔掉一个坏的。到第七天的时候,猴子睁开眼发现只剩下一个桃子。问公园里刚开始有多少个桃子?
2.五个小朋友排成一队。问第一个多大了,第一个说比第二个大两岁,问第二个,第二个说比第三个大两岁,以此类推。问第五个小朋友几岁了,第五个小朋友说3岁了。问第一个小朋友几岁?
3.一张纸厚度是0.07毫米,假设这张纸可以无限次对折,问对折几次可以超过珠峰?8848米
4.国际象棋64格。堆米。问第64个格上会放多少粒米?

 3.折纸超过珠峰

法一:【break语句】

double houdu=0.00007;

double gaodu=0;

for(int i=0;i>=0;i++)

gaodu=houdu*Math.Pow(2,i);//(2,i)表示2的i次方

if(gaodu>8848)

Console.WriteLine("折叠次数为:"+i)

break;

法二:【for语句,double数据】

int n=0;

for(double i=0.00007;i<=8848;i=i*2)

n++;

Console.WriteLine("折叠次数为:"+n);

法三:【break语句】

double h=0.00007;

int count=1;

for(;;)//死循环

h=h*2;

if(h>8848)

break;

count++;

Console.WriteLine(count);

4.棋盘堆米

法一:【decimal数据】

decimal shuliang=1;

for(int i=2;i<=64;i++)

shuliang=shuliang*2;

Console.WriteLine("第64个格子的米的数量是"+shuliang);

法二:【demical数据】

demical num=1;

for(int i=2;i<=64;i++)

num=num*2;

Console.WriteLine(num);

补充:兔子问题【一对幼兔,3个月后长为成兔,又生了一对幼兔,以此类推,到第24个月兔子的总数是多少?】

int t1=1,t2=1,t=0;

for(int 1=3;i<=24;i++)

t=t1+t2;

t2=t1;

t1=t;

Console.WriteLine(t);

2015.5.8

数组:
数组是什么?
在内存中连续存储同一类型的数据的空间。

为什么需要数组?

实际应用中需要存在同一类型的大量数据。

数组的定义:
数据类型[] 数组名 = new 数据类型[长度];

注意:等号两边的数据类型必须是同一类型,否则无法赋值;等号右边的数据类型的长度必须写出来,数组内的变量数不能超出数组长度,否则系统出现错误

eg.

int[]arr=new int[10];
string[]s =new string[10];

数据类型[] 数组名 = new 数据类型[长度]{值的列表,中间用逗号隔开};

eg.
int[]arr=new int[10]{1,3,5,7,9,11,13};
string[]s =new string[]{"aaa","bbb","ccc"};

数组的赋值与取值:
使用下标来操作数组中的每个元素。
数组名[下标] = 值;
eg.

int[]arr=new int[10]{1,3,5,7,9,11,13};

string[]s=new string[]{"aaa","bbb","ccc"}

数组的下标是从0开始的;最大的下标值要比数组的长度小1。

好处:
1.一次定义多个存储数据的空间。
2.可以与for循环配合用,使用循环变量作为数组的下标。

示例:
1.单个元素赋值与取值。
2.与for循环配合对数组进行赋值与取值。
3.做一个随机抽奖的程序。
4.做一个拼句子的小游戏。

例1

string[]s=new string[5];

s[0]="张三";

s[1]="李四";

s[2]="王五";

s[3]="赵六";

s[4]="田七";

Console.WritLine(s[3]);

例2

string[]s=new string[5];

for(int i=0;i<s.Length;i++)

Console.Write("请输入你的好朋友的名字:");

s[i]=Console.ReadLine();

for(int i=0;i<s.Length;i++)

Console.WriteLine(s[i]);

例3

string[]a=new string[]{"张三","李四","王五","赵六","田七","朱八"};

string[]b=new string[]{"彩电","笔记本电脑","iPhone6","iPadMini","谢谢"};

Random rand=new Random();

for(int i=0;i<50;i++)

int n=rand.Next(a.Length);

System.Threading.Thread.Sleep(100);//小括号里的100是限定每个变量暂停时间为100毫秒

Console.Clear();//Clear意为清屏

int m=rand.Next(a.Length);

int k=rand.Next(b.Length);

Console.WriteLine("恭喜"+a[m]+",中奖了,中了一个"+b[k]);

→Console.WriteLine("恭喜xxx【xxx为数组外新变量】中奖了,中了一台笔记本电脑")//输出数组外新变量,抽奖名单以外的人中奖

例4

Console.Write("请输入你的名字:");

string name=Console.ReadLine();

string[]a=new string[]{"张三","李四","王五","赵六","田七","朱八"};

string[]b=mew string[]{"吃饭","睡觉","玩游戏","看电影","追MM","学习"};

string[]c=new string[]{"可爱的","装B的","傻啦吧唧的","萌萌的","高贵的"};

string[]d=new string[]{"在电影院","在墙角","在垃圾桶边","在学校","在河边"};

Random rand=new Random();

int i=rand.Next(a.Length);

int j=rand.Next(b.Length);

int k=rand.Next(c.Length);

int w=rand.Next(d.Length);

Console.WriteLine(c[k]+name+"和"+a[i]+"一起"+d[w]+b[j]);

2015.5.9

数组应用:
一、冒泡排序
趟数和次数:
每趟出来一个最小(最大)的数。
每次比较相邻的两个数,按要求交换位置。

核心:
for(循环趟数)
{
 for(循环每趟次数)
 {
 }
}

趟数:n-1
次数:n-趟数(将趟数定义为i,i=n-1,次数即为n-i)
          
作业:
1.把冒泡排序写出来。
2.10评委给歌手打分,去掉两个最高分,去掉两个最低分,求平均分。

作业
1.
int[]a=new int[8]{9,21,8,13,16,22,7,6};
Console.WriteLine("******排序之前******");
for(int i=0;i<a.Length;i++)
Console.Write(a[i]+"\t");
Console.WriteLine();
//排序
for(int i=1;i<=a.Length-1;i++)
for(int j=1;j<=a.Length-i;j++)
if(a[j-1]<a[j])
int temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
Console.WriteLine();
Console.WriteLine("******排序之后******");
for(int i=0;i<a.Length;i++)
Console.Write(a[i]+"\t");
Console.WriteLine();
以上为从大到小排列

若要从小到大排列,则把if(a[j-1]<a[j])改为if(a[j-1]>a[j])

若把i、j定义为0,
for(int i=1;i<=a.Length-1;i++)
for(int j=1;j<=a.Length-i;j++)
改为
for(int i=0;i<a.Length-1;i++)
for(int j=0;j<a.Length-i;j++)

if(a[j-1]>a[j])
int temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
改为
if(a[j+1]>a[j])
int temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;

2.见2015.5.13例③

二、二分查找
前提:数组必须是有序的。

int[]a=new int[]{22,21,16,13,9,8,7,6}
//从键盘接收要查找的数
int find=Convert.ToInt32(Console.ReadLine());
int maxsub,minsub,midsub;
minsub=0;
maxsub=a.Length-1;
for(;maxsub>minsub;);
midsub=(maxsub+minsub)/2;//求中间下标
if(a[midsub]==find)//看看找到了没有?
Console.WriteLine("恭喜找到了,在第"+minsub+"个位置上);
break;
else//这次没找到
if(a[midsub]>find)//扔掉上半
minsub=midsub+1;
else//扔掉下半
maxsub=midsub-1;

2015.5.10

一维数组:连续存储的,存同类数据的

二维数组:相当于是个表格

          行、列两个维度,行、列命名从0开始
          eg.a[0,0] 命名数组a的0行0列位置上的数

          连续,同一类数据
一、定义:
int[,] a = new int[3, 4];

int[,] a = new int[3, 4] {
            { 1, 2, 3, 4 },
            { 5, 6, 7,10 },
            { 8, 9,11,12 }
            };
二、赋值与取值:
a[行下标,列下标] = 值
a[行下标,列下标];
①int[,] a = new int[3, 4];
  a[0,0]=5;
  a[0,1]=6;
  a[0,2]=7;
  a[0,3]=8;
  a[1,0]=9;
  a[1,1]=10;
  Console.WriteLine(a[1,0]);
  输出结果为9

②int[,] a = new int[3, 4] {
            { 1, 2, 3, 4 },
            { 5, 6, 7,10 },
            { 8, 9,11,12 }
            };
  Console.WriteLine(a[1,0]);
输出结果为5

③构建一个三行四列的数组
int[,] a = new int[3, 4] {
            { 1, 2, 3, 4 },
            { 5, 6, 7,10 },
            { 8, 9,11,12 }
            };
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
Console.Write(a[i, j] + "\t");
Console.WriteLine();

④输入一些数字构成数组且数组内数字从小到大排列
int[,] a = new int[3, 4];
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
a[i, j] = Convert.ToInt32(Console.ReadLine());

三、应用
推箱子

0-空地 1-小人 2-箱子 -1-墙 3-目的地

2015.5.11

字符串:
Length - 字符串的长度。

TrimStart() 压缩左侧空格
TrimEnd() 压缩右侧空格
Trim() 压缩两侧空格

ToUpper() 英文字符串每个字母全部大写
ToLower() 英文字符串每个字母全部小写

Replace("要被替换的","要去替换的")返回替换后的字符串。


Substring(起始位置)
eg.Substring(3) 从第三位开始截取(一串数字或英文,从左到右分别为第0位、第1位、第2位......)

Substring(起始位置,截取的长度) 
eg.Substring(3,5) 从第三位开始截取五位

IndexOf("子串") 返回第一次出现的位置 整数
LastIndexOf("子串") 返回最后一次出现的位置 整数 

StartWith("子串") 返回bool,是否以某子串开头的
EndWith("子串") 返回bool,是否以某子串结尾的
Contains("子串") 返回bool,是否包含某子串

作业:
1.从身份证中获取生日。
2.生成四位验证码。
3.作业:判断邮箱格式是否正确
(1)有且只有一个@
(2)不能以@开头,不能以@结束
(3)@之后至少一个点
(4)@和.不能靠在一起。
(5)不能以.结尾

数学:Math
Math.Pow(double a,double b)指数
double n=Math.Pow(2,3) 求2的3次方的数值,输出结果为8
double n=Math.Pow(64,0.2) 求64的0.2次方即64的1/5次方的数值,等价于求64开5次方根的数值
Math.Sqrt(double)平方根
double n=Math.Sqrt(9) 求9的平方根,输出结果为3

Math.Ceiling(double) 取得大于当前数值的最小整数。
double n=Math.Ceiling(3.8)或int n=(int)Math.Ceiling(3.8)【强转格式,3.8是小数,而int是整数数据类型命名】 输出结果为4
Math.Floor(double) 取得小于当前数值的最大整数
double n=Math.Floor(3.8) 输出结果为3
Math.Round(double)四舍五入
double n=Math.Round(3.14) 输出结果为3
double n=Math.Round(3.74) 输出结果为4


日期时间:DateTime
DateTime dt=new DateTime([年,月,日[时,分,秒]]);
DateTime dt=new DateTime(1991,11,22,23,56,32)输出日期格式为1991/11/22 23:56:32

DateTime dt=DateTime.Now
Console.WriteLine(dt)
输出当前日期时间,格式同上

ToString("格式化字符串")
yyyy,yy-年份
MM,M-月
dd,d-天
hh,h-时
mm,m-分
ss,s-秒
Console.WriteLine(dt.ToString(yyyy-MM-dd hh:mm:ss ms)) (以上面时间为例)输出日期格式为1991-11-22 23:56:32
Console.WriteLine(dt.ToString(yyyy年MM月dd日 hh:mm:ss ms))输出日期格式为1991年11月22日 23时56分32秒
Console.WriteLine(dt.ToString(yy年M月d日 hh:mm:ss ms)) (以上面时间为例,是5月12日)输出日期为91年5月12日
                                                       (如果是上面的格式)输出日期为1991年05月12日
AddDays(),AddHours(),AddYears(),AddMonths()......
日期与日期相减得出来的是时间差TimeSpan
TimeSpan中可以取得总天数(TotalDays),总小时数(TotalHours),总分钟数(TotalMinutes)......

DayOfYear 一年中的第几天
DayOfWeek 星期几

try
{
}
catch
{
}
系统友好报错界面
eg.
try
{
 DateTime dt=new DateTime(year,month,day);
}
catch
{
 Console.WriteLine("亲,日期输入不正确!")
}
如果月份、天数超出正常范围,则输出"亲,日期输入不正确!"

2015.5.13

函数:数学,三角函数,f(x)......

         能够独立完成某项功能的模块

函数四要素:输入,输出,函数体,函数名

static void Main(string[] args)

           ↑      ↑                ↑

         输出 函数名         输入

{

                函数体

}

一、函数定义

[static]返回类型 函数名(形参类型 形参名[,形参类型,形参名]])

{

                函数体

}

二、函数调用

[变量类型 变量名=]函数名(实参值)

加ref---传地址  不加ref---传副本

①两个数比较大小(事先不赋值)

static int Max(int a,int b)

if(a>b)

return a;

else

return b; 

②三个数两两比较选出最大值(事先赋值)

int a=5,int b=10,int c=9;

int d=Max(Max(a,b),c);

先比较a与b的大小,选出较大的那个再与c比较再赋给变量d【之前的做法是先比较a与b的大小,选出较大的那个赋给变量d再与c比较大小】

Console.WriteLine(d);

 ③10位评委给选手打分,去掉两个最高分,去掉两个最低分,求平均分

static int[]ShuRu(int[]a)

for(int i=0;i<a.Length;i++)

Console.Write("请第"+(i+1)+"个评委亮分:");

a[i]=Convert.ToInt32(Console.ReadLine());

return a;

static int[]PaiXu(Int[]a)

for(int i=1;i<=a.Length-1;i++)

for(int j=1;j<=a.Length-i;j++)

if(a[j-1]<a[j])

int temp=a[j-1];

a[j-1]=a[j];

a[j]=temp;

return a;

static int Max1(int[]a)

return a[0];

static int Max2(int[]a)

return a[1];

static int Min1(int[]a)

return a[a.Length-1];

static int Min2(int[]a)

return a[a.Length-2];

【或

static int Max(int[]a)

string s="两个最高分"+Max1(a)+"和"+Max2(a);

return s;

static int Min(int[]a)

string s="两个最低分"+Min1(a)+"和"+Min2(a);

return s;

【或

static int MaxMin(int[]a)

string s="去掉"+Max(a)+",去掉"+Min(a);

return s;

static double QiuZhi(int[]a)

int sum=0;

for(int i=2;i<=a.Length-3;i++)

sum=sum+a[i];

double avg=1.0*sum/(a.Length-4);

return avg;

static void Main(string[]args)

int[]a=new int[10];

//输入

a=ShuRu(a);

//运算

//1.排序

a=PaiXu(a);

//2.求值

double d=QiuZhi(a);

//输出

Console.WriteLine("去掉两个最高分"+Max1(a)+"和"+Max2(a)+",去掉两个最低分"+Min1(a)+"和"+Min2(a)+",选手的平均得分是:"+d);

【或 Console.WriteLine("去掉"+Max(a)+",去掉"+Min(a)+",选手的平均得分是"+d);】

【或Console.WriteLine(MaxMin(a)+",选手的平均得分是"+d);】

④10个评委给选手打分,求选手平均得分

static int[]ShuRu(int[]a)

for(int i=0;i<a.Length;i++)

Console.WriteLine("请第+(i+1)+位评委亮分:")

a[i]=Convert.ToInt32(Console.ReadLine());

return a;

static int[]PaiXu(int[]a)

for(int i=1;i<=a.Length-1;i++)

for(int j=1;j<=a.Length-i;j++)

if(a[j-1]<a[j])

int temp=a[j-1];

a[j-1]=a[j];

a[j]=temp;

return a;

static double QiuZhi(int[]a)

int sum=0;

for(int i=2;i<=a.Length-3;i++)

sum=sum+a[i];

double avg=1.0*sum/(a.Length-4);

return avg;

static void Main(string[]args)

int[]a=new int[10];

//输入

a=ShuRu(a);

//运算

//1.排序

a=PaiXu(a);

//2.求值

double d=QiuZhi(a);

//输出

Console.WriteLine("平均得分是:"+d);

2015.5.15
结构体:
由多种简单类型,组合成一种复杂的类型,使用这种复杂的类型来解决生活中的实际例子。

一、结构体定义:
struct 结构体的名字
{
 public 类型名 变量名;
 .....
}
eg.
    struct Student
    {
        public string NO;
        public string Name;
        public double YuWen;
        public double ShuXue;
        public double WaiYu;
        public double ZongFen;
    }

二、结构体的使用
1.使用结构体来定义变量
Student s1 = new Student();
2.给结构体变量赋值。
s1.Name = "";
s1.NO = "";
3.给结构体变量取值。
s1.YuWen=96.5;

三、复杂结构体
使用结构体类型的成员变量,来组成更大的结构体。
1.先造个小的结构体
2.使用小的结构体来组合成更大的结构体。
    struct Student
    {
        public string NO;
        public string Name;
        public ChengJi Score = new ChengJi();
        public LianXiFangShi Contact = new LianXiFangShi():
    }
    struct LianXiFangShi
    {
        public string DianHua;
        public string QQ;
        public string YouXiang;
        public string ZhuZhi;
    }
    struct ChengJi
    {
        public double YuWen;
        public double ShuXue;
        public double WaiYu;
        public double ZongFen;
    }
复杂结构体的定义:
Student s1 = new Student();
复杂结构体成员变量的使用:
            s1.NO = "s001";
            s1.Name = "张三";
            s1.Contact.DianHua="18500002222";
            s1.Contact.QQ="88888888";
            s1.Contact.YouXiang="88888888@qq.com";
            s1.Contact.ZhuZhi = "地球";
            s1.Score.YuWen=89;
            s1.Score.ShuXue=99;
            s1.Score.WaiYu=79;
            s1.Score.ZongFen = s1.Score.YuWen+s1.Score.ShuXue+s1.Score.WaiYu;

四、结构体的数组
Student[]ss=new student[5];
//输入基本信息:学号和姓名
Console.WriteLine("******第一步:输入学生的基本信息******");
for(int i=0;i<ss.Length;i++)
Console.Write("学号:");
ss[i].NO=Console.ReadLine();
Console.Write("姓名:");
ss[i].Name=Console.ReadLine();
//输入成绩
Console.Clear;
Console.WriteLine("******第二步:输入学生的成绩******");
for(int i=0;i<ss.Length;i++)
Console.WriteLine("正在输入第"+ss[i].Name+"个同学的成绩");
Console.Write("语文:");
ss[i].Score.YuWen=Convert.ToInt32(Console.ReadLine());
Console.Write("数学:");
ss[i].Score.ShuXue=Convert.ToInt32(Console.ReadLine());
Console.Write("外语:");
ss[i].Score.WaiYu=Convert.ToInt32(Console.ReadLine());
ss[i].Score.ZongFen=ss[i].Score.YuWen+ss[i].Score.ShuXue+ss[i].Score.WaiYu;
//输入联系方式
Console.Clear;
Console.WriteLine("******第三步:输入学生的联系方式******");
for(int i=0;i<ss.Length;i++)
Console.WriteLine("正在输入"+ss[i].Name+"同学的联系方式");
Console.Write("电话:");
ss[i].Contact.DianHua=Console.ReadLine();
Console.Write("QQ:");
ss[i].Contact.QQ=Console.ReadLine();
Console.Write("邮箱:");
ss[i].Contact.YouXiang=Console.ReadLine();
Console.Write("住址:");
ss[i].Contact.ZhuZhi=Console.ReadLine();
//显示基本信息
for(int i=0;i<ss.Length;i++)
Console.WriteLine(ss[i].NO+"/t"+ss[i].Name+"/t"+ss[i].Score.ZongFen+"/t"+ss[i].Contact.DianHua);

作业:
1.学生的案例
2.做一个发票的结构体:代号,开票单位,开票日期,发票金额,发票人,发票消费项

2015.5.16
string s=DateTime.Now.ToString();
Console.WriteLine(s);
string[]a=s.Split(' ','/',':')(小括号里内容是划分依据)
Console.WriteLine(a.Length);
输出结果是日期时间被划分为6部分,每部分分别是年、月、日、时、分、秒,并分行排列
分支:
switch
     switch(表达式)
            {
                case 具体值1:
                    语句;
                    ....;
                    break;
                case 具体值2:
                    语句;
                    ....;
                    break;
                .....

                default:
                    语句;
                    ....;
                    break;

            }
案例:
     string s = Console.ReadLine();
            switch (s)
            {
                case "1":
                    Console.WriteLine("你选择的是库存管理模块");
                    break;
                case "2":
                    Console.WriteLine("你选择的是入库管理模块");
                    break;
                case "3":
                    Console.WriteLine("你选择的是出库管理模块");
                    break;
                case "4":
                    Console.WriteLine("你选择的是加工合成模块");
                    break;
                case "5":
                    Console.WriteLine("你选择的是退出系统");
                    break;

                default:
                    Console.WriteLine("输入的指令不可识别,请重新输入");
                    break;

            }
switch与if...else的区别:
if...else相当于滑动变阻器,可控制连续变量
switch相当于变阻箱,不能控制连续变量,即:switch只能针对某个固定的值进行分支

循环:
while

初始条件
while(循环条件)
{
 循环体;
 状态改变;
}
案例:
            int i=0;
            while(i<10)
            {
                Console.WriteLine("您好@");
                i++;
            }
它是从下面的for循环演变过来的:
            int i = 0;
            for (; i < 10; )
            {
              Console.WriteLine("您好!");
              i++;
            }
若用do...while形式则应这样写:
int i=0;
do
{
Console.WriteLine(您好#);
i++;
}
while(i<10)
while和do...while的区别:
do...while先执行循环条件,再执行状态改变
while先执行状态改变,再执行循环条件

foreach 一般用来循环遍历数组或集合的,执行速度比for循环快

用来从头到尾遍历,不涉及到下标或计数,而且循环过程中,不能修改数组或集合中的值。

foreach(类型 变量 in 数组或集合)
{
 Console.WriteLine(变量);
}


数组:锯齿数组(数组的数组)
一、定义
1.定义数组的数组:
     int[][] a = new int[3][];
2.定义一维数组:
            int[] a1 = new int[5] { 10, 20, 30, 40, 50 };
            int[] a2 = new int[2] { 60, 70 };
            int[] a3 = new int[3] { 80, 90, 100 };
3.把一维数组放到数组的数组中。
            a[0] = a1;
            a[1] = a2;
            a[2] = a3;

二、操作某个元素:
a[行][列]
            for (int i = 0; i < a.Length; i++)
            {
                for (int j = 0; j < a[i].Length; j++)
                {
                    Console.Write(a[i][j] + "\t");
                }
                Console.WriteLine();
            }

集合:
数组与集合的区别:
数组:同一类型,连续存储。优点:存储效率高,检索速度快 缺点:连续的,不能扩展,不能删除,不能插入
集合:同一类型,不连续存储。优点:可存储不连续 缺点:存储效率低,检索速度慢 

集合的操作---ArrayList是集合中的一种

一、链表:
弱类型的集合:
ArrayList list = new ArrayList();
添加操作:list.Add(值);
插入操作:list.Insert(下标,值)
删除操作:list.RemoveAt(下标)
清空集合:list.Clear();
获得集合中元素个数:int n = list.Count;
获取某个值:object n = list[下标];


强类型的集合:
List<类型> 集合名 = new List<类型>();
eg.List<int>list = new List<int>();
添加操作:list.Add(值);
插入操作:list.Insert(下标,值)
删除操作:list.RemoveAt(下标)
清空集合:list.Clear();
获得集合中元素个数:int n = list.Count;


二、哈希表:
弱类型
Hashtable list = new Hashtable();
添加操作:list.Add("名","值");
删除操作:list.Remove("名");
清空集合:list.Clear();
获得集合中元素个数:int n = list.Count;
获取值:object n = list["名"];

强类型:
Dictionary<string, string> table = new Dictionary<string, string>();
添加操作:list.Add("名","值");
删除操作:list.Remove("名");
清空集合:list.Clear()
获得集合中元素个数:int n = list.Count;
获取值:object n = list["名"];


三、队列 特点:先进先出
Queue<string> s = new Queue<string>();
进队:s.Enqueue("我"); //进队
出队:string str = s.Dequeue();//出队

不能插队,不能中间离队。

四、栈 特点:先进后出。
Stack<string> s = new Stack<string>();//栈
进栈:s.Push("我");//进栈
出栈:string str = s.Pop();//出栈

不能中间插入,不能中间离开。

2015.5.18

上周六课程复习

1.switch --- if ...else if...
switch(表达式)
{
     case 值:
       ......
     break;
     case 值:
       ......
     break;
     default:

       ......

     break;  
}

2.while --- for
int i = 0;//变量初化。
while(循环条件)
{

 //循环体
 //i++;//状态改变。
}
do...while();

foreach(元素类型 变量 in 集合或数组)
{
}

3.锯齿数组---数组的数组
定义:
a.定义数组的数组:
int[][] a = new int[3][];
b.定义一维数组:
int[] b1 = new int[4]{1,2,3,4};
int[] b2 = new int[3]{5,6,7};
int[] b3 = new int[5]{9,10,11,12,13};
c.把一维数组加到数组的数组中去
a[0] = b1;
a[1] = b2;
a[2] = b3;

使用:
a[行][列] = ...
a[行][列]

a.Length =3
a[0].Length =4

4.集合:
(1)链表---每个存储的值都会分配一个索引号,通过索引号可对每个元素赋值或取值。
弱类型:
using System.Collection;
ArrayList list = new ArrayList();

强类型:
using System.Collection.Generic;
List<类型> list = new List<类型>();

list.Clear();
list.Add(value);
list.Insert(索引号,value);
list.RemoveAt(索引号);
list.Count;

(2)哈希表---每个元素都由两部分组成,一部分叫key,一部分叫value
弱类型:
using System.Collection;
Hashtable table = new Hashtable();

强类型:
using System.Collection.Generic;
Dictionary<类型,类型> dic = new Dictionary<类型,类型>();

dic.Clear();
dic.Add(key,value);
dic.Remove(key)
dic.Count;


本节课内容

函数

递归---自己调自己

int Add(int a)
{
 int b = Add(a+1);
 Console.WriteLine(b);
}

void 讲故事()
{
 Console.Write("从前。。。,老和尚说:");
 讲故事();
}

void 找子级文件夹(当前文件夹)
{
 if(当前文件夹下没有子文件夹)
 {
  return;   
 }
 找子级文件夹(当前文件夹下的第一个子文件夹);
}

④猴子吃桃子
        static int TaoZi(int day) //接收天数,返回这一天的桃子数
        {
            if (day == 7)
            {
                return 1;
            }
            int c = (TaoZi(day+1) + 1) * 2;
            return c;
        }

⑤程序员与富翁
        static double Money(int day)
        {
            if (day == 1)
            {
                return 0.01;
            }
            double a = Money(day-1) * 2;
            return a;
        }

经典案例:①从前有座山②盗梦空间


结构体

枚举---自己定义的复杂的类型

enum RenYuanZhuangTai

{

     XueTu=0,

     ShiXi=1,

     ShiYong=2,

     XianZhi=3,

     QingJia=4,

     TuiXiu=5,

     LiZhi=6,

    CiTui=7,

    JieDiao=8

}

Console.WriteLine(RenYunaZhuangTai.TuiXiu);//输出结果为退休

Console.WriteLine((int)RenYunaZhuangTai.TuiXiu);//输出结果为5

Console.WriteLine((RenYunaZhuangTai)6);//输出结果为LiZhi

c#总结

输入输出---数据类型---变量与常量---运算符表达式---语句(顺序、分支、循环)---数组---函数---结构体

一、输入与输出
Console.ReadLine();//输入
Console.WriteLine();//输出(分行)
Console.Write();//输出(不分行)

二、数据类型
(一)分类
1.值类型
基本类型:int(short,long),double(float,decimal),bool,char
复杂类型:DateTime,struct,enum
2.对象类型(引用类型):string
                               数组
                               Random
(二)类型转换
1.自动转换(隐式转换)
只要不可能丢数据,就会自动转换

2.强制转换(显式转换)
只要可能会丢数据,就需要强制转
语法:a.使用小括号
        b.使用Convert---如果要把数值模样的字符串变成整数,必须使用Convert

三、变量与常量
(一)变量---U盘
1.定义:数据类型 变量名[=值[,变量名=值]];
变量名的命名规则:a.组成---字母、数字、下划线、@、汉字
                         b.首字符---字母、下划线、@、汉字(注意一定不能用数字作为首字符)
                         c.关键字---不能与关键字重名
2.赋值:变量名=值;
3.取值:直接使用变量名

注意变量的作用域:变量只在它所在的花括号里面起作用,除了花括号就访问不到了。
1.在同一个花括号内,不能出现两个重名的变量定义
2.如果有多重花括号,外层和里层都出现同一个变量的定义,则使用的时候遵循就近原则

(二)常量---光盘
在程序中只能定义的时候赋值,在运算的时候无法修改值(不能放在等号的左边)
1.定义:const 数据类型 常量名=值;
2.取值:直接使用常量名
3.分类:符号常量和字面常量
int a=10;//10是字面常量
const int PI=3.14;//PI是符号常量,3.14是字面常量

四、运算符
(一)算术 7 自动转换
+ - * / % ++ --
取余一般用在两种情况下:
1.看看能不能整除
2.把值控制在某个范围之内
++ -- 分前后
前++ 前--(++a --a)先自增/减,再做其他运算
后++ 后--(a++ a--)先做其他运算,再自增/减
(二)关系 6 返回bool
== != > < >= <=
(三)逻辑 3
&& || !
(四)其它
= 赋值,把右边送到左边去,因此等号左边只能是变量,不能是常量或表达式
?: 条件运算符 表达式一?表达式二:表达式三 if...else
+= -= *= /= %= 复合运算符

运算符优先级
! ++ --
算术>关系>逻辑>赋值
使用小括号来改变运算的优先级

五、语句:顺序、分支、循环
(一)分支
if
1.if(条件){}
2.if(条件){}else(条件){}
3.if(条件){}else if(条件){}...else{}
4.if(条件){if(条件){}...else{}} else{if(条件){}...else{}}
案例:
a.18岁抓当兵
b.相亲
c.体重
d.平年闰年---判断一个日期是否正确
e.一元二次方程根的情况

switch
switch(表达式)
{
      case 常量:
       ...
      break;
      case 常量:
       ...
      break;
      default:
      break;
}
(二)循环
1.语法:
(1)for:
for(初始条件;循环条件;状态改变)
{
 
        循环体

}
循环四要素↑
(2)while:
初始条件
while(循环条件)
{
        循环体
        状态改变
}
2.循环嵌套
for(;;)
 {
    for(;;)
     {
         

      }
}
3.应用:
a.打印星号 各种图形的打印(练习:正方形、三角形)
b.穷举---把各种可能的情况都走一遍,筛选出符合条件的
①100以内所有与7有关的数
②买牙刷、洗发水、香皂
③百鸡百钱,百马百石
④兑硬币
⑤填+-使等式成立
⑥侦察兵
c.迭代---找到规律,使用变量不断累计的功能实现运算,不断求中间结果,直到得出最终的结果
①100以内所有数的和
②猴子吃桃
③小朋友算年龄
④折纸-珠峰
⑤棋盘分米
⑥富翁与程序员
⑦兔子

六、数组与集合
(一)数组---同一类型,连续存储
一维---豆角
定义:数据类型[]数组名=new 数据类型[长度]{初始值列表}
赋值:数组名[下标]=值;
取值:数组名[下标]
与for语句配合用,使用循环来控制下标
数组常用的属性---Length,要搞清下标与长度的关系
应用:
①球员打分
②彩票
③排序
④二分法查找
二维---表格
定义:数据类型[,]数组名=new 数据类型[行数,列数]{初始值列表}
赋值:数组名[行下标,列下标]=值;
取值:数组名[行下标,列下标]
与循环配合用
for(;;)//循环行
{
   for(;;)//循环列
   {

    }
}
应用:
推箱子
3.锯齿---数组中的数组
定义:
1.定义数组中的数组:数据类型[][]数组名=new 数据类型[行数][];
2.定义一维数组
3.把一维数组赋给数组的数组
(二)集合---不用连续
1.链表
弱类型:ArrayList list=new ArrayList();

使用环境:using.System.Collection


强类型:List<类型> list=new List<类型>();

使用环境:using.System.Collection.Generic
2.哈希表
弱类型:Hashtable table=new Hashtable();

使用环境:using.System.Collection


强类型:Dictionary<key类型,value类型>=new Dictionary<key类型,value类型>();

使用环境:using.System.Collection.Generic

栈,队

七、函数
什么是函数:能够完成一定功能的独立模块
函数的四要素:函数名,形参(输入),返回类型(输出),函数体(加工运算)
(一)定义
[static]返回类型 函数名([变量类型 变量名[,变量类型 变量名[...变量类型 变量名]]])
{
         函数体
}
(二)调用
数据类型 变量名=函数名([实参1[,实参2...]])
说明:
1.函数名与变量名规则一样
2.实参与形参一定要一一对应
3.return所返回值一定要与返回类型一致
4.函数定义没有一定原则
(三)递归

八、结构与枚举
(一)结构体---自己定义的复杂的类型
什么是结构体:由多种简单类型,组合成一种复杂的类型,使用这种复杂的类型来解决生活中的实际例子。
为什么要用到结构体:1.使用结构体来定义变量
                            2.给结构体变量赋值
                            3.给结构体变量取值
定义:struct 结构体名
      {
           public 数据类型 成员变量名;
           public 数据类型 成员变量名;
           public 数据类型 成员变量名;
               ......
      }
使用:
     结构体名 变量=new 结构体名();
     变量.成员变量=值
     变量.成员变量
说明:结构体的成员,还可以用其他结构体来定义
(二)枚举---使用枚举来替代一些难以记忆的整数,枚举和整数之间可以相互强制转换
定义:enum 枚举名
      {
           成员名[=整数],
           成员名[=整数],
           成员名[=整数],
               ...
           成员名[=整数], 
      }
使用:枚举名.成员名

转载于:https://www.cnblogs.com/kxy3-1314/p/4541492.html

已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页