第二周与第三周学习笔记

作业小节
几个题目订正
学生问题:杨老师,数据冷性的隐式转换和强制类型转换,是装箱和拆箱么?不是,与之无关
拆箱装箱是指两种类型互相赋值?比如说把一个字符串赋值给一个int,俩类型不一样,符之中就会发生类型转换,当然了,肯定会失败:
Long l=333333333
Int i =l
Conesole.ReadKey();
以上程序失败,无论是3333333333333还是333,因为long太浪了,范围大变范围小默认转换失败。
可以在第二行变为:int i = (int)l;这就是显式转换,意思是你转就行,别装逼了
而小的转换为大的当然成功,也就是隐式转换。

I拆箱装箱:int32与int。

提示用户输入密码,如果密码是“888888”则提示正确,否则提示错误。
Console.writeline(“请输入密码”)
String password=Console,readline()----------------我提取到用户所输入的密码
If (password=“888888”)
{
Console. WriteLine(“正确”);
}
Else;
{
Console. WriteLine(“错误”);
}

Console.readkey()

有时候有的学生会出现这种情况,在二行会写成
Int i = convert.toint32(password)
If (i=8888888)
假设只写数字,也可以。
那么如果用户输入字母或者输入88888888888888888888888呢?就会程序崩溃。
所以888888是个字符串,如果要记录手机号,不能用数字的int来收集,比如说0536-*********,下面是自己写的可参考:

        Console.WriteLine("你?好?,?请?输?入?第台?一?个?数簓");
        String pAdd = Console.ReadLine();
        int i1;
        bool pSuccess = int.TryParse(pAdd, out i1);
        while (pSuccess  == false)
        {
            Console.WriteLine("输?入?错洙?误ó");
            Console.WriteLine("菜?狗·,?请?再ù输?入?一?次?");
            pAdd = Console.ReadLine();
            pSuccess = int.TryParse(pAdd, out i1);

        }
        Console.WriteLine("你?好?,?请?输?入?第台?个?数簓");
        string pAdd0 = Console.ReadLine();
        int i2 = 0;
        bool pSuccesss = int.TryParse(pAdd0, out i2);
        while (pSuccesss == false)
        {
            Console.WriteLine("输?入?错洙?误ó");
            Console.WriteLine("菜?狗·,?请?再ù输?入?一?次?");
            pAdd0 = Console.ReadLine();
            pSuccesss = int.TryParse(pAdd0, out i2);
        }
        Console.WriteLine("你?好?,?请?输?入?第台?个?数簓");
        string add3 = Console.ReadLine();
        int i3 = 0;
        bool pSuccessss = int.TryParse(add3, out i3);
        while (pSuccessss == false)
        {
            Console.WriteLine("输?入?错洙?误ó");
            Console.WriteLine("菜?狗·,?请?再ù输?入?一?次?");
            add3 = Console.ReadLine();
            pSuccessss = int.TryParse(add3, out i3);
        }

     
        if (i3 == i1 + i2)
        {
            Console.WriteLine("j");
        }
        else
        {
            Console.WriteLine("否?");
        }
        Console.ReadKey();

注意:变领命要用有意义的变量名!不要用x,y,z。

Switch case
也是对值进行判断,满足一些条件的时候干一些什么事。

用户输入1.2.3.4,然后转成东南西北。
String s = console.readline(),
If(s==“1”)
{
Console.writeline(“东”)
}
Else if (s==“2”)
{
Console.writeline(“南”)
}
Else if (s==“3”)
{
Console.writeline(“西”)
}
Else if (s==“4”)
{
Console.writeline(“北”)
}
Else
{
Console.writeline(“输入错误”)
}
Cocnsole.readkey()

如果用swich case:
Switch(s)
{
Case“1”:
Console.writeline(“东”)
Break
Case“2”:
Console.writeline(“南”)
Break

Case“3”:
Console.writeline(“西”)
Break

Case“4”:
Console.writeline(“北”)
Break
Default:
Console.writeline(“输入错误”)
break
}
Console.readkey()

