while循环

while循环和for循环,可以相互替换,范围和效能一样,理解事物的逻辑不一样
while循环用于条件不确定的逻辑
for循环用于计算次数的逻辑

for循环

快捷写法,按两下TAB
i++:for+按两下TAB
i--:forr+按两下TAB
for循环:锁死次数
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace w2d1_for
{
class Program
{
static void Main(string[] args)
{
#region for循环
//for循环经常用来做固定次数,或者是在固定区间的循环
//如:写一百遍“我要学好C#”
//while循环经常来做,某一条件或者多条件达成则终止的循环
//如:直到密码正确才允许登录
//for (第一表达式(初始表达式);第二表达式(条件表达式);第三表达式(增量表达式))
//{
//循环体
//}
//在for循环开始之初,会执行初始表达式一次
//在循环体开始前会执行条件表达式
//如果条件表达式为真,则执行循环体完成后,执行增量表达式,再问条件表达式,以此循环
//否则结束循环
//正增长循环,快捷键:for +两下TAB;
for (int i = ; i <= ; i++)//循环次数500-5+1=496
{
}
//负增长循环,快捷键:forr + 两下TAB;
for (int i = - ; i >= ; i--)
{
}
#endregion
#region for循环练习
//找出100内所有素数。素数/质数:只能被1和这个数字本身整除的数字,1不是质数, 最小的质数是2。
//如果你遇到一个复杂,要抽象其子问题
//子问题:某一个数是不是质数
for (int j = ; j <= ; j++)
{
int num = j;
for (int i = ; i <= num; i++)
{
if (i == num)
{
Console.WriteLine("{0}是一个质数", i);
break;
}
if (num % i == )
{
//Console.WriteLine("{0}不是一个质数", i);
break;
}
}
}
//求100-999之间的水仙花数,例如:153 = 1*1*1+5*5*5+3*3*3
//取某一位等于这个数 余这个位的上一位,如取百位,余千,然后与本位相除,如百位,除一百
//abc = a * a * a + b * b * b + c * c * c;
for (int i = ; i <= ; i++)
{
int a = (i % ) / ;
int b = (i % ) / ;
int c = (i % ) / ;
if (i == a * a * a + b * b * b + c * c * c)
{
Console.WriteLine(i);
}
}
#endregion
#region 循环小练习
//求1-100之间所有偶数的和?
int count = ;
int sum = ;
for (int i = ; i <= ; i++)
{
if (count % == )
{
sum += count;
}
count++;
}
Console.WriteLine(sum);
//求数列 1,1,2,3,5,8,13, ... 的第20位数字是多少?
int count1 = ;
Console.WriteLine(count1);
int count2 = ;
Console.WriteLine(count2);
int count3 = count1 + count2;
for (int i = ; i <= ; i++)
{
count1 = count2;
count2 = count3;
count3 = count1 + count2;
Console.WriteLine(count3);
}
//假如火星2016年培养学员10万人,每年增长80%,请问按此速度增长,
//到哪一年培训的学员人数将达到100万人?
int year = ;
float stu = 10f;
float rate = 0.8f;
while (true)
{
year++;
stu += stu * rate;
if (stu >= 100f)
{
Console.WriteLine("{0}年培训的学员人数将达到100万人", year); break;
}
}
//输入班级人数,然后依次输入学员成绩(需提示当前是第几个学员),计算班
//级学员的平均成绩和总成绩。
Console.WriteLine("输入班级人数");
int num = int.Parse(Console.ReadLine());
float score = ;
float sum = ;
float aver = ;
bool isInputOk = false;
for (int i = ; i < num; i++)
{
Console.WriteLine("请输入第{0}位同学的成绩", i);
score = float.Parse(Console.ReadLine());
sum += score;
Console.WriteLine("是否继续输入(y/n)");
while (true)
{
string j = Console.ReadLine();
if (j == "y")
{
break;
}
else if (j == "n")
{
isInputOk = true; break;
}
else
{
Console.WriteLine("输入有误,请重新输入");
}
}
if (isInputOk)
{
break;
}
}
aver = sum / num;
Console.WriteLine("班级学员的平均成绩为{0},总成绩为{1}", aver, sum);
//老师问学生,这道题你会作了吗?如果学生答“会了(y)”,则可以放学,
//如果学生不会做(n),则老师再讲一遍,再问学生是否会做了。。。
//直到学生会了为止,才可以放学
//直到学生会了或老师给他讲了10遍还不会,都要放学
bool ok = false;
for (int i = ; i < ; i++)
{
Console.WriteLine("老师问:这道题你会作了吗?");
Console.WriteLine("学生答:会了/不会做(y/n)");
while (true)
{
string ansanswer = Console.ReadLine();
if (ansanswer == "y")
{
Console.WriteLine("你真聪明"); ok = true; break;
}
else if (ansanswer == "n")
{
Console.WriteLine("老师又讲了一遍"); break;
}
else
{
Console.WriteLine("输入有误,请重新输入");
}
}
if (ok)
{
break;
}
}
Console.WriteLine("放学了");
//在控制台上输出如下10 * 10的空心星型方阵
//********** 画10个点*
//* * 画第1个是*,画第10个是*,其他是空格
//* *
//* *
//* *
//* *
//* *
//* *
//* *
//**********
//1、把问题图形化,直观看到问题的点
//2、在图形化的问题中找规律,找子问题
//子问题:画出每一行,画出一行,画出一个*
//罗列出所有可能性,在不同可能性中找规律
//3、把子问题拼合
//**********
//**********
//**********
//**********
//**********
//**********
//**********
//**********
//**********
//**********
//方法一:
for (int j = ; j < ; j++)
{
#region 子问题1
if (j == || j == )
{
#region 子问题2
for (int i = ; i < ; i++)
{
#region 子问题3
Console.Write("*");//按位输出
#endregion
}
#endregion
}
else
{
for (int i = ; i < ; i++)
{
if (i == || i == )
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
}
}
#endregion
Console.WriteLine();//换行
}
//方法二:优化
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (i == || i == || j == || j == )
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
}
Console.WriteLine();
}
//在控制台上输出如下10 * 10的三角形方阵
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (j <= i)
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
}
Console.WriteLine();
}
//在控制台上输出如下10行的金字塔方阵
//
// *
// ***
// *****
// *******
// *********
// ***********
// *************
// ***************
// *****************
// *******************
//n 2n-1 m-n m
//行n 星数 空格 总行数m
//1 1 9 10
//2 3 8 10
//3 5 7 10
//4 7 6 10
//我的练习
int a = ;
for (int i = ; i < ; i++)
{
for (int j = ; j < ; j++)
{
if (j >= ( - i))
{
Console.Write("*");
if (j > a)
{
break;
}
}
else
{
Console.Write(" ");
}
}
a++;
Console.WriteLine();
}
//老师示范
int m = ;
for (int j = ; j <= ; j++)
{
int n = j;
int start = * n - ;
int space = m - n;
for (int i = ; i < space; i++)
{
Console.Write(" ");
}
for (int i = ; i < start; i++)
{
Console.Write("*");
}
Console.WriteLine();
}
//空心金字塔
int m = ;
for (int j = ; j <= ; j++)
{
int n = j;
int start = * n - ;
int space = m - n;
for (int i = ; i < space; i++)
{
Console.Write(" ");
}
for (int i = ; i < start; i++)
{
if (j == m)
{
Console.Write("*");//让最后一行输出星号
}
else
{
if (i == || i == start - )
{
Console.Write("*");
}
else
{
Console.Write(" ");
}
}
}
Console.WriteLine();
}
#endregion
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace w2d1_while_for
{
class Program
{
static void Main(string[] args)
{
#region while循环
//while循环是询问条件是否达成,然后决定是否执行代码块(循环体)
//执行完成之后再次询问条件,以此循环,只到条件不满足为止
//如果你的条件在循环体中没有变化,这个循环就是死循环
//循环能否跳出:1、条件需要在循环体内变化,2、无尽的趋向条件的边界(等同for循环、递归)
//打豆豆,当豆豆血量高于50的时候,他会说没吐,小于50时,他会说:别打了,吐了
//用while循环打到豆豆吐为止
int health = ;
while (health > )//布尔表达式(条件)
{
Console.WriteLine("你暴打了一顿豆豆,然后问他:吐吗?");
health -= ;//条件变换
if (health > )
{
Console.WriteLine("不吐");
}
else
{
Console.WriteLine("别打了,吐了,吐了");
}
Console.ReadKey(true);
}
//向控制台输出100遍“我要学好C#,然后学好Unity”
//如果符号是>和<,初始量-边界量,边界量-初始量
//如果符号是>=和<=,初始量-边界量+1,边界量-初始量+1
//如果符号是>=和<=,表示你的循环范围 从 初始量 到 边界量
int count = ;
while (count <= )
{
Console.WriteLine("“我要学好C#,然后学好Unity。”第{0}遍", count);
count++;
}
//向控制台输出1到100之间的偶数
int count = ;
while (count <= )
{
if (count % == )
{
Console.WriteLine(count);
}
count++;
}
//向控制台输出1到100之间所有整数的和
int count = ;
int sum = ;
while (count <= )
{
sum += count;
count++;//变换量 尽可能是放在处理过程之后
}
Console.WriteLine(sum);
#endregion
#region break方法
//思考题
//一只蜗牛在井底,井深30米,蜗牛每天爬3米,晚上滑2米,请问蜗牛要爬多少天,才能爬出井口
int climb = ;
int sum = ;
int day = ;
while (sum < )
{
climb += ;
sum = climb;
climb -= ;
day++;
Console.WriteLine("第{0}天爬了{1}米", day, sum);
}
Console.WriteLine(day);
//一只蜗牛在井底,井深30米,蜗牛每天爬3米,晚上滑2米,请问蜗牛要爬多少天,才能爬出井口
//位置 snailPos
//井深 well
//天数 day
//爬行速度 speed
//掉落速度 drop
#region 没学break之前
int snailPos = ;
int well = ;
int day = ;
int speed = ;
int drop = ;
while (snailPos < well)
{
//晚上滑
if (day != )
{
snailPos -= drop;
}
//每天爬
snailPos += speed;
//过了一天
day++;
Console.WriteLine("第{0}天爬了{1}米", day, snailPos);
}
Console.WriteLine(day);
#endregion
#region break方法
int snailPos = ;
int well = ;
int day = ;
int speed = ;
int drop = ;
while (true)
{
//蜗牛爬
snailPos += speed;
Console.WriteLine("第{0}天爬了{1}米", day, snailPos);
//爬完后立马问,到井口没
if (snailPos >= well)
{
break;
}
//晚上滑
snailPos -= drop;
//过了一天
day++;
}
Console.WriteLine(day);
#endregion
//向控制台输出1到100之间所有整数的和,如果和加到了500,就终止循环,并且打出这个数
int count = ;
int sum = ;
while (count <= )
{
sum += count;
Console.WriteLine(sum);
if (sum > )
{
Console.WriteLine("那个数是{0}", sum); break;
}
count++;//变换量 尽可能是放在处理过程之后
}
//找出100内所有素数。素数/质数:只能被1和这个数字本身整除的数字,1不是质数, 最小的质数是2。
#endregion
#region continue方法
//如果在使用continue调整整个循环的步骤,不建议使用continue。
//编程 = 算法(步骤) + 数据结构
//用while、continue实现计算1到100(包含)之间的除了能被7整除之外,所有的整数
//方法一:补丁版(编程思路不建议使用)
//1、num++(变化过程)是绝对不能在continue的后面
//补丁:把num++放在continue前面,由于循环体可以看首尾相连的块,所以我们可以把某段代码放到前面,但算法不能改
//2、结果不正确,起始值不正确:大1,结束值不正确:大1
//补丁:起始值减1
//补丁:结束值(边界值)把等于号拿掉
int num = ;
int sum = ;
num--;
while (num < )
{
num++;
if (num % == )
{
continue;
}
sum += num;
Console.WriteLine(num);
}
Console.WriteLine(sum);
//方法二
int num = ;
int sum = ;
num--;
while (num <= )
{
if (!(num % == ))
{
sum += num;
Console.WriteLine(num);
}
num++;
}
Console.WriteLine(sum);
#endregion
#region do while语句
//常用于用户名和密码输入
//打豆豆,当豆豆血量高于50的时候,他会说没吐,小于50时,他会说:别打了,吐了
//用do while循环打到豆豆吐为止
int health = ;
do
{
Console.WriteLine("你暴打了一顿豆豆,然后问他:吐吗?");
health -= ;//条件变换
if (health > )
{
Console.WriteLine("豆豆说:不吐");
}
else
{
Console.WriteLine("豆豆说:别打了,吐了,吐了");
}
Console.ReadKey(true);
} while (health > );//while后要加分号
#endregion
#region do while练习
//豆豆演出
bool ok = false;
do
{
Console.WriteLine("豆豆把歌曲唱了一遍");
Console.WriteLine("老师是否满意:(y/n)");
while (true)
{
string i = Console.ReadLine();
if (i == "y")
{
Console.WriteLine("老师满意了,豆豆可以回去了"); ok = true; break;
}
else if (i == "n")
{
Console.WriteLine("老师不满意,豆豆再练习一遍"); break;
}
else
{
Console.WriteLine("输入有误,请重新输入");
}
}
if (ok) { break; }
} while (true);
//用户名和密码
do
{
Console.WriteLine("请输入用户名");
string user = Console.ReadLine();
Console.WriteLine("请输入密码");
string password = Console.ReadLine();
if (user == "admin" && password == "")
{
Console.WriteLine("密码正确"); break;
}
else
{
Console.WriteLine("输入有误,请重新输入");
}
} while (true);
//输入姓名
do
{
Console.WriteLine("请输入你的姓名");
Console.WriteLine("输入q结束");
string inPut = Console.ReadLine();
if (inPut == "q")
{
Console.WriteLine("输入正确,程序结束"); break;
}
} while (true);
#endregion
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace m1w2d1_exercise
{
class Program
{
static void Main(string[] args)
{
#region 循环小练习
//一、向控制台输出1到100之间所有整数的和
int count = ;
int sum = ;
while (count <= )
{
sum += count;
count++;//变换量 尽可能是放在处理过程之后
}
Console.WriteLine(sum);
//二、求1 - 100之间所有偶数的和?
int count = ;
int sum = ;
for (int i = ; i <= ; i++)
{
if (count % == )
{
sum += count;
}
count++;
}
Console.WriteLine(sum);
//三、求100 - 999之间的水仙花数,例如:153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3
//取某一位等于这个数 余这个位的上一位,如取百位,余千,然后与本位相除,如百位,除一百
//abc = a * a * a + b * b * b + c * c * c;
for (int i = ; i <= ; i++)
{
int a = (i % ) / ;
int b = (i % ) / ;
int c = (i % ) / ;
if (i == a * a * a + b * b * b + c * c * c)
{
Console.WriteLine(i);
}
}
//四、明天豆豆就要登台演出了,老师说再把明天演出的歌曲唱一遍。如果老师满意,
//豆豆就可以回去了,否则就需要再练习一遍,直到老师满意为止。(y / n)
bool ok = false;
do
{
Console.WriteLine("豆豆把歌曲唱了一遍");
Console.WriteLine("老师是否满意:(y/n)");
while (true)
{
string i = Console.ReadLine();
if (i == "y")
{
Console.WriteLine("老师满意了,豆豆可以回去了"); ok = true; break;
}
else if (i == "n")
{
Console.WriteLine("老师不满意,豆豆再练习一遍"); break;
}
else
{
Console.WriteLine("输入有误,请重新输入");
}
}
if (ok) { break; }
} while (true);
//五、要求用户输入用户名和密码,只要不是admin、888888就一直提示用户名或密
//码,请重新输入。
do
{
Console.WriteLine("请输入用户名");
string user = Console.ReadLine();
Console.WriteLine("请输入密码");
string password = Console.ReadLine();
if (user == "admin" && password == "")
{
Console.WriteLine("密码正确"); break;
}
else
{
Console.WriteLine("输入有误,请重新输入");
}
} while (true);
//六、不断提示请输入你的姓名,输入q结束。
do
{
Console.WriteLine("请输入你的姓名");
Console.WriteLine("输入q结束");
string inPut = Console.ReadLine();
if (inPut == "q")
{
Console.WriteLine("输入正确,程序结束"); break;
}
} while (true);
//七、求数列 1,1,2,3,5,8,13, ... 的第20位数字是多少?
int count1 = ;
Console.WriteLine(count1);
int count2 = ;
Console.WriteLine(count2);
int count3 = count1 + count2;
for (int i = ; i <= ; i++)
{
count1 = count2;
count2 = count3;
count3 = count1 + count2;
Console.WriteLine(count3);
}
//八、假如火星2016年培养学员10万人,每年增长80 %,请问按此速度增长,
//到哪一年培训的学员人数将达到100万人?
int year = ;
float stu = 10f;
float rate = 0.8f;
while (true)
{
year++;
stu += stu * rate;
if (stu >= 100f)
{
Console.WriteLine("{0}年培训的学员人数将达到100万人", year); break;
}
}
//九、输入班级人数,然后依次输入学员成绩(需提示当前是第几个学员),计算班
//级学员的平均成绩和总成绩。
Console.WriteLine("输入班级人数");
int num = int.Parse(Console.ReadLine());
float score = ;
float sum = ;
float aver = ;
bool isInputOk = false;
for (int i = ; i < num; i++)
{
Console.WriteLine("请输入第{0}位同学的成绩", i);
score = float.Parse(Console.ReadLine());
sum += score;
//Console.WriteLine("是否继续输入(y/n)");
//while (true)
//{
// string j = Console.ReadLine();
// if (j == "y")
// {
// break;
// }
// else if (j == "n")
// {
// isInputOk = true; break;
// }
// else
// {
// Console.WriteLine("输入有误,请重新输入");
// }
//}
//if (isInputOk)
//{
// break;
//}
}
aver = sum / num;
Console.WriteLine("班级学员的平均成绩为{0},总成绩为{1}", aver, sum);
//十、老师问学生,这道题你会作了吗?如果学生答“会了(y)”,则可以放学,
//如果学生不会做(n),则老师再讲一遍,再问学生是否会做了。。。
//直到学生会了为止,才可以放学
//直到学生会了或老师给他讲了10遍还不会,都要放学
bool ok = false;
for (int i = ; i < ; i++)
{
Console.WriteLine("老师问:这道题你会作了吗?");
Console.WriteLine("学生答:会了/不会做(y/n)");
while (true)
{
string ansanswer = Console.ReadLine();
if (ansanswer == "y")
{
Console.WriteLine("你真聪明"); ok = true; break;
}
else if (ansanswer == "n")
{
Console.WriteLine("老师又讲了一遍"); break;
}
else
{
Console.WriteLine("输入有误,请重新输入");
}
}
if (ok)
{
break;
}
}
Console.WriteLine("放学了");
//十一、找出100内所有素数。素数 / 质数:只能被1和这个数字本身整除的数字,1不是质数, 最小的质数是2。
//如果你遇到一个复杂,要抽象其子问题
//子问题:某一个数是不是质数
for (int j = ; j <= ; j++)
{
int num = j;
for (int i = ; i <= num; i++)
{
if (i == num)
{
Console.WriteLine("{0}是一个质数", i);
break;
}
if (num % i == )
{
//Console.WriteLine("{0}不是一个质数", i);
break;
}
}
}
#endregion
}
}
}

C#学习笔记(五):while循环和for循环的更多相关文章

  1. Java IO学习笔记五:BIO到NIO

    作者:Grey 原文地址: Java IO学习笔记五:BIO到NIO 准备环境 准备一个CentOS7的Linux实例: 实例的IP: 192.168.205.138 我们这次实验的目的就是直观感受一 ...

  2. C#可扩展编程之MEF学习笔记(五):MEF高级进阶

    好久没有写博客了,今天抽空继续写MEF系列的文章.有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后. 前面四篇讲了MEF的基础知识,学完了前四篇,MEF中比较常用 ...

  3. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  4. java之jvm学习笔记五(实践写自己的类装载器)

    java之jvm学习笔记五(实践写自己的类装载器) 课程源码:http://download.csdn.net/detail/yfqnihao/4866501 前面第三和第四节我们一直在强调一句话,类 ...

  5. Learning ROS for Robotics Programming Second Edition学习笔记(五) indigo computer vision

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  6. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  7. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  8. muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor

    目录 muduo网络库学习笔记(五) 链接器Connector与监听器Acceptor Connector 系统函数connect 处理非阻塞connect的步骤: Connetor时序图 Accep ...

  9. python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍

    python3.4学习笔记(五) IDLE显示行号问题,插件安装和其他开发工具介绍 IDLE默认不能显示行号,使用ALT+G 跳到对应行号,在右下角有显示光标所在行.列.pycharm免费社区版.Su ...

  10. Go语言学习笔记五: 条件语句

    Go语言学习笔记五: 条件语句 if语句 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 竟然没有括号,和python很像.但是有大括号,与python又不一样. 例子: pa ...

随机推荐

  1. 07_Linux 终端命令格式

    Linux 终端命令格式 目标 了解终端命令格式 知道如何查阅终端命令帮助信息 01. 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应 ...

  2. mysql 权限管理 针对某个库 某张表 授权 tables_priv表

    精确到表级别 针对db1的t3表 授予select权限 mysql> grant select on db1.t3 to 'mike'@'localhost'; Query OK, rows a ...

  3. semi-consistent简介

    semi-consistent简介 http://hedengcheng.com/?p=220 semi-consistent简介    1 semi-consistent实现    2 MySQL ...

  4. Linux Packages Search

    网站 : https://www.pkgs.org/ https://centos.pkgs.org/

  5. Lodash 中文文档 (v4.16.1) 手机版

    http://lodash.swift.ren/ 手机扫描二维码直接进入

  6. 如何修改WordPress网站默认登录地址wp-admin

    使用过WordPress程序建网站的学员都知道,我们使用Wordpress建好的网站,它的网站登录后台就是“网站域名/wp-admin”.如下图: 为了网站安全,如何修改Wordpress网站默认登录 ...

  7. [svc]ftp协议数据连接的2种模式

    玩明白了以太网2的二层数据格式, ip格式 tcp/udp个时候, 需要玩一玩一些有用的基于这些已上的协议数据了. 如 dhcp ftp等.比较有趣. ftp协议 分控制连接21端口 和数据连接 20 ...

  8. HDU1010:Tempter of the Bone(dfs+剪枝)

    http://acm.hdu.edu.cn/showproblem.php?pid=1010   //题目链接 http://ycool.com/post/ymsvd2s//一个很好理解剪枝思想的博客 ...

  9. [LeetCode] 221. Maximal Square _ Medium Tag: Dynamic Programming

    Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and re ...

  10. 软件包管理:rpm命令管理-校验和文件提取

    校验主要用于判断文件是否做了更改 修改标志: 会用-V,会看输出结果即可. 当有误操作,比如删了某一个文件,只需知道他属于哪一个rpm包,可用提取找回覆盖就行.并不把整个rpm包安装,而是提取其中的某 ...