第六章 C控制语句:循环

  • 程序清单6.1,summing.c:

/* summing.c -- 根据用户键入的整数求和 */ 
#include <stdio.h>

int main(void)
{
    long num;
    long sum = 0L; /* 把 sum 初始化为 0 */ 
    int status;
    
    printf("Please enter an integer to be summed ");
    printf("(q to quit): ");
    status = scanf("%ld", &num);
    while (status == 1) /* == 的意思是 "等于" */ 
    {
        sum = sum + num;
        printf("Please enter next integer (q to quit): ");
        status = scanf("%ld", &num);
    }
    printf("Those integers sum to %ld.\n", sum);
    
    return 0;
} 

输出结果:

  • 程序清单6.2,when.c:

// when.c -- 何时退出循环 
#include <stdio.h>

int main(void)
{
    int n = 5;
    
    while (n < 7)
    {
        printf("n = %d\n", n);
        n++;
        printf("Now n = %d\n", n); 
    }
    printf("The loop has finished.\n");
    
    return 0;
}

输出结果:

  • 程序清单6.3:

/* while1.c -- 注意花括号的使用 */
/* 糟糕的代码创建了一个无线循环 */ 
#include <stdio.h>

int main(void)
{
    int n = 0;
    
    while (n < 3)
        printf("n is %d\n", n);
        n++;
    printf("That's all this program does\n");
    
    return 0;
} 

输出结果:

  • 程序清单6.4,while2.c:

/* while2.c -- 注意分号的位置 */ 
#include <stdio.h>

int main(void)
{
    int n = 0;
    
    while (n++ < 3);
        printf("n is %d\n", n);
    printf("That's all this program does.\n");
    
    return 0;
}

输出结果:

  • 程序清单6.5,cmpflt.c:

// cmpflt.c -- 浮点数比较 
#include <stdio.h>
#include <math.h>

int main(void)
{
    const double ANSWER = 3.14159;
    double response;
    
    printf("What is the value of pi?\n");
    scanf("%lf", &response);
    while (fabs(response - ANSWER) > 0.0001)
    {
        printf("Try again!\n");
        scanf("%lf", &response);
    }
    printf("Close enough!\n");
    
    return 0;
}

输出结果:

  • 程序清单6.6,t_and_f.c:

/* t_and_f.c -- C中的真和假的值 */ 
#include <stdio.h>

int main(void)
{
    int true_val, false_val;
    
    true_val = (10 > 2);
    false_val = (10 == 2);
    printf("ture = %d; false = %d \n", true_val, false_val);
    
    return 0;
}

输出结果:

  • 程序清单6.7,truth.c:

// truth.c -- 哪些值为真 
#include <stdio.h>

int main(void)
{
    int n = 3;
    
    while (n)
        printf("%2d is true\n", n--);
    printf("%2d is false\n", n);
    
    n = -3;
    while (n)
        printf("%2d is true\n", n++);
    printf("%2d is false\n", n);
    
    return 0;
}

输出结果:

  • 程序清单6.8,trouble.c:

// trouble.c -- 误用 = 会导致无限循环 
#include <stdio.h>

int main(void)
{
    long num;
    long sum = 0L;
    int status;
    
    printf("Please enter an integer to be summed ");
    printf("(q to quit): ");
    status = scanf("%ld", &num);
    while (status = 1)
    {
        sum = sum + num;
        printf("Please enter next integer (q to quit):\n ");
        status = scanf("%ld", &num);
    }
    printf("Those integers sum to %ld.\n", sum);
    
    return 0;
}

输出结果:

  • 程序清单6.9,boolean.c:

// boolean.c -- 使用 _Bool 类型的变量 variable 
#include <stdio.h>

int main(void)
{
    long num;
    long sum = 0L;
    _Bool input_is_good;
    
    printf("Please enter an integer to be summed ");
    printf("(q to quit): ");
    input_is_good = (scanf("%ld", &num) == 1);
    while (input_is_good)
    {
        sum = sum + num;
        printf("Please enter next integer (q to quit): ");
        input_is_good = (scanf("%ld", &num) == 1);
    }
    printf("Those integers sum to %ld.\n", sum);
    
    return 0;
}