注意:switch就像初中物理电路图开关一样。Case后必须是一个固定的值不能是表达式不可是变量,不能使bool运算,比如大于40小于80是不行的。
其中在c#必须写break。只有两个case合并,即case”1”和case”2”都走”东”这这串代码的时候可以去掉。
其中default是指如果上面的case都不匹配则运行default。

再例:
String month = console.readline();
Switch(month)
{
Case“1”:
Case“3”:
Case“5”:
Case“7”:
Case“8”:
Case“10”:
Case“12”:
Console.writeline(“31”);
Break;
Case“4”
Case“6”
Case“9”
Case“11”
Console.writeline(“30”);
Break;
Case“2”
Console.writeline(“28”);
Break;
Default:
Console.writeline(“输入错误”)
}
Console.readkey();

那么switch case 可以用if来实现么,可以(if某某或者某某,else)。那么反过来呢,if的不见得都可以用switch case来表示,比如几个符合表达式,几个变量运算。所以它一般是用来做几个离散的值的程序。

While循环

如果复杂程序,就比如从1数到100,如果没有循环,那就累死了。

While(true)---------------如果while后的条件表达式为true就执行{}中的代码,

Int i = 0
While(true)
{
Console.writeline(i);
i++; --------------------------------如果true就执行打印i,打印了后在递增,此时又回去判断一次再回去走一遍。不停了。
}
Console.readkey();

再例:
Int i = 0
While(i<3)
{
Console.writeline(i);
i++;
}
Console.readkey();

其中还有个do while
Do
{
……
}
While()

即先做,如果满足则再来一次,直到while表达式为false。至少被执行一次。(*)

比如:
Int i= 0
Do
{
Console.writeline(i);
i++;
}
While(i<3);
Console.readkey;
如果第一行为i=100,则黑框显示100,因为他走第一遍的时候留下的。

练习1:用while计算1到100之间整数的和
int i = 1;
int sum = 0;//存?放?数簓据Y的?容╕器÷
while (i <= 3)
{
Console.WriteLine(i);
sum = sum + i;
i++;

        }
        Console.WriteLine(sum);
            Console.ReadKey();

练习2:不断要求用户输入一个数字,然后打印这个数字的二倍,当用户输入q的时候程序退出(return)

???

练习3:不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候显示刚才输入的数字中的最大值。设一个变量int max,初始值为0,用户每输入一次就把用户输入的和max比较一下,如果输入的比max大,则让max等于用户输入。陷阱:判断end是在之前还是之后。
One:

Two:

注意:在two中,如果吧int i = convert.toint32(s)程序放到滴四行,则输入end时候会报错,因为end无法变为toint32。
注意:toint32,把1和2 转化为12.

循环的中断
1.break:立即终止整个循环。
2.continue:立即终止当前循环步骤,进行下一次循环步骤。

3.return,跳出当前的函数。

Break举例:

Break并不是结束程序,是接着往下走,一直走到“aaaaaa”
如果:break换成continue。那么是就不显示“aaaaaa”,也就是紧接着的打印步骤和i++步骤不进行,而是继续死循环,此时i就是5。

While也可以嵌套使用。
Int i = 0
While(i<10)
{
Int j=0
While(j<10)
{
Console.writeline(“i={0},j={1}”,i,j)
J++
}
i++
}
Console.readkey()

For循环,常用,比较灵活

1.for(code1;code2;code3)。code1:循环的初始化代码,只在循环开始之前运行一次;code2,相当于while里的括号,bool类型的表达式,每次循环完成前都判断一下是否为true,只有为true才会进行本次循环;code3在每次循环之后执行一次。
2.for的三段都可以省略,但是不能丢了“;”。
3.break、continue同样可以应用于for。
4.for和while代码之间都可以互相转换,究竟用哪种方式则取决于一些惯用用法和个人习惯。

