| 这个作业属于哪个班级 | C语言--网络2011/2012 |
| ---- | ---- | ---- |
| 这个作业的地址 | C博客作业01--分支、顺序结构 |
| 这个作业的目标 | 初步认识C语法,掌握数据表达、printf、scanf语法及分支结构内容 |

0.展示PTA总分

顺序结构
分支结构


1.本章学习总结

1.1 学习内容总结

随机函数的使用

#include <stdio.h>
#include <stdlib.h> //调用**rand**和**srand**函数的库
#include <time.h>   //调用**time**函数的库
int main()
{
	int num;
	
	srand(time(0)); //其中0可以改为NULL,但注意要大写。并且若不输入0,而输入 1、1.0的整型或浮点型数值时,会发生形参不兼容而编译失败。
	num = rand();   
	printf("%d", num);
	
	return 0;
}
  • rand函数
    • 系统在调用rand函数,之前会自动调用srand函数,且默认为srand(1)
    • rand函数是一个取随机数的函数,但是如果用户未在使用rand前调用srand,则随机数在第一次之后都是一样的,不会改变。
  • srand函数
    • srand 函数与 rand 随机数取值有关,如果直接使用rand函数,则默认为srand(1)。须在使用rand函数前,调用srand函数,改变srand(seed)括号内seed的值,rand生成随机数也随之改变。
  • time函数
    • time函数,表示返回从1970年1月1日00:00:00到当前所经过的时间(单位秒)。

宽度限定词

      printf("%6d",num1);      //%md    指定了输出整型数据的输出宽度为m (包括符号位)
      printf("%6.1f",num2);    //%m.nf  指定了输出浮点数据是保留n位小数,且输出宽度为m (包括符号位和小数位)

浮点误差

  • 原因:计算机内的数字用二进制储存,十进制转化为二进制时,有些数值会出现无限循环。而计算器存储的位数有限,将多出的数据舍去后,将会产生误差。
  • 后果:对于浮点数的相等判断,一般不用 == 符号,因为可能取不到结果,发生死循环。
  • 解决:一般使用相减的绝对值小于某个很小的值,即判断为相等
      fabs(x - x0) <= 0.000001

scanf()函数与字符

例一

      scanf("%lf%c%lf",&valuel,&op,&value2);
  • 例子中用scanf 输入表达式,操作数和运算符中间不能出现空格(' '),否则空格将被当作字符读入。

例二

      scanf("%d",&num1);
      scanf("%c",&ch);
  • 假设输入 12 和 yu,则num1 = 12,然而 ch = '\n'。
  • 原因:在输入num1后,键入的回车被读入ch,因而ch未接收到 'yu'
  • 解决方法
      scanf("%d",&num1);
      getchar();           //利用getchar吃掉回车,以便可以顺利ch预期的值
      scanf("%c",&ch);

getchar 函数

      ch = getchar();      //从键盘输入一个字符,并赋值给ch
  • 调用函数getchar(),可以从键盘输入一个字符。
  • getchar()函数,可以读入一个字符,而不将其赋给变量
  • getchar()函数,一次仅能读入一个字符,如果需要多个字符,则多次调用getchar,一般使用循环语句。
      char ch;
      for ( i = 0; i < 10 ; i++ )
{
            ch = getchar; 
}

putchar 函数

      putchar(ch);         //putchar(输出参数);
  • 注意:putchar()函数,括号内的输出参数不需要引号包裹

逻辑非 !

      num1 = !12;
      num2 = !!12;
  • 则num1的值为0,num2的值为1。

1.2 编程技巧总结

  • 取一个数的个位
      onesPlace = num % 10;
  • 分离一个三位数的个、十、百位
      onesPlace = num % 10;
      tensPlace = num / 10 % 10;
      hundredsPlace = num / 100;
  • 交换数值 ——> 求出中间数
      temp = num1; 
      num1 = num2;
      num2 = temp;
  • 利用getchar清理'\n'
      scanf("%d",&num1);
      for( i = 0 ; i < N; i++)
      {
            getchar();      //吃掉scanf留下的'\n'
            scanf("%c",&ch);
      }

1.3 本章学习体会

  • 学习感受:自己处理问题的效率还不够,未能流利地完成手头上的事情。
  • 代码量:14题


2.PTA实验作业

2.1 前天是哪天

2.1.1 数据处理

  • 数据表达:
    • 变量:年份(year),月份(month),日(day)
  • 数据处理:
    1. 输入年、月、日
    2. 判断日是否大于3,若大于3则不需要改变月份,直接输出 年、月、日-2
    3. 若日期不大于3,则进行对年份的判断。
    4. 定义一个返回类型为整型的函数,判断年份,若是闰年,则返回1。反之,返回0
    5. 接下来将输入的月份分为4组。
    • 1月:需要跨年
    • 3月:跨月,因跨至2月特殊,需要按是否闰年分类
    • 5、7、10、12月:跨月,前一个月为30天
    • 2、4、6、8、9、11月:跨越,前一个月为31天
2.1.2 代码截图


2.1.3 PTA提交列表及说明

2.2单词长度

2.2.1 数据处理

  • 数据表达:
    • 变量:输入的字符( char word = 1)、计数变量(int count = 0)、旗帜(int flag = 1)
  • 数据处理:
    1. 建立while循环,当word = '.'时跳出循坏
    2. 在该循环内在嵌入一个do-while循环,当word != ' ' && word != '.'时执行循环体。
    3. 在do-while循环内输入word的值,并接下来在该循环中进行判断,如果word != ' ' && word != '.'则count++
    4. 在跳出do-while循环后,判断count不为零时,再判断 flag ,若flag = 1 则输出空格加上count,并将flag = 0;count = 0;
    5. 若flag为0,则输出count,并将count = 0

2.2.2 代码截图

2.3.3 PTA提交列表及说明


2.3出租车计价

2.3.1 单步调试截图

2.3.2 代码截图


2.3.3 PTA提交列表及说明