此处i++&++i都没有关系
死循环…………
所以此处n++是不可以的,死循环了
如果表达式一开始的结果就为0(假),那么两者会有不同答案
一般表达式二为条件判断语句
注意2)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201213163540595.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly 9ibG9nLmNzZG4ubmV0L1JvaXNh,size_16,color_FFFFFF,t_70)
for循环一次, 都要检测函数getchar()的结果是否为字符c,如果不是,则i去加c,
否则,则退出for循环。在键盘上连续输入,只要不输入回车,就将所有的内容都打印出来。
因为ascii码里边,1=49,2=50;c=90
就近原则!!
1.外层判断循环条件,满足进入外层循环体
2.内层判断循环条件
3.内层循环体执行
4.内层循环变量累加,回到2执行,直到不满足内层条件
5.外层循环变量累加,回到1执行,直到不满足外层循环条件,彻底退出循环
putchar函数是单个字符输出函数。只输出一个字符。此处用printf(“*”)也可以。。。
for(i=0;i<5;i++)
for(j=0;j<100;j++)
{}
for(j=0;j<100;j++)
for(i=0;i<5;i++)
{}
这两个程序哪个执行效率高?
答:
for(i=0;i<5;i++)
for(j=0;j<100;j++)
{}
效率高
双层循环,较长的循环放在内层效率要高
break:跳出的是循环,不是跳出判断!!
两者区别在于,continue是一直执行continue上侧的语句,到continue就停止(结束本次循环),所以不会有出现printf的情况,到最后结束。
break是跳出循环,直接结束。
- n=1,将n赋值为整型,导致最后结果出错,,,n应该赋值为double型
- 没有给b赋初值,导致陷入空集,无法运行
- 在最开始给b赋值为1,导致b变为类似常量的一个东西
-
循环开始使得sum=0;,导致sum一直为0,,,
/*pow()函数用来求x的baiy次幂,x、y及函数值都是double型 , 其原型为:double pow(double x, double y)*/
- 本程序输出的结果是pi=3.141594,但是只有前5位小数3,14159是准确的,因为第7位已经小于10^-6,后面的项没有累加。
类似的题目有:
#include<stdio.h>
int main(){
int num,i,count=0;
printf("请输入一个整数:");
scanf("%d",&num);
if(num==0){
printf("%d不是一个质数!",num);
}
for(i=2;i<=num/2;i++){
if(num%i==0){
count++;
break;
}
}
if(num!=1 && count==0){
printf("%d是一个质数!\n",num);
}else{
printf("%d不是一个质数!\n",num);
}
return 0;
}
#include <stdio.h>
#include <math.h>
int main()
{
int m; // 输入的整数
int i; // 循环次数
int k; // m 的平方根
printf("输入一个整数:");
scanf("%d",&m);
// 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型
k=(int)sqrt( (double)m );
for(i=2; i<=k; i++)
if(m%i==0)
break;
// 如果完成所有循环,那么m为素数
// 注意最后一次循环,会执行i++,此时 i=k+1,所以有i>k
if(i>k)
printf("%d是素数。\n",m);
else
printf("%d不是素数。\n",m);
return 0;
}
#include <stdio.h>
int main()
{
int a=0; // 素数的个数
int num=0; // 输入的整数
printf("输入一个整数:");
scanf("%d",&num);
for(int i=2; i<num; i++)
{
if(num%i==0)
{
a++; // 素数个数加1
}
}
if(a==0)
{
printf("%d是素数。\n", num);
}
else
{
printf("%d不是素数。\n", num);
}
return 0;
}