程序清单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;
}
输出结果: