C#编程习题

更新时间:2023-10-21 18:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C#编程习题

以下有18道习题(当然,这并非全部的习题,最后应该会多增加2题,共20题),对于这20道题目,要求大家每道题目都能够做到看到题目,不看其他参考材料的情况下,能够实现出来。期末考将会从中抽取三道题目(分数占60分),而期末考其实是要出三份试卷的。所以总的需要从这份里面抽9道题目。也就是这20题中有9题是肯定会出现在试卷中的。 对于本科目最后成绩的说明:

总评成绩=平时成绩*50%+期末成绩*50% 平时成绩与期末成绩都是100分制的。

平时成绩=出勤课堂纪律情况*40%+作业完成情况*60%

对于作业完成情况的说明:

对于之前的作业,不管是否有提交,我都不再追究。我只要求从发这份习题给你们开始,每周要按顺序完成如下的5道题目,把每道题目都自己理解完实现出来之后再交上来。 我知道要把这20题都弄懂,不是一件容易的事情,但不是不可能。

第一, 我会提供一些材料,大家可以先把这些材料看一遍,大体有个印象,当遇到问题的时候,也要学会查找对应材料来解决问题。

第二, 下面的每道题目,我都将会给出参考答案。当然是以截图的方式。也会在关键代码

附上相应的注释。 还有一句话,希望能与大家共勉。“学习,从来都是一个自觉的过程。遇上一个好老师,会让你少走很多弯路,但不是替代你学习。遇上一个不够好的老师,或许会多走些弯路,但不代表你就学不好。事在人为,只要自己有心,外界条件再差也是可以攻克的;若是无心,外界条件再好,也会成为你的借口。” 最后,再回到我们这门课的现实。能否取得好成绩,能否不挂科,取决于你,而不取决于我。规则我都已经说清楚了,最后结果如何我说了不算,你的实际行动和实际成绩说了算。

1、 编写一个函数,函数名为Max,该函数用来获取给定三个整数的最大值。在Main函数中

实现从屏幕中读取三个整数,然后输出这三个整数中最大的那个数的功能。

namespace _1 {

class Program {

static void Main(string[] args) {

Console.WriteLine(\请输入3个数:按回车结束\); int a, b, c, temp;

a = int.Parse(Console.ReadLine());//定义一个输入值a; b = int.Parse(Console.ReadLine());//定义一个输入值b; c = int.Parse(Console.ReadLine());//定义一个输入值c; temp = Max(a, b, c);

Console.WriteLine(\三个数中最大值为{3}\, a, b, c, temp); }

//074 陈振华

static int Max(int a, int b, int c) {

int temp = a;//把a的值付给temp; if (temp < b) {

temp = b; }

if (temp < c) {

temp = c; }

return temp; } } }

2、 编写一个函数,函数名为PrintTriangle,用来打印n阶的正三角形。并在Main函数中

实现从屏幕中输入n的值,然后根据给定的n的值打印出相应的正三角形。当n=7时, * *** ***** ******* ********* *********** ************* 当n=5时, * *** ***** ******* *********

代码:

namespace _1 {

class Program {

static void Main(string[] args) {

int a;

Console.WriteLine(\请输入你想要打印出的三角形的行数\); a = int.Parse(Console.ReadLine()); PrintTriangle(a);

}

//074 陈振华

static void PrintTriangle(int a) {

for (int i = 1; i <=a; i++) {

for (int j = i; j

Console.Write(\); }

for (int x = i * 2 - 1; x > 0; x--) {

Console.Write(\); }

Console.WriteLine(\); } } } }

3、 输入某年某月某日,判断这一天是这一年的第几天?。要求:需写一个函数,给定年月

日,求的该天处于该年的第几天。然后在Main函数中测试。

代码:

namespace _1 {

class Program {

static void Main(string[] args) {

int year, month, day;

Console.WriteLine(\请输入年份\);

year = int.Parse(Console.ReadLine()); Console.WriteLine(\请输入月份\);

month = int.Parse(Console.ReadLine()); Console.WriteLine(\请输入日期\); day = int.Parse(Console.ReadLine());

Console.WriteLine(\年{1}月{2}日处于该年的第{3}天\, year, month, day, Cs(year, month, day)); }

static int Cs(int year, int month, int day) {

int sum = 0;

for (int i = 1; i < month; i++) {

if (i == 1 || i == 3 || i == 5 || i == 7 || i == 8 || i == 10 || i == 12) {

sum += 31; }

if (i == 4 || i == 6 || i == 9 || i == 11) {

sum += 30; }

if (i == 2) {

sum += 29; } }

if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month > 2) sum = sum - 1; return sum; } } }

4、 给定一个大于三的奇数n,打印出相应的三角形。

如n=7时的形状如下: * *** ***** ******* ***** *** *

代码;

class Program {

static void Main(string[] args) {

int a;

Console.WriteLine(\请输入你想要打印出的三角形的行数,该数必须是大于三的奇数\); a = int.Parse(Console.ReadLine()); if (a % 2 == 1 && a >= 3) {

PrintTriangle(a); } else

Console.WriteLine(\该数不是大于三的奇数\);

}

///

///074 陈振华 ///

///

static void PrintTriangle(int a) {

for (int i = 1; i <= a / 2 + 1; i++) {

Console.Write(\);

for (int x = 1; x < i; x++) {

Console.Write(\); }

Console.WriteLine(\); }

for (int i = a / 2; i > 0; i--) {

Console.Write(\);

for (int x = i - 1; x > 0; x--) {

Console.Write(\); }

Console.WriteLine(\); }

} } }

要求:编写一个函数,给定一个n,打印出相应的三角形,若n不是奇数,则提示说n的值必须为奇数。

5、 给一个正整数,要求:

a) 写一个函数求出它是几位数。 b) 写一个函数,分别输出每一位数字。

c) 写一个函数,按逆序输出各位数字,例如原数位123,则输出321. 最后在main函数中测试结果

代码:

namespace ConsoleApplication1 {

class Program {

static void Main(string[] args) {

int a, r;

Console.WriteLine(\请输入一个正整数\); a = int.Parse(Console.ReadLine()); r = C105(a);

Console.WriteLine(\该数是{0}位数\, r); int[] A = Db(a); Shuzhu(A); Cs(A); }

static int C105(int a) {

int i = 1; while (a > 10) {

a = a / 10; i++; }

return i;

比如m=100,n=8,则返回001100100

代码:

namespace _1 {

class Program {

static void Main(string[] args) {

Console.WriteLine(\请输入一个正整数,按回车键结束\); int a = int.Parse(Console.ReadLine());

Console.WriteLine(\请输入你想返回的二进制的位数\); int b = int.Parse(Console.ReadLine()); string result = Zhuanhua(a, b);

Console.WriteLine(\输入的数{0}被转化为二进制后{1}位的结果为{2}\, a,b,result); }

static string Zhuanhua(int a,int b) {

StringBuilder result=new StringBuilder(); int count = 0; while (a > 0) {

result.Insert(0,a%2); a = a / 2; count++; }

for (int i = count; i <= b; i++) {

result.Insert(0, 0); }

return result.ToString();

} }

}

14、写一个函数,实现对给定一个整型数组中的每个元素进行逆序重新存放。例如,原来顺

序为1,3,6,5,7,。要求改为7,5,6,3,1。并在Main函数中测试。

15、 代码:

namespace _074 {

class Program {

static void Main(string[] args) {

Console.WriteLine(\请输入一个整形数组中间用逗号隔开如\\\); string a = Console.ReadLine(); string[] tempData = a.Split(','); int[] data = new int[tempData.Length]; for (int i = 0; i < tempData.Length; i++)

{

data[i] = int.Parse(tempData[i]); }

data = Shuzhu(data);

Console.WriteLine(\逆序输出后的数组如下\); Daying(data);

}

static int[] Shuzhu(int[] data) {

int temp;

for (int i = 0; i < data.Length/2; i++) {

temp = data[i];

data[i] = data[data.Length - i - 1]; data[data.Length - i - 1] = temp; }

return data; }

static void Daying(int[] data) {

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

Console.Write(\, data[i]); } } } }

16、写一个函数,给定一个数n,要求返回n行的杨辉三角形。并在Main函数中测试。

17、 代码:

namespace _074

{

class Program {

static void Main(string[] args) {

Console.WriteLine(\请输入要打印的杨辉三角的行数,按回车结束!\); int n = int.Parse(Console.ReadLine());

Console.WriteLine(\行的杨辉三角如下:\, n); PrintYangaHuiTriangle(n); }

static void PrintYangaHuiTriangle(int n) {

int[,] data = new int[n, n]; for (int i = 1; i <= n; i++) {

data[i - 1, 0] = 1; data[i - 1, i - 1] = 1; }

for (int i = 3; i <= n; i++) {

for (int j = 2; j < i; j++) {

data[i - 1, j - 1] = data[i - 2, j - 2] + data[i - 2, j - 1]; } }

for (int i = 1; i <= n; i++) {

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

Console.Write(\, data[i - 1, j - 1]); }

Console.Write(\); } } } }

18、编写一个函数,函数名为ReverseInt,实现逆序输出给定的一个整数。比如,整数为123,

则输出321。并在Main函数中调用测试。

19、 代码:

namespace _074 {

class Program {

static void Main(string[] args) {

Console.WriteLine(\请输入一个整数,并按回车结束!\); int n = int.Parse(Console.ReadLine());

Console.WriteLine(\逆序之后的整数为{1}\, n, ReverseInt(n)); }

//074 陈振华

static int ReverseInt(int n) {

StringBuilder result = new StringBuilder(); while (n > 0) {

result.Append(n % 10); n = n / 10; }

return int.Parse(result.ToString()); } } }

20、简单计算器

a) 用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达

式:

操作数1 运算符op 操作数2

计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。

static void Main(string[] args) {

Console.WriteLine(\请输入要计算的表达式,格式为\\\操作数1 操作符 操作数2,如\\\);

string input = Console.ReadLine(); string[]temp=input.Split(' ');

double result = Compute(double.Parse(temp[0]), double.Parse(temp[2]), temp[1][0]); Console.WriteLine(\, input, result); }

static double Compute(double numOne, double numTwo, char oper) {

double result = 0; switch (oper) {

case'+':

result = numOne + numTwo; break; case'-':

result = numOne - numTwo; break; case'*':

result = numOne * numTwo; break; case'/':

result = numOne / numTwo; break; }

return result; } } }

b) 如果要求连续做多次算术运算,每次运算结束后,程序都给出提示:

Do you want to continue(Y/N or y/n)?

用户输入Y或y时,程序继续进行其他算术运算;否则程序退出运行状态。那么,程序如何修改?

代码:

static void Main(string[] args) {

string goOn = \; while (goOn == \) {

Console.WriteLine(\请输入要计算的表达式,格式为\\\操作数1 操作符 操作数2,如\\\);

string input = Console.ReadLine(); string[] temp = input.Split(' ');

double result = Compute(double.Parse(temp[0]), double.Parse(temp[2]), temp[1][0]);

Console.WriteLine(\, input, result);

Console.WriteLine(\要继续吗?继续按(N/Y),其他键退出\); goOn = Console.ReadLine().ToUpper();

}

21、猜数游戏

在这个实验中,我们将尝试编写一个猜数游戏程序,这个程序看上去有些难度,但是如果按下列要求循序渐进地编程实现,会发现其实这个程序是很容易实现的。那么,现在就开始吧,先编写第1个程序,然后试着在第1个程序的基础上编写第2个程序,??

a) 程序1 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则计

算机给出提示“Right!”,否则提示“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low),然后结束游戏。要求每次运行程序时机器所“想”的数不能都一样。

b) 程序2编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结

束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平;否则计算机给出提示,告诉人所猜的数是太大还是太小,直到人猜对为止。

c) 程序3 编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,则结

束游戏,并在屏幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水

