一、循环的控制
break;跳出循环。
continue;跳过循环的这一轮剩下的进入下一轮。(跳过一轮循环)
判断一个数是否为素数
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
int i;
int IsPrime = 1; //x是素数
for (i = 2; i < x; i++)
{
if (x %i == 0)
{
IsPrime = 0;
break;
}
}
if(IsPrime == 1)
{
printf("%d这个数是素数。\n",x);
}
else
{
printf("%d这个数不是素数。",x);
}
return 0;
}
二、多重循环
求100以内的素数
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
for (x = 2; x < 100; x++)
{
int i;
int IsPrime = 1; //x是素数
for (i = 2; i < x; i++)
{
if (x %i == 0)
{
IsPrime = 0;
break;
}
}
if(IsPrime == 1)
{
printf("%d这个数是素数。\n",x);
}
}
printf("\n");
return 0;
}
循环的嵌套
求前50个素数
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
x = 2;
int cnt = 0;
//for (x = 2; x < 100; x++)
while (cnt < 50)
{
int i;
int IsPrime = 1; //x是素数
for (i = 2; i < x; i++)
{
if (x %i == 0)
{
IsPrime = 0;
break;
}
}
if(IsPrime == 1)
{
printf("%d这个数是素数。\n",x);
cnt++;
}
x++;
}
printf("\n");
return 0;
}
用1角,2角和5角的硬币凑出10元以下的金额
#include <stdio.h>
int main()
{
int x;
int one, two, five;
scanf("%d",&x);
for (one = 1; one < x*10; one++)
{
for (two = 1; two < x*10/2; two++)
{
for (five = 1; five < x*10/5; five++)
{
if(one + two*2 + five*5 == x*10)
{
printf("可以用%d个1角的,%d个2角的,%d个5角的凑成%d元。\n3",one ,two ,five, x);
}
}
}
}
return 0;
}
break和continue只能对所在的循环做
接力break
#include <stdio.h>
int main()
{
int x;
int one, two, five;
int exit =0 ;
scanf("%d",&x);
for (one = 1; one < x*10; one++)
{
for (two = 1; two < x*10/2; two++)
{
for (five = 1; five < x*10/5; five++)
{
if(one + two*2 + five*5 == x*10)
{
printf("可以用%d个1角的,%d个2角的,%d个5角的凑成%d元。\n",one ,two ,five, x);
exit = 1;
break;
}
}
if (exit) break
}
if(exit)break;
}
return 0;
}
if(exit) 等于if(exit == 1)
goto (去哪)
goto语句被称为C语言中的跳转语句,用于无条件跳转到其他标签,它将控制权转移到程序的其他部分。
goto语句一般很少使用,因为它使程序的可读性和复杂性变得更差。
一个遍布goto语句的程序会让让人很难抓住重心,不便于对程序的理解和维护。
不过有的情况可以可以使用goto,比如:从多重循环中直接跳出 ,减少了接力break;
#include <stdio.h>
int main()
{
int x;
int one, two, five;
int exit =0 ;
scanf("%d",&x);
for (one = 1; one < x*10; one++)
{
for (two = 1; two < x*10/2; two++)
{
for (five = 1; five < x*10/5; five++)
{
if(one + two*2 + five*5 == x*10)
{
printf("可以用%d个1角的,%d个2角的,%d个5角的凑成%d元。\n",one ,two ,five, x);
exit = 1;
goto out;
}
}
}
}
out:
return 0;
}
三、循环应用
f(n)=1+1/2+1/3+1/4...1/n
#include <stdio.h>
int main()
{
int n;
int i;
double sum = 0.0;
scanf("%d",&n);
for (i = 1; i <= n; i++)
{
sum += 1.0/i;
}
printf("f(%d)=%f\n",n ,sum);
return 0;
}
f(n)=1-1/2+1/3-1/4...1/n
#include <stdio.h>
int main()
{
int n;
int i;
double sum = 0.0;
//int sign = 1;
double sign = 1.0;
scanf("%d",&n);
for (i = 1; i <= n; i++)
{
sum += sign/i;
sign = -sign;
}
printf("f(%d)=%f\n",n ,sum);
return 0;
}
最大公约数——枚举
#include <stdio.h>
int main()
{
int a,b;
int min;
scanf("%d %d",&a ,&b);
if (a < b)
{
min = a;
}
else
{
min = b;
}
int ret = 0;
int i;
for (i = 1; i < min; i++)
{
if(a%i == 0)
{
if(b%i == 0)
{
ret = i;
}
}
}
printf("%d和%d的最大公约数为%d\n",a ,b ,ret);
return 0;
}
最大公约数——辗转相除
/*
如果b等于0,计算结束,a就是最大公约数;
否则,计算a除以b的余数,让a等于b,而b等于那个余数;
回到第一步。
a = 12;b = 6;
a b t
12 18 12
18 12 6
12 6 0
6 0
*/
#include<stdio.h>
int main()
{
int a,b;
int t;
scanf("%d %d",&a ,&b);
while (b != 0)
{
t = a%b;
a = b;
b = t;
}
printf("gcd=%d",a);
return 0;
}
正序分解整数(不能求700一类的数)
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
x = 13425;
int t=0;
do
{
int d = x%10;
t = t*10 + d;
x /= 10;
} while (x > 0);
printf("x=%d,t=%d\n",x ,t);
x = t;
do
{
int d = x%10;
printf("%d",d);
if (x > 9)
{
printf(" ");
}
x /= 10;
} while (x > 0);
printf("\n");
return 0;
}
正序分解整数(只能求限制位数)
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
// 13425 / 10000 ->1
// 13425 % 10000 ->3425
// 10000 / 10 ->1000
// 3425 / 1000 ->3
// 3425 % 1000 ->425
// 1000 / 10 ->100
// 425 / 100 ->4
// 425 % 100 ->25
// 100 / 10 ->10
// 25 / 10 ->2
// 25 % 10 ->5
// 10 / 10 ->1
// 5 / 1 ->5
// 5 % 10 ->5
// 1 / 10 ->0
// 70000 / 10000 ->7
// 70000 % 10000 ->0
int mask = 10000;
do
{
int d = x / mask;
printf("%d",d);
if (mask > 9)
{
printf(" ");
}
x %= mask;
mask /= 10;
} while (mask > 0);
printf("\n");
return 0;
}
正序分解整数(最终版)
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
// 13425 / 10000 ->1
// 13425 % 10000 ->3425
// 10000 / 10 ->1000
// 3425 / 1000 ->3
// 3425 % 1000 ->425
// 1000 / 10 ->100
// 425 / 100 ->4
// 425 % 100 ->25
// 100 / 10 ->10
// 25 / 10 ->2
// 25 % 10 ->5
// 10 / 10 ->1
// 5 / 1 ->5
// 5 % 10 ->5
// 1 / 10 ->0
// 70000 / 10000 ->7
// 70000 % 10000 ->0
int mask = 1;
int t = x;
while(t>9)
{
t /= 10;
mask *= 10;
}
printf("x=%d,mask=%d\n",x ,mask);
do
{
int d = x / mask;
printf("%d",d);
if (mask > 9)
{
printf(" ");
}
x %= mask;
mask /= 10;
} while (mask > 0);
printf("\n");
return 0;
}
感觉脑子不够用,,