C Primer Plus Test 6(2)
試題來源:C Primer Plus (第6版)中文版?
本章主要學習循環(huán)語句的使用。

6.10編寫一個程序,要求用戶輸入一個上限整數(shù)和一個下限整數(shù),計算從上限到下限范圍內(nèi)所有整數(shù)的平方和,并顯示計算結(jié)果。然后程序繼續(xù)提示用戶輸入上限和下限整數(shù),并顯示結(jié)果,直到用戶輸入的上限整數(shù)等于或小于顯現(xiàn)整數(shù)為止。程序運行示例如下:
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編寫一個程序,在數(shù)組中讀入8個整數(shù),然后按倒序打印著8個整數(shù)
#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 - ...
編寫一個程序計算這兩個無限序列的總和,值達到某次數(shù)。提示:奇數(shù)個-1相乘得-1,偶數(shù)個-1相乘得1,讓用戶交互地輸入指定的次數(shù),當用戶輸入0或者負值時結(jié)束輸入。查看運行100,1000,10000后的綜合,是否發(fā)現(xiàn)每個序列都收斂于某值?
#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編寫一個程序,創(chuàng)建一個包含8個元素的int型數(shù)組,分別把數(shù)組元素設置為2的前8次冪。使用for循環(huán)設置數(shù)組元素的值,使用do while循環(huán)顯示數(shù)組元素的值。
#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編寫一個程序,創(chuàng)建兩個包含8個元素的double類型數(shù)組,使用循環(huán)提
示用戶為第一個數(shù)組輸入8個值。第二個數(shù)組的值設置為第一個數(shù)組對
應元素的累積之和。例如,第二個數(shù)組的第4個元素的值,是第一個數(shù)
組前4個元素之和,第二個數(shù)組的第5個元素的值是第一個數(shù)組的前5個
元素之和(用嵌套循環(huán)可以完成,但是利用第二個數(shù)組的第5個元素是
第二個數(shù)組的第4個元素與第一個數(shù)組的第5個元素之和,只用一個循
環(huán)就能完成任務,不需要使用嵌套循環(huán))。最后,使用循環(huán)顯示兩個
數(shù)組的內(nèi)容,第一個數(shù)組顯示成一行,第二個數(shù)組顯示在第一個數(shù)組
的下一行,而且每個元素都與第一個數(shù)組各元素相對應,
#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編寫一個程序,讀取一行輸入,然后把輸入的內(nèi)容倒序打印出來???/p>
以把輸入存儲在char類型的數(shù)組中,假設每行字符不超過255.回憶一
下,根據(jù)%c轉(zhuǎn)換說明,scanf函數(shù)一次只能從輸入中讀取一個字符,而
且在用戶按下Enter鍵時,scanf函數(shù)會生成一個換行字符(\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個朋友。他注意到他的朋友
數(shù)量以下面的方式增長。第一周少了一個朋友,剩下的朋友數(shù)量翻倍;
第二周少了2個朋友,剩下的朋友數(shù)量翻倍。一般而言,第N周少N個朋
友,剩下的朋友數(shù)量翻倍。編寫一個程序,計算并顯示Rabnud博士每
周朋友的數(shù)量。該程序一直運行,直到超過鄧巴數(shù)。鄧巴數(shù)是粗略估
算一個人在社交圈中有穩(wěn)定關系成員的最大值,該值大約是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;
}