平;否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果猜了10次仍未猜中的话,结束游戏。

d) 程序4编程先由计算机“想”一个1~100之间的数请人猜,如果人猜对了,在屏

幕上输出人猜了多少次才猜对此数,以此来反映猜数者“猜”的水平,则结束游戏;

否则计算机给出提示,告诉人所猜的数是太大还是太小,最多可以猜10次,如果

}

///

/// 作为跑车,其马力所必须具备的最低要求 ///

private static int horsePowerRequirement = 250;

public static int HorsePowerRequirement {

get { return SportsCar.horsePowerRequirement; } set { SportsCar.horsePowerRequirement = value; } }

///

/// 判断该辆车是否是跑车 ///

/// public bool SportsCheck() {

return maxSpeed >= maxSpeedRequirement && horsePower >= horsePowerRequirement; } } }

24、电子设备习题

a) 写四个类,分别为ElectronicDevice, Radio, Computer, and MobilePhone.让

ElectronicDevice成为另外三个类的基类,并包括如下三个成员。

1.一个私有的实例变量brandName(string类型) 2.一个公有的属性BrandName用来访问brandName 3.一个私有的变量isOn(bool类型)

还要包括两个方法SwitchOn(该方法必须打印出\并且将isOn设置为true)以及SwitchOff(该方法必须打印出\并且将isOn设置为false) 编写合适的测试代码用来测试基类以及子类所包括的成员和方法。

b) 在三个子类中分别重写SwitchOn和SwitchOff方法。在每个方法中除了实现基类

的功能外,还需要多输出brandName的值。如Radio类 的SwitchOn方法,应该输出以下内容: On Radio

并且将isOn设置为True.

c) 给ElectronicDevice添上两个构造函数

一个默认构造设置brandName为\,isOn设置为false.

一个包含两个参数的构造函数,分别用来初始化brandName和isOn的值

d) 给Radio类添加应该double类型的currentFrequency,表示当前频率

给Computer添加一个int的internalMemory,表示内存大小

给MobilePhone添加一个uint的lastNumberDialed,表示最后一个拨的号码。 给Radio,Computer,MobilePhone类分别添加如下两个构造函数

1.一个默认构造函数,除了初始化基类所拥有的属性外,还要给子类所特有的属性设定默认值。

2.一个带两个参数的构造函数,一个参数为brandName,另一个参数为各个基类的特殊属性(currentFrequency,internalMemory,lastNumberDialed)

e) 写一个LaptopComputer类继承Computer类。给该类定义一个uint类型的实例变量

maxBatteriLife,用来表示电池使用寿命

为该类写一个默认构造函数,初始化各个字段的默认值。 写一个带参数的构造函数,可以初始化该类的各个字段的值。

猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。

22、机器人习题

a) 写一个类Robot,该类包含三个实例变量:name(string类型),age(ushort类

型),isOn(bool类型)。初始化该三个变量的值为”unknown”,0和false。(强调:不能通过构造函数来初始化)。给这三个实例变量分别添加获取值和设置值的方法。在Main方法中测试该Robot类。

b) 为允许该Robot类的使用者在创建机器人对象的时候指定该对象的name,age,isOn

三个实例变量的值,请添加一个构造函数包括这三个参数,并添加一个默认构造函

数。

c) 添加一个静态变量robotsCreated用来记录机器人创建的个数。更新构造函数里的

代码,以使该robotsCreated变量是实时更新的。

