C#课后作业总结

*******************************************************************************************************************

本文内容为课后作业的总结,内容仅供参考。

*******************************************************************************************************************

第1章 .NET概述

课后作业:

 1、简述常用术语CLR、CTS、CLS、FCL\BCL的含义及功能

答:CLR(Common Language Runtime) 公共语言运行库:它是一个CLI(Common Language Infrastructure)公共语言基础架构的实现,包含了.Net运行引擎和符合CLI的类库。


  CTS(Common Type System) 通用类型系统:他包含在微软公司提交的CLI规范中,定义了一个可以在CLR上运行的类型规范。
  CLS(Common Language Specification)公共语言规范:他是CTS的一个子集,定义了所有面向.Net的程序需要符合的最小规范集。
      最内一层,由BCL的大部分组成,主要作用是对.NET框架,.NET运行时以及CIL语言本身进行支持,例如基元类型,集合类型,线程      处理,应用程序域,运行时,安全性,互操作等.
    中间一层,包含了对操作系统功能的封装,例如文件系统,网络连接,图形图像,XML操作等.
    最外一层,包含各种类型的应用程序,例如Window Forms,Asp.NET,WPF,WCF,WF等.

    BCL(适用于全部.NET语言的基类库):它不仅封装了各种基本类型,如线程、文件输入/输出(I/O)、图形绘制以及与各种外部硬件设备的交互,还支持在实际应用中用到的一些服务。

     FCL(Framework Class Library).NETFramework类库提供了通用功能的标准代码类库,从功能上看,可以将FCL框架类库划分为以下几层:


2、简述Visual Studio的功能

答:Visual Studio 是一套完整的开发工具,用于生成 ASP.NET Web 应用程序、XML Web services、桌面应用程序和移动应用程序。 Visual Basic、Visual C# 和 Visual C++ 都使用相同的集成开发环境 (IDE),这样就能够进行工具共享,并能够轻松地创建混合语言解决方案。 另外,这些语言使用 .NET Framework 的功能,它提供了可简化 ASP Web 应用程序和 XML Web services 开发的关键技术。

3、说出3种使用C#开发的应用程序

答:MSDN、stackoverflow、SQL Server Management Studio、Microsoft Sharepoint Server、Microsoft Project Server、Microsoft Ads Platform

第2章 C#语法基础-I    

上机练习:

1、编写一个控制台程序,要求:

(1)      接受从控制台输入的姓名,如:张三

(2)      程序响应:你好,张三。

(3)      在代码中使用规范的注释,说明程序的功能

(4)      编译程序,并执行。

程序执行效果如下图:



namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string s=Console.ReadLine();
            if(s=="张三")
            Console.WriteLine("张三,欢迎您!");
            Console.ReadLine();
        }
    }
}

第2章 C#语法基础-II              课后作业

 1、创建C#控制台程序所需的主要步骤是什么?

(1)启动VisualStudio 2008 (2)新建Windows控制台应用程序 (3)设定应用程序目录和名称

2、什么是变量的作用域?字段和局部变量的区别是什么?

变量的作用域是可以访问该变量的代码区域。

根据变量的作用域,变量分为字段和局部变量。
字段是属于一个 类, 在类中定义(注意 : 是类中,而不是类中的某个方法或属性中) , 在本类中可以用 , 且本类中的所有属性、方 法等都可以访问 , 也就是说它的作用域是整个类。
局部变量是指一个独立的语句块声明的变量,它的作用域是从定义开始,到离开语句块。 

3、常量与变量的区别?一般什么时候会用到常量?使用常量有哪些好处?

区别:常量必须在声明时初始化。指定了其值后,就不能再修改了。在声明和初始化变量时,在变量前面加上关键字const,就可以把该变量指定为一个常量。

用处:常量的值可以在编译时用于计算

好处: (1)常量用易于理解的清楚的名称替代了含义不明确的数字或字符串,使程序更易于阅读。
(2)常量使程序更易于修改。
(3)常量更容易避免程序出现错误。如果要把另一个值赋给程序中的一个常量,而该常量已经有了一个值,编译器就会报告错误。

