自己练习时手写,难免会有些疏忽遗漏等各种各样问题,错误之处还请指出
但这些代码确实已通过编译,实现了书上的输出结果,还希望能给需要之人作为个小参考
8_1
bool digit_seen[10] = {false}, digit_wr[10] = {false}, flag = false;
printf ('Enter a number: ');
if (digit_seen[digit] == true) {
digit_seen[digit] = true;
printf ('Repeated digits(s): ');
for (int i = 0; i < 10; i ) {
if (digit_wr[i]) printf ('%d ', i);
printf ('No repeated digit\n');
8_2
#define _CRT_SECURE_NO_WARNINGS
printf ('Enter a number:');
for (int i = 0; i < 10; i ) {
printf ('\nOccurrences:\t');
for (int i = 0; i < 10; i ) {
printf ('%3d', digit_wr[i]);
8_3
/* * * * * * * * * * * * * * * * * * * * * * * *
* 连续输入一百以内数,当输入的数小于或等于0 *
* * * * * * * * * * * * * * * * * * * * * * * */
bool digit_seen[10] = {false};
printf ('Enter a number: ');
if (digit_seen[digit] == true) flag = true;
digit_seen[digit] = true;
printf('Repeated digit\n');
printf('No repeated digit\n');
8_4
#define _CRT_SECURE_NO_WARNINGS
#define SIZE (int)(sizeof (a) / sizeof (a[0]))
printf ('Enter %d numbers: ', N);
printf ('In reverse order: ');
for (i = SIZE - 1; i >= 0; i--)
8_5
#define NUM_RATES ((int)(sizeof (value) / sizeof (value[0])))
#define INITIAL_BALANCE 100.00
int i, low_rate, num_years, year, month;
printf ('Enter interst rate: ');
printf ('Enter number of years: ');
scanf ('%d', &num_years);
for (i = 0; i < NUM_RATES; i ) {
printf ('%6d%%', low_rate i);
value[i] = INITIAL_BALANCE;
for (year = 1; year <= num_years; year ) {
for (i = 0; i < NUM_RATES; i ) {
for (month = 1; month <= 12; month ) {
value[i] = ((double)(low_rate i) / 12) / 100.0 * value[i];
printf ('%7.2f', value[i]);
8_6
printf ('Enter message: ');
while (((mess[i]) = getchar () ) != '\n') {
printf ('In B1FF-speak: ');
if ((mess[j] <= 122) && (mess[j] >= 97)){
mess[j] = toupper (mess[j]);
case 'A': printf ('4'); break;
case 'B': printf ('8'); break;
case 'E': printf ('3'); break;
case 'I': printf ('1'); break;
case 'O': printf ('0'); break;
case 'S': printf ('5'); break;
default : printf ('%c', mess[j]); break;
8_7
printf('Enter row %d: ', i 1);
printf('\nColumn totals: ');
8_8
printf('输入学生%d的五门成绩:', i 1);
average = (float) sum / N;
printf('学生%d的总成绩和平均分分别为%d和%.2f\n', i, sum, average);
if (max < a[i][j]) max = a[i][j];
if (mix > a[i][j]) mix = a[i][j];
average = (float) sum / N;
printf('学科%d的平均分是%.2f,最高分是%d,最低分是%d\n', j, average, max, mix);
8_9
srand((unsigned) time(NULL));
for (int m = 0; m < 25; ) {
//如果往上走出表格了,continue重新循环试试别的方向
else if (a[i - 1][j] == true){
if ((a[i 1][j] == true && a[i][j - 1] == true && a[i][j 1] == true)
|| j - 1 < 0 && a[i 1][j] == true && a[i][j 1] == true
|| j - 1 < 0 && i 1 > 9 && a[i][j 1] == true
|| j 1 > 9 && a[i 1][j] == true && a[i][j - 1] == true
|| j - 1 < 0 && i 1 > 9 && a[i][j 1] == true
|| i 1 > 9 && a[i][j 1] == true && a[i][j - 1] == true) break;
} else if (a[i 1][j] == true){
if (a[i - 1][j] == true && a[i][j - 1] == true && a[i][j 1] == true
|| j 1 > 9 && a[i][j - 1] == true && a[i - 1][j] == true
|| j 1 > 9 && i - 1 < 0 && a[i][j - 1] == true
|| j - 1 < 0 && a[i - 1][j] == true && a[i][j 1] == true
|| i - 1 < 0 && a[i][j 1] == true && a[i][j - 1] == true) break;
} else if (a[i][j - 1] == true){
if (a[i 1][j] == true && a[i - 1][j] == true && a[i][j 1] == true
|| i 1 > 9 && a[i - 1][j] == true && a[i][j 1] == true
|| j 1 > 9 && i 1 > 9 && a[i - 1][j] == true
|| i - 1 < 0 && a[i 1][j] == true && a[i][j 1] == true
|| j 1 > 9 && i - 1 < 0 && a[i][j 1] == true
|| j 1 > 9 && a[i - 1][j] == true && a[i 1][j] == true) break;
} else if (a[i][j 1] == true){
if (a[i 1][j] == true && a[i][j - 1] == true && a[i - 1][j] == true
|| j - 1 < 0 && a[i - 1][j] == true && a[i 1][j] == true
|| j - 1 < 0 && i 1 > 9 && a[i - 1][j] == true
|| i 1 > 9 && a[i - 1][j] == true && a[i][j - 1] == true
|| i - 1 < 0 && a[i][j - 1] == true && a[i 1][j] == true) break;
8_10
const int lea[8] = {480, 583, 679, 767, 840, 945, 1140, 1305};
const int arr[8] = {616, 712, 811, 900, 968, 1075, 1280, 1438};
printf ('Enter a 24-hour time:');
scanf ('%d:%d', &hours, &minutes);
time = hours * 60 minutes;
for (int i = 0; i < 8; i ) {
if (fabs(lea[i] - time) < mix) {
mix = fabs(lea[i] - time);
printf('CLosest departure time is %d:%.2d p.m.', lea[m] / 60 - 12, lea[m] % 60);
printf(', arriving at %d:%.2d p.m.', arr[m] / 60 -12, arr[m] % 60);
printf('CLosest departure time is %d:%.2d a.m.', lea[m] / 60, lea[m] % 60);
printf(', arriving at %d:%.2d p.m.', arr[m] / 60 -12, arr[m] % 60);
printf('CLosest departure time is %d:%.2d a.m.', lea[m] / 60, lea[m] % 60);
printf(', arriving at %d:%.2d p.m.', arr[m] / 60, arr[m] % 60);
8_11
printf ('Enter phone number: ');
while ((ch = getchar ()) != '\n') {
if (ch <= 'Z' && ch >= 'A') {
case 65: case 66: case 67:
case 68: case 69: case 70:
case 71: case 72: case 73:
case 74: case 75: case 76:
case 77: case 78: case 79:
case 81: case 82: case 83: case 80:
case 84: case 85: case 86: case 87:
case 88: case 89: case 90:
printf('In numeric form : ');
for (int j = 0; j < i; j ) {
8_12
const int a[26] = {1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10};
printf('Enter a word: ');
while ((ch = getchar()) != '\n') {
if (toupper(ch) < 'A' || toupper(ch) > 'Z') {
printf('Illegal input\n');
sum = a[toupper(ch) - 'A'];
printf('Scrabble value: %d', sum);
8_13
printf ('Enter a first and last name: ');
while ((getchar()) != ' ')
while ((ch2 = getchar()) != '\n') {
printf('You enered the name: ');
for (int j = 0; j < i; j ) {
8_14
printf('Enter a sentence: ');
for (i = 0; i < 100; i ) { //建立字符数字sen并输入句子
if (sen[i] == '!' || sen[i] == '.' || sen[i] == '?') break; //遇到句末符号break跳出循环(i 并没有执行),此时i指向末尾的符号
int pri = i; //记录下句子的长度,以后用于输出
char sen1[100]; //建立一个数组用于存改变顺序后的句子 (一个一个单词地复制)
int over, start; //start为每次开始复制时的数组下标,over为复制结束时的
for (i = i - 1; i >= 0; i--, j ) { //从i-1的位置往前找空格,i-1表示先不处理句末符号
over = i; //下次一个单词的复制就从i(i此时已经i-1)处结束
while (sen[i] != ' ' && i > 0) i--; //遇到空格或者i<=0时,停止寻找
start = i 1; //开始一个单词的复制,下标应该在空格后一个
if (i == 0) start--; //这个if只针对已经复制到原句的第一个单词的情况,start需要从零开始故减1
for (; start <= over; start , j ) {
sen1[j] = sen[start]; //复制单词
sen1[j] = ' '; //每个单词后加个空格
sen1[j - 1] = sen[pri]; //之后就是sen1数组的输出了!
printf('Reversal of sentence: ');
for (int m = 0; m < pri 1; m ) {
8_15
printf('Enter message to be encrypted: ');
if (sen[i] == '\n') break;
printf('Enter shift amout (1~25): ');
printf('Encrypted message: ');
for (int j = 0; j < i 1; j ) {
if (sen[j] <= 'z' && sen[j] >= 'a') {
printf('%c', ((sen[j] - 'a') n) % 26 'a');
} else if (sen[j] <= 'Z' && sen[j] >= 'A') {
printf('%c', ((sen[j] - 'A') n) % 26 'A');
8_16
//定义一个整数数组用来记录每个字母出现的次数。第一输入单词,
//对应数组元素加一,第二次输入减一,若最后每个元素都为零则 为变为词
printf('Enter first word: ');
for (i = 0; i < 20; i ) {
if (!isalpha(word[i]) && word[i] != '\n') {
printf('Illegal input!');
if (word[i] == '\n') break;
word[i] = tolower(word[i]);
printf('Enter second word: ');
for (i = 0; i < 20; i ) {
if (!isalpha(word[i]) && word[i] != '\n') {
printf('Illegal input!');
if (word[i] == '\n') break;
word[i] = tolower(word[i]);
for (i = 0; i < 26; i ) {
if (flag) printf('The words are not anagrams.');
else printf('The words are anagrams.');
8_17
printf('This is program creates a magic square of a specified size.\n');
printf('The size must be an odd number between 1 and 99.\n');
printf('Enter size of magic square: ');
for (int i = 0; i < size; i ) {
for (int j = 0; j < size; j ) {
int i = 0, j = size / 2, num = 1;
if (num > size * size) break;
for (i = 0; i < size; i ) {
for (j = 0; j < size; j ) {
printf('%3d', square[i][j]);