C Primer Plus学习 第六章编程练习

/*test6-1.c
1.编写一个程序,创建一个具有26个元素的数组,并在其中存储26个小写字母。
并让该程序显示该数组的内容。*/
#include 
#define LETTER 26 
int main (void)
{
	char ch[LETTER];
	int i;
	
	printf("输出26个小写字母"); 
	for(i = 0; i < LETTER; i++){
		ch[i] = 'a' + i;
		printf("%2c",ch[i]);
	}
	return 0;
} 

运行结果为:输出26个小写字母: a b c d e f g h i j k l m n o p q r s t u v w x y z

/*test6-2.c
 2.使用嵌套循环产生下列图案:
    $
    $$
    $$$
    $$$$
    $$$$$
*/
#include 
int main (void)
{
	int i, j;
	
	for(i = 0; i < 5; i++){
		for(j = 0; j <= i; j++){
			printf("$");
		}
		printf("\n");
	}
	return 0;
}

运行结果为:

$
$$
$$$
$$$$

$$$$$


/*test6-3.c
3.使用嵌套循环产生下列图案:
F
FE
FED
FEDC
FEDCB
FEDCBA
请注意:如果您的系统不使用ASCⅡ或其他以数字顺序编码的码,您可以把一个字符数组初始化为字母表中的字母:
char lets[26]="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
然后就可以使用数组索引来选用单个的字母,例如lets[0]是'A',等等。*/
#include 
int main (void)
{
	int i, j;
	
	for(i = 0; i < 6; i++){
		for(j = 0; j <= i; j++){
			printf("%c",'F' - j);
		}
		printf("\n");
	}
	return 0;
}

运行结果为:

F
FE
FED
FEDC
FEDCB
FEDCBA

/*test6-4.c
4.让程序要求用户输入一个大写字母,使用嵌套循环产生像下面这样的金字塔图案:
    A
   ABA
  ABCBA
 ABCDCDA
ABCDEDCBA
    这种图案要扩展到用户输入的字符。例如,前面的图案是在输入E时需要产生的。
	提示:使用一个外部循环来处理行,在每一行中使用三个内部循环,
	一个处理空格,一个以升序打印字母,一个以降序打印字母。
	如果您的系统不使用ASCII或类似的以严格数字顺序表示字母的编码,请参见在编程练习3中给出的建议。*/
#include 
int main (void)
{
	int i, j, k, m, n;
	char ch;
	
	printf("请输入一个大写字母:");
	scanf("%c",&ch);				//输入字母 
	printf("你将看到字母金字塔\n");
	n = ch - 'A';
	for(i = 0; i <= n; i++){
		for(j = 0; j < n - i; j++){
			printf(" ");
		}							//控制空格 
		for(m = 0; m <= i; m++){
			printf("%c",ch - n + m);//通过i限制运行次数 
		}							//控制升序打印字母到ch-1 
		for(k = i - 1; k >= 0; k--){
			printf("%c",ch - n + k);
		}							//控制降序打印从ch开始 
		printf("\n");				//换行 
	}
	return 0;
}

运行结果为:(CSDN的编辑器可能对空格有什么误会)

请输入一个大写字母:G
你将看到字母金字塔
            A
          ABA
        ABCBA
      ABCDCBA
    ABCDEDCBA
  ABCDEFEDCBA
ABCDEFGFEDCBA

/*test6-5.c 
5.编写一个程序打印一个表,表的每一行都给出一个整数、它的平方以及它的立方。
要求用户输入表的上限与下限。使用一个for循环。*/
#include 
int main (void)
{
	int n, min, max;
	
	printf("请输入上限数max = ");
	scanf("%d",&max);
	printf("\n");
	printf("请输入下限数min = ");
	scanf("%d",&min);
	printf("\n"); 
	printf("    n     n^2     n^3\n");
	
	for(n = min; n <= max; n++){
		printf("%5d %5d %7d\n", n, n*n, n*n*n);
	} 
	return 0;
}

运行结果为:(CSDN的编辑器可能对空格有什么误会)

请输入上限数max = 9


请输入下限数min = 3


    n     n^2     n^3
    3     9          27
    4    16         64
    5    25         125
    6    36         216
    7    49         343
    8    64         512
    9    81         729

/*test6-6.c
 6.编写一个程序把一个单词读入一个字符数组,然后反向打印出这个词。
 提示:使用strlen()(第4章)计算数组中最后一个字符的索引。*/
