判断是否是素数
#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("是素数\n");
}else {
printf("不是素数\n");
}
return 0;
}
break 和 continue
- break:跳出循环
- continue:跳过循环这一轮剩下的语句进入下一轮
- 只能对它所在的那一层循环做
多重循环
输出100以内的素数
#include<stdio.h>
int main()
{
int 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 ",x);
}
}
printf("\n");
return 0;
}
循环的嵌套
输出前1000的素数:
#include<stdio.h>
int main()
{
int x;
int cnt = 0;
while( cnt < 1000){
int i;
int isPrime = 1; //x是素数
for(i=2;i<x;i++){
if( x % i == 0 ){
isPrime = 0;
break;
}
}
if(isPrime == 1){
printf("%d ",x);
cnt ++;
}
x++;
}
printf("\n");
return 0;
}
接力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 == 10){
printf("可以用%d 个1角和%d 个两角和%d 个五角得到%d 元\n",one,two,five,x);
exit = 1;
break;
}
}
if(exit == 1) break;
}
if(exit == 1) break;
}
return 0;
}
goto
#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 == 10){
printf("可以用%d 个1角和%d 个两角和%d 个五角得到%d 元\n",one,two,five,x);
goto out;
}
}
}
}
out:
return 0;
}
goto语句被称为C语言中的跳转语句,用于无条件跳转到其他标签,它将控制权转移到程序的其他部分。
goto语句一般很少使用,因为它使程序的可读性和复杂性变得更差。
一个遍布goto语句的程序会让让人很难抓住重心,不便于对程序的理解和维护。
不过有的情况可以可以使用goto,比如:从多重循环中直接跳出 ,减少了接力break;
循环应用
求和:
#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("%.2lf",sum);
return 0;
}
正负求和:
#include<stdio.h>
int main()
{
int n;
int i;
double sum = 0.0;
int sign = 1;
scanf("%d",&n);
for(i = 1;i<=n;i++){
sum += sign*1.0/i;
sign = -sign;
}
printf("%.2lf",sum);
return 0;
}
求最大公约数:
输入:两个数a和b,输出:它们的最大公约数
输入:12 18
输出:6
1、枚举法
#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 ",ret);
return 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("%d",a);
return 0;
}
正序分解整数
输入:一个非负整数 输出:正序输出它的每一个数字
输入:13425
输出:1 3 4 2 5
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
int mask = 1;
int t = x;
while(t>9){
t /= 10;
mask *= 10;
}
do{
int d = x / mask;
printf("%d",d);
if(mask>9){
printf(" ");
}
x %= mask;
mask /= 10;
} while(mask>0);
printf("\n");
return 0;
}