C Primer Plus第七章编程练习

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

第七章 编程练习

7.1

/*************************************************************************/
/*******题    目:编写一个程序读取输入,读到#字符停止然后报        *******/
/*******          告读出的空格数、换行符和所有其他字符数量。       *******/
/*******编译时间:2020.2.5                                         *******/
/*******作    者:林夕                                             *******/
/*************************************************************************/
#include<stdio.h>
int main(void)
{
  char a=0;
  int i=0, j=0, k=0;
  while ((a=getchar())!= '#')
  {
    if (a == ' ')
      i++;
    else 
    { 
      if(a == '\n')
        j++;
      else
        k++; 
    }
  }
  printf("空格数为:%d个\n换行符为:%d个\n字母为%d个", i, j, k);
  return 0;
}


运行结果

7.2

/************************************************************************/
/***题  目:编写一个程序读取输入,读到#号字符停止。程序要打印每个输入 ***/
/***        字符以及对应的ASCII码(十进制)。每行打印8个“字符-ASCII”***/
/***        组合。 建议:使用字符计数和求模运算符(%)在每个8个循环周 ***/
/***        期是打印一个换行符。                                      ***/
/***编译时间:2020.2.5                                                ***/
/***作    者:林夕                                                    ***/
/************************************************************************/
#include<stdio.h>
int main(void)
{
  int i=0,a=0;
  printf("输入你需要的一些字符(直到输入#号停止输入):\n");
  while ((a=getchar()) != '#')
  {
    if (a != '\n' && a != ' ')
    {
      i++;
      printf("%c-%d ", a, a);
      if ((i % 8) == 0)
        printf("\n");
    }
  }
  return 0;
}


运行结果

7.3

/*********************************************************************************/
/***题    目:编写一个程序读入输入,读取整数直到用户输入0输入结束后,程序应报告***/
/***          用户输入的偶数(不包括0)个数、这些偶数的平均值、输入的奇数个数及***/
/***          其平均值。                                                       ***/
/***完成时间:2020.2.5                                                         ***/
/***作    者:林夕                                                             ***/
/*********************************************************************************/
#include<stdio.h>
int main(void)
{
  int num = 0, i = 0, j = 0;
  float num1 = 0.0, num2 = 0.0;
  printf("请输入整数(直到输入0停止):\n");
  scanf_s("%d", &num);
  while (num!=0)
  {
    if (num % 2 == 0)//偶数
    {
      i++;
      num1 = num1 + num;
    }
    else
    {
      j++;
      num2 = num2 + num;
    }
    scanf_s("%d", &num);
  }
  num1 = num1 / i;
  num2 = num2 / j;
  printf("偶数有%d个,平均值%.3f", i, num1);
  printf("奇数有%d个,平均值%.3f", j, num2);
  return 0;
}


运行结果

7.4

/*********************************************************************************/
/***题    目:使用if else 语句编写一个程序读取输入,读到#停止。用感叹号代替句号***/
/***          用俩个感叹号替换原来的感叹号,最后报告进行了多少次替换。         ***/
/***完成时间:2020.2.5                                                         ***/
/***作    者:林夕                                                             ***/
/*********************************************************************************/
#include<stdio.h>
int main(void)
{
  char ch;
  int i=0;
  printf("输入一段话:\n");
  while ((ch=getchar()) != '#')
  {
    if ('.' == ch)
    {
      putchar(' !');
      i++;
    }
    else if ('!' == ch)
    {
      putchar('!');
      putchar('!');
      i++;
    }
    else
      putchar(ch);
  }
  printf("%d", i);
  return 0;
}


运行结果

7.5

/**************************************************************************/
/***题    目:使用switch重写练习4                                       ***/
/***完成时间:2020.2.5                                                  ***/
/***作    者:林夕                                                      ***/
/**************************************************************************/
#include<stdio.h>
int main(void)
{
  char ch;
  int i = 0;
  printf("输入一段话:\n");
  while ((ch = getchar()) != '#')
  {
    switch (ch)
    {
    case '.':putchar('!');
      i++;
      break;
    case '!':putchar('!'); 
      putchar('!'); 
      i++;
    default:putchar(ch);
    }
  }
  printf("%d", i);
  return 0;
}


