c#基础之一
1.声明两个变量:int n1 = 10, n2 = 20;要求将两个变量交换,最后输出n1为20,n2为10。(很多种写法)
int tmp = n1;n1 = n2;n2 = tmp;
n1 = n1 + n2;n2 = n1 - n2;n1 = n1 - n2;
n1 = n1 ^ n2;n2 = n1 ^ n2;n1 = n1 ^ n2;
n2 = n1 + (n1 = n2) * 0;
2.交换两个变量,封装成方法。(值类型和引用类型的区别)
void swap(ref int n1,ref int n2)
{
int tmp = n1;
n1 = n2;
n2 = tmp;
}
3.通过编程计算1+2-3+4-5+6-7+......100的值。
int isum = 0;
//循环1-100的每一个数字
for (int i = 1; i <= 100; i++)
{
if(i == 1 || i % 2 == 0)
{
isum += i;
}
else
{
//奇数
isum += (-i);
}
}
4.请用户输入一个字符串,计算字符串中的字符个数,并输出
string msg = "你好a!中国 123";
//字符串的length属性表示字符串中字符的个数,无论是中文字符还是英文字符,一个字符就是一个字符,不是字节数
console.writeline("字符串的个数是:{0}", msg.length);
5.定义方法来实现:计算两个数的最大值。提示:方法有几个参数?返回值是什么?【思考】:计算任意多个数间的最大值(提示:params)。
private static int getmaxvalue(int n1,int n2)
{
return n1 > n2 ? n1 : n2;
}
private static int getmaxvalue(params int[] arr)
{
int max = arr[0];
for (int i = 1; i < arr.length; i++)
{
if(max < arr[i])
{
max = arr[i];
}
}
return max;
}
6.计算1-100之间的所有整数的和
int isum = 0;
for (int i = 1; i <= 100; i++)
{
isum += i;
}
7.计算1-100之间的所有奇数的和。
int isum = 0;
for (int i = 1; i <= 100; i++)
{
if (i % 2 != 0)
{
isum += i;
}
}
8.定义方法来实现:判断一个给定的整数是否为“质数”。prime number
private static bool isprimenumber(int n)
{
if (n > 1)
{
for (int i = 2; i < n; i++)
{
if(n % i == 0)
{
return false;
}
}
return true;
}
else
{
throw new argumentexception("数字小于1不是质数");
}
}
9.计算1-100之间的所有质数(素数)的和。
int isum = 0;
for (int i = 2; i <= 100; i++)
{
//对于每个数字判断是否是一个质数
if (isprimenumber(i))
{
isum += i;
}
}
10.定义方法来实现:有一个整数数组:{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 },找出其中最大值,并输出。不能调用数组自身的max()方法,自己定义一个方法。
private static int getmaxvaluefromarray(int[] arr)
{
int max = arr[0];
for (int i = 1; i < arr.length; i++)
{
if(max < arr[i])
{
max = arr[i];
}
}
return max;
}
11.定义方法来实现:有一个字符串数组:{ "马龙", "迈克尔乔丹", "雷吉米勒", "蒂姆邓肯", "科比布莱恩特" },请输出字符数最多的字符串。
private static string getlongname(string[] msg)
{
string longname = msg[0];
for (int i = 1; i < msg.length; i++)
{
if(longname.length < msg.length)
{
longname = msg[i];
}
}
return longname;
}
12.定义方法来实现:请计算出一个整型数组的平均值。{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 }。要求:计算结果如果有小数,则显示小数点后两位(四舍五入)。math.round()
private static double getavgfromarray(int[] arr)
{
int isum = 0;
for (int i = 0; i < arr.length; i++)
{
isum += arr[i];
}
return math.round((isum * 1.0) / arr.length,2);
}
13.请通过冒泡排序法对整数数组{ 1, 3, 5, 7, 90, 2, 4, 6, 8, 10 }实现升序排序。
//冒泡排序,这个排序方法无需返回值,因为数组本身就是引用类型,引用类型在方法中修改以后,外面的变量可以获得修改后的值,所以不需要返回值
private static void mysort(int[] arr)
{
for (int i = 0; i < arr.length - 1; i++)
{
for (int j = arr.length - 1; j > i; j--)
{
if(arr[j] < arr[j-1])
{
int tmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = tmp;
}
}
}
}
14.请输入一个十进制数字,计算出对应的二进制数字,以字符串方式输出。如:十进制数字120,输出结果为"1111000"。
private static string getbinarynumber(int num)
{
list<string> list = new list<string>();
while (num >= 2)
{
int shang = num / 2;
int yushu = num % 2;
list.add(yushu.tostring());
num = shang;
}
list.add(num.tostring());
list.reverse();
return string.join("",list.toarray());
}
15.请用户输入一个年份,判断该年份是否为闰年。判断闰年条件:1>能被4整除但不能被100整除2>能被400整除的
private static bool isleapyear(int year)
{
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
return true;
}
else
{
return false;
}
}
16.在控制台输出如下显示的“乘法口诀表”。
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
console.write("{0}*{1}={2}\t",j,i,j*j);
}
console.writeline();
}
17.自己编写一个函数,实现类似.net中trim()函数的功能:去掉字符串两端的空格。
private static string mytrim(string msg)
{
int start = 0;
int end = msg.length - 1;
while(start < msg.length)
{
if(!char.iswhitespace(msg[start]))
{
break;
}
start++;
}
while(end >= start)
{
if(!char.iswhitespace(msg[end]))
{
break;
}
end--;
}
return msg.substring(start,end-start+1);
}
18.随机生成10个1-100之间的不重复的偶数,填充到list<int>集合中。
list<int> list = new list<int>();
random random = new random();
int index = 0;
while(list.count < 10)
{
//随机生成一个1-100之间的数字
int num = random.next(1,101);
if(num % 2 == 0 && !list.contains(num))
{
list.add(num);
}
index++;
}
foreach (int item in list)
{
console.writeline(item);
}
console.writeline("============");
console.writeline(index);
19.有如下字符串:【"患者:“大夫,我咳嗽得很重。” 大夫:“你多大年记?” 患者:“七十五岁。” 大夫:“二十岁咳嗽吗”患者:“不咳嗽。” 大夫:“四十岁时咳嗽吗?” 患者:“也不咳嗽。” 大夫:“那现在不咳嗽,还要等到什么时咳嗽?”"】。需求:①请统计出该字符中“咳嗽”一词的出现次数,以及每次“咳嗽”出现的索引位置。②扩展(*):统计出每个字符的出现次数。
string msg = "患者:“大夫,我咳嗽得很重。” 大夫:“你多大年记?” 患者:“七十五岁。” 大夫:“二十岁咳嗽吗”患者:“不咳嗽。” 大夫:“四十岁时咳嗽吗?” 患者:“也不咳嗽。” 大夫:“那现在不咳嗽,还要等到什么时咳嗽?”";
string word = "咳嗽";
int index = 0;
int count = 1;
//使用indexof(),该方法返回在整个字符串中,指定的字符或字符串第一次出现的索引位置,如果没有找到指定的字符或者字符串则返回-1
while((index = msg.indexof(word,index)) != -1)
{
console.writeline("第{0}次出现【咳嗽】,出现的索引位置是:{1}",count,index);
index = index + word.length;
count++;
}
20.将字符串" hello world,你 好 世界 ! "两端空格去掉,并且将其中的所有其他空格都替换成一个空格,输出结果为:"hello world,你 好 世界 !"。
string msg = " hello world,你 好 世界 ! ";
msg = msg.trim();
string[] result = msg.split(new char[]{' '},stringsplitoptions.removeemptyentries);
string str = string.join(" ",result);
console.writeline(str);
21.请统计出数组:{1,2,3,4,5,6,7,8,9,1,2,3,79,23,45,64,9,3,2,4}中的不重复的数字的个数。【思考】如果题目要求变更为去除重复数字放到一个新数组中,如何实现?
统计不重复的元素的个数
int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 79, 23, 45, 64, 9, 3, 2, 4, 1, 1, 1, 1, 1, 1 };
int count = 0;
for (int i = 0; i < arr.length; i++)
{
bool b = true;
for (int j = 0; j < arr.length; j++)
{
if(arr[i] == arr[j] && i != j)
{
b = false;
break;
}
}
if(b)
{
count++;
}
}
console.writeline("不重复的元素的个数是:{0}",count);
去除重复
int[] arr = { 1, 2, 3, 4, 79, 79, 5, 6, 7, 8, 9, 1, 2, 3, 79, 23, 45, 64, 9, 3, 2, 4, 1, 1, 1, 1, 1, 1, 79, 79 };//1,1,1,1,1,2,2,2,3,4,5,6
array.sort(arr);
list<int> list = new list<int>();
for (int i = 0; i < arr.length - 1; i++)
{
if(arr[i] != arr[i+1])
{
list.add(arr[i]);
}
}
list.add(arr[arr.length-1]);
for (int i = 0; i < list.count; i++)
{
console.writeline(list[i]);
}
22.制作一个控制台小程序。要求:用户可以在控制台录入每个学生的姓名,当用户输入quit(不区分大小写)时,程序停止接受用户的输入,并且显示出用户输入的学生的个数,以及每个学生的姓名。
list<string> list = new list<string>();
string username = string.empty;
int count = 0;
do
{
console.writeline("请输入姓名:");
username = console.readline();
if (username.indexof('王') == 0)
{
count++;
}
list.add(username);
}while(username.tolower() != "quit");
list.removeat(list.count - 1);
console.writeline("共输入了:{0}个学生,每个学生信息是:", list.count);
foreach (string name in list)
{
console.writeline(name);
}
console.writeline("姓王的同学的个数是:{0}", count);
23.将普通日期格式:“2011年6月4日” 转换成汉字日期格式:“二零一一年六月四日”。暂时不考虑10日、13日、23日等“带十”的问题。
private static string convertdate(string date)
{
//不能直接修改字符串,比如date[0]='零',字符串具有不可变性。
//先根据字符串date,生成一个char数组(字符数组)
char[] chs = date.tochararray();
for (int i = 0; i < date.length; i++)
{
switch (chs[i])
{
case '0':
chs[i] = '零';
break;
case '1':
chs[i] = '一';
break;
case '2':
chs[i] = '二';
break;
case '3':
chs[i] = '三';
break;
case '4':
chs[i] = '四';
break;
case '5':
chs[i] = '五';
break;
case '6':
chs[i] = '六';
break;
case '7':
chs[i] = '七';
break;
case '8':
chs[i] = '八';
break;
case '9':
chs[i] = '九';
break;
}
}
//return date;
//把char数组变成string类型
return new string(chs);
}