2022/11/18  8:40

昨儿有两道题做的,先做了来

题8:编写一个程序,显示求模运算的结果。把用户输入的第一个整数作为求模运算符的第二个运算对象,该数在运算过程中保持不变,用户后面输入的第一个数为运算对象。输入非正值运算结束。

解:

#include <stdio.h>
int main()
{int a, b,c;printf("输入除数:");scanf("%d", &a);printf("输入被求模的数:");scanf("%d",&b);while (b > 0){c = b % a;printf("%d %% %d=%d", b, a, c);printf("\n输入下一个数(输入<=0的数停止):");scanf("%d", &b);}return 0;
}

简单拿下,但是注意除数与被除数之间的位置。

题9:编写一个程序,要求用户输入一个华氏温度。程序读取double类型的值作为温度值,并把该值作为参数传递给一个用户自定义的函数Temperatures()。该函数计算摄氏温度和开氏温度,并以小数点后两位的精度显示3种温度。要使用不同温标来表示这三个温度值。下面是华氏温度转换摄氏温度的公式。

摄氏温度-5.0/9.0*(华氏温度-32.0)

开氏温标常用于科学研究,0表示绝对零,代表最低的温度。下面是摄氏温度转开氏温度的公式:

开氏温度=摄氏温度+273.16

Temperatures()函数中用const创建温度转换中使用的变量。在main()函数中使用一个循环让用户重复输入温度,在用户输入q或者其他非数字时,循环结束。scanf()函数返回读取数据的数量,所以如果读取数字则返回1,如果读取q就不返回1.可以将==运算符将scanf()的返回值和1作比较,测试二者是否相等。

解:

#include <stdio.h>
int temperatures(double n);
int main()
{float h;printf("输入一个华氏温度:");scanf("%f",&h);temperatures(h);return 0;
}
int temperatures(double n)
{const float s = 5.0 / 9.0 * (n - 32.0);const float k = s + 273.16;while (n = )                //加入条件使用户输入非数字停止程序{printf("华氏温度%f换算为开氏温度=%f,换算为摄氏温度=%d", n, s, k);return n;}

肯定错了,没返回,函数应该也没写对。

看了下答案,大体结构差不是很多,小细节上要多改(主要是返回1上)

修改版:

#include <stdio.h>
int temperatures(float n);
int main()
{float h;printf("输入一个华氏温度:");while (scanf("%f", &h) == 1){temperatures(h);printf("\n输入下一个华氏温度(输入q停止转换)");}return 0;
}
int temperatures(float n)
{const float s = 5.0 / 9.0 * (n - 32.0);const float k = s + 273.16;printf("华氏温度%.2f换算为摄氏温度=%.2f,换算为开氏温度=%.2f", n, s, k);return 0;
}

不懂在while (scanf("%f", &h) == 1)这一行scanf()函数返回1上。

摘自day7:scanf 函数的返回值反映的是按照指定的格式符正确读入的数据的个数。 如果输入数据与指定格式不符,则会产生输入错误。 遇到输入错误,scanf函数会立即终止,返回已经成功读取的数据的个数。

猜想:1.while函数判定scanf()函数的返回值是否为1字节?然后以此来判定是否继续循环?

    2.或者是利用scanf()判定是否与指定格式相符,相符继续while循环,不相符结束循环?

10:50,去开第六章的坑了。

第六章程序清单里的程序选一些自己试试:

#include <stdio.h>
int main()
{const int a = 46;const int b = 20;int ounces, cost;printf("ounces, cost\n");for (ounces = 1, cost = a;ounces <= 16;ounces++,cost+=b)printf("%-5d   $%4.2f\n",ounces,cost/100.0);return 0;
}

一个for循环,用了逗号运算符,转换成while试一试:

#include <stdio.h>
int main()
{const int a = 46;const int b = 20;int ounces, cost;ounces = 1;cost = 0;printf("ounces, cost\n");while(ounces<=16){cost+= a;printf("%-5d   $%4.2f\n", ounces, cost / 100.0);ounces++;}return 0;
}

注意要进入循环cost就要赋一个0,注意ounces++的位置应在printf()函数之后

换行打印A~J:

#include <stdio.h>
int main()
{const int a = 10;const int b = 6;char ch;int row;for (row = 0; row < b; row++){for (ch = 'A'; ch < 'A' + a; ch++)printf("%c",ch);printf("\n");       //本行不能和上一行写在一起打印}return 0;
}

\n不能和上一行一起打印的原因:for()函数会在遇到的第一个分号认定此次循环结束并开始下一次循环,如果\n在第一个分号内,循环一次就会换行一次,只能将换行符写在第一个分号外,直到for()函数结束循环,才会读取换行符,进行外层嵌套的循环。

上一个函数修改一下,用外部嵌套控制内部嵌套:

#include <stdio.h>
int main()
{const int a = 10;const int b = 6;char ch;int row;for (row = 0; row < b; row++){for (ch = 'A'+row; ch < 'A' + a;ch++)printf("%c",ch);printf("\n");}return 0;
}

注意,row要加在内部嵌套的赋初值上(即initalize语句),原因是什么自己想

求平均数(在for中使用数组):

#include <stdio.h>
#define SIZE 10
int main()
{int index, score[10];int sum = 0;float average;printf("抽取%d个学生的成绩:\n",SIZE);for (index = 0;index < SIZE;index++)scanf("%d",&score[index]);printf("The scores read in are as follow:\n");for (index = 0;index < SIZE;index++)printf("%5d", score[index]);printf("\n");for (index = 0;index < SIZE;index++)sum += score[index];average = float(sum) / SIZE;printf("学生的平均成绩为:%.2f", average);return 0;
}

把程序看懂,三个for循环都有不同的功能,拆开看。

第六章编程练习(P149)

题1:编写一个程序,创建一个包含26个元素的数组,并在其中储存26个小写字母。然后打印数组的所有内容。

解:

#include <stdio.h>
#define SIZE 26
int main()
{char ch[SIZE];int x=0;char DOES = 'a';while (x<26){ch[x]= 'a'+x;printf("%c", ch[x]);x++;}return 0;
}

运行结果

可实现,答案用的for循环,再用for循环写一遍:

#include <stdio.h>
#define SIZE 26
int main()
{char ch[SIZE];int x;for (x = 0;x < 26;x++){ch[x] = 'a' + x;printf("%c", ch[x]);}return 0;
}

答案用的嵌套,用for嵌套再写一遍

#include <stdio.h>
#define SIZE 26
int main()
{char ch[SIZE];int x;char y='a';for (x = 0;x < 26;x++)ch[x] = y;for (y = 'a';y < 122; y++)printf("%c", ch[x]);return 0;
}

自己写的,运行乱码,抄答案写一遍

#include <stdio.h>
#define SIZE 26
int main()
{char ch[SIZE];int x;char y='a';for (x = 0;x < 26;x++,y++)ch[x] = y;for (x=0;x<26;x++)printf("%c", ch[x]);return 0;
}

思路差不多,第一个用于for赋值,第二个for用于打印,没有正确理解嵌套的用法,导致没有正确实施思路。

问:第一个for和第二个for中的x是一个x吗?

#include <stdio.h>
#define SIZE 26
int main()
{char ch[SIZE];int x;int b;char y='a';for (x = 0;x < 26;x++,y++)ch[x] = y;for (b=0;b<26;b++)printf("%c", ch[b]);return 0;
}

这俩x就不是同一个x,换成b依然可运行。

C Primer Plus NO.8相关推荐

  1. 《C++primer》第一章--开始

      之前开始读<C++primer>,想着读书不动笔不如不读书,于是就想做一个读书笔记的内容,于是就想起了写一个<C++primer读思录>的一个专栏.一是为了给自己平时读书做 ...

  2. C++ Primer 读书笔记 (1)

    我的<C++ Primer>扉页记着购书的日期和地点:C++ Primer 2009.11.28购于西区求索.那时对于这本厚书一直心怀敬畏,仿佛是眼前的一座大山.那时,虽然已经大四,但是对 ...

  3. C++ Primer(第4版)(评注版)

    <C++ Primer(第4版)(评注版)> 基本信息 原书名: C++ Primer (4th Edition) 原出版社: Addison-Wesley Professional; 4 ...

  4. C++ Primer英文版(第5版)

    <C++ Primer英文版(第5版)> 基本信息 作者: (美)李普曼(Lippman,S.B.) (美)拉乔伊(Lajoie,J.) (美)默Moo,B.E.) 出版社:电子工业出版社 ...

  5. C++ Primer 学习笔记(第四章:表达式)

    2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...

  6. C++ Primer 第三版 读书笔记

    1.如果一个变量是在全局定义的,系统会保证给它提供初始化值0.如果变量是局部定义的,或是通过new表达式动态分配的,则系统不会向它提供初始值0 2.一般定义指针最好写成:" string * ...

  7. c++ primer,友元函数上的一个例子(By Sybase)

    本文试图解释c++ primer Screen 和 Window_Mgr的例子,为什么将两个类放在两个文件中无法编译? 将两个类写在同一个文件中,通过三个例子解释问题: 第一种写法问题: 编译到Scr ...

  8. 《C Primer Plus(第6版)中文版》一第1章 初识C语言1.1 C语言的起源

    本节书摘来自异步社区<C Primer Plus(第6版)中文版>一书中的第1章,第1.1节,作者 傅道坤,更多章节内容可以访问云栖社区"异步社区"公众号查看. 第1章 ...

  9. C++ primer学习方法

    C++ primer学习: 第一次可以跳着看.关键是要尽快用起来,在使用中熟练,而不是在细节中迷失. 以C++ Primer第五版为例,第一遍读的时候: Part1也就是前七章,除了6.6,6.7节, ...

  10. 程序清单3.3_bases.c程序_《C Primer Plus》P37

    /* bases.c -- 以十进制.八进制.十六进制形式输出 100 */// bases.cpp : 定义控制台应用程序的入口点. // /*时间:2018年06月03日 23:23:06代码:程 ...

最新文章

  1. Win32 调用netapi32实现用户枚举
  2. MySQL 使用 OR 条件导致索引失效
  3. Tecplot 360 按教程安装完毕后,弹出“Is your Tecplot 360 EX liense valid?”【终极解决办法】
  4. QT 动态创建对象(第一种方法)
  5. 察颜观色保无忧—存储卡选购之四法则
  6. Build.VERSION_CODES类
  7. jQuery设置iframe的高度
  8. java string查找_Java lastIndexOf() 方法
  9. java中chl列表_Java 同步框架 AQS 深入分析
  10. dex2jar源码解析之总体介绍(一)
  11. asp.net汽车4S店管理系统VS开发sqlserver数据库web结构C#编程
  12. Murex 快速风险分析引擎
  13. android 投屏 电脑,安卓王者荣耀投屏电脑
  14. scala linearization
  15. layim php,PHP版layim整合融云简单实现
  16. ERROR: Cannot uninstall ‘PyYAML‘. It is a distutils installed project and thus we cannot...
  17. LiveData详解
  18. VS2015 C++/CLR
  19. 【信号去噪】基于硬阈值、软阈值、半软阈值、Maxmin阈值、Garrote阈值小波变换实现心音去噪附matlab代码
  20. overridePendingTransition设定两个activity之间的转场动画没有效果,但不报错! (大神帮帮我吧,代码如下,谢谢)

热门文章

  1. pip3 install -i sklearn 安装报错
  2. c语言双目交换运算符,C语言复习资料
  3. Python(廖雪峰) 学习笔记(1)
  4. Android:判断手机运营商
  5. Spring入门详解(一)如何配置一个简单的spring项目
  6. Opencv实现停车位识别
  7. 汉字转换拼音首字母(可以处理部分多音字)
  8. mysql 8.064位安装_windows64位下MySQL8.0.15安装教程图文详解
  9. UCI 心脏病数据集Heart Disease Data Set
  10. php feff,php编程中要留意的那些坑~