不多废话,直接上代码。有问题可评论或者私信作者。
/* 6-1.c -- 创建一个包含26个元素的数组,并在里面储存26个小写字母并打印 */
#include<stdio.h>
int main(void)
{
char words[26];
for (int i = 0; i < 26; i++)
words[i] = 'a' + i;
for (int i = 0; i < 26; i++)
printf("%c",words[i]);
printf("\n");
return 0;
}
/* 6-2.c -- 使用循环嵌套,按照下面的格式打印字符 */
#include<stdio.h>
int main(void)
{
for (int i = 0; i < 5; i++)
{
for (int j = 0; j <= i; j++)
printf("$");
printf("\n");
}
return 0;
}
/* 6.3-c -- 使用嵌套循环,按照下面的格式打印字母 */
#include<stdio.h>
int main(void)
{
for (int i = 0; i < 6; i++)
{
for (int j = 0; j <= i; j++)
printf("%c",'F'- j);
printf("\n");
}
return 0;
}
/* 6-4.c -- 使用嵌套循环,按下面的格式打印字母 */
#include<stdio.h>
int main(void)
{
int p = 0; // 累计变量
for (int i = 0; i < 6; i++)
{
for (int j = 0; j <= i; j++)
{
printf("%c", 'A' + p);
p++;
}
printf("\n");
}
return 0;
}
/* 6-5.c -- 提示用户输入大写字母,以循环嵌套打印金字塔的格式 */
#include<stdio.h>
int main(void)
{
char ch;
printf("请输入一个大写字母:");
scanf("%c", &ch);
for (char i = 'A'; i <= ch; i++) // 外层循环控制行数
{
for (char j = 1; j <= ch - i; j++) // 控制空格
printf(" ");
for (char k = 'A'; k <= i; k++) // 顺序打印
printf("%c",k);
for (char m = i - 1; m >= 'A'; m--) // 逆序打印
printf("%c", m);
printf("\n");
}
return 0;
}
/* 6-6.c -- 编写一个表格,每一行打印一个整数 该数的平方
该数的立方 要求用户输入表格的上下限 */
#include<stdio.h>
int main(void)
{
int start, end;
printf("请输入要打印表格的上下限:");
scanf("%d %d",&start,&end);
printf("*******************************************************\n");
printf("integer square cube\n");
for (;start <= end; start++)
{
printf(" %d %d %d\n",start,start * start,start * start * start);
}
printf("*******************************************************\n");
return 0;
}
/* 6-7.c -- 把单词读入字符数组中,然后倒序打印这个单词 */
#include<stdio.h>
#include<string.h>
#define N 26
int main(void)
{
char words[N];
printf("请输入一个单词:");
scanf("%s",words);
printf("该单词的倒序为:");
for (int i = strlen(words) - 1; i >= 0; i--)
printf("%c",words[i]);
printf("\n");
return 0;
}
/* 6-8.c -- 输入两个浮点数,并打印两数之差除以两数乘积的结果 */
#include<stdio.h>
int main(void)
{
double op1, op2;
printf("请输入两个浮点数值:");
while (scanf("%lf %lf", &op1, &op2) == 2)
{
printf("(op1 - op2) / (op1 * op2) = %lf\n",(op1 - op2) / (op1 * op2));
printf("若想继续,请继续输入浮点数值,若要结束,请输入非数值字符:");
}
return 0;
}
/* 6-9.c -- 修改6-8.c的内容,使用一个函数返回计算的结构 */
#include<stdio.h>
double CountDouble(double, double);
int main(void)
{
double op1, op2;
printf("请输入两个浮点数:");
while (scanf("%lf %lf", &op1, &op2) == 2)
{
printf("(op1 - op2) / (op1 * op2) = %lf\n", CountDouble(op1,op2));
printf("若要继续,请继续输入浮点数值,若想结束,请输入非数值字符:");
}
}
double CountDouble(double op1, double op2)
{
return (op1 - op2) / (op1 * op2);
}
/* 6-10.c -- 要求用户输入一个上限整数和下限整数,计算从上限到下限范围内所有整数
的平方和,并显示计算结果。然后程序继续提醒用户输入上限和下限整数,并显示结果,直
到用户输入的上限整数等于下限整数为止 */
#include<stdio.h>
int main(void)
{
int start, end, sum;
sum = 0;
printf("Enter lower and upper integer limits:");
while (scanf("%d %d", &start, &end) == 2 && start != end)
{
for (int i = start; i <= end; i++)
sum += i * i;
printf("The sums of the squares from %d to %d is %d\n", start * start, end * end, sum);
sum = 0; // sum必须清零,否则会将上一次的运算结果做和
printf("Enter next set of limits:");
}
printf("Done\n");
return 0;
}
/* 6.11.c -- 从数组中读入8个整数,并倒序打印这个整数 */
#include<stdio.h>
#define N 10
int main(void)
{
int integer[N];
for (int i = 0; i < 8; i++)
scanf("%d",&integer[i]);
for (int i = 7; i >= 0; i--)
printf("%d ",integer[i]);
printf("\n");
return 0;
}
/* 6-12.c*/
#include<stdio.h>
int main(void)
{
double m = 1.0;
// sum1 = 1.0 + 1.0 / 2.0 + 1.0 / 3.0..........
// sum2 = 1.0 - 1.0 / 2.0 + 1.0 / 3.0..........
double sum1,sum2;
double n;
printf("请输入要计算序列的次数:");
while (scanf("%lf", &n) == 1 && n > 0)
{
int k = 1; // 累积变量 初始化为1,用于判断奇偶
sum1 = 0.0; /* 初始化 + 置0 在while里声明+初始化也可以 但会作为局部变量*/
sum2 = 1.0;
for (double i = m; i <= n; i++)
sum1 += m / i; // 正数序列 1.0 + 1.0 / 2.0 + 1.0 / 3.0.........
for (double j = m + 1; j <= n; j++)
{
if (k % 2 == 1)
sum2 -= (m / j);
else
sum2 += (m / j);
k++;
}
printf("The sum1 = %lf The sum1 = %lf\n",sum1,sum2);
printf("若要继续,请继续输入次数值,若要结束,请输入非正数数值或者非字符数值:");
}
return 0;
}
/* 6-13.c -- 创建一个8个元素的int类型数组,分别设置为2的前八次幂 */
#include<stdio.h>
#include<math.h>
#define N 8
int main(void)
{
int two[N];
for (int i = 0; i < N; i++)
two[i] = pow(2, i);
for (int i = 0; i < N; i++)
printf("%d ",two[i]);
printf("\n");
return 0;
}
/* 6-14.c -- 创建两个8个double类型的数组,提示用户输入第一个数组的值,
第二个数组为第一个元素的累计之和 */
#include<stdio.h>
#define N 8
int main(void)
{
double Array1[N], Array2[N];
double sum = 0.0;
printf("请输入8个double类型的值:");
for (int i = 0; i < N; i++) // 键入第一组数组的值
{
scanf("%lf",&Array1[i]);
}
// 使用嵌套循环
/* for (int i = 0; i < N; i++)
{
sum = 0.0;
for (int j = 0; j <= i; j++)
{
sum += Array1[j];
}
Array2[i] = sum;
} */
// 不使用嵌套循环
for (int i = 0; i < N; i++)
{
sum += Array1[i];
Array2[i] = sum;
}
for (int i = 0; i < N; i++)
{
printf("%.3lf ",Array1[i]);
}
printf("\n");
for (int i = 0; i < N; i++)
{
printf("%.2lf ",Array2[i]);
}
return 0;
}
/* 6-15.c -- 读取一行输入,然后将输入的内容倒序打印出来,
可以把输入存放在char类型的数组中 */
#include<stdio.h>
#define N 26
int main(void)
{
char Data[N];
int i = 0;
while (Data[i] != '\n')
{
i++;
scanf("%c",&Data[i]);
}
for (;i >= 0; i--)
{
printf("%c",Data[i]);
}
printf("\n");
return 0;
}
/* 6-16.c -- Daphne以10%的单利息投资了100美元。Deirdre以%5的复合利率
投资了100美元。计算Deirdre的投资会超过Daphne */
#include<stdio.h>
#define RATEDP 0.1 // Daphne的利率
#define RATEDR 0.05 // Deirdre的利率
#define DOLLOR 100 // 底金
int main(void)
{
int per_profit_Dap = 0;
int per_profit_Dei = 0;
int sum1 = 0, sum2 = 0; // sum1为Daphne投资额,sum2为Deirdre的投资额
int years = 1; // while外部已经计算过一次 因此years为1
per_profit_Dap = DOLLOR * RATEDP; // 第一期利润
per_profit_Dei = DOLLOR * RATEDR; // 第一期利润
sum1 = DOLLOR + per_profit_Dap; // 第一年总金额
sum2 = DOLLOR + per_profit_Dei; // 第二年总金额
while(sum1 > sum2)
{
per_profit_Dei = sum2 * RATEDR;
sum1 += per_profit_Dap;
sum2 += per_profit_Dei;
years++;
}
printf("需要%d年Deirdre才能超过Daphne\n",years);
printf("到第%d年,Daphne的投资额为:%d,Deirdre的投资额为:%d\n",years,sum1,sum2);
return 0;
}
/* 6-17.c -- Chuckie Lucky赢得了100W美元(作者也好生羡慕),
他将奖金存入年利率8%的账户中,每年年底取走10W元,计算多少
年后他会取完账户里的钱*/
#include<stdio.h>
#define BONUS 100
#define RATE 0.08
int main(void)
{
int years = 0;
float account; // 账户余额
account = BONUS; // 最初账户的钱
while (account >= 0)
{
account += (account * RATE) - 10;
printf("%.2f ",account);
years++;
if (years % 7 == 0)
printf("\n");
}
printf("需要%d年,Chuckie Lucky可以取走账户里的钱\n",years);
printf("白嫖21年啊,作者泪目!\n");
return 0;
}
/* 6-18.c -- Rabnud博士加入了一个社交圈,起初他有五个朋友
他注意到他的朋友圈数量以以下方式增长,第一周少了一个朋友
,剩下的朋友数量翻倍;第二周少了2个朋友,剩下的朋友数量翻倍
,依次类推,编写一个程序,计算并显示Rabnud博士的朋友数量,直至
超过邓巴数(约为150)*/
#include<stdio.h>
#define DENBA 150 // 邓巴数150
int main(void)
{
int friends = 5; // 最初的朋友数
int weeks = 0;
while (friends <= 150)
{
weeks++;
friends = (friends - weeks) * 2;
}
printf("直至第%d周,Rabnud博士的朋友数量达到饱和\n",weeks);
return 0;
}