c/c++循环语句
循环语句可以重复执行大量相同语句,真正发挥了计算机计算的优势,在学习的过程中,循环编程给了我极大的快感和成就感。
基本的知识点:
一、三种循环语句
1、for循环:基本格式:for(初始化;条件;调整)
当循环条件满足时,执行相同的语句,然后进行调整(比如i++,i–)。
2、while循环:基本格式:while(条件){ 循环体 },先判断条件,若满足条件,执行循环体,若不满足条件,跳出循环。
3、 do-while循环:基本格式:do{ 循环体 }while(条件),先执行循环,再判断条件,条件满足,继续执行循环体,条件不满足,跳出循环。
二、循环嵌套
这三种循环语句可以互相嵌套,嵌套的目的是在不同的维度上展开代码。以for嵌套为例,for{for{ 循环体1 }循环体2(可无) }的意义是先把循环体1执行完再执行循环体2。千万切记,循环中的语句是一条一条执行的,嵌套是从里到外执行的,先把最里面的循环执行完,再执行外循环。
三、循环辅助语句
break:跳出离它最近的循环。
continue:忽略下面的语句,回到循环开始。
四、关于循环的一些细节
1、在循环里面定义的变量,不可以拿到循环外使用,因为只是局部变量。比如for(int i;;),这里的i不能拿出此循环使用。
2、变量i定义在循环语句中,因此i在循环体内不可见。
3、暴力解法容易超时。
五、open judge循环题目分析
1、孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决这个问题吗?
输入:
输入两行,第一行为整数n(1 <= n < 100),表示参加这次考试的人数.第二行是这n个学生的成绩,相邻两个数之间用单个空格隔开。所有成绩均为0到100之间的整数。
输出:
输出一个整数,即最高的成绩。
样例输入
5
85 78 90 99 60
样例输出
99
我的代码
#include<iostream>
using namespace std;
int main()
{
int n,t,max=0,i;
cin>>n;
for(i=0;i<n;i++)
{cin>>t;
if(t>max)
max=t;
}
cout<<max;
return 0;
}
2、描述
根据参数,画出矩形。
输入:
输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。
输出:
输出画出的图形。
样例输入
7 7 @ 0
样例输出
@@@@@@@
@ @
@ @
@ @
@ @
@ @
@@@@@@@
我的代码
#include <iostream>
using namespace std;
int main()
{
int h,d,x,i,j;
char a;
while(scanf("%d %d %c %d",&h,&d,&a,&x)!=EOF)//EOF的值为-1,这个式子的意义是,执行程序,直到输入的值为-1时结束循环。
{
if(x==1)
{
for(i=1;i<=h;i++)
{
for(j=1;j<=d;j++){
printf("%c",a);
}
printf("\n");
}
}
if(x==0){
for(i=1;i<=h;i++){
if(i==1||i==h){
for(j=1;j<=d;j++){
cout<<a;
}
cout<<endl;
}
else{
for(j=1;j<=d;j++){
if(j==1||j==d){
cout<<a;
}
else{
cout<<" ";
}
}
cout<<endl;
}
}
}
}
}
3、描述
输出7和7的倍数,还有包含7的数字。例如(17,27,37…70,71,72,73…)
输入
一个整数N。(N不大于30000)
输出
从小到大排列的不大于N的与7有关的数字,每行一个。
样例输入
20
样例输出
7
14
17
我的代码
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
for(int b=1;b<=a;b++){
if(b%7==0)
cout<<b<<endl;
else for(int c=b;c>=7;c/=10)
{
if(c%10==7)
{
cout<<b<<endl;
break;
}
}
}
}
4、描述
给出一些整数对,它们表示一些平面上的坐标点,给定一个点,求所有那些点到该点最短距离的点。结构为:第一个整数对为所给定的点,后面的整数对为所有其他的点。
输入
第一个整数对为所给定的点,后面的整数对为所有其他的点。
输出
到第一个点最短距离的点
样例输入
9 2
1 0
1 1
0 0
1 2
2 1
样例输入
2 1
我的代码
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
int main ()
{
int a,b,c,d,f=999999999,g,h;
float e;
scanf("%d%d",&a,&b);
while(cin>>c>>d)
{
e=sqrt((a-c)*(a-c)+(b-d)*(b-d));
if(f>e)
{
f=e;
g=c;
h=d;
}
}
cout<<g<<" "<<h;
}
5、
描述
一个不多于5位的正整数a,要求:1.求出它是几位数;2.分别打出每一位数字;3.按逆序打出各位数字,例如原数为321,应输出123。
输入
一行,不多于5位的正整数
输出
三行
第一行,一个整数,表示整数a的位数
第二行,正序输出整数a的每一位,每位间一个空格
第三行,逆序输出整数a,如果a是321,则输出123,如果a是100,则输出1
样例输入
123
样例输出
3
1 2 3
321
我的代码
#include<iostream>
#include<cmath>
using namespace std;
int main()
{int a,b=0,c,d,q,v,s=0;
cin>>a;
c=a;
d=a;
while(a!=0)
{a/=10;
++b;}
cout<<b<<endl;
for(int i=1;i<=b;i++)
{q=pow(10,b-i);
v=c/q;
c=c-v*q;
cout<<v<<" ";}
cout<<endl;
do{s=s*10+d%10;
d/=10;}
while(d!=0);
{cout<<s;}
return 0;
}