1.编写一个程序,创建一个包含26个元素的数组,并在其中存储26个小写字母。然后打印数组的所有内容。

#include <stdio.h>

int main(void)
{
int num = 26-1;
int i;
char list[26-1];
char ch = 'a'; for (i = 0; i <= num; i++, ch++)
list[i] = ch;
for (i = 0; i <= num; i++)
printf("%c", list[i]);
getchar();
return 0;
}

2.使用嵌套循环,按下面的格式打印字符:

$

$$

$$$

$$$$

$$$$$

#include <stdio.h>

int main(void)
{
int m, n;
int num = 5; for (m = 0; m < num; m++)
{
for (n = 0; n <= m; n++)
{
printf("$");
}
printf("\n");
}
getchar();
return 0;
}

3.使用嵌套循环,按下面的格式打印字母:

F

FE

FED

FEDC

FEDCB

FEDCBA

注意:如果你的系统不使用ASCII或其他以数字顺序编码的代码,可以把字符数组初始化为字母表中的字母:

char lets[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

然后用数组下标选择单独的字母,例如lets[0]是'A',等等。

#include <stdio.h>

int main(void)
{
int m, n;
int num = 6; printf("1******\n"); //方法1
for (m = 1; m <= num; m++)
{
char ch = 'F';
for (n = 1; n <= m; n++,ch--)
{
printf("%c", ch);
}
printf("\n");
} printf("2******\n"); //方法2
char lets[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i = 5;
for (m = 0; m <= i; m++)
{
for (n = 0; n <= m; n++)
{
printf("%c", lets[i-n]);
}
printf("\n");
} getchar();
return 0;
}

4.使用嵌套循环,按下面的格式打印字母:

A

BC

DEF

GHIJ

KLMNO

PQRSTU

如果你的系统不使用以数字顺序编码的代码,请参照练习3的方案解决。

#include <stdio.h>

int main(void)
{
int m, n;
int num = 6;
char ch = 'A';
for (m = 1; m <= num; m++)
{
for (n = 1; n <= m; n++, ch++)
{
printf("%c", ch);
}
printf("\n");
}
getchar();
return 0;
}

5.编写一个程序,提示用户输入大写字母。使用嵌套循环以下面金字塔型的格式打印字母(O为空格):

OOOOA

OOOABA

OOABCBA

OABCDCBA

ABCDEDCBA

打印这样的图形,要根据用户输入的字母来决定。例如,上面的图形是在用户输入E后的打印结果。

提示:用外层循环处理行,每行使用3个内层循环,分别处理空格、以升序打印字母、以降序打印字母。如果系统不使用ASCII或其他以数字顺序编码的代码,请参照练习3的解决方案。

#include <stdio.h>

int main(void)
{
int m, n;
char ch; printf("Enter a character:");
scanf("%c", &ch);
for (m = 0; m < ch - 'A' + 1; m++)
{
for (n = 0; n < ch - 'A' + 1 - m; n++)
{
printf(" ");
}
for (n = 0; n <= m; n++)
{
printf("%c",'A' + n);
}
for (n = m - 1; n >= 0; n--)
{
printf("%c", 'A' + n);
}
printf("\n");
}
getchar();
return 0;
}

6.编写一个程序打印一个表格,每一行打印一个整数、该数的平方、该数的立方。要求用户输入表格的上下限。使用一个for循环

#include <stdio.h>
void print_num(int min,int max);
int main(void)
{
int lower, upper;
printf("Please enter the lower limit:");
scanf("%d", &lower);
printf("Please enter the upper limit:");
scanf("%d", &upper);
print_num(lower, upper); printf("Done!\n");
getchar();
return 0;
}
void print_num(int min, int max)
{
int n;
for (n = min; n <= max; n++)
{
printf("%d\t%d\t%d\n", n, n*n, n*n*n);
}
}

7.编写一个程序把一个单词读入一个字符数组中,然后倒序打印这个单词。提示:strlen()函数(第4章介绍过)可用于计算数组最后一个字符的下标。

#include <stdio.h>
int main(void)
{
char str[30];
int i, max; printf("Please input a word:");
scanf("%s", str);
max = strlen(str) - 1;
printf("%s|", str);
for (i = max; i >= 0; i--)
{
printf("%c", str[i]);
} printf("\nDone!\n");
getchar();
return 0;
}

8.编写一个程序,要求用户输入两个浮点数,并打印两数之差除以两数乘积的结果。在用户输入非数字之前,程序应循环处理用户输入的每对值。

#include <stdio.h>
int main(void)
{
float m,n;
printf("Please input two numbers:");
while (scanf("%f %f", &m, &n) == 2)
{
printf("The result is:%lf\n", (m - n) / (m*n));
printf("Please input two numbers:");
}
printf("Done!\n");
getchar();
return 0;
}

9.修改练习8,使用一个函数返回计算的结果。

#include <stdio.h>
void print_r(float a, float b);
int main(void)
{
float m, n;
printf("Please input two numbers:");
while (scanf("%f %f", &m, &n) == 2)
{
print_r(m, n);
printf("Please input two numbers:");
}
printf("Done!\n");
getchar();
return 0;
}
void print_r(float a, float b)
{
float result = (a - b) / (a * b);
printf("The result is %f\n", result);
}

10.编写一个程序,要求用户输入一个上限整数和一个下限整数,计算从上限到下限范围内所有整数的平方和,并显示计算结果。然后程序继续提示用户输入上限和下限整数,并显示结果,直到用户输入的上限整数小于下限整数为止。程序的运行示例如下:

Enter lower and upper integer limists: 5 9

The sums of the squares from 25 to 81 is 255

Enter next set of limits: 3 25

The sums of the squares from 9 to 625 is 5520

Enter next set of limits: 5 5

Done

#include <stdio.h>
void cal(int min, int max);
int main(void)
{
int upper, lower;
printf("Enter lower and upper integer limits:");
while (scanf("%d %d", &lower, &upper) == 2 && lower < upper)
{
cal(lower, upper);
printf("Enter next set of limits:");
}
printf("Done\n");
getchar();
return 0;
}
void cal(int min, int max)
{
int i;
int sum = 0;
for (i = min; i <= max; i++)
{
sum += i*i;
}
printf("The sums of the squares from %d to %d is %d\n", min*min, max*max,sum);
}

11.编写一个程序,在数组中读入8个整数,然后按倒序打印这8个整数。

#include <stdio.h>
int main(void)
{
int nums[8];
int i;
printf("Enter 8 numbers:");
for (i = 0; i < 8; i++)
scanf("%d", &nums[i]);
for (i = 7; i >= 0; i--)
printf("%d", nums[i]);
printf("\n");
getchar();
return 0;
}

12.考虑下面两个无限序列:

1.0 + 1.0/2.0 + 1.0/3.0 + 1.0/4.0 + ...

1.0 - 1.0/2.0 + 1.0/3.0 - 1.0/4.0 + ...

编写一个程序计算这两个无限序列的总和,直到到达某次数。提示:奇数个-1相乘得-1,偶数个-1相乘得1。让用户交互地输入指定的次数,当用户输入0或负值时结束输入。查看运行100项、1000项、10000项后的总和,是否发现每个序列都收敛于某值?

#include <stdio.h>
float add1(int num);
float add2(int num); int main(void)
{
int num; printf("Enter the number: ");
while(scanf("%d", &num)==1 && num>0)
{
printf("%f\n", add1(num) + add2(num));
printf("Enter the number: ");
}
getchar();
return 0;
} float add1(int num)
{
int i;
float sum = 0.0; for (i = 1; i <= num; i++)
sum += 1.0 / i; return sum;
} float add2(int num)
{
int i;
float sum = 0.0;
int j = -1; for (i = 1; i <= num; i++)
{
j *= -1;
sum += (1.0 / i) * j;
} return sum;
}

13.编写一个程序,创建一个包含8个元素的int类型数组,分别把数组元素设置为2的前8次幂。使用for循环设置数组元素的值,使用do while循环显示数组元素的值。

#include <stdio.h>
#include <math.h>
int main(void)
{
int power_2[8];
int i; for (i = 0; i < 8; i++)
{
power_2[i] = pow(2, i);
} i = 0;
do
{
printf("%d|",power_2[i]);
i++;
} while (i < 8); getchar();
return 0;
}

14.编写一个程序,创建两个包含8个元素的double类型数组,使用循环提示用户为第一个数组输入8个值。第二个数组元素的值设置为第一个数组对应元素的累计之和。例如,第二个数组的第4个元素的值是第一个数组前4个元素之和,第二个数组的第5个元素的值是第一个数组前5个元素之和(用嵌套循环可以完成,但是利用第二个数组的第5个元素是第二个数组的第4个元素与第一个数组的第5个元素之和,只用一个循环就能完成任务,不需要使用嵌套循环)。最后,使用循环显示两个数组的内容,第一个数组显示成一行,第二个数组显示在第一个数组的下一行而且每个元素都与第一个数组各元素相对应。

#include <stdio.h>
int main(void)
{
double a[8], b[8];
int i, j; printf("Enter 8 numbers: ");
for (i = 0; i < 8; i++)
{
scanf("%lf", &a[i]);
for (j = 0, b[i] = 0; j <= i; j++)
b[i] += a[j];
} for (i = 0; i < 8; i++)
printf("%3lf ", a[i]); printf("\n"); for (i = 0; i < 8; i++)
printf("%3lf ", b[i]); getchar();
return 0;
}

15.编写一个程序,读取一行输入,然后输入的内容倒序打印出来。可以把输入储存在char类型的数组中,假设每行字符不超过255。回忆一下,根据%c的转换说明,scanf()函数一次只能从输入中读取一个字符,而且在用户按下Enter键时scanf()函数会生成一个换行字符(\n)。

#include <stdio.h>
#include <string.h>
int main(void)
{
char line[255];
int i, num; scanf("%s", line);
num = strlen(line) - 1; for (i = num; i >= 0; i--)
printf("%c", line[i]); getchar();
return 0;
}

16.Daphne以10%的单利息投资了100美元(也就是说,每年投资获利相当于原始投资的10%)。Deirdre以5%的复合利息投资了100美元(也就是说,利息是当前余额的5%,包含之前的利息)。编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并显示那时两人的投资额。

#include <stdio.h>
double Daphne(int num);
double Deirdre(int num);
int main(void)
{
int num = 1; while (Deirdre(num) <= Daphne(num))
num++; printf("years: %d\nDeirdre: %lf\nDaphne: %lf\n", num, Deirdre(num), Daphne(num)); getchar();
return 0;
}
double Daphne(int num)
{
double sum = 100.0;
int i;
for (i = 1; i <= num; i++)
{
sum += 100.0 * 0.1 ;
}
return sum;
}
double Deirdre(int num)
{
double sum = 100.0;
int i;
for (i = 1; i <= num; i++)
{
sum *= 1.05;
}
return sum;
}

17.Chuckie Lucky赢得了100万美元(税后),他把奖金存入年利率8%的账户。在每年的最后一天,Chuckie取出10万美元。编写一个程序,计算多少年后Chuckie会取完账户的钱?

#include <stdio.h>

int main(void)
{
int year = 0;
double sum = 1000000.0; while (sum > 0)
{
sum *= 1.08;
sum -= 100000.0;
year++;
} printf("%d", year); getchar();
return 0; }

18.Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋友数量以下面的方式增长。第1周少了1个朋友,剩下的朋友数量翻倍;第2周少了2个朋友,剩下的朋友数量翻倍。一般而言,第N周少了N朋友,剩下的朋友数量翻倍。编写一个程序,计算并显示Rabnud博士每周的朋友数量。改程序一直运行,直到超过邓巴数(Dunbar's number)。邓巴数是粗略估算一个人在社交圈中有稳定关系的成员的最大值,该值大约是150。

#include <stdio.h>

int main(void)
{
int i = 1;
int d = 5; while (d < 150)
{
d = (d - i) * 2;
printf("week %d: friends: %d\n", i, d);
i++;
} getchar();
return 0;
}

注:示例代码仅供参考


C Primer Plus 第六版—— 6.16 编程练习题(附代码)的更多相关文章

  1. C++ Primer Plus 第六版笔记

    C++ Primer Plus 第六版笔记 关于对象声明的思考 转自:http://www.cnblogs.com/weiqubo/archive/2009/11/02/1930042.html C+ ...

  2. 《C++ Primer Plus 第六版》读书笔记

    CH1-3:处理数据 1 列表初始化 char c={31325}:不允许缩窄 char c={66}; char c={x}:不能为变量 2 强制类型转换 (typename) value type ...

  3. 《C++Primer》第五版习题答案--第六章【学习笔记】

    <C++Primer>第五版习题答案--第六章[学习笔记] ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2020/1/16 第六章:函数 ...

  4. C Primer Plus(第六版)中文版 中的错误1

    #include<stdio.h> #include<stdlib.h> #include<string.h> #define TSIZE 45 struct fi ...

  5. c++ primer plus 第6版 部分二 5- 8章

    ---恢复内容开始--- c++ primer plus 第6版 部分二    5-  章 第五章 计算机除了存储外 还可以对数据进行分析.合并.重组.抽取.修改.推断.合成.以及其他操作 1.for ...

  6. c++ primer plus 第6版 部分一 1-4章

    c++ primer plus 第6版 源代码 ---编译器---目标代码---连接程序(启动代码--库代码)---可执行代码 源代码扩展名:c   cc   cxx     C    cpp     ...

  7. 读书笔记之:C++ Primer (第4版)及习题(ch12-ch18) [++++]

    读书笔记之:C++ Primer (第4版)及习题(ch12-ch18) [++++] 第12章 类 1. 类的声明与定义:前向声明,不完全类型 2. 从const函数返回*this 3. 可变数据成 ...

  8. 02--读书笔记之:C++ Primer (第4版)及习题

    推荐博客:http://www.cnblogs.com/xkfz007/archive/2012/08/15/2639381.html 第2章 数据和基本类型 1. 整型 2. 习题:左值和右值 3. ...

  9. 《JavaScript权威指南 第六版 中文版》(一)

    <JavaScript权威指南 第六版 中文版> 第二章 词法结构 2.1字符集 JavaScript是使用Unicode字符集编码写的. 2.1.1区分大小写 JavaScript是区分 ...

随机推荐

  1. SpringCloud微服务的Eureka

    一.什么是微服务架构 架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念的跟严格执行SOA到微服务架构的演进过程 作用: ...

  2. 关联mysql失败_Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezon'

    关联mysql失败_Server returns invalid timezone. Go to ‘Advanced’ tab and set ‘serverTimezon’ 时区错误,MySQL默认 ...

  3. Dynamics 365 Customer Enagement中的更改跟踪(change tracking)

    我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...

  4. October 06th, 2019. Week 41st, Sunday

    Life is very capricious. 生命无常. Is life capricious? Maybe. But we can still make life a little more c ...

  5. 剑指Offer-40.数组中只出现一次的数字(C++/Java)

    题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 分析: 我们知道,两个相同的数字异或的结果等于0,所以利用这个性质将数组中所有的数字异或,求得的结 ...

  6. IT兄弟连 HTML5教程 HTML5文字版面和编辑标签 HTML基础标签

    指引 网页中的信息主要是以文本为主的,可以通过字体.大小.颜色.底纹.边框等来设置文本的属性.文字版面的编辑包括文本标签和格式标签两种,在浏览器中显示的文字内容和格式都要在<body>标记 ...

  7. 【algo&ds】【pat】5.并查集及其应用

    1.并查集的定义 在计算机科学中,并查集是一种树型的数据结构,用于处理一些不交集(Disjoint Sets)的合并及查询问题.有一个联合-查找算法(union-find algorithm)定义了两 ...

  8. Jmeter正则提取请求响应数据

    前言 在测试时,我们经常需处理请求返回的响应数据,比如很多时候 cookie 或 token 或 Authorization授权码 会返回在 Response headers(响应头)中,这时我们便需 ...

  9. PAT 1012 The Best Rank 排序

    To evaluate the performance of our first year CS majored students, we consider their grades of three ...

  10. RabbitMQ的管控台的使用说明

    1.RabbitMQ的管控台确实是一个好东西,但是如果是新手,比如刚接触RabbitMQ的时候,看到RabbitMQ的管控台也是一脸懵逼的说,慢慢接触多了,才了解一些使用. 1).RabbitMQ的管 ...