C博客作业01--分支、顺序结构

C博客作业01--分支、顺序结构

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

0.展示PTA总分

2020-1-顺序结构

2020-2-分支结构

1.本章学习总结

1.1 学习内容总结

  1. 数据
数据类型 占用内存(字节) 输入 输出
int(整数) 4 %d %d
double(双精度) 8 %lf %f
float(单精度) 4 %f %f
char(字符) 1 %c %c
  1. if else
if (条件语句) 
{
结果1;
} 
else if (条件语句)
{
结果2;
} 
else 
{
结果n;
}
  1. 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都能写,反之不然。如,区间判断。
  • 判断时==,&&,||不要漏打,(经常因为这个而找错半天,毕竟不会报错)。
  1. for
    for循环的表达式为for( ; 判断 ; )比while,更简洁.
  2. 字符
  • 字符输入用getchar()
  • ()中无参数;输出用putchar()
  • ()中要含有参数。两者都每次只能输入输出一个字符
  1. 函数
  2. math.h的
  • 幂函数:pow(x,n)
  • e^x:exp(x)
  • 平方根:sqrt(x)
  • 绝对值:fabs(x)
  1. 随机函数: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. 前一月份的日数
  2. 1月减一会减一年
  3. 闰年平年的二月分别有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.
posted @ 2020-11-08 17:06  一笑惜命  阅读(134)  评论(0编辑  收藏  举报