namespace _074 {

class Program {

static void Main(string[] args) {

Robot r = new Robot(); r.Name = \一\; r.Age = 1; r.IsOn = true;

Console.WriteLine(\机器人的名字为{0},年龄为{1},开启状态为{2}\, r.Name, r.Age, r.IsOn);

Console.WriteLine(\现在机器人有{0}个\, Robot.RobotsCreated); Robot r2 = new Robot(\二\, 2, false);

Console.WriteLine(\机器人的名字为{0},年龄为{1},开启状态为{2}\, r2.Name, r2.Age, r2.IsOn);

Console.WriteLine(\现在机器人有{0}个\, Robot.RobotsCreated); } }

//074 陈振华 class Robot {

string name = \;

public string Name {

get { return name; } set { name = value; } }

ushort age = 0;

public ushort Age {

get { return age; } set { age = value; } }

bool isOn = false;

public bool IsOn {

get { return isOn; } set { isOn = value; } }

public Robot(string name, ushort age, bool IsOn) {

this.name = name; this.age = age; this.isOn = isOn; robotsCreated++; }

public Robot() {

robotsCreated++; }

private static int robotsCreated = 0;

public static int RobotsCreated {

get { return Robot.robotsCreated; } } } }

d) 为默认构造函数添加如下业务逻辑:如果robotsCreated比5小,则设置isOn为true,

否则设置isOn为false.

static void Main(string[] args) {

Robot r = new Robot(); r.Name = \一\ r.Age = 1; r.IsOn = true;

Console.WriteLine(\机器人的名字为{0},年龄为{1},开启状态为{2}\r.IsOn);

Console.WriteLine(\现在机器人有{0}个\ Robot r2 = new Robot(\二\

Console.WriteLine(\机器人的名字为{0},年龄为{1},开启状态为{2}\r2.Name, r2.Age, r2.IsOn);

Console.WriteLine(\现在机器人有{0}个\ }

}

//074陈振华

class Robot

{

string name = \

public string Name {

get { return name; } set { name = value; } }

ushort age = 0;

public ushort Age {

get { return age; } set { age = value; } }

bool isOn = false;

public bool IsOn {

get { return isOn; }

set { isOn = value; } }

public Robot(string name, ushort age, bool IsOn) {

this.name = name; this.age = age; this.isOn = isOn; robotsCreated++; }

public Robot() {

if (robotsCreated < 5) {

this.isOn = true; }

else {

this.isOn = false; }

robotsCreated++;

}

private static int robotsCreated = 0;

public static int RobotsCreated {

get { return Robot.robotsCreated; } } } }

e) 机器人应该能够进行一些简单的计算,比如,它能否获取三个整数的平均值。这个

功能通过类似下面的方法定义来实现:

publicint Average (int x, int y, int z)

但是,机器人并不自己实现这个方法。而是调用一个静态类RobotMath中的一个静态方法Average来实现该功能。

写一个SetLegalDrivers方法,让其能够指定某个SportsCar对象所允许的驾驶员.比如:

sportsCar1.SetLegalDrivers(\ 或者调用

sportsCar1.SetLegalDrivers(\

再写一个DriverCheck方法,当给其指定一个名字,该方法能够验证该名字是不是合法的驾驶员,如果是则返回true,否则返回false. 在另一个类的Main()函数中验证这两个方法。

d) 现在其他类需要知道SportsCar类的最低时速要求和最小马达要求,请你为

SportsCar类添加一个静态方法GetMinimumRequirements,

该方法允许传入两个ref int类型参数,目的是将SprtsCar类的maxSpeedRequirement和horsePowerRequirement两个静态变量传递出去。

e) 添加一个测试类Calculator,该类包含一个静态方法NumberCruncher,在该方法中调用SportsCar的GetMinimumRequirements方法,

将SprtsCar的最低时速要求和最低马达要求打印出来。

f) 为SportsCart类再添加一个方法MostPowerful,该方法用来比较两辆车哪个马力更大,返回马力大的那辆车。

g) 为SportsCar类再添加一个方法MostPowerful,利用函数重载,该方法用来比较三辆

车那辆马力更大,返回最大马力的那辆车。

using System;

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