输出结果:

  • 程序清单6.10,sweetie1.c:

// sweetie1.c -- 一个计数循环 
#include <stdio.h>

int main(void)
{
    const int NUMBER = 22;
    int count = 1;
    
    while (count <= NUMBER)
    {
        printf("Be my valentine!\n");
        count++;
    }
    
    return 0;
}

输出结果:

  • 程序清单6.11,sweetie2.c:

// sweetie2.c -- 使用 for 循环的计数循环 
#include <stdio.h>

int main(void)
{
    const int NUMBER = 22;
    int count;
    
    for (count = 1; count <= NUMBER; count++)
        printf("Be my Valentine!\n");
        
    return 0;
}

输出结果:

  • 程序清单6.12,for_cube.c:

/* for_cube.c -- 使用 for 循环创建一个立方表 */ 
#include <stdio.h>

int main(void)
{
    int num;
    
    printf("    n  n cubed\n");
    for (num = 1; num <= 6; num++)
        printf("%5d %5d\n", num, num * num * num);
        
    return 0;
}

输出结果:

  • 程序清单6.13,postage.c:

// postage.c -- 一类邮资 
#include <stdio.h>

int main(void)
{
    const int FIRST_OZ = 46;
    const int NEXT_OZ = 20;
    int ounces, cost;
    
    printf(" ounces  cost\n");
    for (ounces = 1, cost = FIRST_OZ; ounces <= 16; ounces++, cost += NEXT_OZ)
        printf("%5d   $%4.2f\n", ounces, cost / 100.0);
        
    return 0;
}

输出结果:

  • 程序清单6.14,zeno.c:

/* zeno.c -- 求序列的和 */ 
#include <stdio.h>

int main(void)
{
    int t_ct; // 项记和 
    double time, power_of_two;
    int limit;
    
    printf("Enter the number of terms you want: ");
    scanf("%d", &limit);
    for (time = 0, power_of_two = 1, t_ct = 1; t_ct <= limit; t_ct++, power_of_two *= 2.0)
    {
        time += 1.0 / power_of_two;
        printf("time = %f when terms = %d.\n", time, t_ct);
    }
    
    return 0;
}

输出结果:

  • 程序清单6.15 ,do_while.c:

/* do_while.c -- 出口条件循环 */ 
#include <stdio.h>

int main(void)
{
    const int secret_code = 13;
    int code_entered;
    
    do
    {
        printf("To enter the triskaidekaphobia therapy club,\n");
        printf("please enter the secret code number: ");
        scanf("%d", &code_entered);
    } while (code_entered != secret_code);
    printf("Congratulations! You are cured!\n");
    
    return 0;
} 

输出结果:

  • 程序清单6.16,entry.c:

/* entry.c -- 入口循环条件 */ 
#include <stdio.h>
 
int main(void)
{
    const int secret_code = 13;
    int code_entered;
    
    printf("To enter the triskaidekaphobia therapy club,\n");
    printf("please enter the secret code number: ");
    scanf("%d", &code_entered);
    while (code_entered != secret_code)
    {
        printf("To enter the triskaidekaphobia therapy club,\n");
        printf("please enter the secret code number: ");
        scanf("%d", &code_entered);
    } 
    printf("Congratulations! You are cured!\n");
    
    return 0;
} 

输出结果:

  • 程序清单6.17,rows1.c:

/* rows1.c -- 使用嵌套循环 */ 
#include <stdio.h>
#define ROWS 6
#define CHARS 10

int main(void)
{
    int row;
    char ch;
    
    for (row = 0; row < ROWS; row++)
    {
        for (ch = 'A'; ch < 'A' + CHARS; ch++)
            printf("%c", ch);
        printf("\n");
    }
    
    return 0;
}

输出结果:

  • 程序清单6.18,rows2.c:

// rows2.c -- 依赖外部循环的嵌套循环 
#include <stdio.h>

int main(void)
{
    const int ROWS = 6;
    const int CHARS = 6; 
    int row;
    char ch;
    
    for (row = 0; row < ROWS; row++)
    {
        for (ch = 'A' + row; ch < 'A' + CHARS; ch++)
            printf("%c", ch);
        printf("\n");
    }
    
    return 0;
}

