• 我の第二篇博客


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

    0.展示PTA总分


    1.本章学习总结

    1.1本章内容总结

    1.1.1关于rand与srand

    • srand()用来设置rand()产生随机数时的随机数种子。
    • srand()是种子生成器,常用时间作为随机数生成器的种子所以在头文件加入#include<time.h>
    • 调用srand固定要#include<stdlib.h>头文件
    • rand()%100,rand()是一个整型数,整数对100的余数,因此rand()%100的取值范围是[1,99]。

    错误 第一次使用时发现结果永远是41,其实是因为我没提供随机种子,在我们没有定义初始值的情况下,系统默认给出seed值为1

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
    	int a = rand()%100;
    	printf("%d", a);
    }
    

    正确

    #include<stdio.h>
    #include<time.h>
    #include<stdlib.h>
    int main()
    {
    	srand(time(0));
            int a=rand()%100;
    	printf("%d", a);
    }
    

    1.1.2数学函数

    函数类型 函数名 使用方法 注释
    开根号 sqrt sqrt(x) x为开根号的数
    开方 pow pow(x,n) x的n次方
    绝对值 fabs fabs(x) x的绝对值

    注意:调用这些数学函数需要添加头文件#include<math.h>

    1.1.3交换数字

    常用temp作为中间量来实现两个数字的交换
    如以下代码:
    temp = num1; num1 = num2; num2 = temp;

    补充:如何不使用temp实现两个数的交换

    1. 加减法
    a = a + b;//
    b = a - b;//b = a+b-b,所以b已经得到a的值
    a = a - b;//a =(a+b)-(a),a得到b的值
    
    1. 乘除法
    a = a * b;
    b = a / b;//经过一乘一除,b得到a的值
    a = a / b;//a=(a*b)/(a),a得到b的值
    

    1.1.4关于%md

    它可以运用在scanf和printf语句中

    • scanf:超出m位只读m位.

    • printf:如果是%md,不足位数在左边用空格补充
      如图所示:

    • printf:如果是%-md,不足位数在右边用空格补充

    1.1.5flag

    flag可以用来帮助程序做复杂条件的判断。
    flag只有1和0两个数值,例子如下。
    题目:计算交错序列 1-2/3+3/5-4/7+5/9-6/11+... 的前N项之和。
    代码:

    #include<stdio.h>
    int main()
    {
        int N;
        scanf("%d", &N);
        int flag = 1;
        double temp;
        double sum = 0;
        for (int i = 1; i <= N;i++)
        {
            temp = 1.0 * flag*i / (2.0 * i - 1);
            sum = sum + temp;
            flag = -flag;      //1和-1反复横跳
        }
        printf("%.3f", sum);
    }
    

    1.1.6数据类型总结

    数据类型 scanf("") printf("")
    int %d %d
    double %lf %f
    float %f %f
    char %c %c

    注意字符要用单引号('')

    1.2 编程技巧总结

    • 判断整除做法
    #include<stdio.h>
    int main()
    {
    	int a;
    	scanf("%d", &a);
    	if (a % 10 == 0) //判断整除
    	{
    		printf("您输入的%d能被十整除",a);
    	}
    	else
    	{
    		printf("您输入的%d不能被十整除", a);
    	}
    }
    
    取某一位数个位做法 去某一位数个位做法 取已知位数的最高位数(例如四位数) 去已知位数的最高位数(例如四位数)
    a=a%10 a=a/10 a=a/1000 a=a%1000
    • 代码中比较难理解的部分,最好有注释
    //我是单行注释
    /*我是多行注释
    emmmmmmmmmmmmmmmm*/
    
    • 英文来当变量名
    • 为了美观,我们还用驼峰命名法
    • 常用temp作为中间量来实现两个数字的交换
    • flag只有1和0两个数值,因此可以用来帮助程序做复杂条件的判断

    1.3 本章学习体会

    • 本章学习了分支和顺序结构的相关语法,和一些编程技巧
      不理解的地方:!x和!!x不是很懂,还有while(1)
    • 这两周把分支和顺序结构刷了,大概600行代码量吧。

    2.PTA实验作业

    2.1 前天是哪天

    2.1.1 数据处理

    数据表达:
    1.常量:无
    2.变量:
       现在年月日三个变量
       两天前的年月日三个变量
    数据处理:
    1.前天是哪天?需要考虑是否是上个月
    2.上个月是否是去年的12月(跨年)
    

    2.1.2 代码截图


    2.1.3 PTA提交列表及说明


    代码是来自智凯学长的,自己理解的比较清楚,没有出现问题。

    2.2

    2.2.1 数据处理

    数据表达:
    1.常量:3,9,30
    2.变量:
       兔子跑的距离rabbitDis
       乌龟跑的距离turtDis
       跑的时间time
       跑的总时间TotalTime
    数据处理:
    1.每跑十分钟回头看一下乌龟用time%10=0
    2.计算兔子跑的距离rabbitDis,乌龟跑的距离turtleDis
    3.在回头看的前提下,如果rabbit>turtleDis,则兔子不动,乌龟继续跑30分钟
    4.在兔子不动时,还要考虑乌龟是否能跑满30分钟
    5.time从1到TotalTime
    6.因为循环次数确定,所以用for循环
    

    2.2.2 代码截图


    2.2.3 PTA提交列表及说明


    Q1:部分正确说明大体是正确的
    A1:经过单步调试后,发现time到了它依然在循环内,原来是我少了break;跳出
    Q2:在vs改完后复制到PTA依旧错误(一脸懵逼)
    A2:原来是scanf_s的问题

    2.3 自选一题,介绍单步调试如何检查错误

    2.3.1 单步调试截图

    2.3.2 代码截图


    2.3.3 PTA提交列表及说明

    • 第一个错误,同时也是第一种方法

      错误原因a,b,c三个变量没有初始化

    • 第二种方法是用的交换数字的方法

    #include <stdio.h>
    int main()
    {
    	int a, b, c, t;
    	scanf("%d %d %d", &a, &b, &c);
    
    	if (a > b)//改变为 b>a
    	{
    		t = a; a = b; b = t;
    	}
    	if (a > c)//改变为c>a
    	{
    		t = a; a = c; c = t;
    	}
    	if(b > c)//改变为c>b
    	{
    		t = b; b = c; c = t;
    	}
    	//经过三个if后  变为 c>b>a
    	printf("%d", b);
    }
    

    错误原因t未初始化

    • 第三种方法与第一种类似,把第一种的六种情况合并为三种情况
    #include<stdio.h>
    int main()
    {
    	int a, b, c;
    	int middle;
    	scanf("%d %d %d", &a, &b, &c);
    	if (a >= b && b >= c || c >= b && b >= a)//b在中间
    	{
    		middle = b;
    	}
    	if (b >= a && a >= c || c >= a && a >= b)//a在中间
    	{
    		middle = a;
    	}
    	if (a >= c && c >= b || b >= c && c >= a)//c在中间
    	{
    		middle = c;
    	}
    	printf("%d", middle);          //单一出口
    }
    
  • 相关阅读:
    Java 在线/离线 文档
    Java集合框架全解
    【LeetCode】204.计数质数
    深入SpringMvc
    SpringMvc基础
    SSM整合
    Spring注解
    SpringAop编程
    2路插入排序
    Matplotlib绘图库简要介绍
  • 原文地址:https://www.cnblogs.com/qq690775749/p/13939200.html
Copyright © 2020-2023  润新知