C语言基础学习----循环结构设计
验证哥德巴赫猜想,任意一个很大的偶数,都可以写成两个素数之和
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 5 void main() 6 { 7 int x; 8 int p=1,q,i,j; 9 int flagp,flagq; 10 do 11 { 12 x=0; 13 printf("input an even number\n"); 14 scanf("%d",&x); 15 }while(x%2!=0); 16 do 17 { 18 p+=1; 19 q=x-p; 20 flagp=1; 21 flagq=1; 22 for(i=2;i<=(int)(floor(sqrt((double)(p))));i++) 23 { 24 if((p%i)==0) {flagp=0; break;} //判断q是否为素数 25 26 } 27 if(flagp==0) continue; //当p不是素数时,不再判断q是否为素数,执行下一次循环 28 j=2; 29 while(j<=(int)(floor(sqrt((double)(q))))) //当p为素数时,判断q是否为素数 30 { 31 if((q%j)==0) {flagq=0; break;} 32 j++; 33 } 34 }while(flagp*flagq==0); 35 printf("%d=%d+%d\n",x,p,q); 36 }
跳转语句
- break 只能用于循环语句和switch语句中。 循环体中经常和if 配套使用
- continue 只能用于循环语句、循环体中。程序跳过continue语句后面的其余语句,接着执行循环体的下一次循环。
1 #include<stdio.h> 2 void main //输出100-200之间的奇数 3 { 4 int n; 5 n=100; 6 while(n<=200) 7 { 8 if(n%2==0) 9 { 10 n++; 11 continue; //跳过后面语句,执行下一次循环 12 } 13 printf("%d\n",n); 14 n++; 15 } 16 }
- goto 无条件转移语句 goto跳转到同一函数内部某个位置的一个标号语句处。可以从循环体内部跳出循环,在多层循环中,可以跳到任意一层循环体。
- goto 标号; //标号用标识符表示
- 标号:语句;
1 #include<stdio.h> 2 int main() 3 { 4 int i,sum=0; 5 i=1; 6 loop:if(i<=100) 7 { 8 sum+=i; 9 i++; 10 goto loop; //goto后没有: 11 } 12 printf("sum=%d",sum); 13 getchar(); 14 return 0; 15 }
循环结构
- do while //当条件为真时执行循环,为假则结束循环
- do until //当条件为真时结束循环,为假时执行循环
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<math.h> 4 int main() 5 { 6 double s,t,x; //s表示多项式的值,t表示每一项的值 7 int n; 8 printf("input the value of x:\n"); 9 scanf("%lf",&x); 10 t=x; 11 n=1; 12 s=x; 13 do //计算sin(x)的值,最后一项绝对值小于1e-7时截止 14 { 15 n+=2; 16 t=t*(-x*x)/((float)(n)-1)/((float)(n)); //n值为1,3,5,7.... 后一项是前一项乘一个因子(-x*x)/(n*(n-1)) 17 s=s+t; 18 }while(fabs(t)>=(1e-8)); //fabs(double num)返回绝对值,属于math.h函数库 19 printf("sinf(%f)=%lf\n",x,s); 20 21 system("pause"); 22 return 0; 23 }
求两个数的最大公约数和最小公倍数
1 #include<stdio.h> 2 #include<stdlib.h> 3 int main() 4 { 5 int x,y,num1,num2,temp; 6 printf("input two number num1 and num2 \n"); 7 scanf("%d %d",&num1,&num2); 8 if(num1>num2) 9 { 10 temp=num1; 11 num1=num2; 12 num2=temp; 13 } 14 x=num1; 15 y=num2; 16 while(y!=0) //迭代计算最大公约数,x为二者中较小的一个数 17 { 18 temp=x%y; 19 x=y; 20 y=temp; 21 } 22 printf("最大公约数是:%d\n",x); 23 printf("最小公倍数是:%d\n",num1*num2/x); 24 25 system("pause"); 26 return 0; 27 28 }
浙公网安备 33010602011771号