C博客作业00--顺序分支结构.md
这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业00--顺序分支结构 |
这个作业的目标 | 初步认识C语法,掌握数据表达、printf、scanf语法及分支结构内容 |
0.展示PTA总分
1.本章学习总结
1.1学习内容总结
-
**if else & switch case **
用法:
1、if(判断条件){语句}
2、if(判断条件) {语句}else {语句}
3、if(判断条件) {语句}else if (判断条件) {}···
4.switch(i)
{
case 1:语句break;
case 2:
···
default:···
}
注意点:
在连续使用&&、||时注意条件判断是否合理不要漏打符号
在判断变量是否为零时注意判断方式
switch case 语句中case后面不能接式子
-
函数
幂函数:pow(x,n)
平方根:sqrt(x)
绝对值:fabs(x)
随机函数:srand(time(0));
srand()为生成一个随机数,time(0)则是改变随机数生成种子进而随时间变化生成不同的随机数
-
数据输入
数据类型 占用内存(字节) 输入 输出 int(整数) 4 %d %d double(双精度) 8 %lf %f float(单精度) 4 %f %f char(字符) 1 %c %c
1.2编程技巧总结
-
取某一位数各位做法
将该数用10取余即可;
在配合/10混合使用可分离一个数的不同位的数
#include<stdio.h> int main() { int x,a,b,c; scanf("%d",&x); a=x/100; x=x%100; b=x/10; c=x%10; printf("%d,%d,%d",a,b,c); return 0; }
-
判断整除
用10取余被判断的数在判断余数是否为零
#include<stdio.h> int main() { int N,M; scanf("%d %d",&M,&N); if(M%N==0) { printf("YES"); } else { printf("NO"); } return 0; }
-
比较大小
通过判断将最大数或最小数放在一个自变量中在逐步判断即可
#include<stdio.h> int main() { int a,b,c,i; scanf("%d %d %d",&a,&b,&c); if(a>b) { i=a; a=b; b=i; } if(a>c) { i=a; a=c; c=i; } if(b>c) { i=b; b=c; c=i; } printf("x=%d,y=%d,z=%d",a,b,c); return 0; }
1.3本章学习体会
- 总的来说分支结构不难但是细节多,在重复使用时容易出现错误,而PTA的难度不均衡,容易导致在某一道题目上无法突破。
- 总计约40道左右
2.PTA实验作业
2.1 前天是哪天
2.1.1 数据处理
-
先区分闰年在逐一对每个月进行判断。
-
数据表达:year,month,day,类型为整数型。
-
表达式:主要用到了取余和分支结构的if else。
2.1.2 代码截图
#include<stdio.h>
int main()
{
int year, month, day;
scanf("%d-%d-%d",&year,&month,&day);
if (day > 2)
{
day = day - 2;
}
else
{
if (month == 5 || month ==7 || month ==8 || month ==10 || month ==12)
{
day = day - 2 + 30;
month = month - 1;
} else if (month == 2 || month ==4 || month ==6 || month ==9 || month ==11)
{
day = day - 2 + 31;
month = month - 1;
} else if (month == 1)
{
day = day - 2 + 31;
month = 12;
year = year - 1;
} else if (month == 3)
{
if (year % 4 == 0)
{
if(year%100==0)
{
if (year % 400 == 0)
{
month = month - 1;
day = day - 2 + 29;
} else
{
month = month - 1;
day = day - 2 + 28;
}
} else
{
month = month - 1;
day = day - 2 + 29;
}
} else
{
month = month - 1;
day = day - 2 + 28;
}
}
}
printf("%d-%d-%d", year, month, day);
return 0;
}
2.1.3 PTA提交列表及说明
- 编译错误:有输入没加&或者未加;
- 部分正确:将大月与小月的运算式弄反,闰年判断错误,二月进位错误。
2.2 自选一题,内容要和字符型数据处理有关的题目
2.2.1 数据处理
- 设置变量:ch(记录字符),sign(记录空格),len(用来记录输出单词长度),flag(作为一个标志符)
- 先记录字符长度但输入空格时停止输出字符长度即为一个循环,后再继续运行直到输入句号为止。
2.2.2 代码截图
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch;
char sign = ' ';
int len;
int flag;
len = 0;
flag = 0;
while( (ch=getchar())!='.'){
if(ch!=' ') len++;
else if(len!=0){
if(flag!=0) putchar(sign);
flag = 1;
printf("%d",len);
len = 0;
}else{
continue;
}
}
if(flag==1 && len!=0) putchar(sign);
if (len) printf("%d",len);
return 0;
}
2.2.3 PTA提交列表及说明
- 先在VS上经过调试,遇到过任何停止计数输出长度问题。
2.3 自选一题,介绍单步调试如何检查错误
2.3.1 单步调试截图
经过debug得money2运算后值为零,应改变运算类型。
2.3.3 PTA提交列表及说明
#include<stdio.h>
int main()
{
double length, money1, money2, money;
int time;
scanf("%lf %d",&length,&time);
if(length<=3)
{
money1 = 10;
money2 = (time / 5) * 2;
money = money1 + money2;
}
else if(length<=10)
{
money1 = 10 + (length - 3) * 2;
money2 = (time / 5) * 2;
money = money1 + money2;
}
else
{
money1 = 24 + (length - 10) * 3;
money2 = (time / 5) * 2;
money = money1 + money2;
}
printf("%.0f", money);
return 0;
}