namespace _074 {

class Program {

static void Main(string[] args) {

SportsCar qq = new SportsCar();//创建一辆QQ车 qq.MaxSpeed = 100;//设置该qq车的最高时速为100 qq.HorsePower = 150;//设置该qq车的马力为150

bool result = qq.SportsCheck();//判断该qq车是不是跑车 if (result == true)//如果该qq车是跑车 {

Console.WriteLine(\车的最高时速为{0},马力为{1},其是跑车\, qq.MaxSpeed, qq.HorsePower); } else {

Console.WriteLine(\车的最高时速为{0},马力为{1},太慢了,这样子还想成为跑车\, qq.MaxSpeed, qq.HorsePower); }

SportsCar audi = new SportsCar();//创建一辆奥迪车 audi.MaxSpeed = 300;//设置该audi车的最高时速为300 audi.HorsePower = 350;//设置该audi车的马力为350 result = audi.SportsCheck();//判断该奥迪车是不是跑车 if (result == true)//如果该audi车是跑车

{

Console.WriteLine(\车的最高时速为{0},马力为{1},其是跑车\, audi.MaxSpeed, audi.HorsePower); } else {

Console.WriteLine(\车的最高时速为{0},马力为{1},太慢了,这样子还想成为跑车\, audi.MaxSpeed, audi.HorsePower); }

audi.SetLegalDrivers(\猪八戒\, \猪九戒\);//设置奥迪车的合法驾驶员为\猪八戒吴星霖\猪九戒\两个人

audi.DisplayDrivers();//打印出该奥迪车的所有合法驾驶员

bool isLegalDriver = audi.DriverCheck(\猪十戒\);//判断猪十戒是不是该辆车的合法驾驶员

if (isLegalDriver) {

Console.WriteLine(\猪十戒是合法驾驶员\); } else {

Console.WriteLine(\猪十戒不是合法驾驶员\); }

isLegalDriver = audi.DriverCheck(\猪八戒\);//判断猪八戒是不是该辆车的合法驾驶员 if (isLegalDriver) {

Console.WriteLine(\猪八戒是合法驾驶员\); } else {

Console.WriteLine(\猪八戒不是合法驾驶员\); }

int maxSpeedRequirement = 0;//定义一个变量,用来保存跑车的最低时速要求 int horsePowerRequirement = 0;//定义一个变量,用来保存跑车的马力要求

//调用SportsCar.GetMinimumRequirements这个方法,将跑车的最低时速要求传递出来给刚刚定义的maxSpeedRequirement,

//把跑车的马力要求传递出来给刚刚定义的horsePowerRequirement变量 SportsCar.GetMinimumRequirements(ref maxSpeedRequirement, ref horsePowerRequirement);

//打印这两个变量,测试结果是否正确

Console.WriteLine(\跑车的最低时速要求跟马力要求分别为{0},{1}\, maxSpeedRequirement, horsePowerRequirement);

} }

class SportsCar {

///

/// 定义一个字符串数组用来存放该辆车的合法驾驶员 ///

private string[] drivers; ///

/// 打印出该辆车的所有合法驾驶员 ///

public void DisplayDrivers() {

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

Console.Write(\, drivers[i]); } }

///

/// 设置该辆车的合法驾驶员 ///

///

public void SetLegalDrivers(params string[] drivers) {

this.drivers = drivers; }

///

/// 判断某个驾驶员是否为合法驾驶员 ///

///

public bool DriverCheck(string driver) {

bool result = false;

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

if (drivers[i].Equals(driver)) {

result = true; break; }

}

return result; }

///

/// 该车的最高时速 /// private int maxSpeed;

public int MaxSpeed {

get { return maxSpeed; } set { maxSpeed = value; } }

///

/// 该车的马力 ///

private int horsePower;

public int HorsePower {

get { return horsePower; } set { horsePower = value; } }

///

/// 作为跑车,其最高时速所必须具备的最低要求 ///

private static int maxSpeedRequirement = 200;

public static int MaxSpeedRequirement {

get { return SportsCar.maxSpeedRequirement; } set { SportsCar.maxSpeedRequirement = value; } }

///

/// 写一个方法,将跑车类的最低时速要求跟马力要求通过两个变量传递出去 ///

///

public static void GetMinimumRequirements(ref int maxSpeed, ref int horsePower) {

maxSpeed = maxSpeedRequirement; horsePower = horsePowerRequirement;

本文来源:https://www.bwwdw.com/article/ffgf.html

Top