C Primer Plus 第6版 第8章 编程练习

简介: C Primer Plus 第6版 第8章 编程练习

-- 这章的练习要使用重定向,如果不能使用,可以用特殊字符代替EOF

1.统计读到文件结尾之前读取的字符数。

#include<stdio.h>
int main(void)
{
  char ch;
  int char_num = 0;
  while ((ch = getchar()) != EOF)
    char_num++;
  printf("char_num = %d", char_num);
 
  return 0;
}

2.略

3.读到EOF,报告大写字母和小写字母的字数。

#include<stdio.h>
int main(void)
{
  char ch;
  int Big = 0;
  int Small = 0;
  while ((ch = getchar()) != EOF)
  {
    if ('a' <= ch && ch <= 'z')
      Small++;
    else if ('A' <= ch && ch <= 'Z')
      Big++;
  }
  printf("小写有 %d个, 大写有 %d 个",Small,Big);
 
  return 0;
}

4.报告读取单词的平均字母数。(简化版)

#include<stdio.h>
#include<ctype.h>
int main(void)
{
  char ch;
  int num_words = 0; //单词数量
  int num_a = 0;   //字母数量
  while ((ch = getchar()) != EOF)
  {
    if (ch == ' ')
      num_words++; // 每个单词后面有1个空格
    else if(isalpha(ch) )
      num_a++;
  }
  num_words++; // 最后一个单词后面没有空格,所以在这里+1
  printf("一共%d个单词,%d个字母,平均每个单词有%f个字母", num_words, num_a, 1.0*num_a / num_words);
  getchar(); getchar();
  return 0;
}

5.二分查找猜数. 比如猜数0~100,先猜50,如果用户说大了, 就猜 0~50的中间值 25.

这道题刚开始犯了个错误,就是字符串直接用 == 比较了,然后一直出错。后来想起来要用strcmp比较字符串。

#define _CRT_SECURE_NO_WARNINGS
 
 
#include<stdio.h>
#include<string.h>
int main(void)
{
  int max;
  int min;
  bool bingo = false;
  char condtion[20];
  int answer;
  printf("输入数字的范围:\n最小值:");
  scanf_s("%d", &min);
  printf("最大值:");
  scanf_s("%d", &max);
 
  printf("想好一个数字,不要说出来,我要开始猜了\n");
  while (!bingo)
  {
    printf("我猜是%d\n", (max + min)/2);
    printf("大了?小了?对了?(请输入这3个之一)");
    scanf("%s", condtion);
    if (strcmp(condtion, "大了") == 0)
      max = (max + min) / 2;
    else if (strcmp(condtion, "小了") == 0)
      min = (max + min) / 2;
    else if (strcmp(condtion, "对了") == 0)
    {
      bingo = true;
      answer = (max + min) / 2;
    }
  }
  printf("答案是%d,再见",answer);
  getchar(); getchar();
  return 0;
}

6,7 略

8.编写简单计算器,提供+-*/的菜单。

一开始写的版本每次选择都会打印两次, 查了资料知道是缓冲区的问题,

选择时,输入a回车,然后a读入,回车还在,但是这个回车最后不影响。

进入 加法,输入第一个数字没问题,输入第二个数字时又多了一个回车。

这时候缓冲区就有一个换行符,然后就直接把'\n'读给choice了,

一个简单的办法就是把输入后面多出来的回车用getchar()读掉。