#include 
#include 
int main (void)
{
	char word[20];
	int i;
	
	printf("输入一个单词:");
	scanf("%s", &word);
	printf("反向打印\n");

	for(i = strlen(word)-1; i >= 0; i--){
		printf("%c", word[i]);
	}
	return 0;
}
输入一个单词:word
反向打印

drow

/*test6-7.c
7.编写一个程序,要求输入两个浮点数,然后打印出用二者的差值除以二者的乘积所得的结果。
在用户键入非数字的输入之前程序循环处理每对输入值。*/
#include 
int main (void)
{
	float m, n;
	
	printf("输入两个浮点数:");


	while(scanf("%f %f", &m, &n) == 2){
		printf("二者的差值除以二者的乘积所得的结果为:%.2f\n", (m-n)/(m*n));
		printf("输入q结束本程序\n");
		printf("OVER\n");
	return 0;
}
输入两个浮点数:6.66 2.33
二者的差值除以二者的乘积所得的结果为:0.28
输入q结束本程序
q
OVER
/*test6-8.c
 8.对练习7进行修改,让它使用一个函数来返回计算值。*/
#include 
float m_and_n (float m, float n);
int main (void)
{
	float m, n;
	
	printf("输入两个浮点数:");

	while(scanf("%f %f", &m, &n) == 2){
	m_and_n (m, n);
	} 
	printf("OVER\n");
	return 0;
}
float m_and_n (float m, float n){
	printf("二者的差值除以二者的乘积所得的结果为:%.2f\n", (m-n)/(m*n));
	printf("输入q结束本程序\n");
}
输入两个浮点数:2.33 6.66
二者的差值除以二者的乘积所得的结果为:-0.28
输入q结束本程序
q

OVER

/*test6-9.c
9.编写一个程序,要求用户输入下限整数和一个上限整数,
然后,依次计算从下限到上限的每一个整数的平方的加和,最后显示结果。
程序将不断提示用户输入下限整数和上限整数并显示出答案,
直到用户输入的上限整数等于或小于下限整数为止。
程序运行的结果示例应该如下所示:	
	Enter lower and upper integer limits:  5 9
    The sums of the squares from 25 t0 81 is 255
    Enter next set of limits:3 25
    The sums of the squares from 9 t0 625 iS 5520
    Enter next set of limits:5 5
    Done*/	
#include 
int main (void)
{
	int min, max, i, sum;
	
	printf("Enter lower and upper integer limits: ");
	scanf("%d %d", &min, &max);
	while (min < max){
		for(i = min; i <= max; i++){
			sum += i*i;
		}
		printf("he sums of the squares from %d to %d is %d\n", min * min, max * max, sum);
		printf("Enter lower and upper integer limits: ");
		scanf("%d %d", &min, &max);
	}
	printf("OVER");
	return 0;
 } 
Enter lower and upper integer limits: 5 9
he sums of the squares from 25 to 81 is 256
Enter lower and upper integer limits: 9 5

OVER

/*test6-10.c
10.编写一个程序把8个整数读入一个数组中,然后以相反的顺序打印它们。*/
#include 
int main (void)
{
	int a[8], i, j;
	
	printf("输入8个整数:");
	for(i = 0; i < 8; i++){
		scanf("%d", &a[i]);
	} 
	printf("反向打印!\n");
	for(j = 7; j >= 0; j--){
		printf("%2d ", a[j]);
	}
	return 0;
}
输入8个整数:1 2 3 4 5 6 7 8
反向打印!

 8  7  6  5  4  3  2  1

/*test6-11.c
11.考虑这两个无限序列:
    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 +…
    编写一个程序来计算这两个序列不断变化的总和,直到达到某个次数。
	让用户交互地输入这个次数。看看在20次、100次和500次之后的总和。
	是否每个序列都看上去要收敛于某个值?提示:奇数个-1相乘的值为-1,而偶数个-1相乘的值为1。*/
#include 
int main (void)
{
	int i, n, m;
	double sum1, sum2; 
	
	sum1 = 0;
	sum2 = 0;
	m = -1;
	printf("输入你想要的次数:");
	scanf("%d", &n); 
	for(i = 1.0; i <= n; i++){
		m *= -1;
		sum1 += 1.0/i; 
		sum2 += (1.0/i) * m;
	}
	printf("两个数列的结果分别为:%lf ,%lf\n", sum1, sum2);
	
	return 0;
}
输入你想要的次数:20

两个数列的结果分别为:3.597740 ,0.668771

/*test6-12.c
 12.编写一个程序,创建一个8个元素的int数组,
 并且把元素分别设置为2的前8次幂,然后打印出它们的值。
 使用for循环来设置值;为了变化,使用do while循环来显示这些值。*/
#include
#include

int main(void)
{
 int num[8],i;
 for(i=0;i<8;i++){
	num[i] = pow(2,i)
};  //pow乘幂函数 用到math头文件
 i = 0;
 do{
printf("%d\t",num[i]); 
}while(++i<8);
printf("\n");
return(0);
}

1       2       4       8       16      32      64      128

/*test6-13.c
 13.编写一个程序,创建两个8元素的double数组,
 使用一个循环来让用户键入第一个数组的8个元素的值。
 程序把第二个数组的元素设置为第一个数组元素的累积和。
 例如,第二个数组的第4个元素应该等于第一个数组的前4个元素的和,
 第二个数组的第5个元素应该等于第一个数组的前5个元素的和
 (使用嵌套循环可以做到这一点。不过利用第二个数组的第5个元素等于第二个数组的第4个元素加上第一个数组的第5个元素这一事实,
 可以避免嵌套而只使用单个循环来完成这个任务)。
 最后,使用一个循环来显示两个数组中的内容,第一个数组在一行中显示,
 而第二个数组中的每个元素在第一个数组的对应元素之下进行显示。*/
#include 
int main(void)
{
	double arr1[8];
	double arr2[8];	
	int i, j;
	
	printf("请输入8个数:"); 
	for(i = 0; i < 8; i++){  //键入第一个数组的8个元素的值
		scanf("%lf", &arr1[i]);
		for(j = 0, arr2[i] = 0; j <= i; j++){
			arr2[i] += arr1[j];
		}
	}
	for(i = 0; i < 8; i++){
		printf("%8.2lf", arr1[i]);		
	}
	printf("\n");	
	for(i = 0; i < 8; i++){
		printf("%8.2lf", arr2[i]);		
	}
	printf("\n");
	return 0;
 } 
请输入8个数:1 2 3 4 5 6 7 8
    1.00    2.00    3.00    4.00    5.00    6.00    7.00    8.00
    1.00    3.00    6.00   10.00   15.00   21.00   28.00   36.00
/*test6-14.c
14.编写一个程序读入一行输入,然后反向打印该行。
您可以把输入存储在一个char数组中;假定该行不超过255个字符。
回忆一下,您可以使用具有%c说明符的scanf()从输入中一次读入一个字符,
而且当您按下回车键时会产生换行字符(\n)。*/
#include
#define LENGTH 20

int main(void)
{
 char a[255];
 int i;
 for(i=0;i=0;i--)
  printf("%c",a[i]);
 printf("\n");
 return(0);
}

/*test6-15.c
15. Daphne以10%的单利息投资了100美元(也就是说,每年投资赢得的利息等于原始投资的10%)。
Deirdre则以每年5%的复合利息投资了100美元(也就是说,利息是当前结余的5%,其中包括以前的利息)。
编写一个程序,计算需要多少年Deirdre的投资额才会超过Daphne,并且显示出到那时两个人的投资额。
*/
#include 
#define COST 100			//成本是100元 
#define INTEREST1 0.1		//Daphne 的利息 
#define INTEREST2 0.05		//Deirdre的利息	
int main(void)
{
	double sum1 = COST;
	double sum2 = COST;
	int year;
	
	for(year = 1; ; year++){
		sum1 += (COST * INTEREST1);
		sum2 *= (1 + INTEREST2);
		if(sum2 >= sum1){
			printf("第%d年Deirdre的资产:%.2lf超过Daphne的资产:%.2lf", year, sum2, sum1);
			break;
		}
	}
	
	return 0;
}

运行结果是:

第27年Deirdre的资产:373.35超过Daphne的资产:370.00

/*test6-16.c
16. Chuckie Lucky赢了100万美元,他把它存入一个每年赢得8%的帐户。
在每年的最后一天,Chuckie取出10万美元。编写一个程序,计算需要多少年Chuckie就会清空他的帐户。
*/
#include 
#define COST 100			//成本是100万元 
#define INTEREST 0.08		//利息 
#define REMOVE 10
int main(void)
{
	double lost;
	double save = COST;
	int year;
	
	for(year = 1; ; year++){
		save *= (1 + INTEREST);
		lost = save - REMOVE;
		if(lost <= 0){
			printf("After %d years,Chuckie Lucky's investment is out\n",year);
			break;
		}
	}
	return 0;
 }

运行结果为:

After 21 years,Chuckie Lucky's investment is out


你可能感兴趣的:(C)