c#基础练习 下载本文

1.编一个程序,输入一个字符串,用ToCharArray()方法把字符串中的内容拷贝到字符数组中,然后用foreach输出该字符数组。string s;

Console.WriteLine(\请输入一个字符串\); s = Console.ReadLine();

char[] ch = new char[s.Length]; ch = s.ToCharArray(); foreach (char c in ch) {

Console.WriteLine(c); }

2.编一个程序,定义一个字符串变量,输入字符串,然后再输入一个字符,在字符串中查找该字符出现的次数。(k10040307)

string a; char b; int d = 0;

Console.WriteLine(\请输入一个字符串\); a = Console.ReadLine();

Console.WriteLine(\请输入一个字符\); b = char.Parse(Console.ReadLine()); for (int c = 0; c <= a.Length - 1; c++) {

if (a[c] == b) d++; }

Console.WriteLine(\字符{0}在字符串{1}中出现了{2}次\, b, a, d);

3.编一个程序,定义一个字符串变量,输入字符串,判断有没有连续重复字符出现,统计重复字符出现次数。例如,aaabccdfff,其中a重复出现二次,c重复出现一次,f重复出现二次,共计字符重复五次。

string i; int a = 0;

Console.WriteLine(\输入一个字符串\); i = Console.ReadLine();

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

1

if (i[b] == i[b - 1]) a++; }

Console.WriteLine(\, a);

4.编一个程序,利用for语句,打印一个如下形式的一个直角三角形,顶点在屏幕中线上,行数从键盘输入。 * ** *** ****

int i, j, n = 0, m = 40; while (n <= 0) {

Console.WriteLine(\请输入一个正整数:\); n = int.Parse(Console.ReadLine()); }

Console.WriteLine('\\n'); for (i = 1; i <= n; i++) {

Console.Write('\\n');

for (j = 1; j <= m; j++) Console.Write(' '); for (j = 1; j <= i; j++) Console.Write('*'); }

Console.WriteLine();

5 .编一个程序,利用for语句,打印一个如下形式的一个等腰三角形,顶点在屏幕中线上,行数从键盘输入。 * *** ***** *******

int i;

Console.WriteLine(\从键盘上输入一个数\);

2

i = int.Parse(Console.ReadLine()); for (int b = 1; b <= i ; b++) {

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

Console.Write(\); }

for (int c = 1; c <= 2 * b - 1; c++) {

Console.Write (\); }

Console.WriteLine(); }

6.定义一个一维数组,输入任意6个整数,假定为7,4,8,9,1,程序,利用for语句,输出如下方阵的内容: 7 4 8 9 1 5 5 7 4 8 9 1 1 5 7 4 8 9 9 1 5 7 4 8 8 9 1 5 7 4 4 8 9 1 5 7

int[] a ={ 7, 4, 8, 9, 1, }; int temp;

for (int i = 0; i < 6; i++) {

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

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

Console.WriteLine(); temp = a[ ];

for (int j = ; j >0; j--) {

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

a[0] = temp;

for (int k = 0; k < 6; k++) Console.Write(\,a[k]);

3

。编一个}

7. 编一个程序,定义一个n行n列的二维整数数组,赋初值,然后求出对角线上的元素之和。

int n = ; int s=0;

int[,] arr ={ { 1, 2, 3, 4, }, { 11, 12, 13, 14, 1 }, { 21, 22, 23, 24, 2 }, { 31, 32, 33, 34, 3 }, { 41, 42, 43, 44, 4 } }; int i, j;

for (i = 0; i < arr.GetLength(0); i++) {

for (j = 0; j < arr.GetLength(1); j++) {

if (i == j || i + j == n + 1) s = s + arr[i, j]; } }

Console.WriteLine(\对角线上的元素之和{0}\,s);

8.编一个程序,输入一个正整数,判断它是否为素数。如不是,则输出其所有正约数。

Console.WriteLine(\请输入一个正整数:\); uint i, n, flag; bool f = true;

n = uint.Parse(Console.ReadLine()); //uint.TryParse(Console.ReadLine(),out n); for (i = 2; i < n; i++) {

if (n % i == 0) { f = false; break; } }

