循环结构
for (循环变量赋初值;条件;循环变量改变)
{语句体;
}
循环变量赋初值可以省略,但是分号不可以省略
可以省略条件,如果省略了条件,表示条件永远成立,分号不能省略(死循环)
循环变量的改变也可以省略,分号不能少。
三部分都可以省略,但分号不能少。(死循环)for(;;)
特别的当for只管一条语句的时候,则可以省略{}
在做关于for的程序时,我们要从整体上来分析程序的功能,而不是一条一条来分析。
while(条件)
{
语句体
}
执行过程:当条件成立就做语句体,当不成立就退出。
main()
{
int i,x=0,y=0;
for(i=1;i<=20;i++)
{
x++;
if(i%3==0 || i%2==0)
{
y++=0;
continue;
}
y++;
x++;
}
printf("x=%d,y=%d",x,y);
}
continue是终止本次循环,不在做本次循环。继续下一次循环。
break是强制终止循环。
在c程序里面几个用到break
1 、switch...case语句 break终止这个语句
2、break终止循环 for while do... whole
printf("请输入一个整数:");
int a=0,gw=0,sw=0,bw=0;
scanf("%d",&a);
if(a>=100 && a<1000)
{
gw = a%10;
sw = a/10%10;
bw = a/100;
}else{
printf("不是三位数");
}
printf("a=%d,gw=%d,sw=%d,bw=%d",a,gw,sw,bw);
int score;
char degree;
printf("请输入分数");
scanf("%d",&score);
if(score<0 || score>100)
{
printf("输入的数字不合法");
}else{
switch(score/10)
{
case 10:
case 9 : degree='A'; break;
case 8 : degree='B'; break;
case 7 : degree='C'; break;
case 6 : degree='D'; break;
default : degree='E'; break;
};
}
int s=0;
for(int i=0;i<=100;i++)
{
s+=i;
}
printf("s=%d",s);
for(i=1;i<=20;i++)
{
x++;
if(i%3==0 || i%2==0)
{
y++;
continue;
}
y++;
x++;
}
printf("x=%d,y=%d",x,y);
printf("dwdd");
int i,gw = 0,sw = 0,bw = 0,sum=0;
for (i=100;i<1000;i++)
{
gw = i%10;
sw = i/10%10;
bw = i/100;
sum = gw*gw*gw+sw*sw*sw+bw*bw*bw;
if(sum == i)
{
printf("%5d",i);
}
}
int i,n=0,a1=1,a2=1,a3,sum=0;
printf("请输入一个整数:");
scanf("%d",&n);
if(n==1)
sum=1;
if(n==2)
sum=2;
if(n>2)
{
for (i=1;i<=n-2;i++)
{
a3=a1+a2;
sum+=a3;
a1=a2;
a2=a3;
printf("sum=%d\n",sum);
}
}
int n=100,fz=1,fm=1, i;
printf("请输入一个整数:");
scanf("%d",&n);
for (i=1;i<=n;i++)
{
sum+=(double)fz/fm;
save=fm;//状态保存法
fm=fz+fm;
fz=save;
}
printf("sum=%.1f\n",sum);
int count=0,i,j;
for( i=1;i<100;i++)
{
for(j=2;j<i;j++)//状态检查法
{
if(i%j==0)
{
break;
}
}
if(i==j)
{
printf("%5d",i);
count++;
if(count%5==0)
{
printf("\n");
}
}
}
检查数i是否是完数,
1、要求各个因子的和等于i说明i就是完数
遍历1到9的每个数,如果发现这个数能被整除,就说明这个数就是i的因子,就把这个数到和里去,
//求完数
int sum,i,j;
for( i=1;i<1000;i++)
{ sum=0;//注意这个sum每次都要重新赋值,要注意放对地方
for(j=1;j<i;j++)//状态检查法
{
if(i%j==0)
{
sum+=j;
}
}
if(i==sum)
{
printf("%5d",i);
}
}
求 1!+2!+3!+...+n!
第一步求阶乘,
第二步求和
int i=0,n,j,sum=0,result;
printf("请输入一个整数");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
result=1;
for(j=1;j<=i;j++)
{
result*=j;
}
sum+=result;
}
输出层数可以变化,n来保存
*
***
*****
*******
1要输出40个空格
2... 要输出39个空格
int n,i,j,k;
printf("请输入一个整数");
scanf("%d",&n);
for(j=1;j<=n;j++)
{
for(i=1;i<=40-j;i++)//先输出空格
{
printf(" ");
}
for(k=1;k<=2*j-1;k++)//再输出*
{
printf("*");
}
printf("\n");
}
输入一个数n求出所有位上的数字之和
int n,i=0;
printf("请输入一个整数");
scanf("%d",&n);
while(n>0) //这里可以写成
{
i+=n%10;
n=n/10;
}
printf("%d",i);
system("pause");
return 0;
}
以后如果条件中有n,就表示你不为零
if(n)等价于if(n!=0)
while(n)等价于while(n!=0)
for(i=1;n;i++)等价于if(i=1;n!=0;i++)
让电脑随机来产生两位数的加减法,然后让用户来选择是否继续作答,如果选择是表示可以继续作答
当用户作答完毕后,要输出答对了几道,答错了几道。
当用户选择是的时候,就循环
直到用户选择否的时候停止
如何让电脑随机出题?
如何在C里面来产生随机数
rand:能产生随机数,z这个函数必须要加入头文件
include "windows.h"
格式:rand()%(大数-小数)+小数
rand()%90+10 //产生一个10到100的随机数
如何来确保,每次运行程序所产生的随机数都不一样
srand((unsigned)time(NULL));
这个代码只需要执行一次
srand((unsigned)time(NULL));
for(int i=1;i<20;i++)
{
int n= rand()%90+10;
printf("%6d",n);
}
算法分析:
1、要产生随机的两个两位数
int a1,a2,key,answer,right,error,temp;
srand((unsigned)time(NULL));
a1=rand()%90+10;
a2=rand()%90+10;
2、运算符也要随机
A:首先也产生一个随机数,
如果是奇数就用+,偶数用—
temp=rand()%90+10;
if(temp%2==0)
oper=='+';
key=a1+a2;
else
{
oper=='-';
if(a1<a2)//确保a1大于a2,不要出现负数
{
temp=a1;
a1=a2;
a2=temp;
}
key=a1-a2;
}
3、 产生正确答案:
最好是在运算符产生的时候,就产生正确答案。
4、把题目显示在屏幕上
printf("%d%c%d=",a1,oper,a2);
5、让用户来作答
scanf("%d",&answer);
6、判断是否正确
if(key==answer)
{
printf("你答对了!");
right++;
}else{
printf("你答错了!");
error++;
}
char answer;
do{
printf("*\n");
printf("要继续吗(y/n):");
answer=getchar();
getchar();//消化掉回车键,不然程序执行出错
}while(answer =='y')
程序实现:
int a1,a2,temp,key,useranswer,right=0,error=0;
char oper,answer;
do{
srand((unsigned)time(NULL));
a1= rand()%90+10;
a2= rand()%90+10;
temp=rand()%90+10;
if(temp%2==0)//使用奇偶数来决定加减法
{
oper='+';
key=a1+a2;
}
else
{
oper='-';
if(a1<a2)//用交换算法来避免出现负数
{
temp=a1;
a1=a2;
a2=temp;
}
key=a1-a2;
}
printf("请输入答案");
printf("%d%c%d=",a1,oper,a2);
scanf("%d",&useranswer);
getchar();//消化掉一个回车
if(key==useranswer)
{
printf("恭喜你答对了!\n");
right++;
}
else
{
printf("遗憾你答错了!\n");
error++;
}
printf("要继续吗(y/n):");
answer=getchar();//消化掉回车键
getchar();//消化掉回车键,不然程序执行出错
}while(answer =='y');
printf("你答对了%d道题,答错了%d道题\n",right,error);
让用户输入用户名和密码如果正确的话,就可以使用程序,如果错误,就不断提示,用户名或密码错误请重新输入
int n,i,j,k;
char answer;
do{
printf("请输入一个整数");
scanf("%d",&n);
getchar();//消化掉回车键,这里很重要。
for(j=1;j<=n;j++)
{
for(i=1;i<=40-j;i++)
{
printf(" ");
}
for(k=1;k<=2*j-1;k++)
{
printf("*");
}
printf("\n");
}
printf("要继续吗(y/n):");
answer=getchar();//消化掉回车键
getchar();//消化掉回车键,不然程序执行出错
}while(answer =='y');