| 这个作业属于哪个班级 | 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)
- 数据处理:
- 输入年、月、日
- 判断日是否大于3,若大于3则不需要改变月份,直接输出 年、月、日-2
- 若日期不大于3,则进行对年份的判断。
- 定义一个返回类型为整型的函数,判断年份,若是闰年,则返回1。反之,返回0
- 接下来将输入的月份分为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)
- 数据处理:
- 建立while循环,当word = '.'时跳出循坏
- 在该循环内在嵌入一个do-while循环,当word != ' ' && word != '.'时执行循环体。
- 在do-while循环内输入word的值,并接下来在该循环中进行判断,如果word != ' ' && word != '.'则count++
- 在跳出do-while循环后,判断count不为零时,再判断 flag ,若flag = 1 则输出空格加上count,并将flag = 0;count = 0;
- 若flag为0,则输出count,并将count = 0
2.2.2 代码截图
2.3.3 PTA提交列表及说明
2.3出租车计价
2.3.1 单步调试截图
2.3.2 代码截图