运行结果

7.6

/****************************************************************************/
/***题    目:编写程序读取输入,读到#停止,报告ei出现的次数。             ***/
/***完成时间:2020.2.5                                                    ***/
/***作    者:林夕                                                        ***/
/****************************************************************************/
#include<stdio.h>
int main(void)
{
  char ch;
  int i = 0;
  printf("输入一串字符直到输入#停止输入:\n");
  while ((ch=getchar())!='#')
  {
    if ('e' == ch)
    {
      if ('i' == (ch = getchar()))
      {
        i++;
      }
    }
  }
  printf("出现%d次", i);
  return 0;
}


运行结果

7.7

/******************************************************************************/
/***题    目:编写一个程序,提示用户输入一周工作的小时数,然后打印工资总额、***/
/***          税金和净收入。做如下假设:                                    ***/
/***          a.基本工资 = 10.00美元/小时                                   ***/
/***          b.加班(超过40小时) = 1.5倍的时间                            ***/
/***          c.税率:前300美元为15%                                        ***/
/***                  续150美元为20%                                        ***/
/***                  余下的为25%                                           ***/
/***          用#define定义符号常量。不用在意是否符合当前的税法             ***/
/***完成时间:2020.2.5                                                      ***/
/***作    者:林夕                                                          ***/
/******************************************************************************/
#include<stdio.h>
#define DD1    15%
#define DD2    20%
#define DD3    25%
int main(void)
{
  float num = 0.0, taxes = 0.0, net_input = 0.0;
  int i = 0;
  printf("请输入工作的小时:\n");
  scanf_s("%d", &i);
  if (i <= 40)
  {
    num = 10.00 * i;
    if (num < 300)
    {
      taxes = num * DD1;
      net_input = num - taxes;
    }
    else
    {
      taxes = 300 * DD1 + (num - 300) * DD2;
      net_input = num - taxes;
    }
  }
  else
  {
    num = 40 * 10.00 + (i - 40) * 10.00 * 1.5;
    if (num < 450)
    {
      taxes = 300 * DD1 + (num - 300) * DD2;
      net_input = num - taxes;
    }
    else
    {
      taxes = 300 * DD1 + 150 * DD2 + (num - 450) * DD3;
      net_input = num - taxes;
    }
  }
  printf("工资总额为:%.3f\n税金为:%.3f\n净收入%.3f\n", num, taxes, net_input);
  return 0;
}


运行结果

7.8

