### I. circulation

Input a number and output several digits

```
#include
int main()
{
int x;
int n = 0;
scanf("%d" , &x);
n++;
x /= 10;
while(x > 0){
n++;
x /= 10;
}
printf("%d\n",n);
return 0;
}
```

### 2、 While loop

The circulatory body should have the opportunity to change the conditions and avoid the dead circulation

The meaning of while loop is: when the condition is satisfied, repeat the statement inside the loop continuously

Before loop execution, judge whether to continue the loop, so it is possible that the loop has not been executed once

Let’s see if the code above is a bit redundant. Let’s change it, but there is still a problem that there are no digits when entering 0

```
#include
int main()
{
int x;
int n = 0;
scanf("%d" , &x);
while(x > 0){
n++;
x /= 10;
}
printf("%d\n",n);
return 0;
}
```

### 3、 Do while loop

Do not check when entering the cycle, and check whether the conditions are met after another round,**At least one loop**The specific format is as follows

```
do{
Circulatory body
}Whlie (condition)
```

Algorithm of digit number

- User input x
- Initialize n to 0
- X = x / 10, bits removed
- n++
- If n > 0, go back to 3
- Otherwise, n is the result

Change the code above

```
#include
int main()
{
int x;
int n = 0;
scanf("%d" , &x);
do{
n++;
x /= 10;
}while(x > 0);
printf("%d\n",n);
return 0;
}
```

Enter 0 to display the number of digits,

### 4、 Cycle calculation

```
int x;
int ret = 0;
scanf("%d" , &x);
int t = x;
while(x > 1){
x /= 2;
ret++;
}
printf("log2x of %d is %d" , t , ret );
```

#### Guessing game

Let the computer think of a number, and then let the user guess. Every time the user enters an array, he will be told whether it is large or small, until the user guesses it, and how many times he guesses it

Here we use a random number

```
#include
#include
#include
int main(){
srand(time(0));
int a = rand();
//But this random number is a little big. Here we take the remaining 100
printf("%d\n" , a%100);
return 0;
}
```

The specific implementation is as follows:

```
#include
#include
#include
int main(){
srand(time(0));
int number = rand()%100+1;
int a = 0;
int count = 0;
//To cheat
// printf("%d\n",number);
while(number != a){
Printf ("parent, please enter a number within 100:");
scanf("%d", &a);
if(a > number){
Printf ("pro, you have entered a large number \ n");
}else if(a < number){
Printf ("pro, the number you entered is smaller \ n");
}
count++;
}
Printf ("Congratulations, the input is correct! You have entered% d times ", count";
return 0;
}
```

#### Arithmetic average

Let the user enter a series of positive integers, then enter – 1 for the end of the input, and then calculate the average of these numbers

```
int number;
int count = 0;
int sum = 0;
Printf ("please enter the number (- 1 end):");
scanf("%d" , &number);
while(number != -1){
Printf ("please enter the number (- 1 end):");
count++;
sum += number;
scanf("%d" , &number);
}
Printf ("you have entered% d times in total, with an average of% d", count, sum / count);
```

### 5、 Integer inversion

**Do% 10 on an integer to get its single digit**

**If you do the / 10 operation on an integer, remove its single digits**

Find: enter a positive integer, and enter the number in reverse order

```
int number;
int digit;
int ret = 0;
Printf ("please enter number:");
scanf("%d" , &number) ;
while(number != 0){
digit = number%10;
//printf("%d",digit);
ret = ret * 10 + digit;
printf("x=%d,digit=%d,ret=%d\n", number, digit, ret);
number /= 10;
}
printf("%d",ret);
```

### 6、 For loop

For loop is like a counting loop. Set a counter, initialize it, and then repeat the loop body before the counter reaches a certain value. For each cycle, the calculator adjusts in a certain step.

Calculate n!

```
#include
int main(){
int n;
scanf("%d" , &n);
int fact = 1;
// for(int i = 1; i<=n; i++){
// fact *= i;
// }
for(int i = n; i>1; i--){
fact *= i;
}
printf("%d!=%d" , n , fact);
return 0;
}
```

#### Calculation and selection of cycle

For (initial action; condition; action of each round){

Circulatory body;

}

**Every expression in for can be omitted**, semicolon cannot be omitted

