1、2Ch2 基本数据类型与流程控制语句 习题解答1 简要回答值类型和引用类型有何不同?【解答】值类型和引用类型的区别在于,值类型的变量直接存放实际的数据,而引用类型的变量存放的则是数据的地址,即对象的引用。当把一个值变量赋给另一个值变量时,会在堆栈(stack )中保存两个完全相同的值;而把一个引用变量赋给另一个引用变量,则会在堆栈中保存对同一个堆(heap)位置的两个引用。进行数据操作时,对于值类型,由于每个变量都有自己的值,因此对一个变量的操作不会影响到其他变量;对于引用类型的变量,对一个变量的数据进行操作就是对这个变量在堆中的数据进行操作,如果两个引用类型的变量引用同一个对象,实际含义就是
2、它们在堆栈中保存的堆的地址相同,因此对一个变量的操作就会影响到引用同一个对象的另一个变量。2 C#语言中不同整型之间进行转换的原则是什么?【解答】在整型之间进行转换时,小范围类型可以隐式转换为大范围类型,但大范围类型转换为小范围类型时需要使用显式转换。3、编写一个控制台应用程序,接收一个长度大于 3 的字符串,完成下列功能。(1 )输出字符串的长度。(2 )输出字符串中第一个出现字母 a 的位置。(3 )字符串序号从零开始编号,在字符串的第 3 个字符的前面插入子串 “hello”,输出新字符串。(4 )将字符串“hello”替换为“me” ,输出新字符串。(5 )以字符“m”为分隔符,将字符
3、串分离,并输出分离后的字符串。【解答】using System;class T3public static void Main()string str = “;while (str.Length -1)Console.WriteLine(“第一个出现字母 a 的位置是:0“, i);第 2 章 基本数据类型与流程控制语句 3elseConsole.WriteLine(“字符串中不包含字母 a。“);/(3)string str1 = str.Insert(3, “hello“); /在第 3 个(初始序号为)字符前插入 helloConsole.WriteLine(“插入 hello 后的结果
4、为:0“, str1);/(4)string str2 = str1.Replace(“hello“, “me“);Console.WriteLine(“将 hello 替换为 me 后的结果为:0“, str2);/(5)string arr = str2.Split(m);Console.WriteLine(“以 m 为分隔符分离后的字符串有:“);for (int j = 0; j Z)Console.WriteLine(“第0个字符“ 1”不是大写字母,请重新输入。“, i + 1, c);ok = false;break;6编写一个控制台应用程序,要求完成下列功能。(1 )接收一个整
5、数 n。(2 )如果接收的值 n 为正数,输出 1n 的全部整数。(3 )如果接收的值为负值,用 break 或者 return 退出程序。第 2 章 基本数据类型与流程控制语句 5(4 )转到(1 )继续接收下一个整数。【解答】using System;using System.Collections.Generic;using System.Text;namespace testOutputclass Programstatic void Main()while (true)Console.Write(“请输入一个整数( 负值结束):“);string str = Console.Read
6、Line();tryint i = Int32.Parse(str);if (i 0) break;for (int j = 1; j = i; j+) Console.WriteLine(j);catchConsole.WriteLine(“你输入的不是数字或超出整数的表示范围,请重新输入“);7编写一个控制台应用程序,求 1 000 之内的所有“完数” 。所谓“完数”是指一个数恰好等于它的所有因子之和。例如,6 是完数,因为 6 = 1 + 2 + 3。【解答】using System;using System.Collections.Generic;using System.Text;n
7、amespace completeNumberclass Programstatic void Main(string args)for (int i = 2; i = 1000; i+)int s = 1;string str = “1“;for (int j = 2; j = (int)Math.Sqrt(i); j+)if (j * (i / j) = i)第 2 章 基本数据类型与流程控制语句 6if (j != i / j)s += j + i / j;str += string.Format(“+0+1“, j, i / j);elses += j;str += string.Fo
8、rmat(“+0“, j);if (s = i) Console.WriteLine(“0=1“, i, str);Console.ReadLine();8、编写一个控制台应用程序,计算 234(1)1!nxx要求精度为 108。【解答】using System;class Test8public static void Main()int n = 50;double x = 3;double s = 0;double a = 1;for (int i = 1; i = n; i+)a *= i;s += Math.Pow(-1, i + 1) * Math.Pow(x, i) / a;Console.WriteLine(“n=0,s=1:0.00000000“, n, s);Console.ReadLine();