经典例子:
int i;
for (i = 1; -----------------------------前,一次
i <= 10; ----------------------------是否为true,则执行打印。当打印出10来之后,10首先执行i++变为11,然后去i《=10来判断,不为true,则结束。
i++) --------------------------------循环之后在执行这个
{
Console.WriteLine(i);
}
Console.ReadKey();

or(int i=0;i<10;i++)
{
}

for(int i=100;i>0;i–)
{
}

注意:for中终止条件注意是<还是<=。只要想好了想要的最后一个数是什么、第一个数是什么即可
自我理解,每次初始值;中止循环的条件;每次循环后执行

小练习:从1加到10
Int sum = 0;
For(int i =1;i<=10,i++)
{
Sum=sum+i;
}
Console.WriteLine(sum);
Console.ReadKey();

其中
i在外边或者里面赋值,都一样(经典例子中:int i for(i =1……和 小练习中:for(int i = 1;i<=10,i++))。
??????????????:int i =1 和i = 1 有啥区别

枚举
Int表示所有整数,string表示所有字符串,无限多个
而有一些值就几个,比如东南西北,男女,就可以用枚举:
enum Gender{male,female} ------------------enum;gender是枚举的名字;()中为枚举可供使用的几个值

enum QQStatus{online,offline,hidden}

枚举是一个类型,应该和class同名。

点一下就出来了枚举的几个类型:

而且也可以:

数组
就是把几个数凑到一起,可以从初很多很多个值的组:

两个声明方式:

声明了之后怎么用呢:
string[] names = { “大青蛙”, “大蛤蟆”, “大蝌蚪” };
string n1 = names[1];

        Console.WriteLine(n1);
        
        Console.ReadKey();

这个是执行打印该数组有多长:
Console.WriteLine(names.Length);

注意数组访问不能超过最大范围。

可以取值也可以赋值?????????????????如果是console.writeline(n1):

数组访问不能超限,比如说长度为3,而Console.WriteLine(names[6]); 而长度为3则最多访问到2.

小练习1:读出数组里的东西:
int[] nums = { 3, 9, 0, 3, 99 };
for (int i = 0; i < nums.Length; i++)
{
Console.WriteLine(nums[i]);
}
Console.ReadKey();
这个要注意i<而不是i<=,因为数组里是0.1.2.3.4,nums.length为5,如果是i<=5,那么将会打印一个第六个数,显然不对。当然了,可以改为i<=nums.lenth-1

小练习2:从一个整数数组中取出最大的整数:
int[] nums = { 3, 9, 0, 3, 99 };
int max = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] > max)
{
max = nums[i];
}

        }
        Console.WriteLine(max);
        Console.ReadKey();

小练习3:计算一个整数数组的所有元素的和。Sum
小练习4:讲一个字符串组的元素的顺序进行反转。