/******************************************************************************/
/***题    目:修改练习7的假设a,让程序可以给出一个供选择的工资等级菜单。使用***/
/***          switch完成工资等级选择。运行程序后,显示的菜单应该类似这样:  ***/
/***          **********************************************************    ***/
/***          Enter the number corresponding to the desired pay rate or     ***/
/***          action:                                                       ***/
/***          1)$8.75/hr                    2)$9.33/hr                      ***/
/***          2)$10.00/hr                   3)$11.20/hr                     ***/
/***          5)quit                                                        ***/
/***          *********************************************************     ***/
/***          如果选择1-4其中的一个数字,程序应该询问用户工作的小时数。程序 ***/
/***          要通过循环运行,除非用户输入5.如果输入1-5以外的数字,程序应提 ***/
/***          醒用户输入正确的选项,然后再重复显示菜单提示用户输入。使用    ***/
/***          #define创建符号常量表示各工资等级和税率。                     ***/
/***完成时间:2020.2.6                                                      ***/
/***作    者:林夕                                                          ***/
/******************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#define NUM1 8.75
#define NUM2 9.33
#define NUM3 10.00
#define NUM4 11.20
#define N1   0.15
#define N2   0.20
#define N3   .025
void IC(float  basic);
int main(void)
{
  int n = 0, select = 0;
  while (true)
  {
    printf("****************************************************************\n");
    printf("Enter the number corresponding to the desired pay rate or action:\n");
    printf("1)$8.75/hr                    2)$9.33/hr\n");
    printf("2)$10.00/hr                   3)$11.20/hr\n");
    printf("5)quit\n");
    printf("请选择你的工资等级:\n");
    scanf_s("%d", &select);
    switch (select)
    {
    case 1:IC(NUM1);
      break;
    case 2:IC(NUM2);
      break;
    case 3:IC(NUM3);
      break;
    case 4:IC(NUM4);
      break;
    case 5:printf("程序结束!\n");
      exit(0);
    default: {printf("输入错误,请重新输入!\n");
      continue; }//终止当前循环以下语句、
    }
  }
  return 0;
}
void IC(float basic)
{
    float num = 0.0, taxes = 0.0;
  int i = 0;
  printf("请输入工作的小时:\n");
  scanf_s("%d", &i);
  if (i <= 40)//工作时间不高于40h,不加班
  {
    num = basic * N1;
    if (num <= 300)//工资总额不高于300
    {
      taxes = num * N1;
    }
    else if (num <= 450)//工资不高于450且大于300
    {
      taxes = 300 * N1 + (num - 300) * N2;
    }
    else //工资高于450
    {
      taxes = 300 * N1 + 150 * N2 + (num - 450) * N3;
    }
  }
  else//超过40h加班
  {
    num = basic * 40 + basic * (i - 40) * 1.5;
    taxes = 300 * N1 + 150 * N2 + (num - 450) * N3;
  }
    printf("工资总额为:%.3f\n税金为:%.3f\n净收入%.3f\n", num, taxes, num - taxes);
    return ;
}


运行结果

7.9

/**************************************************************************************/
/***题    目:编写一个程序,只接受整数输入,然后显示所有小于小于或者等于该数的素数。***/
/***完成时间:2020.2.7                                                              ***/
/***作    者:林夕                                                                  ***/
/**************************************************************************************/
#include<stdio.h>
int main(void)
{
  int i, j, number;
  printf("请输入一个整数:\n");
  scanf_s("%d", &number);
  printf("素数:\n");
  for (i = 2; i < number; i++)
  {
    for (j = 2; j < i; j++)
    {
      if (i % j == 0)
      {
        break;
      }
    }
    if (j >= i)
    {
      printf("%d ", i);
    }
  }
  return 0;
}


运行结果

7.10