输出结果:

  • 程序清单6.19,scores_in.c:

// scores_in.c -- 使用循环处理数组 
#include <stdio.h>
#define SIZE 10
#define PAR 72

int main(void)
{
    int index, score[SIZE];
    int sum = 0;
    float average;
    
    printf("Enter %d golf scores:\n", SIZE);
    for (index = 0; index < SIZE; index++)
        scanf("%d", &score[index]);        // 读取 10 个分数 
    printf("The scores read in are as follows:\n");
    for (index = 0; index < SIZE; index++)
        printf("%5d", score[index]);       // 验证输入 
    printf("\n");
    for (index = 0; index < SIZE; index++)
        sum += score[index];              // 求总分数 
    average = (float) sum / SIZE;          // 求平均分 
    printf("Sum of scores = %d, average = %.2f\n", sum, average);
    printf("That's a handicap of %.0f.\n", average - PAR);
    
    return 0;
} 

输出结果:

  • 程序清单6.20,powwer.c:

// powwer.c -- 计算数的整数幂 
#include <stdio.h>

double power(double n, int p); //  ANSI 函数原型 

int main(void)
{
    double x, xpow;
    int exp;
    
    printf("Enter a number and the positive integer power");
    printf(" to which\nthe number will be raised.Enter q");
    printf(" to quit.\n");
    while (scanf("%lf%d", &x, &exp) == 2)
    {
        xpow = power(x, exp); // 函数调用 
        printf("%.3g to the power %d is %.5g\n", x, exp, xpow);
        printf("Enter next pair of number or q to quit.\n");
    }
    printf("Hope you enjoyed this power trip -- bye!\n");
    
    return 0;
}
 
double power(double n, int p) // 函数定义 
{
    double pow = 1;
    int i;
    
    for (i = 1; i<= p; i++)
        pow *= n;
        
    return pow;              // 返回 pow 的值 
} 

输出结果:

  • 编程练习

题目1,方法:保存并打印小写字母。示例代码6_1.c:

#include <stdio.h>
#define SIZE 26

int main(void)
{
    int i;
    char letter[SIZE];
    
    for (i = 0; i < SIZE; i++)
        letter[i] = 'a' + i;
    printf("Here are %d of lower case letters:\n", SIZE);
    for (i = 0; i < SIZE; i++)
        printf("%-3c", letter[i]);
    
    return 0;
}

输出结果:

题目2,方法:打印指定图案。示例代码6_2.c:

#include <stdio.h>

int main(void)
{
    int i, j;
    
    for (i = 1; i <= 5; i++)
    {
        for (j = 0; j < i; j++)
        {
            printf("$");
        }
        printf("\n");
    }
    
    return 0;
}

输出结果:

题目3,方法:打印指定图案。示例代码6_3.c:

#include <stdio.h>
#define LEN 6

int main(void)
{
    int i, j;
    
    for (i = 0; i < LEN; i++)
    {
        for (j = 0; j <= i; j++)
        {
            printf("%c", 'F' - j);
        }
        printf("\n");
    }
    
    return 0;
}

输出结果:

题目4,方法:双重循环打印指定图案。示例代码6_4.c:

#include <stdio.h>
#define LEN 6

int main(void)
{
    int i, j, r, s;
    char ch = 'A';
    
    for (i = 0; i < LEN; i++) // method 1
    {
        for (j = 0; j <= i; j++)
            printf("%c", ch++);
        printf("\n");
    }
    printf("\n");
    
    for (i = 0, r = 0; i < LEN; i++) // method 2
    {
        r += i;
        s = r;
        for (j = 0; j <= i; j++, s++)
            printf("%c", 'A' + s);
        printf("\n");
    }
    
    return 0;
}

输出结果:

题目5,方法:打印指定字符图案。示例代码6_5.c:

#include <stdio.h>