中断—练习1:
static void Main(string[] args)
{
//int[]nums=new int[3]
//nums = {5.6.9},上一行和本行不能同事写。
//首先遍历nums1.用一个新变量count统计非0的个数
//创建一个长度为count的新数组nums2
//遍历numsl,把非0的值一次填入新?数簓组nums2中
int[] nums1 = { 9, 8, 0, 11, 7, 92 };
int count = 0;//定义一个?变?量?,?有瓺多à少Θ?非?0 nonzerocount
for (int i = 0; i < nums1.Length; i++)
{
if (nums1[i] != 0)
{
count++;
}
}

        Console.WriteLine(count);
        Console.ReadKey();

继续加工→
int[] nums1 = { 9, 8, 0, 11, 7, 92 };
int count = 0;//定¨义?一?个?变?量?,?有瓺多à少Θ?非?0 nonzerocount
for (int i = 0; i < nums1.Length; i++)
{
if (nums1[i] != 0)
{
count++;
}
}
int[] nums2 = new int[count];
int newindex = 0;//记?录?新?数簓组哩?的?拷?贝馈?位?置?
for (int i = 0; i < nums1.Length; i++)
{
if (nums1[i] != 0)
{
nums2[newindex] = nums1[i];
newindex++;//新?数簓组哩?的?位?置?向ò前°挪2一?下?
}
}
for(int i= 0;i<nums2.Length;i++)
{
Console.WriteLine(nums2[i]);
}
Console.WriteLine(count);
Console.ReadKey();

中断→练习:
String[] strs ={“3”,“a”,“8”,“haha”};
string s = “”;//读一个变量前°必须赋值这个变量,所以这里不能是string s;
for (int i = 0; i < strs.Length-1; i++)
{
string str = strs[i];//取第i个字符串
s = s + str + “|”;
}
s = s + strs[strs.Length - 1];
Console.WriteLine(s);
Console.ReadKey();

数组2
Foreach循环
string[] names= {“tom”,“jerry”,“lily”};
foreach(string str in names) //依次遍历names数组中的内容,对于每条数据都执行{}中的代码,每次遍历的数组用in前面的变量表示
{
Console.WriteLine(“我的名字{0}”,name);
}
和for的区别:for可以不逐个遍历,比如每隔一个遍历一个,或者可以从后向前遍历
foreach遍历过程中不能对集合做修改(学List的时候再说),看下边两个程序:

String[] names = { “3”, “a”, “8”, “haha” };
foreach (string str in names)
{
Console.WriteLine(str);
}
Console.ReadKey();

int[] nums = { “3”, “a”, “8”, “haha” };
foreach (int n in names)
{
Console.WriteLine(n);
}
Console.ReadKey();

如果遍历奇数位:
int[] nums = { “3”, “5”, 9"};
foreach (int n in names)
{
If(n==5)
{
Continue;
}
Console.WriteLine(n);
}
Console.ReadKey();

函数
函数是什么大家知道,可是为什么有就不一定知道了,他的目的是为了代码重用。比如我要去中关村,出租车就自己带你去了,不需要你忙活了。
函数就是将一堆代码进行重用的一种机制。函数就是一段代码,这段代码可能有输入的值(参数),可能会返回值。一个函数就像一个专门做这件事的人,我们调用它来做一些事情,它可能需要我们提供一些数据给它,它执行完成后可能会有一些执行结果给我们。要求的数据就叫参数,返回的执行结果就是返回值。
以前都是用别人的函数,现在我们自己写函数。

举例子说明→
以前有如下:
class Program
{
static void Main(string[] args)
{
Console.WriteLine(“请?输?入?第台?一?个?数簓”);
string s1 = Console.ReadLine();
int i1 = Convert.ToInt32(s1);
Console.WriteLine(“请?输?入?第台?二t个?数簓”);
string s2 = Console.ReadLine();
int i2 = Convert.ToInt32(s2);
int i3 = i1 + i2;
Console.WriteLine(i3);
Console.ReadKey();
}
而现在我们这样:
class Program
{
static void Main(string[] args)
{
//Console.WriteLine(“请?输?入?第台?一?个?数簓”);
//string s1 = Console.ReadLine();
//int i1 = Convert.ToInt32(s1);
// Console.WriteLine(“请?输?入?第台?二t个?数簓”);
//string s2 = Console.ReadLine();
//int i2 = Convert.ToInt32(s2);
int i1 = readint(“请?输?入?第台?一?个?数簓”);
int i2 = readint(“请?输?入?第台?二t个?数簓”);
int i3 = i1 + i2;
Console.WriteLine(i3);
Console.ReadKey();
}
static int readint(string msg)//返回值类型 函数名(参数列表)?????
{
Console.WriteLine(msg);
string s = Console.ReadLine();
int i = Convert.ToInt32(s);
return i;

    }
}

再来一个:
class Program
{
static void Main(string[] args)
{

        int i = Add(5, 6);
        Console.WriteLine(i);
        Console.ReadKey();
    }
    static int Add(int i1,int i2)
   {
        return i1 + i2;
}
    }

再来一个:
如果一个函数没有返回值
static void sayhello()//无T返う?回?值μ。£用?的?Void????????
{
Console.WriteLine(“早?上?好?!?”);
Console.WriteLine(“dadada!?”);
Console.WriteLine(“pei!?”);
}

1.提供一个函数,将用户提供的一个字符串重复n遍形成一个新的字符串
2.“sbc”3,返回给调用者一个字符串“abcabcabc”
注意1.参数命名规则
2不要帮调用者writelin,不要帮调用者readline

class Program
{
static void Main(string[] args)
{
string s = Repeat(“ab”, 3);
Console.WriteLine(s);
Console.ReadKey();

    }
    
    static string Repeat(string s, int n)
    {
        string t = "";
        for(int i = 0;i<n;i++)
        {
        t= t+s;
        }
        return t;//把计算结果返回
    }

或者:

class Program
{
static void Main(string[] args)
{

        Console.WriteLine("请?输?入?字?符?串?");
        string s = Console.ReadLine();
        int n =readint("请?输?入?次?数簓");
        string reasult=Repeat(s,n);
        
        Console.WriteLine(reasult);
        Console.ReadKey();

    }
    static int readint(string msg)
    {
        Console.WriteLine(msg);
        string s = Console.ReadLine();
       int i = Convert.ToInt32(s);
        return i;

    }
    static string Repeat(string s, int n)
    {
        string t = "";
        for(int i = 0;i<n;i++)
        {
        t= t+s;
        }
        return t;
    }

}

注意:上面s和n,与下边的s和n并不是一回事,上下名字间并不直接关系,无约束,可以重复。调用函数的地方的参数名字和函数声明时候的名字无关系。???

Return,没有返回值的情况,不用return i1之类 直接写return了??????:
class Program
{
static void Main(string[] args)
{

        hello();
        Console.ReadKey();
     }

static void hello()//没?有瓺返う?回?值μ的?情é况?
{
for (int i = 0; i < 10; i++)
{
if(i == 3)
{
return;
}
Console.WriteLine(“aaaaaaa”);
}

快捷键:Ctrl + e d 可以让代码更清晰哦

注:
在c#中必须有返回值,函数答应返回int就必须返回int。
不能不反悔,不能返回其他类型。

函数小陷阱??:
static int DoIt(int i)// 错误例子。答应返回int。所有路径都要有返回值,不能存在没有返回值的情况
{
if (i < 0)
{
return 0 - 1;
}

        else if (i >= 0 && i <= 10)
        {
            return 30;

        }
        
    }

求和:
class Program
{
static void Main(string[] args)
{
int[] nums = { 3,6,8};//函数要求提供什么数据就给他什么,要数组就不能给数字。

        Console.WriteLine(sum(nums));
        Console.ReadKey();

    }
  

    static int sum(int[] values)
    {
        int sum = 0;
        foreach (int i in values)
        {
            sum = sum + i;
        }
        return sum;
    
    }
}

总结:要写一个函数,就要确定他的参数和返回值,确定参数的时候自己能解决的自己解决,自己解决不了的别人提供给你,以上计算一个数组的和中:
int sum = 0;
foreach (int i in values)
{
sum = sum + i;
}
以上就可以解决。而要对那个数组进行解决是用户提供给我。

练习:
1.编写一个从百度MP3下载音乐函数需要定哪些参数,假设http://mp3.baidu.com/***.mp3。
思考,需要2个参数,就是下载到的文件名,和下载哪一首歌。
Static bool downloadmp3(string filename,string localfilename)// bool表示下载成功与否
{
String ur1=“http://mp3.baidu.com/“+filename+”.mp3”//内部实现
}
downloadmp3(“3”,“c:/ge.mp3”);//用户

未完成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值