/*********************************************************************************************/
/***题    目:1988年的美国联邦税收计划是近代最简单的税收方案,它分为4个类型。每个类型有俩个***/
/***          等级。下面是该税收的摘要(美元数位应征税的收入);                           ***/
/***          类型                                税金                                     ***/
/***          单身                                17580美金按15%计,超过部分按照28%        ***/
/***          户主                                23900美金按15%计,超过部分按照28%        ***/
/***          已婚,共有                          29750美金按15%计,超过部分按照28%        ***/
/***          已婚,离异                          14875美金按15%计,超过部分按照28%        ***/
/***          例如,一位工资为20000美元的单身的纳税人,应缴纳税费0.15*17850+0.28*(20000-  ***/
/***          17850)美元。编写一个程序,让用户指定缴纳税金的种类和应纳税收入,然后计算税金***/
/***          程序应通过循环让用户可以多次输入。                                           ***/
/***完成时间:2020.2.7                                                                     ***/
/***作    者:林夕                                                                         ***/
/*********************************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#define A1 0.15
#define A2 0.28
void IC(float n);
int main(void)
{
  int i;
  float salary = 0, taxes = 0, basis = 0;
  //    工资         税金 
  while (true)
  {
    printf("*********************************************************\n");
    printf("1)单身                                 2)户主 \n");
    printf("3)已婚,共有                           4)已婚,离异\n");
    printf("5)退出程序!\n");
    printf("请选择你的类型:\n");
    scanf_s("%d", &i);
    switch (i)
    {
    case 1:IC(17580);
      break;
    case 2:IC(23900);
      break;
    case 3:IC(29750);
      break;
    case 4:IC(14875);
      break;
    case 5:exit(0);
    default:continue;
    }
  }
  return 0;
}
void IC(float n)
{
  float taxes = 0.0, salary = 0.0;
  printf("请输入你的工资:\n");
  scanf_s("%f", &salary);
  taxes = n* A1 + (salary - n) * A2;
  printf("应缴纳税为:%.3f美元\n", taxes);
  return;
}


运行结果

7.11

/*********************************************************************************************/
/***题    目:ABC邮购杂货店出售的洋蓟售价为2.05美元/磅,甜菜售价为1.15美元/磅,胡萝卜售价为***/
/***          1.09美元/磅。在添加运费之前,100美元的订单有5%打折优惠。少于或等于5磅的订单收***/
/***          取6.4美元的运费和包装费,5磅-20磅的订单收取14美元的运费和包装费,超过20磅的订***/
/***          单再14美元的基础上每续重一磅增加0.5美元。编写一个程序,在循环中用switch语句实***/
/***          现用户输入不同的字母时有不同的响应,即输入a的响应时让用户输入洋蓟的磅数,b是 ***/
/***          甜菜的磅数,c是胡萝卜的磅数,q是退出订购。程序要记录累计的重量。即,如果用户 ***/
/***          输入4磅的甜菜,然后输入5磅的甜菜,程序应报告9磅的甜菜,然后,该程序要计算货物***/
/***          的总价、折扣(如果有的话)、运费和包装费。随后,程序应显示所有的购物信息:物 ***/
/***          品售价、订购的重量(单位:磅)、订购的蔬菜费用、订单的总费用、折扣(如果有的 ***/
/***          话)、运费和包装费、以及所有的费用总额。                                     ***/
/***完成时间:2020.2.7                                                                     ***/
/***作    者:林夕                                                                         ***/
/*********************************************************************************************/
#include<stdio.h>
#include<stdlib.h>
#define A1 2.05
#define A2 1.15
#define A3 1.09
int main(void)
{
  float artichoke = 0.0, beet = 0.0, carrot = 0.0, weigth = 0.0, weigth1 = 0.0,weigth2 = 0.0, weigth3 = 0.0;
  //      洋蓟            甜菜        胡萝卜 
  float   n = 0.0, freight = 0.0, num = 0.0;
  char ch=1;
  while ('q'!=ch)
  {
    printf("********************************************************************\n");
    printf("a.洋蓟:2.05美元/磅             b.甜菜:1.15 美元/磅\n");
    printf("c.胡萝卜:1.09美元/磅           q.退出订购\n");
    printf("请选择你需要的蔬菜:\n");
    scanf_s("%c", &ch,1);
    switch (ch)
    {
    case 'a':
      printf("请输入磅数:\n");
      scanf_s("%f", &n );
      weigth1 += n;
      break;
    case 'b':
      printf("请输入磅数:\n");
      scanf_s("%f", &n);
      weigth2 += n;
      break;
    case 'c':
      printf("请输入磅数:\n");
      scanf_s("%f", &n);
      weigth3 += n;
      break;
    case 'q':continue;
    default:printf("输入错误!!!重新输入\n");
      break;
    }
    while (getchar() != '\n');
  }
  weigth = weigth1 + weigth2 + weigth3;//蔬菜总重量
  artichoke = weigth1 * A1;//洋蓟
  beet = weigth2 * A2;//甜菜
  carrot = weigth3 * A3;//胡萝卜
  num = artichoke + beet + carrot;//蔬菜总价
  if (weigth <= 5)
  {
    freight = 6.4;//包装费和运费
  }
  else
  {
    if ( weigth > 20)
    {
      freight = 14.0 + (weigth - 20.0) * 0.5;//包装费和运费
    }
    else
    {
      freight = 14.0 ;
    }
  }
  printf("***************费用明细**********************\n");
  if (weigth1 > 0)
  {
    printf("洋蓟共%.3f磅为%.3f美元!\n", weigth1, artichoke);
  }
  if (weigth2 > 0)
  {
    printf("甜菜共%.3f磅为%.3f美元!\n", weigth2, beet);
  }
  if (weigth3 > 0)
  {
    printf("胡萝卜共%.3f磅为%.3f美元!\n", weigth3, carrot);
  }
  printf("蔬菜总价为%.3f,总重量为%.3f\n", num,weigth);
  if (num > 100)
  {
    printf("折扣为%.3f\n", num * 0.05);
  }
  printf("订单总费用为%.3f\n", num + freight);
  printf("运费和包装费共%.3f\n", freight);
  printf("费用总额:%.3f\n", num + freight - num * 0.05);
  return 0;
}

运行结果


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