int main(void)
{
    int i, j, num, space;
    char ch;
    
    printf("Please input a upper letter: ");
    scanf("%c", &ch);
    num = ch - 'A';
    for (i = 0, space = num; i <= num; i++, space--)
    {
        for (j = 0; j < space; j++)
            printf(" ");
        for (j = 0; j <= i; j++)
            printf("%c", 'A' + j);
        for (j = i - 1; j >= 0; j--)
            printf("%c", 'A' + j);
        
        printf("\n");
    }
    
    return 0;
}

输出结果:

题目6,方法:计算并打印数值。示例代码6_6.c:

#include <stdio.h>

int main(void)
{
    int i, lower, upper;
    
    printf("Please input the lower and upper limits: ");
    scanf("%d%d", &lower, &upper);
    printf("%-10s%-10s%-10s\n", "Number", "Square", "Cube");
    for (i = lower; i <= upper; i++)
        printf("%-10d%-10d%-10d\n", i, i * i, i * i * i);
    
    return 0;
} 

输出结果:

题目7,方法:倒序打印数组。示例代码6_7.c:

#include <stdio.h>
#include <string.h>
#define LEN 40

int main(void)
{
    int i, size;
    char word[LEN];
    
    printf("Please input the word you want to print: ");
    scanf("%s", word);
    printf("The word you input is :%s\n", word);
    size = strlen(word);
    printf("The convert sequence is:");
    for (i = size - 1; i >= 0; i--) // 注意最后一个字符是空字符 '\0' 
        printf("%c", word[i]);
    
    return 0; 
}

输出结果:

题目8,方法:计算并打印数值。示例代码6_8.c:

#include <stdio.h>

int main(void)
{
    double f_num1, f_num2;
    
    printf("Please input two float numbers: ");
    while (scanf("%lf%lf", &f_num1, &f_num2) == 2)
    {
        printf("(%g + %g) / %g * %g = ", f_num1, f_num2, f_num1, f_num2);
        printf("%g\n", (f_num1 + f_num2) / f_num1 * f_num2);
        printf("Please input two float numbers: ");
    }
    
    return 0;
}

输出结果:

题目9,方法:用函数计算并返回数值。示例代码6_9.c:

#include <stdio.h>

double caculate(double i, double j);

int main(void)
{
    double f_num1, f_num2;
    
    printf("Please input two float numbers: ");
    while (scanf("%lf%lf", &f_num1, &f_num2) == 2)
    {
        printf("(%g + %g) / %g * %g = ", f_num1, f_num2, f_num1, f_num2);
        printf("%g\n", caculate(f_num1, f_num2));
        printf("Please input two float numbers: ");
    }
    
    return 0;
 } 
 
double caculate(double i, double j)
{
    double value;
    
    value = (i + j) / i * j;
    
    return value;
}

输出结果:

题目10,方法:按要求输入并打印数值。示例代码6_10.c:

#include <stdio.h>

int main(void)
{
    int i, lower, upper;
    int sum;
    
    printf("Please input the lower and upper integer limits: ");
    while (scanf("%d%d", &lower, &upper) == 2 && lower < upper)
    {
        sum = 0;
        for (i = lower; i <= upper; i++)
            sum += i * i;
        printf("The sums of the squares from %d to %d is %d\n", lower * lower, upper * upper, sum);
        printf("Please input the lower and upper integer limits: ");
    }
    
    return 0;
}

输出结果:

题目11,方法:输入并打印数组。示例代码6_11.c:

#include <stdio.h>
#define LEN 8

int main(void)
{
    int i;
    int num[LEN];
    
    printf("Please input %d of integers:\n", LEN);
    for (i = 0; i < LEN; i++)
        scanf("%d", &num[i]);
    printf("The convert sequence is:\n");
    for (i = LEN - 1; i >= 0; i--)
        printf("%d ", num[i]);
        
    return 0;
}

输出结果:

题目12,方法:计算级数。示例代码6_12.c:

#include <stdio.h>

