//1-100累加
/*
累加思想:只需要将每次相加的数字保存起来,再和下一个数字相加即可
1+2+3+4+5+……
3+3+4+5+……
6+4+5+……
10+5+……
即: sum = sum + X
*/
#include<stdio.h>
int main()
{
// int i=1,sum=0;
// while(i<=100){
// sum=sum+i;
// i++;
// }
// printf("%d\n",sum);
return 0;
}
1、while()语句 ----当条件为假时,循环体一次也不执行
int i=1,sum=0;
while(i<=100){
sum=sum+i;
i++;
}
printf("%d\n",sum);
2、do while();语句----括号后面有分号
int i=1,sum=0;
do{
sum=sum+i;
i++;
}
while(i<=100);
printf("%d\n",sum);
区别:
while()语句 -------当条件为假时,循环体一次也不执行
do while();语句----当条件为假时,循环体执行一次
1、for(;;)语句----中间是分号!!!定义中间是逗号!!
int i,sum=0;
for(i=1;i<=100;i++)
sum=sum+i;
printf("%d\n",sum);
2、for(;;)语句----增量为负时
int sum=0;
for(i=100;i>=1;i--)
sum=sum+i;
printf("%d\n",sum);
3、for(;;)语句----表达式1和3可以是与循环控制无关的表达式
int i=0,sum;
for(sum=0;i<=100;i++)
sum=sum+i;
printf("%d\n",sum);
4、for(;;)语句----表达式1和3可以是多个表达式(逗号)
int i,j,sum=0;
for(i=0,j=100;i<j;i++,j--)
sum=sum+i+j; //循环体
sum=sum+(i+j)/2; //循环体结束后再加上中间未取到的值
printf("%d\n",sum);
5、for(;;)语句----表达式2可以是 关系表达式(i<=100),逻辑表达式(a<b && x<y),
数值表达式1,0,字符表达式(c=getchar())!='\n',只要其值为非0,就执行表达式
int i;
char c;
for(i=0;(c=getchar())!='\n';i=i+c); //注意:循环体是空语句,循环体实际上放到了表达式3中
printf("%d\n",i); //作用:不断输入字符,将其ASCII码相加,直到输入换行符
常用于:
char c;
for(;(c=getchar())!='\n';) //作用:不断输入字符,然后将其原样输出,直到输入换行符
printf("%c",c);
等同于
char c;
while((c=getchar())!='\n')
printf("%c",c);
/*
题目:输出4*5的矩阵
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
循环嵌套:
外层循环用来输出一行数据
内层循环用来输出一列数据
*/
//循环嵌套,看i和j的关系
#include<stdio.h>
int main()
{
int i,j;
for(i=1;i<=4;i++) //外层循环用来输出一行数据
{
for(j=1;j<=5;j++) //内层循环用来输出一列数据
{
printf("%d %d\t",i,j);
}
printf("\n");
}
printf("\n");
return 0;
}
输出结果:
1 1 1 2 1 3 1 4 1 5
2 1 2 2 2 3 2 4 2 5
3 1 3 2 3 3 3 4 3 5
4 1 4 2 4 3 4 4 4 5
==> 题目上的数字实际上就是i*j的结果
#include<stdio.h>
int main()
{
int i,j,n=0;
for(i=1;i<=4;i++) //外层循环用来输出一行数据
for(j=1;j<=5;j++,n++) //内层循环用来输出一列数据,n用来累计输出的个数
{
if(n%5==0) //每5个数据换一次行
printf("\n");
printf("%d\t",i*j);
}
printf("\n");
return 0;
}
#include<stdio.h>
int main()
{
int i,j,n=0;
for(i=1;i<=4;i++)
for(j=1;j<=5;j++,n++)
{
if(n%5==0)
printf("\n");
if(i==3 && j==1) //遇到第3行第1列,就终止内循环
break;
printf("%d\t",i*j);
}
printf("\n");
return 0;
}
输出结果:
1 2 3 4 5
2 4 6 8 10
4 8 12 16 20
#include<stdio.h>
int main()
{
int i,j,n=0;
for(i=1;i<=4;i++)
for(j=1;j<=5;j++,n++)
{
if(n%5==0)
printf("\n");
if(i==3 && j==1) //遇到第3行第1列,跳过此次循环,继续执行下一次循环
continue;
printf("%d\t",i*j);
}
printf("\n");
return 0;
}
输出结果:
1 2 3 4 5
2 4 6 8 10
6 9 12 15
4 8 12 16 20
//求pi的值,pi的计算公式:PI/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 …
/*
思路 ==>循环累加问题:
设pi初值为1 ==> 累加就是 ==> pi=pi+X
如何求X:
分子始终为1
分母依次加2 ==> n=n+2
符号每次与上一次相反 ==> sign=sign*(-1) ==> sign=-sign
把符号与分子相结合,设sign初值为1,下一项自然就是-1
所以,X=sign/n
abs(x) ==> 求整数x的绝对值,结果是整型
fabs(x) ==> 求双精度数x的绝对值,结果是双精度型
*/
#include<stdio.h>
#include<math.h>
int main()
{
int sign=1; //sign代表当前项的符号,放到分子上
double pi=0.0,n=1.0,term=1.0; //pi代表多项式的值,n代表分母,term代表当前项的值
while(fabs(term)>=1e-6) //检查当前项的值是否大于1e-6
{
pi=pi+term; //将当前项的值term累加到pi中
sign=-sign; //每循环一次,符号就与上一次的相反
n=n+2; //分母每次加2
term=sign/n; //计算下一项的分母
}
pi=pi*4; //别忘了乘以4,才是pi
printf("%10.8f\n",pi); //注意,输出的是浮点数
return 0;
}
/*
输出结果:
3.14159065
输入输出了8位小数,但是只有前5位是有效数字,因为是1e-6,第6位开始后面的四舍五入了,(1e-6循环50万次)
如果改成while(fabs(term)>=1e-8),输出结果则是 3.14159263,第8位开始后面的四舍五入,(1e-8循环5000万次)
*/
/*
输出斐波那契数列前40项
斐波那契数列,又称黄金分割数列,以兔子繁殖为例子而引入,故又称为兔子数列
即:从第 3 项开始,每一项都等于前两项之和
1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,……
特点是从第三项开始,该数是其前两个数之和
1 + 1 = 2
1 + 2 = 3
2 + 3 = 5
3 + 5 = 8
……
反过来求值:
2 = 1 + 1
3 = 1 + 2
5 = 2 + 3
8 = 3 + 5
……
*/
/*
方法一:把f1作为当前数的前两个数,f2作为当前数的前一个数,f3就是当前数
把第二个值,赋值给第一个值
再把第三个值,赋值给第二个值
以此类推
*/
#include<stdio.h>
int main()
{
int f1=1,f2=1,f3;
int i;
printf("%d\n%d\n",f1,f2);
for(i=0;i<=38;i++) //前2项已经输出,只需要循环38此即可得到前40项
{
f3=f1+f2;
printf("%d\n",f3);
f1=f2; //把第二个值,赋值给第一个值
f2=f3; //把第三个值,赋值给第二个值,然后f1+f2实际上就是f2+f3 = f4
}
return 0;
}
/*
程序改进----方法二:
f1+f2的结果不放在f3中,而放在f1中(因为此时的f1这个变量后面不需要了)
即(第三个值):f1=f1+f2,此时的f1就相当于f3;
再执行下一项f4,即 f2+f1(这里f1实际上是f3)=f4
而此时的f2这个变量后面不需要了,因此就把f2当作f4,即(第四个值):f2=f2+f1
*/
#include<stdio.h>
int main()
{
int f1=1,f2=1;
int i;
for(i=1;i<=20;i++) //一次输出两项,只需输出20次即可
{
printf("%10d %10d ",f1,f2);
if(i%2==0) //每输出4项换一次行
printf("\n");
f1=f1+f2; //f1+f2实际上是f3,放到f1中
f2=f2+f1; //f2+f1实际上是f2+f3=f4,放到f2中,依次类推
}
return 0;
}
//判断素数:输入一个数n,让他依次除以i(i从2到n-1),如果能被其中任意一个数整除,就不是素数
/*
方法1: 如果能被其中任意一个数整除,就break跳出,此时的i肯定小于n,
因为循环次数未达到n次,如果n不能被任何一个数整除,就不会执行break,循环次数就会达到n次
(虽然最后一次判断是i<n,但是,此次循环过后还要i++),所以如果i==n,那就是素数
即:小于n就不是素数,否则就是素数
#include<stdio.h>
int main()
{
int n,i;
printf("输入一个数:\n");
scanf("%d",&n);
for(i=2;i<n;i++) //i取不到1和n
if(n%i==0)
break;
if(i<n) //i的次数未达到n次
printf("%d不是素数\n",n);
else //实际上刚好是i==n
printf("%d是素数\n",n);
return 0;
}
*/
/*
程序改进,其实n不必被 '从2到n-1' 的每个数来除,只需被 '从2到(n-1)/2' 的每个数来除即可,
甚至只需被 '从2到根下n' 的整数来除即可(根下n * 根下n = n) ,注意此时的i可以取到根下n
sqrt是求平方根的函数,参数为双精度,但如果是整型会自动转换为双精度
*/
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,k; //定义k,存放根下n
printf("输入一个数:\n");
scanf("%d",&n);
k=sqrt(n); //双精度型数赋值给了k,又自动转换为了整型
for(i=2;i<=k;i++) //此时的i可以取到n
if(n%i==0)
break;
if(i<=k) //“=”说明可能是被最后一个数整除的
printf("%d不是素数\n",n);
else //如果最后一个数也不能整除,那就i++,所以此时的i一定大于k,且i=k+1
printf("%d是素数\n",n);
return 0;
}
//方法二:预先定义一个标志变量,如果是素数赋值为1,如果不是素数赋值为2,最后判断这个变量的值是否为真
#include<stdio.h>
#include<math.h>
int main()
{
int n,i,k,flag=1; //先定义flag为1
printf("输入一个数:\n");
scanf("%d",&n);
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)
{
flag=0; //如果能被整除,就为0,即下面的条件为假,不是素数
break; //并且停止后续判断
}
if(flag)
printf("%d是素数\n",n);
else
printf("%d不是素数\n",n);
return 0;
}
//求100-200之间的素数
#include<stdio.h>
#include<math.h>
int main()
{
int i,j,k,flag;
for(i=101;i<=200;i++) //也可以i=i+2,因为偶数都不是素数,所以只需要对奇数进行判断即可
{
flag=1; //每次循环需要将flag重置为1
k=sqrt(i);
for(j=2;j<=k;j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag)
printf("%d ",i);
}
return 0;
}
//译密码:将字母往后推4个
/*
#include<stdio.h>
int main()
{
char c;
c=getchar(); //输入字符
while(c!='\n')
{
if((c>='A'&&c<='Z')||(c>='a'&&c<='z')) //如果是字母
{
if((c>='A'&&c<='V')||(c>='a'&&c<='v'))
c=c+4;
else
c=c+4-26;
}
printf("%c",c); //输出字符
c=getchar(); //输入下一个字符
}
printf("\n");
return 0;
}
*/
//程序改进
#include<stdio.h>
int main()
{
char c;
while((c=getchar())!='\n') //前后两个读入字符合并成一个
{
if((c>='A'&&c<='Z')||(c>='a'&&c<='z'))
{
c=c+4;
if((c>='Z'&&c<='Z'+4)||(c>='z'))
c=c-26;
}
printf("%c",c);
}
printf("\n");
return 0;
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.cnblogs.com/wzgwzg/p/16796406.html
内容来源于网络,如有侵权,请联系作者删除!