#include<stdio.h>
#include<stdlib.h>
int main(void)
{
  char choice ;
  char ch;
  double first;
  double second;
  do
  {
    printf("请选择:\n \
a. 加 add\ts.减 subtract \n \
m. 乘 multiply\td. 除 divide  \n \
q. quit\n");
    scanf_s("%c",&choice);
    //getchar();
    switch (choice)
    {
    case 'a':
    {
      printf("输入第一个数字");
      scanf_s("%lf", &first);
      printf("输入第二个数字");
      scanf_s("%lf", &second);
      printf("%g + %g = %g\n", first, second, first + second);
      getchar();
    }
    break;
 
    case 's':
    {
      printf("输入第一个数字");
      scanf_s("%lf", &first);
      printf("输入第二个数字");
      scanf_s("%lf", &second);
      printf("%g - %g = %g\n", first, second, first - second);
      getchar();
    }
    break;
  
    case 'm':
    {
      printf("输入第一个数字");
      scanf_s("%lf", &first);
      printf("输入第二个数字");
      scanf_s("%lf", &second);
      printf("%g * %g = %g\n", first, second, first * second);
      getchar();
    }
    break;
    case 'd':
    {
      printf("输入第一个数字");
      scanf_s("%lf", &first);
      printf("输入第二个数字");
      scanf_s("%lf", &second);
      printf("%g / %g = %g\n", first, second, first / second);
      getchar();
    }
    break;
    case 'q':
      printf("Bye");
      break;
    default:
      printf("%c是无效输入\n",choice);
      break;
    }
  } while (choice != 'q');
 
 
  return 0;
}
相关文章
交叉编译安装tslib
交叉编译安装tslib
355 0
|
网络协议 Linux Shell
localhost 和 127.0.0.1 的区别
localhost 和 127.0.0.1 的区别
localhost 和 127.0.0.1 的区别
|
12月前
|
运维 监控 算法
监控局域网其他电脑:Go 语言迪杰斯特拉算法的高效应用
在信息化时代,监控局域网成为网络管理与安全防护的关键需求。本文探讨了迪杰斯特拉(Dijkstra)算法在监控局域网中的应用,通过计算最短路径优化数据传输和故障检测。文中提供了使用Go语言实现的代码例程,展示了如何高效地进行网络监控,确保局域网的稳定运行和数据安全。迪杰斯特拉算法能减少传输延迟和带宽消耗,及时发现并处理网络故障,适用于复杂网络环境下的管理和维护。
|
12月前
|
数据挖掘 数据处理 开发者
Pandas高级数据处理:实时数据处理
本文介绍了Pandas在实时数据处理中的应用,涵盖基础概念、常见问题及解决方案。Pandas是Python中强大的数据分析库,支持流式读取和增量更新数据,适用于大规模数据集的处理。通过分块读取、数据类型优化等方法,可有效解决内存不足等问题。文中还提供了代码示例,帮助读者更好地理解和掌握Pandas在实时数据处理中的使用技巧。
268 15
|
数据采集 SQL 关系型数据库
在 MySQL 中使用 ASCII
【8月更文挑战第11天】
480 1
在 MySQL 中使用 ASCII
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。
|
SQL 监控 关系型数据库
深入理解MySQL:核心技术与实战应用
第一章:MySQL概述 1.1 MySQL简介 简要介绍MySQL的起源、发展历程和它在现代数据库领域中的位置
|
Shell Go 开发工具
使用 Hugo 快速搭建一个云博客系统
使用Hugo快速搭建博客,Hugo是基于Go的静态站点生成器,以其简单、高效著称。[官网](https://gohugo.io/) 提供多种主题,如[m10c](https://themes.gohugo.io/themes/hugo-theme-m10c/)等。在Mac上可通过`brew install hugo`安装。创建站点`hugo new site ~/hugo-blog`,
524 0
使用 Hugo 快速搭建一个云博客系统
|
Ubuntu 应用服务中间件 nginx
百度搜索:蓝易云【Ubuntu 18.04系统编译安装Nginx 1.22教程。】
现在,您已经成功地在Ubuntu 18.04上编译和安装了Nginx 1.22。您可以通过在浏览器中访问服务器的IP地址来验证Nginx是否正常运行。请确保在实际操作中根据您的需求进行适当的配置和调整。请注意,通过编译安装方式安装的Nginx不会自动更新,您需要手动更新版本或进行维护。
199 1
|
编译器 C语言
【柔性数组】0长度数组,可变数组
【柔性数组】0长度数组,可变数组