知识点:
注:int类型默认32位有大小范围 且第一位为符号位 0 为正 1 为负
8.4作业
A:1、风力预警系统有如下标准:普通风力小于5级,为蓝色;大于5小于8,为黄色;大于8小于10为橙色;大于10位红色。如果风为龙卷风或台风等特殊情况,大于8级即为红色,实现上述判定标准,输入风力级别,输出预警颜色,输入风类别为:龙卷风,台风,自然风
特殊情况 用户输入是否是龙卷风 再作判断
// Console.WriteLine ("输入风的种类,1为普通风,2为特殊风");
// int m = int.Parse(Console.ReadLine ());
// Console.WriteLine ("输入风级:");
// int windFoce= int.Parse(Console.ReadLine());
//
// switch (m) {
// case 1:
// {
//
// if (windFoce < 5) {
// Console.WriteLine ("蓝色");
// } else if (windFoce >= 5 && windFoce < 8) {
// Console.WriteLine ("黄色");
// } else if (windFoce >= 8 && windFoce < 10) {
// Console.WriteLine ("橙色");
// } else if (windFoce >= 10) {
// Console.WriteLine ("红色");
// }
// break;
// }
// case 2:
// {
// if (windFoce >= 8) {
// Console.WriteLine ("红色");
// }
// break;
// }
// }
2、实现一个程序,控制台实现如下效果,现在控制台输出如下语句。
请输入编号选择您想购买的商品:
1、笔 2、作业本 3、橡皮擦 4、直尺
用户输入编号后打印出用户选择的商品
Console.WriteLine("请输入编号");
// int n = int.Parse(Console.ReadLine());
// switch (n) {
// case 1:
// {
// Console.WriteLine ("笔");
// break;
// }
// case 2:
// {
// Console.WriteLine ("作业本");
// break;
// }
// case 3:
// {
// Console.WriteLine ("橡皮擦");
// break;
// }
// case 4:
// {
// Console.WriteLine ("直尺");
// break;
// }
//
// }
B:3、实现在控制台输入数据n, 计算n并打印出n的阶乘;
while做法
Console.WriteLine("输入数字");
Int64 n = int.Parse (Console.ReadLine ());
int a = 1;
Int64 sum = 1;
while (a < n + 1) {
if (n == 0) {
Console.WriteLine ("{0}",0);
}
sum *= a;
a++;
Console.WriteLine ("{0}",a);
}
Console.WriteLine ("{0}",sum);
for做法
Console.WriteLine("输入数字");
Int64 n = int.Parse (Console.ReadLine ());
Int64 sum = 1;
if (n == 0) {//当n = 0的情况
sum = 0;
} else {
for (Int64 i = 1; i <= n; ++i) {
sum *= i;
}
}
Console.WriteLine ("{0}",sum);
注:int类型默认32位有大小范围 且第一位为符号位 0 为正 1为负
00000000 00000000 00000000 00000000
4、从控制台输入一个年份,判断是否为闰年(闰年的条件:1、年份能被4整除 或 2、年份若是100的整数倍的话,需被400整除)
Console.WriteLine ("输入年份");
// int y = int.Parse (Console.ReadLine());
//
//
// if (y % 4 == 0 && y % 100 != 0) {
// Console.WriteLine ("{0}年为闰年", y);
// } else if (y % 100 == 0 && y % 400 == 0) {
// Console.WriteLine ("{0}年为闰年", y);
// } else {
// Console.WriteLine ("{0}年为平年", y);
// }
周末作业
1、连续输入一周七天的温度,同时求出该周平均温度。
// float sum = 0;
// for (int i = 0; i < 7; ++i) {
// Console.WriteLine ("请输入星期{0}的温度",i + 1);
// string temp = Console.ReadLine ();
// sum += float.Parse (temp);
// }
// Console.WriteLine ("七天气温的平均值为:{0}",sum/7.0f);
2、猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
int a = 10,b = 1;
// while (a > 1) {
// b = (b + 1)*2;
// --a;
// Console.WriteLine ("第" + a + "天,有桃子" + b + "颗");
// }
// Console.WriteLine ("{0}",b);
int a, b = 1;
(a 天数 b 桃子)
// for (a = 1; a < 10; a++) {
// b = (b + 1) * 2;
// }
// Console.WriteLine ("第一天吃桃子数量为:{0}", b);
3、分析下列语句中a、b的结果
int a = 1, b = 3;
a += b %= 2;//(b%2+a = a)1+1 =2
int a = 1,b = 4;
a = ++b/a++; //a = 5 a++ 没有用
如何用代码将以下数据转换成二进制和十六进制,1000和2049。
正整数转成二进制。要点:除二取余,然后倒序排列,高位补零。
负整数转换成二进制 方法:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。
1、十进制转化二进制
int x = 1000;
while (x >0 ){
int n = x % 2;
Console.WriteLine ("{0}",n);
x /= 2;
}
//数组
转化二进制 单词 binary
int x = 1000;
int[] binary =new int [16];//动态初始化,初始化后为16个0
//int[]必须要给定长度
int index = 0;//index用来当做数组的下标
while (x > 0) {
int n = x % 2;
binary [index] = n;//修改binary 下标index 对应的值
++index;//每执行一次 往后推一位
x /= 2;
}
//反向打印输出
for (int i = binary.Length - 1;i >=0; --i ){// - -i 是从后往前的每一个值
//binary .Length - 1是为了避免下标越界
//因为题中的数组长度为16 但是从0开始 i最大只能是15
Console.Write ("{0}",binary[i]);//binary[i]是数组中每一个 i 对应的值
}
2、十进制转化十六进制
1000除16商62余8,62除16商3余14,3除16商0余3; 1000 ==> 3E8
一直除16取余 倒过来
int x = 1000;
//0x3E8 = 8 * 16 ^ 0 + E *16 ^ 1 + 3 * 16 ^ 2
while (x > 0){
int n = x % 16;//余8 14 3
if (n >= 10) {//大于10的余数
Console.WriteLine ("{0}",(char)(n + 55));
} else {
Console.WriteLine ("{0}",n);
}
x /= 16; //x = 1000,62,3
}
//数组方式
int x = 1000;
int[] hexadecimal = new int[8];
int index = 0;
while (x > 0){
int n = x % 16;
hexadecimal [index] = n;
++index;
x /= 16;
}
for (int i = hexadecimal.Length - 1;i >=0; --i ){
if (hexadecimal[i] >= 10) { // 在十六进制中10以上的数为abcdef
Console.Write ("{0}", (char)(hexadecimal[i] + 55));//转化为小写字母
} else {
Console.Write ("{0}", hexadecimal[i]);
}
}
8/11 work
A:
1、编写一个程序,要求用户从键盘输入2个float数,输出最大者。
float a = float.Parse(Console.ReadLine());
float b = float.Parse(Console.ReadLine());
float c = a > b ? a : b;
Console.WriteLine ("{0}", c);
2、编写一个程序,要求用户从键盘输入3个不同整数,输出第二大的数。
int a = int.Parse(Console.ReadLine ());
int b = int.Parse(Console.ReadLine ());
int c = int.Parse(Console.ReadLine ());
if (a > b && b > c || c > b && b > a) {
Console.WriteLine ("{0}", b);
}else if(b > a&&a>c || c>a && a >b){
Console.WriteLine ("{0}", a);
}else{
Console.WriteLine ("{0}", c);
}
3、从键盘输入两个实数a和b,代表两点在X轴的坐标,再输入一个0到1之间的数c,代表时间,(假如从a到b需要1s),
输出在时间c时的坐标。
例如:输入a为1和b为5,再输入c为0.5,则输出结果为:3。
结果 = a +(b - a)* 0.5;
a= 1 b= 5 c= 0.5 坐标 = 3
float a = float.Parse(Console.ReadLine()) ;
float b = float.Parse(Console.ReadLine());
Console.WriteLine ("输入0 到 1 的数c");
float c = float.Parse (Console.ReadLine ());
float Z;
if (a < b) {
Z = a + (b - a) * c;
} else {
Z = b + (a - b) * c;
}
Console.WriteLine ("{0}",Z);
4、输入一个成绩(0到100之间的整数),如果大于等于90输出:优秀;小于90而大于等于80输出:
良好;小于80而大于等于70输出:一般;小于70而大于等于60输出:及格,否则输出:不及格。
int a = int.Parse(Console.ReadLine());
if (a >= 90) {
Console.WriteLine ("优秀");
} else if (a < 90 && a >= 80) {
Console.WriteLine ("良好");
} else if (a < 80 && a >= 70) {
Console.WriteLine ("一般");
} else if (a < 70 && a >= 60) {
Console.WriteLine ("及格");
} else {
Console.WriteLine ("不及格");
}
B:
5、输入3个字符,如果字符中至少有2个数字,求这些数字的和。例:输入‘0’,‘3’,‘8’,求出和为11.
ASCII码48 -57表示 0 -9
char a = char.Parse(Console.ReadLine());
char b = char.Parse(Console.ReadLine());//
char c = char.Parse(Console.ReadLine());
if ((a <= 57 && a >= 48) && (b <= 57 && b >= 48) && (c <= 57 && c >= 48)) {
int sum = 0;
sum = (int)(a - 48) + (int)(b - 48) + (int)(c - 48);
Console.WriteLine ("{0}",sum );
} else if ((b <= 57 && b >= 48) && (c <= 57 && c >= 48)) {
int sum = 0;
sum = (int)(b - 48) + (int)(c - 48);
Console.WriteLine ("{0}", sum);
} else if ((c <= 57 && c >= 48) && (a <= 57 && a >= 48)) {
int sum = 0;
sum = (int)(c - 48) + (int)(a - 48);
Console.WriteLine ("{0}", sum);
} else if((a <= 57 && a >= 48) && (b <= 57 && b >= 48)){
int sum = 0;
sum = (int)(a - 48) + (int)(b - 48);
Console.WriteLine ("{0}", sum);
}
int a = 0, b = 0, c = 0;
int num = 0;//定义有几个字符能转成Int值
if (int.TryParse (Console.ReadLine (), out a)) {
num++; //如果转成的话 num = 1;
} //不能转的话不作操作
//TryParse ()out 格式+
if (int.TryParse(Console.ReadLine (),out b )){
num++;
}
if (int.TryParse(Console.ReadLine (),out c )){
num++;
}
if (num >= 2){
int sum = a + b +c;//输出三个中int 值的和
Console.WriteLine ( "sum = "+ sum);
}
6、输入一个字符,判断它如果是小写字母输出其对应大写字母,如果是大写字母输出其对应小写字母,如果是数字输出其相反数,如果是空格,输出“space”,如果不是上述情况,输出“other”。
ASCII码 大写A65 Z90小写z97 z122 空格Space
char a = char.Parse(Console.ReadLine());
if (a >= 97 && a <= 122) {
Console.WriteLine ("{0}", (char)(a - 32));
} else if (a >= 65 && a <= 90) {
Console.WriteLine ("{0}", (char)(a + 32));
} else if (a == 32) {
Console.WriteLine ("Space");
} else if (a >= 48 && a <= 57) {
Console.WriteLine ("{0}",-(a - 48));
}
else {
Console.WriteLine ("Other");
}
// C:
7、思考一下程序的执行结果:
int m=0,n=3;
if (m >= 0);//if嵌套 如果加 ;分号 的话结束
if (n > 3)
Console.WriteLine ("A");
else
Console.WriteLine("B");
8、思考如何实现:连续输入若干个字符,包括换行和空格等其他特殊符号,
按~结束(最后语句中包含换行和空格等,但不包含~)
Console.WriteLine("按~键退出");
while (Console.ReadKey().KeyChar != '`')
{
}
char ch;
string str = "";
do {
ch= (char)(Console.Read());
if(ch != '~'){
str += ((char)ch).ToString();
}else{
break;
}
} while (ch != '~');
Console.WriteLine ("\n输入结束:\n" + str);
for 一般用于确定次数的循环
while 一般用于不确定次数循环
#region 一元二次方程
9、输入a,b,c三个整数,求一元二次方程的解(有没有解,是多少)。一元二次方程为ax^2 + bx + c = 0;
float a = float.Parse(Console.ReadLine());
float b = float.Parse(Console.ReadLine());
float c = float.Parse(Console.ReadLine());
if (Math.Pow (b, 2) - 4 * a * c > 0) {
float x1 = (float)(-b + (Math.Sqrt (Math.Pow (b, 2) - 4 * a * c))) / 2 * a;
float x2 = (float)(-b - (Math.Sqrt (Math.Pow (b, 2) - 4 * a * c))) / 2 * a;
Console.WriteLine ("方程解为x1 = {0}, x2 = {1}", x1, x2);
} else if (Math.Pow (b, 2) - 4 * a * c == 0) {
float x = (float)(-b + (Math.Sqrt (Math.Pow (b, 2) - 4 * a * c))) / 2 * a;
Console.WriteLine ("方程解为x1 = {0}", x);
} else if (Math.Pow (b, 2) - 4 * a * c < 0) {
Console.WriteLine ("方程没有解");
}
#endregion
8、14
计算100至10000之间有多少个数 各位数字之和为7
int number = 100;
int num = 0;
while ( number <= 7000) {
if (number > 100 && number <= 7000) {
if (number % 10 + (number / 10) % 10 + (number / 100)%10 + number / 1000 == 7 ) {
++num;
}
}
++number;
}
Console.WriteLine (num);
int num = 0;
for (int number = 100; number <= 7000; number++) {
int a, b, c, d;
a = number % 10;
b = (number / 10) % 10;
c = (number / 100) % 10;
d = (number / 1000) % 10;
if (a + b + c + d == 7) {
Console.WriteLine (number);
num++;
}
}
Console.WriteLine (num);
int number = 100;
int num = 0;
while (number <= 7000) {
int a, b, c, d;
a = number % 10;
b = (number / 10) % 10;
c = (number / 100) % 10;
d = (number / 1000) % 10;
if (a + b + c + d == 7) {
Console.WriteLine (""+number);
num++;
Console.WriteLine ("第" + num +"个");
}
number++;
}
2、打印出1 - 100之间所有的偶数
int a = 1;
while (a <= 100) {
if (a % 2 == 0) {
Console.WriteLine (a);
}
a++;
}
3、打印 1 + 2 + 3 + ....+100的值
int a = 0;
int sum = 0;
while (a <= 100) {
a++;
sum += a;
}
Console.WriteLine ("{0}", sum);
在终端循环输出数字,一旦输入数字小于0,停止输入
while break
while (true) {
int a = int.Parse(Console.ReadLine());
if (a < 0) {
break;
}
}
利用continue 打印实现1 - 100之间 不是3的倍数
int a = 0;
while(a<100){
a++;
if (a % 3 == 0) {
continue;
}
Console.WriteLine (a);
}
sum = 1 +...n; 求sum 不超过10000的最大整数值和项值N
int n =0 ;
int sum= 0;
do {
n++;
sum +=n;
if(sum==9999){
break;
}
} while (sum<10000);
Console .WriteLine("项值为"+ (n-1));//
Console.WriteLine ("最大整数" + (sum-n));
//
用for循环打印出1 - 100之间不是7的倍数并且不包含7的数;
for(int a = 0;a <=100;a++){
1、 if (a % 7 != 0 && a % 10 != 7 && a / 10 != 7) {
Console.WriteLine (a);
}
2、 if (a % 7 != 0 && !(a.ToString().Contains("7"))) {
Console.WriteLine (a);
}
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <=i; j++) {
Console.Write (j);
}
Console.WriteLine ();
}
乘法口诀打印
for (int a = 1; a <= 9; a++) {
for (int b = 1; b <= a; b++) {
Console.Write ("{0}*{1}={2} ", b, a,a*b);
}
Console.WriteLine ();
}
8/14 work
A:
1、编程将所有“水仙花数”打印出来,并打印其总个数。“水仙花数”是一个各个位立方之和等于该整数的三位数。
方法一、
for(int i=1;i<10;i++)
{
for(int j=0;j<10;j++)
{
for(int k=0;k<10;k++)
{
int m=i*100+j*10+k; //这里int定义最好放到开头处
int n=i*i*i+j*j*j+k*k*k;
if(n==m)Console.WriteLine(m); //注意这里是==
}
}
}
方法二、
for (int i = 100; i < 1000; ++i) {
int a = i % 10;//% 10得到的都是小于10的数
int b = i/10%10;
int c = i / 100;
int sum = 0;
if (Math.Pow (a, 3) + Math.Pow (b, 3) + Math.Pow (c, 3) == i) {
sum++;
Console.WriteLine (i);
}
Console.WriteLine(sum);
}
2、自定义一个数组并求数组中的所有元素最大值、最小值、平均值及各元素之和。
求数组中的最大值、最小值、总和、平均值
方法一、
int[] a = { 75, 2, 3, 35, 38, 39, 66, 89 };
int max = a [0];
int min = a[0];
// int min_1 = int.MaxValue;//Int 类型的最大值
int sum = 0;
for (int i = 0; i < a.Length; i++) {
if (a [i] > max) {
max = a [i];
}
if (a [i] < min) {
min = a [i];
}
sum += a [i];
}
Console.WriteLine ("数组中最大值是{0},最小值是{1},总和是{2},平均值是{3}", max, min, sum, sum / a.Length);
Console.ReadKey ();
方法二、
int[] a = { 75, 2, 3, 35, 38, 39, 66, 89 };
int max = 0;
int min = a[0];
int sum = 0;
for (int i = 0; i < a.Length; i++) {
max = max < a [i] ? a [i] : max;//三元算法求最大值最小值
min = min > a [i] ? a [i] : min;
sum += a [i];
}
Console.WriteLine ("数组中最大值是{0},最小值是{1},总和是{2},平均值是{3}", max, min, sum, sum / a.Length);
Console.ReadKey ();
3、已知abc+cba = 1333,其中a,b,c均为一位数,编程求出满足条件的a,b,c所有组合。
for(int a =0;a<=9;a++){
for (int b = 0; b<= 9; b++) {
for (int c = 0; c <= 9; c++) {
if ((a * 100 + b * 10 + c) + (c * 100 + b * 10 + a) == 1333) {
Console.WriteLine ("a = {0},b = {1},c = {2}", a, b, c);
}
}
}
}
4、打印100以内的所有质数. (只能被1和它本身整除的数是质数)
for(int i = 2;i<100;i++){
bool flag = false;
for (int j = 2; j <= i / 2; ++j) {
if (i % j == 0) {
flag = true;
break;
}
}
if(!flag ){
Console.WriteLine ("{0}是质数",i);
}
}
int a ,b;
for (a = 2; a < 10; a++) {
for (b = 2; b <= a ; b++) {
if (a % b == 0)//
break;//排除了所有不是质数的情况
}
if (b == a) {
Console.WriteLine ("{0}", a);
}
}
5、输入两个数,求最大公约数和最小公倍数。(有两种方法:辗转相除法和普通方法)
最大公约数:几个数公有的因数中最大的一个
最小公倍数:几个数公有的倍数中最小的一个
普通方法:
int a =int.Parse(Console.ReadLine());
int b = int.Parse (Console.ReadLine ());
int min = a < b ? a : b;
int max_grs = 0;
for (int i = 1; i <= min; ++i) {//i 小于他们中最小的那个数
if (a % i == 0 && b % i == 0) {
max_grs = i;
}
}
Console.WriteLine ("最大公约数为"+max_grs);
Console.WriteLine ("最小公倍数为"+(a*b)/max_grs);
辗转相除法:
int a =int.Parse(Console.ReadLine());
int b = int.Parse (Console.ReadLine ());
int temp = 0;//接收余数
do {
//120 56
temp = a % b;//120 % 56 = 8 56 % 8 = 0能整除56的一定也能整除120
a = b;//a = 8
b = temp;//b = 0;
} while(temp != 0);
Console.WriteLine ("最大公约数为" + a);
6、一个球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下,再反弹。求它在第10次落地时,共经过多少米?第10次反弹多高
float sum ,hight;
sum = 100f;
hight = 100f;
for (int i = 2; i <= 10; i++) {
hight /= 2f;
sum += hight * 2;
}
Console.WriteLine ("经过 {0} 米,第十次反弹 {1} 米",sum ,hight/2);
B:
7、百钱百鸡问题:鸡翁一值钱5;母鸡一值钱3;鸡雏三值钱1,百钱买百鸡,问鸡翁鸡母鸡雏各几何?
//5x + 3y +z/3 = 100
x + y +z =100
14x +8y = 200
for(int x = 0;x<20;x++){
for (int y = 0; y < 34; y++) {
if(14 * x + 8 * y ==200){
Console.WriteLine ("x={0},y={1},z={2}",x,y,100-x-y);
}
}
}
for (int x = 0; x <= 20; x++) {
for (int y = 0; y < 34; y++) {
int z = 100 - x - y;
if (15 * x + 9 * y + z == 300) {
Console.WriteLine ("x={0},y={1},z={2}", x, y, z);
}
}
}
8、输入n,分别用 * 输出边长为n 的实心菱形
例如n = 3时,输出
i 空格 *
* -2行数 2 1 星号 =(2n -1)- 2*|i|
*** -1 1 3
***** 0 0 5
*** -1 1 3
* 2 2 1
int n = int.Parse (Console.ReadLine());
for (int i = -n + 1; i <= n - 1; ++i) {
for (int j = 0; j < Math.Abs (i); ++j) {
Console.Write (" ");
}
for (int k = 0; k < 2 * n - 1 - 2 * Math.Abs (i); ++k) {
if( k ==0|| k== 2 * n - 2 - 2 * Math.Abs (i)){
Console.Write ("*");
}else{
Console.Write (" ");
}
}
Console.WriteLine ("\n");
}
实现空心菱形
* -2
* * -1
* * 0
* * 1
* 2