4、值类型和引用类型的区别是什么?

答:(1)预定义数据类型包括值类型和引用类型
(2)值类型的单独实例分配在堆栈上。
(3)引用类型的实例只在堆栈上分配了对其实际值的引用,值本身分配在堆上。

5、值类型具体包括哪些类型?引用类型具体包括哪些类型?

答:值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型;引用类型包括:数组,用户定义的类、接口、委托,object,字符串。

6、简述C#控制台程序主要包括哪些内容。

答:(1)导入系统预定义元素部分 (2)命名空间 (3)类 (4)主方法  (5 )方法中的C#代码 

04     C#类型转换

上机练习题:

1、编写一个能进行加减乘除四则运算的程序,要求:输入一个整数和一个单精度数,然后输入一个操作符号,计算这两个数的运算结果并输出。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            
            
            Console.WriteLine("请输入一个整数:");
            int a = Convert.ToInt32(Console.ReadLine()); 
            Console.WriteLine("请输入一个单精度数:");
            float b = Convert.ToSingle(Console.ReadLine());
            Console.WriteLine("请输入运算符:");
            string x = Console.ReadLine();
            Console.WriteLine("\n\n");
            switch (x)
            {
                case "+":
                    Console.WriteLine("{0}{1}{2}={3}",a,x,b,a + b); break;
                case "-":
                    Console.WriteLine("{0}{1}{2}={3}",a,x,b,a-b); break;
                case "*":
                    Console.WriteLine("{0}{1}{2}={3}",a,x,b,a * b); break;
                case "/":
                    Console.WriteLine("{0}{1}{2}={3}",a,x,b,a / b); break;
            }
            
            Console.ReadLine();

        }
    }
}


2、编写一个控制台应用程序,输入本金p、利率r和存款年限y,输出y年后的本息总额。提示:y年后的本息总额为平p×(1+r)y

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

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

            Console.WriteLine("本金:");
            double cash = double.Parse(Console.ReadLine());
            Console.WriteLine("利率:");
            double lv = double.Parse(Console.ReadLine());
            Console.WriteLine("存款年数:");
            int year = int.Parse(Console.ReadLine()); 
            double sum = cash*Math.Pow((1+lv),year); 
            Console.WriteLine("本息合计:"); 
            Console.WriteLine(sum);
            Console.ReadLine();
            
        }
    }
}


第4章 C#类型转换 
课后作业


简答题
1. 简述隐式转换和显式转换的概念和区别。

答:(1)隐式转换不需要在代码中指定转换类,显式转换则相反,需要指定转换类型。(2)对于表示数值的基本数据类型来说,数值范围小的数据类型转换成数值范围大的数据类型可以进行隐式转换,而反过来则必须进行显示转换。 (3)对于类类型来说,子类转换成父类可以进行隐式转换,而反过来则必须进行显式转换 ;如果两个类之间没有继承关系,或者是类和类型之间转换 ,则不能进行隐式转换或显式转换,此时必须在被转换的类中定义一个隐式转换方法或显式转换方法。 

2. 举例说明隐式转换和显式转换的使用和注意事项。

例子一:

    long longType = 100;
    int intType  = longType;       // 错误,需要使用显式强制转换
    int intType = (int)longType; //正确,使用了显式强制转换

    例子二:

    string stringType = "12345"; 
    int intType = (int)stringType;                //错误,string 类型不能直接转换为 int  类型 
    int intType = Int32.Parse(stringType);   //正确

    例子三:

    long longType = 100;
    string stringType = "12345";
    object objectType = "54321";
    int intType = Convert.ToInt32(longType);       //正确
    int intType = Convert.ToInt32(stringType);     //正确
    int intType = Convert.ToInt32(objectType);    //正确

    例子四[1]:

    double doubleType = Int32.MaxValue + 1.011; 
    int intType = (int)doubleType;                                //虽然运行正确,但是得出错误结果
    int intType = Convert.ToInt32(doubleType)            //抛出 OverflowException 异常