if (f) Console.WriteLine(\是一个素数。\, n); else {

Console.Write(\不是一个素数。\\n{1}=\, n, n); i = 2;

4

flag = 0; while (i <= n) {

while (n % i == 0) {

n = n / i;

if (flag != 0) Console.Write('*'); flag = 1;

Console.Write(\, i); } i++; } }

9.编一个程序,输入一个代表身份证号码的字符串,判断字符串长度(18)是否正确,还要判断输入的每个字符是否为数字。否则要求重新输入。

string a; bool q = true;

Console.WriteLine(\请输入你的身份证;\); a = Console.ReadLine();

for (int b=0; b <= a.Length - 1; b++) {

if (a[b] >= '0' && a[b] <= '9') {

continue; } else q=false; }

if (a.Length == 18) {

if(q==true)

Console.WriteLine(\输入正确\); else if(q==false)

Console.WriteLine(\输入不合法,请重新输入\); } else

Console.WriteLine(\输入不合法,请重新输入\);

5

10.编一个程序,输入一个正整数n,把它转换为二进制数,并输出。提示:应该利用数组。

int[] a = new int[80]; int i, j, n = 0; while (n <= 0) {

Console.WriteLine(\请输入一个正整数:\); n = int.Parse(Console.ReadLine()); } i = 0;

Console.Write(\正整数{0}转换为二进制数:\, n); while (n > 0) {

a[++i] = n % 2; n = n / 2; }

for (j = i; j > 0; j--) Console.Write(a[j]); Console.WriteLine();

11.所谓“降序数”是指一个自然数的低位数字不大于高位数字的数。例如: 321都认为是降序数,但是623不是降序数。一位数字被认为是降序数。编一个程序,输入一个数,判定它是否为降序数。该程序是循环执行的,当输入的数为0时,则退出程序运行。

int i, j, m, n; bool pos; while (true) { n = -1; while (n <= 0) {

if (n == 0) return;

Console.WriteLine(\请输入一个正整数或者0:\); n = int.Parse(Console.ReadLine()); }

if (n < 10) pos = true; else {

6

m = n; i = 0; pos = true; while (m > 0) {

j = m % 10; m = m / 10; if (i > j) {

pos = false; break; } i = j; } }

if (pos) Console.WriteLine(\是降序数。\, n); else Console.WriteLine(\不是降序数。\, n); }

12.所谓“回文数”是指读一个自然数,从正方向读和反方向读,结果是一样的。例如:646,1 1,891232198都认为是回文数。编一个程序,输入一个正整数,判定它是否为回文数。当输入的数为0时,则退出程序,否则继续循环执行程序。

int s, k; int i, j;

int[] a = new int[20]; bool pos; while (true) { s = -1; while (s < 0) {

Console.Write(\请输入一个正整数或者只按一个数字0:\); s = int.Parse(Console.ReadLine()); if (s == 0) return; } k = s; pos = true; i = -1; while (k > 0) {

7

i++;

a[i] = k % 10; k = k / 10; }

//注意:数组a的长度为(i+1) for (j = 0; j < (i + 1) / 2; j++) if (a[j] != a[i - j]) {

pos = false; break; }

if (pos) Console.WriteLine(\是回文数。\, s); else Console.WriteLine(\不是回文数。\, s); }

13.编一个程序,定义一个n行n列的二维数组,例如,n=4,输入该数组的全部数据。可以在定义数组时赋于常量值。求二维数组中这样元素的位置:它在行上是最小,在列上也是最小。(注意:它未必是整个数组的最小元素。)

int n = 4;

