/*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
/*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
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
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
/*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