3. 简述装箱和拆箱的概念和区别?

答: 装箱:把值类型转换为引用类型。拆箱:把引用类型转换为值类型。

4. 举例说明当执行装箱和拆箱操作时,系统内部的具体实现过程。

装箱就是隐式的将一个值型转换为引用型对象。比如:
int i=0;
Syste.Object obj=i;
这个过程就是装箱!就是将i装箱!
拆箱就是将一个引用型对象转换成任意值型!比如:
int i=0;
System.Object obj=i;
int j=(int)obj;
这个过程前2句是将i装箱,后一句是将obj拆箱!
再写个代码,看看进行了几次装拆箱!
int i=0;
System.Object obj=i;
Console.WriteLine(i+","+(int)obj);
其中共发生了3次装箱和一次拆箱!^_^,看出来了吧?!
第一次是将i装箱,第2次是输出的时候将i转换成string类型,而string类型为引用类型,即又是装箱,第三次装箱就是(int)obj的转换成string类型,装箱!
拆箱就是(int)obj,将obj拆箱!!


5. 举例说明装箱和拆箱的应用以及注意事项

1. C#中的装箱
C#中的装箱就是把一个值类型隐式地转换为object类型,转换过程中采用的是值的拷贝而不是引用,这从下面的例子可以看出:

using System;
public class Test
{
  public static void Main(String[] args)
  {
    int i = 10;
    //将值类型的i装箱
    //需要注意的是:这里的装箱采用的是值的拷贝
    object obj = i;
    //检验是否装箱成功了
    if(obj is int)
    {
     Console.WriteLine("数据已经装箱!");
    }
    //我们在这里更改i的值
    i = 33;
    Console.WriteLine("int i现在的值是:{0}",i);
    Console.WriteLine("int i装箱的值是:{0}",obj);
  }
}

2. C#中的拆箱
C#中的拆箱就是把一个对象类型显式地转换为值类型,注意:要转换的类型必须和值类型是兼容的。举例如下:

int i = 10;
object obj = i;
int j = (int)obj;
6. 简述枚举类型的概念和应用。

   概念:(1)枚举是C#编程语言的一种类型,跟类、结构、密封类、分布类、委托、事件、抽象都是同一级别的类型。
枚举用enum关健字来定义。(2)枚举可以一次性定义一组常量和常量的使用方式一样,枚举通常用在分支语句中,这种做法可以增加程序的可读性。(3)枚举中的每一个元素实际上都是“符号/值”类型的。如果不给枚举中的成员附值,那么他们的值会从0开始。 (4)枚举是值数据类型,枚举包含自己的值,且不能继承或传递继承。

    应用:1、提取枚举成员的数字部分
               2、提取枚举成员的名称
               3、遍历所有枚举成员
               4、将字符串转换成枚举对象。。。等

7. 举例说明枚举类型声明方式、成员特性、预设值、成员赋值方式。

声明方式:

 enum 枚举名{ 枚举值表 };
enum weekday{ sun,mou,tue,wed,thu,fri,sat };
成员特性:

枚举成员是该枚举类型的命名常数。
任意两个枚举成员不能具有相同的名称。
每个枚举成员均具有相关联的常数值。此值的类型就是枚举的基础类型。
每个枚举成员的常数值必须在该枚举的基础类型的范围之内。 

public enum TimeofDay:uint
        {
            Morning=-1,
            Afternoon=-2,
            Evening=3
         }
  Morning=-1, Afternoon=-2,这两行会报错, 常数值 -1 -2 不在基础整型 uint 的范围。

预设值:

在枚举类型中声明的第一个枚举成员它的默值为零。以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错误。

public enum TimeofDay:uint
        {
            Morning,
            Afternoon,
            Evening
         }

Morning的值0,  Afternoon的值1, Evening的值为2。

