【读书笔记】【C程序设计语言】【第一章】【基本概念】

环境准备

我的是Mac环境

cc:

Apple LLVM version 10.0.0 (clang-1000.10.44.2)
Target:x86_64-apple-darwin17.7.0
Thread model: posix

编辑器:CotEditor

1.1 入门

需求

打印hello,world

开发

  • 新建hello.c文件
  • 输入下列代码
#include <stdio.h>
main()
{
    printf("hello,world\n");
}

但请注意,以上代码编译后会产生警告,原书发布时间较早的原因,是没有说明的,大家要留意。

hello.c:2:1: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
main()
^

所以我们要改成:

#include <stdio.h>
int main()
{
    printf("hello,world\n");
}

#include <stdio.h>
int main()
{
    printf("hello,world\n");
    return 0;
}

这两种写法编译后都不会产生警告,正确编译,但是推荐用第二种写法,因为从程序运行上更严谨。

  • 在终端中输入cc hello.c,执行
  • 在hello.c所在目录,继续输入./a.out,执行,输出hello,world

注意事项

  • 不加n情况
#include <stdio.h>
int main()
{
    printf("hello,world");
    return 0;
}

输出结果,发现hello,world没有换行。

clipboard.png

  • n换成c情况
#include <stdio.h>
int main()
{
    printf("hello,world\c");
    return 0;
}

输出结果,发现编译时出现警告,并且运行是hello,world后面多了一个c,但是没有输出。
clipboard.png

1.2 变量与算数表达式

需求1

使用公式℃=(5/9)(℉-32),打印下列华氏度与摄氏度的对照表
0 -17
20 -6
40 4
60 15
80 26
100 37
120 48
140 60
160 71
180 82
200 93
220 104
240 115
260 126
280 137
300 148

开发

  • 新建文件,键入下列代码
#include <stdio.h>
int main()
{
  /*当fahr=0,20,...,300时,分别打印华氏温度与摄氏温度对照表*/
  float fahr,celsius;
  float lower,upper,step;
  lower=0;/*温度表的下限*/
  upper=300;/*温度表的上限*/
  step=20;/*步长*/
  fahr=lower;
  printf("%s\t%s\n","华氏度","摄氏度");
  while(fahr<=upper){
    celsius=(5.0/9.0)*(fahr-32.0);
    printf("%3.0f\t%6.1f\n",fahr,celsius);
    fahr=fahr+step;
  }
  return 0;
}
  • 输出结果

clipboard.png

需求2

根据需求1,将摄氏温度转换为华氏温度,其他条件不变

开发

根据需求1的公式,有需求2的公式,℉=(9℃+160)/5

  • 新建文件,键入下列代码
#include <stdio.h>
int main()
{
  /*当celsius=0,20,...,300时,分别打印摄氏温度与华氏温度对照表*/
  float fahr,celsius;
  float lower,upper,step;
  lower=0;/*温度表的下限*/
  upper=300;/*温度表的上限*/
  step=20;/*步长*/
  celsius=lower;
  printf("%s\t%s\n","摄氏度","华氏度");
  while(celsius<=upper){
    fahr=(160.0/5.0)+(9*celsius/5.0);
    printf("%3.0f\t%6.1f\n",celsius,fahr);
    celsius=celsius+step;
  }
  return 0;
}
  • 输出结果

clipboard.png

注意事项

  • /*注释*/表示多行注释,另一种是单行注释//注释
  • 类型
类型范围说明
char-128~127字符
short-32768~32767短整型
int16位-32768~32767,32位-2147483648~2147483647($-2^{32}~2^{32}-1$)整型
long 长整型
float$10^{-38}-10^{38}$$单精度浮点型
double 双精度浮点型
  • 整数除法操作将进行舍位,结果中的任何小数部分都会被舍弃
  • 格式化,百分号(%)表示参数替换位置,后面紧跟的符号,表示打印的格式
格式说明
%d打印十进制整数
%3d打印3位十进制整数,右对齐
%3.0d打印3位十进制整数,且不带小数点和小数部分,右对齐
%3.1d打印3位十进制整数,且带小数点和1位小数,右对齐
%.1d打印十进制整数,且带小数点和1位小数,右对齐
%f打印十进制浮点数,包括float、double类型
%x打印十六进制数
%o打印八进制数
%s打印字符串
%c打印字符
%%打印%本身

1.3 for

需求1

将1.2节需求1中的while改成for来实现

开发

  • 新建文件,键入下列代码
#include <stdio.h>
int main()
{
  /*当fahr=0,20,...,300时,分别打印华氏温度与摄氏温度对照表*/
  int fahr;
  printf("%s\t%s\n","华氏度","摄氏度");
  for(fahr=0;fahr<=300;fahr=fahr+20){
    printf("%3d\t%6.1f\n",fahr,((5.0/9.0)*(fahr-32)));
  }
  return 0;
}
  • 输出结果

clipboard.png

需求2

将需求1中的结果逆序打印

开发

  • 新建文件,键入下列代码
#include <stdio.h>
int main()
{
  /*当fahr=0,20,...,300时,分别打印华氏温度与摄氏温度对照表*/
  int fahr=300;
  printf("%s\t%s\n","华氏度","摄氏度");
  for(fahr=300;fahr>=0;fahr=fahr-20){
    printf("%3d\t%6.1f\n",fahr,((5.0/9.0)*(fahr-32)));
  }
  return 0;
}
  • 输出结果

clipboard.png

注意事项

  • for适合循环次数已知的情况
  • while适合循环次数未知的情况

1.4 符号常量

需求1

将1.3节需求1中的幻数改成符号常量来实现

开发

  • 新建文件,键入下列代码
#include <stdio.h>

#define LOWER 0
#define UPPER 300
#define STEP 20

int main()
{
  /*当fahr=0,20,...,300时,分别打印华氏温度与摄氏温度对照表*/
  int fahr;
  printf("%s\t%s\n","华氏度","摄氏度");
  for(fahr=LOWER;fahr<=UPPER;fahr=fahr+STEP){
    printf("%3d\t%6.1f\n",fahr,((5.0/9.0)*(fahr-32)));
  }
  return 0;
}
  • 输出结果

clipboard.png

注意事项

  • #define 名字 替换文本
  • 名字与普通变量名相同,替换文本可以是任何字符序列,不仅限于数字

(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值