C Primer Plus Test 6(2)
试题来源:C Primer Plus (第6版)中文版
本章主要学习循环语句的使用。

6.10编写一个程序,要求用户输入一个上限整数和一个下限整数,计算从上限到下限范围内所有整数的平方和,并显示计算结果。然后程序继续提示用户输入上限和下限整数,并显示结果,直到用户输入的上限整数等于或小于显现整数为止。程序运行示例如下:
Enter lower and upper integer limits: 5 9
The sum of the squares from 25 to 81 is 255
Enter next set of limits: 3 25
The sum of the squares from 9 to 625 is 5520
Enter next set of limits: 5 5
Done
#include<stdio.h>
#include<stdlib.h>
int main(){
int lower, upper, i, sum;
sum = 0;
printf("Enter lower and upper integer limits:");
scanf('%d %d", &lower, &upper);
while(lower < upper){
for( i = lower; i <= upper; i++){
sum += i * i;
}
printf("The sum of the squares from %d to %d is %d\n", lower*lower, upper*upper, sum);
printf("Enter next set of limits:");
scanf("%d %d", &lower, &upper);
}
printf("Done\n");
system("pause");
return 0;
}


6.11编写一个程序,在数组中读入8个整数,然后按倒序打印着8个整数
#include<stdio.h>
#include<stdlib.h>
int main(){
int num[8], i;
printf("Enter eight number:");
for(i = 0; i < 8; i ++){
scanf("%d", &num[i]);
}
for( i = 7; i >= 0; i --){
printf("%d ", num[i]);
}
printf("\n");
system("pause");
return 0;
}

6.12考虑下面两个无线序列:
1.0 + 1.0/2.0 + 1.0/3.0 + ...
1.0 - 1.0/2.0 + 1.0/3.0 - ...
编写一个程序计算这两个无限序列的总和,值达到某次数。提示:奇数个-1相乘得-1,偶数个-1相乘得1,让用户交互地输入指定的次数,当用户输入0或者负值时结束输入。查看运行100,1000,10000后的综合,是否发现每个序列都收敛于某值?
#include<stdio.h>
#include<stdlib.h>
int main(){
double num1, num2, sum;
int times, i, status;
printf("Enter the epochs:");
status = scanf("%d", ×);
if( status == 1){
while(times > 0){
num1 = 0;
num2 = 0;
for(i = 1; i < times; i++){
num1 += 1.0 / i;
num += 1.0 /i * pow(-1, i + 1);
}
sum = num1 + num2;
printf("The sum is %lf\n", sum);
printf("Enter the epochs( <=0 to quit):");
scanf("%d", ×);
}
printf("Bye\n");
}else{
printf("Error\n");
}
system("pause");
return 0;
}


6.13编写一个程序,创建一个包含8个元素的int型数组,分别把数组元素设置为2的前8次幂。使用for循环设置数组元素的值,使用do while循环显示数组元素的值。
#include<stdio.h>
#include<stdlib.h>
int main(){
int num[8];
int i;
for(i = 0; i < 8; i ++){
num[i] = pow(2,i);
}
i = 0;
do{
printf("%d\t", num[i]);
i ++;
}while( i < 8);
printf("\n");
system("pause");
return 0;
}


6.14编写一个程序,创建两个包含8个元素的double类型数组,使用循环提
示用户为第一个数组输入8个值。第二个数组的值设置为第一个数组对
应元素的累积之和。例如,第二个数组的第4个元素的值,是第一个数
组前4个元素之和,第二个数组的第5个元素的值是第一个数组的前5个
元素之和(用嵌套循环可以完成,但是利用第二个数组的第5个元素是
第二个数组的第4个元素与第一个数组的第5个元素之和,只用一个循
环就能完成任务,不需要使用嵌套循环)。最后,使用循环显示两个
数组的内容,第一个数组显示成一行,第二个数组显示在第一个数组
的下一行,而且每个元素都与第一个数组各元素相对应,
#include<stdio.h>
#include<stdlib.h>
int main(){
double num[8], num2[8], sum;
int i;
sum = 0.0;
printf("Enter 8 double numbers:");
for(i=0;i<8;i++){
scanf("%lf",&num[i]);
sum += num[i];
num2[i] = sum;
}
for(i=0;i<8;i++){
printf("%.3lf\t",num[i]);
}
printf("\n");
for(i=0;i<8;i++){
printf("%.3lf\t",num2[i]);
}
printf("\n");
system("pause");
return 0;
}


6.15编写一个程序,读取一行输入,然后把输入的内容倒序打印出来。可
以把输入存储在char类型的数组中,假设每行字符不超过255.回忆一
下,根据%c转换说明,scanf函数一次只能从输入中读取一个字符,而
且在用户按下Enter键时,scanf函数会生成一个换行字符(\n)
#include<stdio.h>
#include<stdlib.h>
#define MAX 255
int main(){
char string[MAX];
int i;
printf("Enter a string:");
scanf("%c",&string[0]);
i = 0;
while(string[i] != '\n'){
i++;
scanf("%c",&string[i]);
}
while(i>=0){
printf("%c",string[i]);
i--;
}
printf("\n");
system("pause");
return 0;
}

6.16 Daphne以10%的单利息投资了100美元(也就是说,每年投资获利相当
于原始投资的10%)。Deirdre以5%的复合利息投资了100美元(也就
是说,利息是当前余额的5%,包含之前的利息)。
编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,
并显示那时两人的投资额。
#include<stdio.h>
#include<stdlib.h>
int main(){
double in1, in2, m1, m2;
int i;
m1 = 100.0;
m2 = 100.0;
in1 = 0.1;
in2 = 0.05;
i = 0;
while(m1>=m2){
m1 += 100 * in1;
m2 += m2 * in2;
i ++;
}
printf("%d years, Daphne:%.2lf, Deirdre:%.2f\n",i,m1,m2);
system("pause");
return 0;
}


6.17 Chuckie Lucky赢得了100万美元(税后),他把奖金存入年利率8%的
账户。在每年的最后一天,Chuckie取出10万美元。编写一个程序,
计算多少年后Chuckie会取完账户的钱?
#include<stdio.h>
#include<stdlib.h>
int main(){
float m1, m2, in1;
int i;
in1 = 0.08;
m1 = 1000000;
m2 = 100000;
i=0;
while(m1>0){
m1 += m1 * in1;
m1 -= m2;
i++;
}
printf("%d years ago, he would be use it\n", i);
system("pause");
return 0;
}


6.18 Rabnud博士加入了一个社交圈。起初他有5个朋友。他注意到他的朋友
数量以下面的方式增长。第一周少了一个朋友,剩下的朋友数量翻倍;
第二周少了2个朋友,剩下的朋友数量翻倍。一般而言,第N周少N个朋
友,剩下的朋友数量翻倍。编写一个程序,计算并显示Rabnud博士每
周朋友的数量。该程序一直运行,直到超过邓巴数。邓巴数是粗略估
算一个人在社交圈中有稳定关系成员的最大值,该值大约是150。
#include<stdio.h>
#include<stdlib.h>
int main(){
int begin, i;
begin = 5;
i = 1;
while(begin < 150){
begin = (begin - i) * 2;
printf("%d week, %d friends\n",i,begin);
i++;
}
system("pause");
return 0;
}