成员赋值方式:

     允许多个枚举成员有相同的值.
    没有显示赋值的枚举成员的值,总是前一个枚举成员的值+1.

public enum Number
        {
            a = 1,
            b,
            c = 1,
            d
         }
     b 的值为 2, d 的值也为 2。

8.举例说明的枚举类型的应用以及与值类型之间的相互转换。

【枚举类型不能与基础类型进行隐式转换,可以进行显式转换】

(举例中的代码以以下代码为前提)

public enum TimeofDay:uint
        {
            Morning,
            Afternoon,
            Evening
         }

(1)可以将整数转换为枚举类型

int aa=1;
Console.WriteLine((TimeOfDay)aa);

输出值:Afternoon

(2)也可以实现枚举类型转换为整数

TimeOfDay bb = TimeOfDay.Evening;
Console.WriteLine((int)bb);

输出值:2

(3)直接输出枚举项

Console.WriteLine(TimeOfDay.Afternoon);

输出值:Afternoon

(4)如果需要将一个字符串转换为枚举值,我们将enum类的parse方法:

TimeOfDay time2 = (TimeOfDay)Enum.Parse(typeof(TimeOfDay),“morning", true);
Console.WriteLine(time2);

输出值:Morning

(5)一个整数类型与枚举类型转换的例子

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        public enum TimeOfDay
        {
            Morning,
            Afternoon,
            Evening
        }

        static void Main(string[] args)
        {
            Console.WriteLine("请输入一天的几个选项,其中0:Morning,1:Afternoon,2:Evening:");
            string aa = Console.ReadLine();
            //将输入的数字转换为枚举类型
            WriteGreeting((TimeOfDay)Convert.ToInt32(aa));
        }
        static void WriteGreeting(TimeOfDay timeOfDay)
        {
            switch (timeOfDay)
            {
                case TimeOfDay.Morning:
                    Console.WriteLine("Good morning!");
                    Console.ReadLine();
                    break;
                case TimeOfDay.Afternoon:
                    Console.WriteLine("Good afternoon!");
                    Console.ReadLine();
                    break;
                case TimeOfDay.Evening:
                    Console.WriteLine("Goodevening!");
                    Console.ReadLine();
                    break;
                default:
                    Console.WriteLine("Hello!");
                    Console.ReadLine();
                    break;
            }
        }
    }
}



05 流程控制 01

上机练习题


1、从键盘输入一个字符,程序检查输入字符是否是小写字符、大写字符或数字。在任何一种情况下,都会显示适当的消息

 class Program
    {
        static void Main(string[] args)
        {//判断输出
            Console.Write("请输入一个字符:  ");
            char s = Convert.ToChar(Console.ReadLine());
            if ((s >= 'a') && (s <= 'z'))
                Console.WriteLine("您输入的是小写的字母{0}", s);
            else if (s >= '1' && s < '9')
                Console.WriteLine("您输入的是数字{0}", s);
            else if (s >= 'A' && s <= 'Z')
                Console.WriteLine("您输入的是大写的字母{0}",s);
            Console.ReadLine();
            
        }
    }


2、设计一个简单的猜数游戏:随机产生一个1-100的数,要求输入的数与随机产生的数进行比较,如果输入的数大于随机产生的数,提示:“对不起,您猜大了!”;如果输入的数小于随机产生的数,提示:“对不起,您猜小了!”;如果输入的数等于随机产生的数,提示:“恭喜您,您猜对了!”程序结束。


提示:随机产生一个1-100的整数的方法
Random rnd = new Random();//创建随机数种子
int rndNumber = rnd.Next(1, 100);//返回一个指定范围内的整数

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 随机数猜大猜小
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            int num = rnd.Next(1, 100);
            do
            {
                Console.Write("请输入您猜想的数字:");
                int gasNum = Convert.ToInt16(Console.ReadLine());


                if (gasNum > num)
                    Console.WriteLine("很遗憾,您猜大了");
                else if (gasNum < num)
                    Console.WriteLine("很遗憾,您猜小了");
                else
                {
                    Console.WriteLine("\r\n恭喜你,猜对了!");
                    break;
                }
            } while (1 == 1);

            Console.ReadLine();
        }

      
    }
}



3、从键盘输入一个数字作为行数,使用for循环语句,在命令窗口中绘制如图所示的“金字塔”。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace for循环金字塔
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入你要打印的行数:");
            int i = int.Parse(Console.ReadLine());
            for (int j = 1; j <= i; j++)
            {//行数的循环 
                char c = 'a';
                for (int k = i - j + 1; k > 0; k--)
                {//空格的循环 
                    Console.Write(" ");
                }
                for (int m = 0; m < 2 * j - 1; m++)
                {//星号的循环

                    Console.Write(c);
                }
                c++;
                Console.WriteLine();

            } 
            Console.ReadLine();

        }

       
    }
}

4、创建一个控制台程序,计算1!+2!+3!+.....+n!的值并输出,n从键盘输入。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 计算1__2__3__._._._._._n_的值并输出_n从键盘输入
{
    class Program
    {
        static void Main(string[] args)
        {
            int sum = 0, jc = 1;
            Console.WriteLine("请输入数字n:");
            int n = Convert.ToInt32(Console.ReadLine());
           
                for (int i = 1; i <= n; i++)
                {
                    jc *= i;
                    sum += jc;
                }
            

            Console.WriteLine("\n结果为:{0}",sum);
            Console.ReadLine();
        }
    }
}


5、创建一个控制台程序,从键盘输入一个作为月份的数字,使用switch语句,将月份所在的季节输出到控制台。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 输入月份输出季节
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入月份:");
            int mm = Convert.ToInt32(Console.ReadLine());
            switch (mm)
            {
                
                case 3:
                case 4: 
                case 5: Console.WriteLine("\n\n现在是春季"); break;
                case 6: 
                case 7: 
                case 8: Console.WriteLine("\n\n现在是夏季"); break;
                case 9: 
                case 10: 
                case 11: Console.WriteLine("\n\n现在是秋季"); break;
                case 12:
                case 1: 
                case 2: Console.WriteLine("\n\n现在是冬季"); break;
                default: Console.WriteLine("\n\n输入的值有误!"); break;
                
            }

            Console.ReadLine();

        }
    }
}


第5章 流程控制 02
课后作业
简答题
1. 简述流程控制的概念和作用。

概念:对于程式执行的流程顺序以及因应不同状况而选取不同的流程, 即为流程控制 。

作用:于复杂功能可以使用流程控制来更改执行的流程,达成预期的执行效果。

2. 简述流程控制的种类以及区别。

种类:(1)条件控制(2)循环控制(3)跳转控制语句 

区别:条件控制是一个选择题,可能为单一选择或多选一,依照条件判断的结果,可以决定执行哪一个区块的程序码;循环控制是执行区块的程序码,拥有结束条件,可以结束循环的执行;跳转语句主要用于无条件地转移控制,它会将控制转到某个位置,这个位置就称为跳转语句的目标。

3. 简述程序区块的概念。

答:程序区块是一种最简单的结构叙述,它的目的只是将零到多行的程序代码合成一个群组。我们可以将整个程序区块视为一行程序,以结构化程序设计来说,程序区块是最简单的模组

4. 举例说明条件语句的种类以及区别。

种类:(1)if单一选择条件语句(2)if/else二选一条件语句(3)if/else/ if多选一条件语句

区别:if条件语句是一种是否执行的单选题,只是决定是否执行程序区块内的代码。if/else二选一条件语句拥有不同情况的两个程序区块,且只能二选一。if/else/if多选一条件语句是if/else语句的扩充,为重复使用if/else条件,建立多选一条件语句。

5. 请说明条件语句的使用注意事项。

答:(1)if后面括号中的条件判定式只允许是布尔表达式,即条件判断结果要么是true要么是false (2)如果程序区中只有一条语句,则{}可省略

