循环结构程序设计主要知识点。
①.while语句的格式和功能如下:
格式:while(表达式)循环体
功能:当表达式的值为真时,重复执行其后循环体。
说明:循环体是循环语句的内嵌语句,可以是空或复合语句(下同)。
②.do-while语句的格式和功能如下:
格式:do 循环体while(表达式)
功能:重复执行循环体,直到表达式的值为假。
说明:do-while循环至少执行一次循环体。
③.for语句的格式和功能如下:
格式:for(表达式1; 表达式2; 表达式3) 循环体
功能:
(1)计算表达式1;
(2)当表达式2的值为真时,重复执行循环体和计算表达式3。
说明:表达式1、表达式2、表达式3均可缺省,但保留分号。
④continue语句的格式和功能如下:
格式:continue;
功能:跳过循环体中其后程序段(结束本次循环)。
说明:continue语句只能用于循环
continue和break的区别
continue 语句和 break 语句的区别是,continue 语句只结束本次循环,而不是终止整个循环。break 语句则是结束整个循环过程,不再判断执行循环的条件是否成立。而且,continue 只能在循环语句中使用,即只能在 for、while 和 do…while 中使用,除此之外 continue 不能在任何语句中使用。
所以,再次强调:continue 不能在 switch 中使用,除非 switch 在循环体中。此时 continue 表示的也是结束循环体的本次循环,跟 switch 也没有关系。
WA的次数比较多的题。
**♡输入两个正整数 m 和 k,其中1 < m < 100000,1 < k < 5 ,判断 m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。
例如,输入:
43833 3
满足条件,输出YES。
如果输入:
39331 3
尽管有3个3,但不能被19整除,也不满足条件,应输出NO。
输入
m 和 k 的值,中间用单个空格间隔。
输出
满足条件时输出 YES,不满足时输出 NO。
①#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int m,k,n,s;
cin>>m>>k;
e=m;
while (m!=0)
{
n=m%10;
m/=10;
if(n==3)
s++;
}
if(s==k&&e%19==0)
cout<<"YES";
else
cout<<"NO";
第一次写竟然忘记了定义e!!!
}
②#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int m,k,n,s=0,e;
cin>>m>>k;
e=m;
while (e>0)
{ if(e%10==3)
s++;
e/=10;
}
if(s==k&&e%19==0)
cout<<"YES";
else
cout<<"NO";
这次虽然定义了e,但是好像忽略了一个重大问题,在循环后这里e已经变成了0,所以不管怎么除都是0,无法判断正确结果。
}
③#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int m,k,n,s=0,e;
cin>>m>>k;
e=m;
while (e>0)
{ if(e%10==3)
s++;
e/=10;
}
if(s==k&&m%19==0)
cout<<"YES";
else
cout<<"NO";
这个是修改了几遍之后的程序。条件可以为e%10=3,这样又可以少写一些步鄹。
n=m/10;if(n==3);s++
}
**♡这是画矩阵的问题,此类问题有很多种,比如蛋糕裱花,画菱形等,其实在做这种题时
说难也难说简单也简单,关键在于找规律,
输入一行,包括四个参数:前两个参数为整数,依次代表矩形的高和宽(高不少于3行不多于10行,宽不少于5列不多于10列);第三个参数是一个字符,表示用来画图的矩形符号;第四个参数为1或0,0代表空心,1代表实心。
输出
输出画出的图形。
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int h,k,x;
char c;
int i,j;
cin>>h>>k>>c>>x;
if(x==1)
{
for(i=1;i<=h;i++)
{
for(j=1;j<=k;j++)
{
cout<<c;
}
cout<<endl;
}
}
if(x==0){
for(i=1;i<=h;i++){
if(i==1||i==h)
{
for(j=1;j<=k;j++)
{
cout<<c;}
cout<<endl;
}
else{
for(j=1;j<=k;j++)
{
if(j==1||j==k)
{cout<<c;}
else{
cout<<" ";
}
} cout<<endl;
}
}
}
关于敲七
**♡输出7和7的倍数,还有包含7的数字。例如(17,27,37...70,71,72,73...)
①#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int N,s,i;
cin>>N;
for(i=1;i<=N;i++)
{
if(i%7==0)
cout<<i<<endl;
else
{
if(i%10==7)
cout<<i<<endl;
}
}
}这个程序只能输出7的倍数和个位含有7的数,无法输出十位数和其他位数上的7比如71 72等
②#include <iostream>
using namespace std;
int main()
{
int N,i;
cin>>N;
for(i=1;i<=N;i++)
{
if(i%7==0)
cout<<i<<endl;
else
{
int s=i;
while(s>0)
{
if(s%10==7)
{cout<<i<<endl;
break;}
s/=10;
}
} 这个加上s/=10后,就可以把这个问题解决了。
}
}
**♡输入n,输出一个n*n的正方形,正方形由符号c1和c2组成,正方形的四条边和对角线由c1组成,其余部分由c2组成。
#include<iostream>
using namespace std;
int main()
{
int n,i,j;
char c1,c2;
cin>>n>>c1>>c2;
for(i=0;i<n;i++)
{
if(i==0||i==n-1)
{
for(j=0;j<n;j++)
{
cout<<c1;
}
}
else
{
for(j=0;j<n;j++)
{
if(j==0||j==n-1||j==i||j==(n-i-1))
{
cout<<c1;
}
else
{
cout<<c2;
}
}
}
cout<<endl;
}
}
.多组输入 余数相同问题的多组输入
#include<iostream>
#include<iomanip>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{
int a,b,c;
int d,e,f;
int x;
while(cin>>a>>b>>c)
{
x=2;
d=a%x;e=b%x;f=c%x;
while(d!=e||d!=f)
{
x++;
d=a%x;e=b%x;f=c%x;
}
cout<<x<<endl;
}
return 0;
}
printf("%.2lf%%\n)",(1.0*m*100)/n,)
输出保留两位小数的浮点数。如20.00%
超级坑的一道题!!!!
描述:
一个不多于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 x=0 , s,n = 0,m,t=0,temp,f=0,number;
{
cin>>x;
temp=x;
s=x;
for (n = 0; x > 0; n++)
{
x /= 10;
}
cout<<n<<endl;
number=n;
int p=pow(10,number-1);
for(int i=1;i<=n;i++)
{
t=s/p;
s=s-t*p;
p=p/10;
cout<<t<<" ";
}
cout<<endl;
for(int i=0;i<n;i++)
{
m=temp%10;
f=f*10+m;
temp/=10;
}
cout<<f<<endl;
}
我的感想,循环这部分题真的比前面的顺序结构和条件语句难好多,这里要思考的问题也很多,有很多时候条件的选择,定义,及赋初值,替换等等好多细节问题如果不注意,一不小心就会WA的。所以以后在考虑问题时,一定要全面思考。