“最后一点就是坚持,有时候写这些东西真的很痛苦,很让人抓狂,但是你一旦你坚持下去,久而久之,你会看到自己的进步,某一天你回过头去看自己以前写的文章,当你能够说出:“写得真他妈菜”,那么恭喜你,已经你升级了“。
—— “程序员应该坚持写技术博客”原文链接:https://blog.csdn.net/d6619309/article/details/52727326
C#:
21. (20)编一个程序,用do-while循环语句来计算PI = 4 *(1-1 / 3 + 1/5 + ... + 1 / n),要求当1 / n <0.000001时停止计算。
double pi, s = 0, x;//声明变量
double n = 1//赋初值
do//dowhile语句
{
x = Math.Pow(-1, n + 1) / (2 * n - 1);
s = s + x;
n++;
}
while (1 / n >= 0.000001);//while条件跟if一样,记得加括号
pi = s * 4;//计算公式
Console.WriteLine("pi的值为:{0}", pi);///输出
Console.ReadKey();//此句不解释
do-while执行过程示意图:第一次执行完做语句块后代入,而条件表达式进行判断,判断结果为假则继续返回执行做的语句块,否则输出。
22. (20)编一个程序,从键盘上输入二个实数,使用Math类中Max()和Min()方法,求出它们中的最大数和最小数。
double d1, d2, max, min;//声明变量
Console.WriteLine("请输入两个实数:");//字符串输出
d1 = double.Parse(Console.ReadLine());//将输入的字符转化为双精度类型
d2 = double.Parse(Console.ReadLine());
max = Math.Max(d1, d2);//math类的max方法,返回两个值中的较大值
min = Math.Min(d1, d2);//math类的max方法,返回两个值中的较小值
Console.WriteLine("最大值为{0},最小值为{1}", max, min);//输出结果
Console.ReadKey();
此题较为简单,直接使用数学类的最大值(取最大值)和最小(取最小值)的方法。
标准流程:声明变量 - 输出文字提示 - 读取输入的字符串并用解析方法转化为相应的数据类型并赋值给已经声明的变量 - 利用最大和最小方法进行筛选并赋值 - 将结果输出。
23. (20)编一个程序,利用while循环语句和Math类中的Pow()方法,求出1到10的各个数的平方之和。
double i = 1, s = 0;//声明变量并赋初值
do//dowhile语句一般格式
{
s = s + Math.Pow(i, 2);
i++;//i=i+1
}
while (i <= 10);//循环停止的条件,记得加括号
Console.WriteLine("1~10每个数的平方和为{0}", s);//输出运算结果
Console.ReadKey();
24.(20)编一个程序,打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如,153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3,所以153是“水仙花数”。
int num,i, j, k;//声明变量
for (num = 100; num < 1000; num++)//for(初始值,表达式,更新值)
{
i = num % 10;//十位数
j = num % 100 / 10;//个位数
k = num / 100;//百位数
if (num == Math.Pow(i, 3) + Math.Pow(j, 3) + Math.Pow(k, 3))//三次方
Console.WriteLine(num + "是水仙花数");//输出运算结果
}
Console.ReadLine();//
对于语句的标准写法,对于(初始值。表达式,更新值)。对于语句和dowhile和而语句不同,为语句是按照规定的循环次数执行的循环体。找水仙花数是个有趣的程序题,下次将写一个小专题来总结一下我想到的几种算法。
25. (20)编写一个程序,用而语句,求出1+(1 + 2)+(1 + 2 + 3)+ ... +(1 + 2 + 3 + ... + 10)之和。
int i = 1, j = 1, s = 0, s1 = 0;//声明变量
while (j <= 10)//当每个小括号内的尾项小于10的时候循环执行
{
while (i <= j)//每个下括号内的数依次累加
{
s += i;//s=s+i
i++;//i=i+1
}
s1 += s;//每个小括号的和之和
j++;//j=j+1
}
Console.WriteLine("1+(1+2)+(1+2+3)+...+(1+2+3+...+10)求和的计算结果是{0}", s1);
Console.ReadKey();
26. (20)编一个程序,输入二个正整数,求出它们的最大公约数。
int i, j, k;//声明变量
Console.WriteLine("请输入第一个正整数:");
i = int.Parse(Console.ReadLine());//将读取的字符转化为整数
Console.WriteLine("请输入第二个正整数:");
j = int.Parse(Console.ReadLine());
k = i < j ? i : j;//三目运算,把i和j两者中较小的数赋值给k
while (!(i % k == 0 && j % k == 0))//用k去整除i和j,如果余数都为零,则结束,否则执行k--
k--;
Console.WriteLine("以上两个数的最大公约数为{0}", k);
Console.ReadKey();
知识点:(三元运算符)
条件表达式?表达式1:表达式2;
执行过程:先求条件表达式,为True时调用表达式1,为False的时候调用表达式2
27. (20)编一个程序,用while循环语句,从键盘输入10个数,要求找出最大数和次大数。
int i = 1, max = 1, max1 = 1;
int s;//声明变量
Console.WriteLine("请依次输入10个数:");//输出字符串
while (i <= 10)//循环次数为10次
{
s = int.Parse(Console.ReadLine());
if (s > max)
{
max1 = max;//如果输入的数比最大值的初值大,就把最大值赋值给次大值
max = s;//把输入的数赋值给最大值
}
else if (s > max1)
{
max1 = s;//如果输入的数在最大值和次大值之间,就把输入的值赋给max1
}
i++;
}
Console.WriteLine("最大值为{0},次大值为{1}", max, max1);
Console.ReadLine();
28. (40)编一个程序,要求使用而语句,输入用户名和密码,实现用户登录程序的功能,至多允许输入三次,超过三次不允许登录。
const string UserName = "admin";
const string PassWord = "123456";
string username, password;
int i=1;
while(i<=3)
{
Console.WriteLine("请输入用户名");
username = Console.ReadLine();
Console.WriteLine("请输入密码");
password = Console.ReadLine();
if (username == UserName && password == PassWord)
break;
else
Console.WriteLine("你输入的用户名或者密码错误,请重新输入用户名和密码");
i++;
}
if (i <= 3)
{
Console.WriteLine("Loading...正在登录系统");
}
else
Console.WriteLine("Warning:不能登录系统!");
29. (20)
有关系式1 * 1 + 2 * 2 + 3 * 3 + ... + k * k <2000,编一个程序,求出满足此关系式的k的最大值。
int k = 1, s = 0;
while (s < 2000)
{
s = s + k * k;
k++;
}
Console.WriteLine("k的值为{0}", k - 2);
Console.ReadKey();
30. (20)编写一个程序,要求用while循环语句,打印1到100的正整数,每行打印5个数,每列右对齐。
int i = 1;
while (i <= 100)
{
Console.Write("{0,10:d}", i);//{占位符,输出长度:d表示十进制}
if (i % 5 == 0)
Console.WriteLine();//当i对5的余数刚好为0时输出一个换行
i++;
}
Console.ReadKey();
换行的写法已经注释,不再赘述。while的循环基本模式都是差不多的,多写几个想必就能有更清楚的认识了!