int[,] a ={ { 2 , 12, 22, 14 }, { 1 , 16, 17, 18 }, { 19, 20, 21, 13 }, { 23, 24, 11, 26 } }; int i, j, k, temp, min; Console.Write(\二维数组:\); for (i = 0; i < n; i++) {

Console.Write(\);

for (j = 0; j < n; j++) Console.Write(\, a[i, j]); }

Console.WriteLine(\行 列 最小值\); for (i = 0; i < n; i++) for (j = 0; j < n; j++) {

temp = a[i, j]; min = temp; /*

for(k=0;k

if(a[i,k]

8

for (k = 0; k < n; k++)

if (a[i, k] < min) min = a[i, k];//在第i行查找最小值 for (k = 0; k < n; k++)

if (a[k, j] < min) min = a[k, j];//在第j列查找最小值

if (temp == min) Console.WriteLine(\, i, j, temp); }

14.给定一个m×n的数值矩阵A,如果矩阵A中存在这样的一个元素A[i][j]满足条件:A[i][j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。编写一个方法计算出m*n的矩阵A的所有马鞍点。

int i, j, k, m = 4, n = , max, min;

int[,] array = new int[,] { { 30, 20, 2 , 40, 4 }, { 80, 19, 70, 90, 11 }, { 24, 14, 42, 91, 96 }, { 32, 17, 82, 72, 38 } };

Console.Write(\行{1}列的数值矩阵为:\); for (i = 0; i < m; i++) {

Console.WriteLine(); for (j = 0; j < n; j++) {

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

for (i = 0; i < m; i++) for (j = 0; j < n; j++) {

max = array[i, j]; min = array[i, j];

for (k = 0; k < n; k++) if (array[i, k] < min) min = array[i, k]; for (k = 0; k < m; k++) if (array[k, j] > max) max = array[k, j]; if (array[i, j] == max && array[i, j] == min) {

Console.WriteLine(\马鞍点是第{0}行,第{1}列的{2}\, i, j, array[i, j]); } }

9

15 .编一个程序,输入一个整数,判定它为几位数。例如,99是2位数,-100是3位数。

int m, n, k = 0;

Console.Write(\请输入一个整数:\); m = int.Parse(Console.ReadLine()); n = Math.Abs(m); while (n != 0) {

n = n / 10; k++; }

Console.WriteLine(\是{1}位数。\, m, k);

16.编一个程序,定义一个字符串数组,输入若干国家名称(所有名称全用大写或者全用小写),设计一个算法按字典顺序将这些国家名称进行排序。

int i, j, n = 10;

string[] SortArray = new string[n]; string temp;

Console.Write(\请输入{0}个字符串:\, n); for (i = 0; i < n; i++) {

SortArray[i] = Console.ReadLine(); }

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

for (j = 0; j < n - i; j++) {

if (String.Compare(SortArray[j], SortArray[j + 1]) > 0) {

temp = SortArray[j];

SortArray[j] = SortArray[j + 1]; SortArray[j + 1] = temp; } } }

Console.WriteLine(\已经排序后的国家名称为:\); for (i = 0; i < n; i++) {

Console.WriteLine(SortArray[i]);

10

}

17. 编一个程序,定义类student和它的成员(学号,姓名,年龄和c_sharp程序设计成绩),用类student生成对象s,分别对对象s的成员赋值,然后输出对象s。

class student {

public string 学号; public string 姓名; public int 年龄;

public int c_sharp程序设计成绩; }

static void Main(string[] args) {

student s;

s = new student(); s.学号 = \; s.姓名 = \刘云飞\; s.年龄 = 21;

s.c_sharp程序设计成绩 = 9 ;

Console.WriteLine(\学生学号:{0}\, s.学号); Console.WriteLine(\学生姓名:{0}\, s.姓名); Console.WriteLine(\学生年龄:{0}\, s.年龄);

Console.WriteLine(\程序设计成绩:{0}\, s.c_sharp程序设计成绩);

18. 编一个程序,定义结构(有姓名,年龄,手机号码三个字段),再定义一个一维数组,把结构作为数组元素类型,存入数据,然后依次输出。

struct Contact {

public string name; public int age;

public string telephone; }

class Program {

static void Main(string[] args) {

11

Contact[] c = new Contact[3];

//c[0]=new Contact();//此三个语句,对于结构类型可以不用 //c[1]=new Contact(); //c[2]=new Contact(); c[0].name=\刘龙\; c[0].age= 4;

c[0].telephone=\; c[1].name=\王鸣\; c[1].age=42;

c[1].telephone=\; c[2].name=\张星\; c[2].age=39;

c[2].telephone=\;

Console.Write(\姓名:{0},\,c[0].name); Console.Write(\年龄:{0},\,c[0].age);

Console.WriteLine(\手机号码:{0}\,c[0].telephone); Console.Write(\姓名:{0},\,c[1].name); Console.Write(\年龄:{0},\,c[1].age);

Console.WriteLine(\手机号码:{0}\,c[1].telephone); Console.Write(\姓名:{0},\,c[2].name); Console.Write(\年龄:{0},\,c[2].age);

Console.WriteLine(\手机号码:{0}\,c[2].telephone);

19.编一个程序,定义类(有姓名,年龄,手机号码三个字段),再定义一个一维数组,使数组元素为类,存入数据,然后依次输出,使用for循环语句进行输入输出操作。

class Contact {

public string name; public int age;

public string telephone; }

class Program {

static void Main(string[] args) {

int i, n = 3;

Contact[] c = new Contact[n];

for (i = 0; i < n; i++) c[i] = new Contact(); for (i = 0; i < n; i++)

12

{

Console.Write(\请输入学生姓名:\); c[i].name = Console.ReadLine(); Console.Write(\请输入学生年龄:\); c[i].age = int.Parse(Console.ReadLine()); Console.Write(\请输入手机号码:\); c[i].telephone = Console.ReadLine(); }

for (i = 0; i < n; i++) {

Console.Write(\姓名:{0},\, c[i].name); Console.Write(\年龄:{0},\, c[i].age);

Console.WriteLine(\手机号码:{0}\, c[i].telephone); }

20.编一个程序,输入三个double类型数据,自定义一个静态方法,把这三个数送给它,返回找出的最大数。

class classname {

public static double compare(double x, double y, double z) {

double temp;

if (x > y) temp = x; else temp = y;

if (z > temp) temp = z; return temp; } }

class Program {

static void Main(string[] args) {

Console.Write(\请输入一个实数:\);

double x = double.Parse(Console.ReadLine()); Console.Write(\请输入一个实数:\);

double y = double.Parse(Console.ReadLine()); Console.Write(\请输入一个实数:\);

double z = double.Parse(Console.ReadLine()); double temp = classname.compare(x, y, z);

Console.WriteLine(\比较后得到的最大数为{0}\, temp);

13

21.编一个程序,利用自定义方法,找出2到100之间的素数。

class primetest {

public bool prime(int x) {

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

if (x % i == 0) return false; }

return true; } }

class Program {

static void Main(string[] args) {

primetest c = new primetest();

Console.WriteLine(\到100中的素数:\); for (int i = 2; i < 100; i++) if (c.prime(i))

Console.Write(\, i);

22. 编一个程序,从键盘上输入三个double类型的数,自定义方法,以从小到大的顺序排序,以引用型参数调用方法,然后返回主方法输出结果。

class compare {

public void swap(ref double x, ref double y, ref double z) {

double temp; if (x > y) {

temp = x; x = y; y = temp; double temp; ;

14

if (y > z) {

temp = x; y = z; z = temp; double temp; ; if (x > y) {

temp = x; x = y; y = temp; } } } }

class Program {

static void Main(string[] args) {

double x, y, z;

compare c = new compare();

Console.Write(\请输入一个实数:\); x = double.Parse(Console.ReadLine()); Console.Write(\请输入一个实数:\); y = double.Parse(Console.ReadLine()); Console.Write(\请输入一个实数:\); z = double.Parse(Console.ReadLine());

Console.WriteLine(\排序前的三个数依次为{0},{1},{2}\, x, y, z); c.swap(ref x, ref y, ref z); //c.swap(ref x,ref z); //c.swap(ref y,ref z);

Console.WriteLine(\排序后的三个数依次为{0},{1},{2}\, x, y, z); }

23.编一个程序,输入a,b,c的值,定义一个静态方法,求出一元二次方程a*x*x+b*x+c=0的二个实数根。计算二个实数根必须使用Math类中的Sqrt()方法,计算指定数的开方。计算二个实数根,可以用公式

(-b+Math.Sqrt(b*b-4*a*c))/(2*a)和(-b-Math.Sqrt(b*b-4*a*c))/(2*a)。

class ClassName {

15

public static void root(double a, double b, double c, ref double root1, ref double root2) {

root1 = (-b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a); root2 = (b + Math.Sqrt(b * b - 4 * a * c)) / (2 * a); } }

class Program {

static void Main(string[] args) {

double a, b, c, root1 = 0, root2 = 0; Console.Write(\请输入一个数:\); a = double.Parse(Console.ReadLine()); Console.Write(\请输入一个数:\); b = double.Parse(Console.ReadLine()); Console.Write(\请输入一个数:\); c = double.Parse(Console.ReadLine()); if (a != 0 && b * b - 4 * a * c >= 0) {

ClassName.root(a, b, c, ref root1, ref root2);

Console.WriteLine(\, root1, root2); }

else Console.WriteLine(\输入的数据有错误\);

24. 编一个程序,定义一个数组,再定义类以及方法,用方法(out参数传递数据)找出这组数据中的最大数和最小数。

class ClassName {

public void find(out int max, out int min, params int[] array) {

int n = array.Length, i = 1; max = array[0]; min = array[0]; while (i < n) {

if (array[i] > max)

16

max = array[i]; else

if (array[i] < min) min = array[i]; i++; } } }

class Program {

static void Main(string[] args) {

int max, min;

int[] a = new int[10] { 97, 6 , 32, 17, 8, 43, 79, 81, 23, 10 }; ClassName s = new ClassName(); s.find(out max, out min, a);

Console.WriteLine(\最大数为:\ + max); Console.WriteLine(\最小数为:\ + min);

25. 编一个程序,定义一个类,该类中定义二个非静态方法,一个方法用来求出这个三角形的周长,另一个方法用来求出这个三角形的面积。已知三角形三条边a,b,c,计算其面积可以用Math类中的Sqrt()方法,有表达式Math.Sqrt(s*(s-a)*(s-b)*(s-c)),可以利用它计算指定数的开方,其中s=(a+b+c)/2。在主方法中输入一个三角形三条边a,b,c,要求调用这二个非静态方法计算三角形的周长和面积。注意:在输入三角形三条边时,必须检查它们的数据合法性。

class triangle {

public double c(double a, double b, double c) {

double zc; zc = a + b + c; return zc; }

public double s(double a, double b, double c) {

double mj,s1;

s1 = (a + b + c) / 2;

mj = Math.Sqrt(s1*(s1-a)*(s1-b)*(s1-c)); return mj; } }

class Program

17

{

static void Main(string[] args) {

triangle tr=new triangle (); double x, y, z;

Console.WriteLine(\请输入三角形的三边\); x = double.Parse(Console.ReadLine()); y = double.Parse(Console.ReadLine()); z = double.Parse(Console.ReadLine());

if ((x + y > z && x - y < z) && (x + z > y && x - z < y) && ((y + z) > x && (y - z < x))) {

Console.WriteLine(\三角形的周长为{0}\, tr.c(x, y, z)); Console.WriteLine(\三角形的面积为{0}\, tr.s(x, y, z)); } else

Console.WriteLine(\三角形三边不合法\);

18