```
#include
int main(){
int i;
for(i = 0; i<5; i++){
printf("i=%d\n" , i);
}
Printf ("\ nlast I =% d \ n", I);
return 0;
}
i=0
i=1
i=2
i=3
i=4
The last i=5
```

- If there are fixed times, use for loop
- If you have to do it once, use do? While
- While for other cases

### 7、 Cycle control

Prime: a number that can only be divided by 1 and itself, excluding 1

```
int x;
scanf("%d" , &x);
int i;
int isPrime = 1;
for(i=2; i
```

#### Nested loop

Prime numbers within 100

```
#include
int main(){
int x;
for( x=1; x<=100; x++){
int i;
int isPrime = 1;
for(i=2; i
```

You can also do this, and you can work out 50 prime numbers

```
#include
int main(){
int x;
int cnt = 0;
// for( x=1; cnt<50; x++){
x = 1;
while(cnt < 50){
int i;
int isPrime = 1;
for(i=2; i
```

#### Jump out of a nested loop

**Break and continue can only loop on the layer where they are,**

**Goto: jump directly to your designated location**

#### Coin up

How to use dimes 1, 2 and 5 to get a sum of less than 10 yuan,**Relay break, too much trouble**

```
int x;
int exit = 0;
int one, two, five;
Printf ("please enter amount:");
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 ("can be composed of% d 1 corners and% D 2 corners and% d 5 corners as% d yuan \ n", one, two, five, x);
exit = 1;
break;
}
}
if (exit == 1) break;
}
if (exit == 1) break;
}
```

**Goto, you can use this when there are multiple loops, and do not use it when there are others**

```
#include
int main(){
int x;
int one, two, five;
Printf ("please enter amount:");
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 ("can be composed of% d 1 corners and% D 2 corners and% d 5 corners as% d yuan \ n", one, two, five, x);
//Jump directly to your designated position
goto out;
}
}
}
}
out:
return 0;
}
```

### 8、 Cyclic application

#### Sum of the first n terms

$$

f(n) = 1+1/2+1/3 +….+1/n

$$

```
#include
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\n", sum);
}
return 0;
}
```

But what about this?

$$

f(n)=1-1/2+1/3-1/4+…+1/n

$$

There are many ways to do this. Here I wrote one myself

```
#include
int main(){
int n;
int i;
double sum = 0.0;
scanf("%d" , &n);
for(i=1; i<=n; i++){
if(i%2 == 0){
sum -= 1.0/i;
}else{
sum += 1.0/i;
}
printf("%f\n", sum);
}
return 0;
}
```

#### Integer factorization

- Input a non negative integer and output each digit of it in positive order
- Input: 1314
- Output: 1 3 1 4

```
#include
int main(){
int x;
Printf ("enter any number of digits: \ n");
scanf("%d" , &x);
//Number of records
int mask = 1;
//The entered value is assigned to t, which is used to record the number of digits of the input number
int t = x;
while( t > 9){
t /= 10;
mask *= 10;
}
//The value entered by the user and the number of digits of the value entered by the user
printf("x=%d, mask=%d\n",x, mask );
do{
int d = x / mask;
printf("%d",d );
//The last bit does not need to output space
if (mask > 9)
{
printf(" ");
}
//Get his single digit
x %= mask;
//Remove its single digit
mask /= 10;
}while( mask >0);
printf("\n");
return 0;
}
```

#### greatest common factor

- Input two numbers a and B, and output their greatest common divisor
- Input: 12 18
- Output: 6

General calculation

```
int a,b;
int min;
Printf ("please enter two numbers:");
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 (the maximum common divisor of% D and% d is% d \ n ", a, B, RET);
```

But there’s more

- If B is equal to 0, the calculation ends, and a is the greatest common divisor
- Otherwise, calculate the remainder of a divided by B so that a equals B and B equals that remainder
- Back to step one

a | b | T (remainder) |
---|---|---|

12 | 18 | 12 |

18 | 12 | 6 |

12 | 6 | 0 |

6 | 0 |

The code is as follows:

```
#include
int main(){
int a,b;
int t;
scanf("%d %d" , &a , &b);
while(b != 0){
t = a % b;
a = b;
b = t;121
printf("%d,%d\n", a ,b);
}
Printf ("the maximum common divisor is% d \ n", a);
return 0;
}
```