##for循环语句:
for(表达式1;表达式2;表达式3)
循环体语句;
表达式1是初始值(先执行)
表达式2是循环条件(决定是否继续执行)(再执行)
循环体语句(接着执行)
表达式3是改变循环条件(最后执行)
说人话就是3改变1的初始值,使其不符合循坏条件,结束循环。(其实循环结构都是由真到假的过程)
for语句的穷举法
for语句我一般解读为:为了表达式2而不断执行
但是for后面接for似乎不能这样解读了(个人感觉)
多接触一下这样的例子,我觉得应该理解为:在…情况下
a b c d分别表示甲乙丙丁
甲说:乙没偷丁偷的,或乙偷了丁没偷
乙说:乙没偷丙偷的,或乙偷了丙没偷
丙说:甲没偷乙偷的,或甲偷了乙没偷
丁说:丁没偷,或丁偷了
请判断谁是小偷
可以令偷的人为1,没偷的为0,满足以上所有条件
其四人要么偷了,要么没偷,可以用穷举法(for for型)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c,d;
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
for(d=0;d<=1;d++)
if((a+b+c+d==1)&&((b==0&&d==1)||(b==1&&d==0))&&((b==0&&c==1)||(b==1&&c==0))&&((a==0&&b==1)||(a==1&&b==0))&&(d==1||d==0))
if(a==1) printf("甲");
else if(b==1) printf("乙");
else if(c==1) printf("丙");
else if(d==1) printf("丁");
return 0;
}
小结:
=与==总搞混,前者是赋值,后者是等于,老是把=当做C语言中的等于
写代码时(codeblocks)遇到中文字出现了乱码的现象,自己找了下别人的解决方法,也记录一下:
Setting——Editor——Encoding Settings——As default encoding 就OK了
求质数
#include <stdio.h>
#include <stdlib.h>
int main()
{
int m,i;
scanf("%d",&m);
int flag=1;
for(i=2;i<=m-1;i++)
if(m%i==0)
{
flag=0;
break;
}
if(flag) printf("%d是质数",m);
else printf("%d不是质数",m);
return 0;
}
小结:
还是那句话,分清==和=,上面的程序用0和1代表了是不是质数,如果能被2——m-1的数整除,那么判断该数是0,并且退出循环!
如果问题为:是不是…,那么可以用0和1去代替
千万别像我下面写的错误示例
int m,i;
scanf("%d",&m);
int flag=1;
for(i=2;i<=m-1;i++)
if(m%i==0)
printf("%d不是质数\n",m);
else
printf("%d是质数\n",m);
这个就是理解成了在2到m-1的情况下,会…,却忽略了for语句的循环性,最后结果就是
6
6不是质数
6不是质数
6是质数
6是质数
真是头大了
九九乘法表
因为要控制行数以及每行的个数,所以要用两个变量控制内循环(每行个数)和外循环(行数)
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for (j=1;j<=i;j++)
printf("%d*%d=%d\t",j,i,j*i);
printf("\n");
}
return 0;
}
小结:
先让每行的值(内循环)执行完,再进行下一行(外循环)
每次内循环结束,进行下一次循环时,内循环继续使用初始值
最后再来个鸡兔同笼(穷举法)
35个头,94只脚
#include <stdio.h>
#include <stdlib.h>
int main()
{
int c,r;
for(c=0;c<=35;c++)
for(r=0;r<=35;r++)
if (c+r==35&&c*2+r*4==94)
printf("鸡%d,兔%d",c,r);
return 0;
}
明显的for for型,现在就容易理解多了
OK,以上为个人自学摸索的经验,不喜勿喷,就这样,把个人认为棘手的内容记录了,下次再见!
标签:感悟,语句,穷举法,int,质数,循环,include,表达式 From: https://blog.csdn.net/Superachieve/article/details/142657522