6. 举例说明布尔表达式的概念和使用方式。

答:布尔表达式(Boolean expression)是一段代码声明,它最终只有true(真)和false(假)两个取值。最简单的布尔表达式是等式(equality),这种布尔表达式用来测试一个值是否与另一个值相同。

使用方式:(1)一是在某些控制语句中作为实现控制转移的条件;(2)另一个则是用于计算逻辑值本身。

7. 举例说明switch分支语句的使用方式。

switch分支语句是C#另一种多选一条件语句它是依照符合的条件执行不同的程序区块代码

switch (int / char / string表达式)
{
    case 常量表达式1:
             语句1;
             break;  //必须有
    case 常量表达式2:
             语句2;
             break;  //必须有
    ……
    default:
             语句n;
             break;  //必须有
}
string str;

char grade =(Char)Console.Read();
grade = Char.ToUpper(grade);

switch (grade)
{
       case 'A':
            str = "超過80分";
            break;
       case 'B':
            str = "70~79分";
            break;
       case 'C':
            str = "60~69分";
            break;
       case ‘D':
            str = "60~69分";
            break;
       default:
            str = “请输入A~D";
            break;
}

Console.WriteLine(str);
8. 举例说明说明for语句和foreach语句的区别和用途。

答:C#语言的for循环又称为“计数循环可以重复固定次数的程序区块。for循环中预设有一个计数器,计数器每次增加或减少一个值,直到for循环的结束条件成立为止。foreach循环和for循环十分相似,只不过foreach循环是针对集合或数组的。它可以显示集合或数组的所有元素。特别适合在不知道有多少元素的集合或数组。

举例如下:

 int total = 0;

for (int i = 1; i <= 15; i++)
{
       Console.Write(i + " ");
       total += i;
 }

 Console.WriteLine();
 Console.WriteLine();
 Console.WriteLine("从1加到15的和为{0}",total);

int [] scores = { 78 , 60 , 85 , 79 , 94 , 100 };

foreach (int score in scores)
{
       Console.WriteLine(score);
}
9. 举例说明while和do/while循环语句的循环流程。

while循环流程:

int i = 16; 
int total = 0;

while (i <= 15)
{
     Console.Write(i + " ");
     total += i;
     i += 1;
}

Console.WriteLine();
Console.WriteLine();
Console.WriteLine("从1加到15的和为{0}",total);
do/while循环流程:

int i = 16; 
int total = 0;

do 
{
    Console.Write(i + " ");
    total += i;
    i += 1;
} while (i <= 15);

Console.WriteLine();
Console.WriteLine();
Console.WriteLine("从1加到15的和为{0}",total);
10. 举例说明嵌套循环的使用。

嵌套循环就是循环内部还有循环,如果巢状一样层层排列

int Count1 = 0;
int Count2 = 0;

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

   for (int j = 1; j <= 9; j++)
   {
      Count2++;
   }
}

Console.WriteLine("外部for语句循环了{0}次",Count1);
Console.WriteLine("内部for语句循环了{0}次", Count2);

输出结果为:外部for语句循环了9次,内部for语句循环了81次。

11. 举例说明跳转语句的种类及作用。

种类:Break、Continue、Goto、Return。

作用:跳转语句用于改变程序的执行流程,转移到指定之处。

分别作用:

(1)break关键字用于当循环如果尚未到达结束条件,强迫跳出循环

(2)continue关键字可以马上继续下一次循环的执行,而不执行程序区块中continue关键字后面的代码

(3)return语句用于退出类的方法,把控制返回方法的调用者;如果方法有返回类型,return语句必须返回这个类型的值;如果方法没有返回类型,应使用没有表达式的return语句

(4)goto语句可以直接跳转到程序中用标签指定的另一行(标签是一个标识符,后跟一个冒号);goto语句有两个限制。不能跳转到像for循环这样的代码块中,也不能跳出类的范围。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值