C博客作业01--分支、顺序结构
这个作业属于哪个班级 | C语言--网络2011/2012 |
---|---|
这个作业的地址 | C博客作业00--顺序分支结构 |
这个作业的目标 | 初步认识C语法,掌握数据表达、printf、scanf语法及分支结构内容 |
0.展示PTA总分
2020-1-顺序结构
2020-2-分支结构
1.本章学习总结
1.1 学习内容总结
- 数据
数据类型 | 占用内存(字节) | 输入 | 输出 |
---|---|---|---|
int(整数) | 4 | %d | %d |
double(双精度) | 8 | %lf | %f |
float(单精度) | 4 | %f | %f |
char(字符) | 1 | %c | %c |
- if else
if (条件语句)
{
结果1;
}
else if (条件语句)
{
结果2;
}
else
{
结果n;
}
- switch case
switch(控制表达式)
{
case 1:
结果2;
break;
......
case n:
结果n;
break;
default:
结果n+1;
}
tip:
- switch倾向于数值的匹配而不进行条件判断,switch不支持float型,布尔型,且常和break联用。
- if判断是逐句判断,速度可能没有switch case快,但是能用switch case写的if都能写,反之不然。如,区间判断。
- 判断时==,&&,||不要漏打,(经常因为这个而找错半天,毕竟不会报错)。
- for
for循环的表达式为for( ; 判断 ; )比while,更简洁. - 字符
- 字符输入用getchar()
- ()中无参数;输出用putchar()
- ()中要含有参数。两者都每次只能输入输出一个字符
- 函数
- math.h的
- 幂函数:pow(x,n)
- e^x:exp(x)
- 平方根:sqrt(x)
- 绝对值:fabs(x)
- 随机函数:srand(time(0));
- srand()为生成一个随机数,time(0)则是改变随机数生成种子进而随时间变化生成不同的随机数
1.2编程技巧总结
- 取某数的各个位数
%10取个位,后/10。
样例:水仙花数
代码
#include<stdio.h>
#include<math.h>
int main(){
int n,sum;
scanf("%d",&n);
int mark=pow(10,n);
int m=mark/10;
int p[10];
for(int i=0;i<10;i++){
p[i]=pow(i,n);
}
for(int i=m;i<mask;i++){
sum=0;
int x=i;
for(int j=1;j<=n;j++){
int d=x%10;
x=x/10;
sum+=p[d];
}
if(sum==i){
printf("%d\n",i);
}
}
}
- 判断一个数是否被整除
- a % b == 0
判断闰年
if (((yyyy % 4 == 0) && (yyyy % 100 != 0)) || (yyyy % 400 == 0))
{
switch (mm)
{
case 1:
digit = dd;
break;
case 2:
digit = 31 + dd;
break;
case 3:
digit = 31 + 29 + dd;
break;
case 4:
digit = 31 + 29 + 31 + dd;
break;
case 5:
digit = 31 + 29 + 31 + 30 + dd;
break;
case 6:
digit = 31 + 29 + 31 + 30 + 31 + dd;
break;
case 7:
digit = 31 + 29 + 31 + 30 + 31 + 30 + dd;
break;
case 8:
digit = 31 + 29 + 31 + 30 + 31 + 30 + 31 + dd;
break;
case 9:
digit = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + dd;
break;
case 10:
digit = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + dd;
break;
case 11:
digit = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + dd;
break;
case 12:
digit = 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + dd;
break;
}
}
- 比较大小并交换
- 通过判断大小将最大数或最小数放在一个自变量中在逐步判断即可
找出最小值
#include<stdio.h>
int main(){
int n,num,min;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&num);
if(i==0)min=num;
else if(num<min)min=num;
}
printf("min = %d",min);
return 0;
}
本章学习体会
- 林老师教的很好,因为自己自学的比较慢,代码量也不多,所以在上课时经常跟不上进度。做作业和刷题时经常出错导致速度太慢,有时理解不了题目,还好有舍友zgd的细心帮助才能解开迷惑。现在也在努力刷pta提高代码量,打牢基础。
- 总计约50道左右
2.PTA实验作业
2.1 前天是哪天
2.1.1 数据处理
- 数据日,月,年全是整数,用int和%d。
- 日>=3都是无需过多处理的。当小于三时需要考虑月份的减一后的三种情况
- 前一月份的日数
- 1月减一会减一年
- 闰年平年的二月分别有29,28天
2.1.3 PTA提交列表及说明
- 第一次输入的时候break没有写。
2.2 字符型数据处理
2.2.1数据处理
- ch记录字符,cnt记录空格,length记录输出单词长度,sign作标志符
2.2.2代码截图
2.2.3PTA提交列表及说明
- 一开始忘记加''
- 空格的计算出错
2.3 自选一题,介绍单步调试如何检查错误
2.3.1 单步调试截图
经过debug得标识符cnt没有初始化,应对其初始化。
2.3.2 代码截图 水仙花数
#include<stdio.h>
#include<math.h>
int main()
{
int sum, x, i, flower, cnt = 0;
int M;
int N;
scanf("%d %d", &M, &N);
flower = M;
if (M <= N && M >= 100 && N <= 999)
{
for (; flower <= N; flower++)
{
sum = 0;
x = flower;
for (i = 0; i < 3; i++)
{
int d = x % 10;
x = x / 10;
sum += pow(d, 3);
}
if (sum == flower && cnt > 0)
{
printf("\n");
printf("%d", flower);
}
if (sum == flower && cnt == 0)
{
printf("%d", flower);
cnt++;
}
}
}
else {
printf("Invalid Value.");
}
if (M <= N && M >= 100 && N <= 999 && cnt == 0)
{
printf("");
}
return 0;
}
2.3.3 PTA提交列表及说明
- 没看清楚题干的Invalid Value.条件
- 无输出时输出了Invalid Value.