int main(void)
{
    int i, j, n, mark;
    double d_num1, d_num2;
    
    printf("Please input the times you want to caculate(q to quit): ");
    while (scanf("%d", &n) == 1 && n > 0)
    {
        d_num1 = 0.0;
        d_num2 = 0.0;
        for (i = 1; i <= n; i++)
        {
            mark = -1;
            for (j = 1; j <= i; j++)
                mark *= -1;
            d_num1 += 1.0 / i;
            d_num2 += 1.0 * mark / i;
        }
        printf("d_num1 is %g\n", d_num1);
        printf("d_num2 is %g\n", d_num2);
        printf("The sum of two float numbers is: %g.\n", d_num1 + d_num2);
        printf("Please input the times you want to caculate(q to quit): ") ;    
    }
    
    return 0;
}

输出结果:

题目13,方法:计算并改变数组的值。示例代码6_13.c:

#include <stdio.h>
#define LEN 8

int main(void)
{
    int i, num;
    int number[8];
    
    num = 1;
    for (i = 0; i < LEN; i++)
    {
        num *= 2;
        number[i] = num;
    }
    i = 0;
    do
    {
        printf("%-5d", number[i]);
        i++;
    } while (i < LEN);
    
    return 0;
}

输出结果:

题目14,输入并计算打印数组。示例代码6_14.c:

#include <stdio.h>
#define LEN 8

int main(void)
{
    int i;
    double f_value;
    double f_a[LEN], f_b[LEN];
    
    f_value = 0.0; 
    for (i = 0; i < LEN; i++)
    {
        printf("Please input the next float number: ");
        scanf("%lf", &f_a[i]);
        f_value += f_a[i];
        f_b[i] = f_value;
    }
    printf("Here are two arrays: \nf_a: ");
    for (i = 0; i < LEN; i++)
        printf("%-10g", f_a[i]);
    printf("\nf_b: ");
    for (i = 0; i < LEN; i++)
        printf("%-10g", f_b[i]) ;
        
    return 0;
} 

示例代码:

题目15,方法:输入并倒序打印字符串。示例代码6_15.c:

#include <stdio.h>
#include <string.h>
#define SIZE 255

int main(void)
{
    int i, j;
    char str[SIZE];
    
    i = 0;
    j = 0;
    printf("Please input a string of characters: ");
    while (scanf("%c", &str[i]) == 1 && str[i] != '\n' && i < SIZE)
        i++;
    printf("The characters you input is: ");
    while (j < i)
        printf("%c", str[j++]);
    printf("\nThe convert sequence is: ");
    do
    {
        printf("%c", str[--i]);
    } while (i);
    
    return 0;
} 

输出结果:

题目16,方法:计算并比较数值。示例代码6_16.c:

#include <stdio.h>
#define ORINGE 100.0

int main(void)
{
    double d_single, d_complex;
    int i;
    
    i = 0;
    d_single = 100.0;
    d_complex = 100.0;
    do
    {
        i++;
        d_single += ORINGE * 0.1;
        d_complex *= 1.05; 
    } while (d_complex < d_single);
    printf("The year is: %d\nThe money of Daphne is: %g\nThe money of Deirdre is: %g\n",
        i, d_single, d_complex);
        
    return 0;
}

输出结果:

题目17,方法:计算并打印结果。示例代码6_17.c:

#include <stdio.h>
#define ORIGEN 100.0
#define SPENT 10.0
#define RATE 0.08

int main(void)
{
    int year;
    double money, sum;
    
    year = 0;
    sum = 0.0;
    money = ORIGEN;
    while (money > 0)
    {
        money = money * (1 + RATE) - SPENT;
        year++;
        printf("Year: %-5d  Balance: %-g\n", year, money);
    }
    sum = year * SPENT + money;
    printf("It takes %d years to consum all the money, and he gets %-5g $ in total.", year, sum);
    
    return 0;
} 

输出结果:

题目18,方法:计算并输出数值。示例代码6_18.c:

#include <stdio.h>
#define DUNBAR 150
#define ORIGEN 5

int main(void)
{
    int weeks, friends;
    
    weeks = 0;
    friends = ORIGEN;
    while (friends < DUNBAR)
    {
        friends = 2 * (friends - 1);
        weeks += 1;
        printf("IN %d week, Rabnud has %d friends.\n", weeks, friends);
    }
    
    return 0;
}

输出结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值