C Primer Plus 第六章编程练习

简介: C Primer Plus 第六章编程练习

第六章 编程练习

6.1

/**************************************************************************/
/***题    目:编写一个程序,创建一个包含26个元素的数组,并在其中储存26个***/
/***          小写字母。然后打印数组的所有内容。                        ***/
/***完成时间:2020.2.3                                                  ***/
/***作    者:林夕                                                      ***/
/**************************************************************************/
#include<stdio.h>
int main(void)
{
  char num[26] = {'a','b','c','d','e','f','g','h','i','g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
  int i = 0;
  for (i; i < 26; i++)
  {
    printf(" %c ", num[i]);
    if (i%8==0)//一行输出26个字母太长不美观,所以采用一行八个
    {
      printf("\n");
    }
  }
  printf("\n输出完毕!");
  return 0;
}

运行结果

6.2

/**************************************************************************/
/***题目:使用嵌套循环,按下面的格式打印字符:                          ***/
/***      $                                                             ***/
/***      $$                                                            ***/
/***      $$$                                                           ***/
/***      $$$$                                                          ***/
/***      $$$$$                                                         ***/
/***完成时间:2020.2.3                                                  ***/
/***作    者:林夕                                                      ***/
/**************************************************************************/
#include<stdio.h>
#define SIZE 5
int main(void)
{
  int i = 0,j=0;
  for (i; i < SIZE; i++)
  {
    for (j=0; j <= i; j++)
    {
      printf("$");
    }
    printf("\n");
  }
  return 0;
}


运行结果

6.3

/*****************************************************************************/
/***题    目:使用嵌套循环,按下面的格式打印字母;                         ***/
/***          F                                                            ***/
/***          FE                                                           ***/
/***          FED                                                          ***/
/***          FEDC                                                         ***/
/***          FEDCB                                                        ***/
/***          FEDCBA                                                       ***/
/***          注意:如果你的系统不使用ASCII或其他以数字顺序编码,可以把字符***/
/***          数组初始化为字母表中的字母;                                 ***/
/***          char lets[27] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";                ***/
/***          然后用数组下标选择单独的字母,例如lets[0]是'a',等等          ***/
/***完成时间:2020.2.3                                                     ***/
/***作    者:林夕                                                         ***/
/*****************************************************************************/
#include<stdio.h>
int main(void)
{
  int ch, i, j;
  for (i = 0; i < 6; i++)
  {
    for (j = 0,ch=70; j <= i; j++)//70是F的ASCII码值
    {
      printf("%c", ch--);
    }
    printf("\n");
  }
  return 0;
}


运行结果

6.4

/****************************************************************************/
/***题    目:使用嵌套循环,按下面的格式打印字母:                        ***/
/***          A                                                           ***/
/***          BC                                                          ***/
/***          DEF                                                         ***/
/***          GHIJ                                                        ***/
/***          KLMNO                                                       ***/
/***          PQRSTU                                                      ***/
/***          如果你的系统不使用以数字顺序编码的代码,请参考练习三的方案。***/
/***完成时间:2020.2.3                                                    ***/
/***作    者:林夕                                                        ***/
/****************************************************************************/
#include<stdio.h>
int main(void)
{
  int ch = 65, i, j;
  for (i = 0; i < 6; i++)
  {
    for (j = 0; j <= i; j++)
    {
      printf("%c", ch++);
    }
    printf("\n");
  }
  return 0;
}


运行结果

6.5

/****************************************************************************/ 
/***题    目:编写一个程序,提示用户输入大写字母。使用嵌套循环以下面金字塔***/
/***          的格式打印字母:                                            ***/
/***              A                                                       ***/
/***             ABA                                                      ***/
/***            ABCBA                                                     ***/
/***           ABCDCBA                                                    ***/
/***          ABCDEDCBA                                                   ***/
/***          打印这样的图形,要根据用户输入的字母来决定。例如,上面的图形***/
/***          是在用户输入E后打印结果。                                   ***/
/***          提示:用外层循环处理行,每行使用3个内层循环,分别处理空格、 ***/
/***          以升序打印字母、以降序打印字母。如果系统不支持ASCII或其他数 ***/
/***          子顺序编码,请参考练习3解决方案。                           ***/
/***完成时间:2020.2.3                                                    ***/
/***作    者:林夕                                                        ***/
/****************************************************************************/
#include<stdio.h>
int main(void)
{
  int ch2, i, j;
  char ch1;
  printf("请输入大写字母:\n");
  scanf_s("%c", &ch1,1);
  for (i = 65; i <= ch1; i++)
  {//由上图可知输入字母和A的ASCII码值加1等于行数,这样外层行数循环编写完成
    for (j = 0; j < ch1 - i; j++)
    {//由图可知,输入字母和A的ASCII码值等于前面应该留多少空格
      printf(" ");
    }
    for (j = 0,ch2 = 65; j <= i - 65; j++)//升序打印字母(含最中间项)
    {//从A(65)开始,行数刚好等于从空格开始到最中间项
      printf("%c", ch2++);
    }
    if (ch2-1>65)//由于第一行没有倒序所以本判断用于跳过第一行
    {
      for (ch2=ch2-2; ch2 >= 65; ch2--)
      {//由于最中间项已经输出,以及上一个for循环最后多加的1,所以此时应该减去2
        printf("%c", ch2);
      }
    }
    printf("\n");//每行输入完毕然后一个换行符
  }
  return 0;
}


运行结果

6.6

/**************************************************************************/
/***题    目:编写一个程序打印一个表格,每一行打印一个整数、该数的平方、***/
/***          该数的立方。要求用户输入表格的上下限。使用一个for循环。   ***/
/***完成时间:2020.2.3                                                  ***/
/***作    者:林夕                                                      ***/
/**************************************************************************/
#include<stdio.h>
int main(void)
{
  int num1 = 0, num2 = 0;
  printf("请输入小值:\n");
  scanf_s("%d", &num1);
  printf("请输入大值:\n");
  scanf_s("%d", &num2);
  for (num1; num1 <= num2; num1++)
  {
    printf("%d 平方:%d 立方:%d\n", num1, num1 * num1, num1 * num1 * num1);
  }
  printf("程序结束!");
  return 0;
}


运行结果

6.7

/******************************************************************************/
/***题    目:编写一个程序把一个单词读入一个字符数组中,然后倒序打印这个单词***/
/***          提示:strlen()函数可用于计算数组最后一个字符的下标。          ***/
/***完成时间:2020.2.3                                                      ***/
/***作    者:林夕                                                          ***/
/******************************************************************************/
#include<stdio.h>
#include<string.h>
#define SIZE 50
int main(void)
{
  char ch[SIZE] = { 0 };
  int k;
  printf("请输入一个单词:\n");
  scanf_s("%s" ,& ch, 50);
  k = strlen(ch);
  printf("倒序输出单词:\n");
  for (k = k - 1; k >= 0; k--)
  {
    printf("%c", ch[k]);
  }
  return 0;
}


运行结果

6.8

/********************************************************************************/
/***题    目:编写一个程序,要求用户输入俩个浮点数,并打印俩数之差除以俩数乘积***/
/***          的结果。在用户输入非数字之前,程序应循环处理用户输入的每对值。  ***/
/***完成时间:2020.2.3                                                        ***/
/***作    者:林夕                                                            ***/
/********************************************************************************/
#include<stdio.h>
int main(void)
{
  float num1 = 0.0, num2 = 0.0;
  printf("请依次输入俩个浮点型数字:\n");
  scanf_s("%f %f", &num1, &num2);
  if (num1 > num2)
  {
    printf("%f", (num1 - num2) / (num1 * num2));
  }
  else
    printf("%f", (num2 - num1) / (num1 * num2));
  return 0;
}


运行结果

6.9

/************************************************************************/
/***题    目:修改程序8,使用一个函数返回计算的结果。                 ***/
/***完成时间:2020.2.3                                                ***/
/***作    者:林夕                                                    ***/
/************************************************************************/
#include<stdio.h>
float IC(float n1,float n2);
int main(void)
{
  float num1 = 0.0, num2 = 0.0, num = 0.0;
  printf("请输入第一个浮点型数字:\n");
  scanf_s("%f", &num1);
  printf("请输入第二个浮点型数字:\n");
  scanf_s("%f", &num2);
  num=IC(num1,  num2);
  printf("结果为:%f", num);
  return 0;
}
float IC(float n1, float n2)
{
  float n = 0.0;
  if (n1 > n2)
    n = (n1 - n2) / (n1 * n2);
  else
    n = (n2 - n1) / (n1 * n2);
  return n;
}


运行结果

6.10

/****************************************************************************/
/***题    目:编写一个程序,要求用户输入一个上限整数个一个下限整数,计算从***/
/***          上限到下限范围内所有整数的平方和,并显示计算结果。然后程序继***/
/***          续提示用户输入上限和下限整数,并显示结果,直到用户输入的上限***/
/***          整数等于或小于下限整数为止。程序的运行示例如下:            ***/
/***          Enter lower and upper integer limits: 5 9                   ***/
/***          The sums of the squares from 25 to 81 is 255                ***/
/***          Enter next set of limits: 3 25                              ***/
/***          The sums of the squares from 9 to 625 is 5775               ***/
/***          Enter next set of limits: 5 5                               ***/
/***          Done                                                        ***/
/***完成时间:2020.2.3                                                    ***/
/***作    者:林夕                                                        ***/
/****************************************************************************/
#include<stdio.h>
int main(void)
{
  int num1 = 0, num2 = 0, num = 0,i;
  printf("Enter lower and upper integer limits : ");
  scanf_s("%d %d", &num1, &num2);
  while (num1 < num2)
  {
    for (i = num1; i <= num2; i++)
    {
      num = num + i * i;
    }
    printf("The sums of the squares from %d to %d is %d\n", num1 * num1, num2 * num2, num);
    printf("Enter next set of limits: ");
    scanf_s("%d %d", &num1, &num2);
  }
  printf("Done\n");
  return 0;
}


运行结果

6.11

/******************************************************************************/
/***题    目:编写一个程序,在数组中读取八个整数,然后按倒序打印这八个整数。***/
/***完成时间:2020.2.3                                                      ***/
/***作    者:林夕                                                          ***/
/******************************************************************************/
#include<stdio.h>
#define SIZE 10
int main(void)
{
  int num[SIZE] = { 0 }, i = 0;
  printf("请依次输入整数:\n");
  for (i; i < 8; i++)
    scanf_s("%d", &num[i]);
  printf("倒序输出整数:\n");
  for (i = i - 1; i >= 0; i--)
    printf("%d ", num[i]);
  return 0;
}


运行结果

6.12

/********************************************************************************/
/***题    目:考虑下面俩个无限序列:                                          ***/
/***          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 + ...                         ***/
/***          编写一个程序计算这俩个无限序列的总和,直到到达某次数。提示:奇数***/
/***          个-1相乘得-1,偶数个-1相乘得1.让用户交互地输入指定的次数,当用户***/
/***          输入0或者负值时结束输入。查看运行100项、1000项、10000项后的总和 ***/
/***          是否发现每个序列都收敛于某值。                                  ***/
/***完成时间:2020.2.3                                                        ***/
/***作    者:林夕                                                            ***/
/********************************************************************************/
#include<stdio.h>
int main(void)
{
  float num1 = 0.0, num2 = 0.0;
  int i = 0, num = 0;
  printf("请输入运行次数:\n");
  scanf_s("%d", &num);
  while (num > 0)
  {
    for (i = 1; i <= num; i++)//单独计算num1
    {
      num1 = 1.0 / i + num1;
    }
    for (i = 1; i <= num; i += 2)
    {
      num2 = num2 + 1.0 / i;
    }
    for (i = 2; i <= num; i += 2)
    {
      num2 = num2 - 1.0 / i;
    }
    printf("num1=%f\nnum2=%f\nnum1+num2=%f\n", num1, num2,num1+num2);
    scanf_s("%d", &num);
  }
}


运行结果

6.13

/*********************************************************************************/
/***题    目:编写一个程序,创建一个包含8个元素的int类型数组。分别把数组元素***/
/***          设置为2的前8次幂,使用for循环设置数组元素的值,使用do while 循环 ***/
/***          显示数组元素的值                                                 ***/
/***完成时间:2020.2.3                                                         ***/
/***作    者:林夕                                                             ***/
/*********************************************************************************/
#include<stdio.h>
#include<math.h>
#define SIZE 8
int main(void)
{
  int i, num[SIZE];
  for (i = 0; i < SIZE; i++)
  {
    num[i] = pow(2, i);
  }
  do
  {
      printf("%d\n", num[SIZE - i--]);
  } while (i>0);
  return 0;
}

运行结果

6.14

/*******************************************************************************/
/***题    目:编写一个程序,创建俩个包含8个元素的double类型数组,使用循环提示***/
/***          用户第一个数组输入8个值。第二个数组元素的值设置为第一个数组对  ***/
/***          应元素的累积之和。例如,第二个数组的第4个元素的值是第一个数组前***/
/***          4个元素之和,第二个数组的第5个元素的值是第一个数组前5个元素之和***/
/***          (用嵌套循环可以完成,但是利用第二个数组的第5个元素是第二个元素***/
/***          的第4个元素与第一个数组的第5个元素之和,只用一个循环就能完成任 ***/
/***          务,不需要使用嵌套循环)。最后,使用循环显示俩个数组的内容,第 ***/
/***          一个数组显示一行,第二个数组显示再第一个数组的下一行,而且每个 ***/
/***          元素都与第一个数组各元素相对应。                               ***/
/***完成时间:2020.2.3                                                       ***/
/***作    者:林夕                                                           ***/
/*******************************************************************************/
#include<stdio.h>
#define SIZE 8
int main(void)
{
  double num[SIZE] = { 0 }, num2[SIZE] = { 0 };
  int i;
  printf("请输入8个double类型数字:\n");
  for (i = 0; i < SIZE; i++)
  {
    scanf_s("%lf", &num[i]);
  }
  for (i = 0; i < SIZE; i++)
  {
    if (i > 0)
      num2[i] = num[i] + num2[i - 1];
    else
      num2[i] = num[i];
  }
  printf("输出俩个数组:\n");
  for (i = 0; i < SIZE; i++)
  {
    printf("%8.3lf", num[i]);
  }
  printf("\n");
  for (i = 0; i < SIZE; i++)
  {
    printf("%8.3lf", num2[i]);
  }
  printf("\n");
  return 0;
}


运行结果

6.15

/******************************************************************************/
/***题    目:编写一个程序,读取一行输入,然后把输入的内容倒序打印出来,可以***/
/***          把输入存储在char类型的数组中,假设每行字符不超过255,回忆一下 ***/
/***          根据%c转换说明,scanf()函数一次只能从输入中读取一个字符,而且 ***/
/***          在用户摁下enter键scanf()函数会生成一个换行符(\n).           ***/
/***完成时间:2020.2.4                                                      ***/
/***作    者:林夕                                                          ***/
/******************************************************************************/
#include<stdio.h>
#define SIZE 256
int main(void)
{
  char num[SIZE] = { 0 };
  int i = 0;
  for (i = 0; num[i-1] !='\n'; i++)
  {
    scanf_s("%c", &num[i],1);
  }
  for (i=i-1; i >= 0; i--)
  {
    printf("%c", num[i]);
  }
  return 0;
}


运行结果

6.16

/******************************************************************************/
/***题    目:DAphne以10%的单利息投资了100美金(也就是说,每年投资获利相当于***/
/***          原始投资的10%)。Deirdre以5%地复合利息投资了100美金(也就是说 ***/
/***          利息是当前余额的5%,包含之前的利息)。编写一个程序,计算需要多***/
/***          少年Deirdre的投资额才会超过DAphne,并显示那时俩人的投资额。   ***/
/***完成时间:2020.2.5                                                      ***/
/***作    者:林夕                                                          ***/
/******************************************************************************/
#include<stdio.h>
int main(void)
{
  float DAphne = 100.0, Deirdre = 100.0;
  int i, j;
  for (i = 1,j = 1; i>0; i++,j++)
  {
    DAphne = DAphne + 100.0 * 0.1;
    Deirdre = Deirdre + Deirdre * 0.05;
    if (DAphne < Deirdre)
      i = -1;
  }
  printf("第%d年\nDAphne=%f\nDeirdre=%f\n",j, DAphne, Deirdre);
  return 0;
}


运行结果

6.17

/********************************************************************************/
/***题    目:Chuckie Lucky赢得了100万美元(税后),他把奖金存入年利率8%的账户***/
/***          在每年的最后一年,Chuckie取出10万美金。编写一个程序,计算多少年 ***/
/***          后Chuckie会取完账户的钱?                                       ***/
/***完成时间:2020.2.5                                                        ***/
/***作    者:林夕                                                            ***/
/********************************************************************************/
#include<stdio.h>
int main(void)
{
  float Chuckie = 100.0;
  int i;
  for (i = 1; Chuckie > 0; i++)
  {
    Chuckie = Chuckie + Chuckie * 0.08 - 10;
  }
  printf("第%d年时已经取完账户所有钱了!\n", i);
  return 0;
}

运行结果

6.18

/**********************************************************************************/
/***题    目:Rabnud博士加入了一个社交圈。起初他有五个朋友。他注意到他的朋友数量***/
/***          以下面的方式增加。第一周少一个朋友,剩下的朋友翻倍;第二周少俩个朋***/
/***          友,剩下的朋友翻倍。一般而言,第N周就少N个朋友,剩下的朋友数量翻倍***/
/***          编写一个程序,计算并显示Rabnud博士每周的朋友圈。该程序一直运行,直***/
/***          到超过邓巴数。邓巴数是粗略估算一个人在社交圈有稳定关系的成员的最大***/
/***          值,该值大约150.                                                  ***/
/***完成时间:2020.2.5                                                          ***/
/***作    者:林夕                                                              ***/
/**********************************************************************************/
#include<stdio.h>
#define SIZE 150
int main(void)
{
  int Rabnud = 5, i;
  for (i = 1; Rabnud < SIZE; i++)
  {
    Rabnud = (Rabnud - i) * 2;
    printf("第%d周有%d个朋友!!!\n", i, Rabnud);
  }
  return 0;
}


运行结果

目录
相关文章
|
8月前
|
C++
C++ Primer Plus 第二章编程练习
C++ Primer Plus 第二章编程练习
|
8月前
|
小程序 C++
C++ Primer Plus 第三章编程练习
C++ Primer Plus 第三章编程练习
|
10月前
C Primer Plus第七章编程练习
C Primer Plus第七章编程练习
47 0
|
10月前
C Primer Plus 第五章 编程练习
C Primer Plus 第五章 编程练习
69 0
|
10月前
C Primer Plus 第四章编程练习
C Primer Plus 第四章编程练习
75 0
C Primer Plus 第四章编程练习
|
10月前
C Primer Plus 第三章编程练习
C Primer Plus 第三章编程练习
43 0
|
10月前
C Primer Plus 第二章编程练习
C Primer Plus 第二章编程练习
49 0
|
10月前
C Primer Plus 第一章编程练习
C Primer Plus 第一章编程练习
58 0
|
存储 人工智能 算法
C++ Primer Plus 第6版 读书笔记(7)第 7 章 函数——C++的编程模块
乐趣在于发现。仔细研究,读者将在函数中找到乐趣。C++自带了一个包含函数的大型库(标准 ANSI 库加上多个 C++类),但真正的编程乐趣在于编写自己的函数;另一方面,要提高编程效率,本章和第 8 章介绍如何定义函数、给函数传递信息以及从函数那里获得信息。
132 0