• 校内同学答疑帖


    前言

    来到吉林大学,也遇到了一群小伙伴
    在软件工程专业,大多同学都是从零开始摸索
    作为一个老oier,也希望在力所能及的地方提供一些帮助吧

    然而一个月下来,随着程序的复杂化,问题也越来越多
    同学很多,可能并不能照顾到每一个人,而有一些问题是具有共性
    这个帖子就专门用来整理我的一些回复吧
    于2021.10.25

    Hint

    个人平常接受友好的提问,但是可能平常并不能及时回复,所以有着急需求请避坑
    代码调试问题请自行思考,个人解决能力还是很重要的,况且调试代码实在太累辣,所以一般不接
    请善用班级求助功能,有空会随缘去看看

    代码

    1.2021/10/25

    如果想要获得小数结果,整数间的除法需要先转成小数进行,如:

    int a=1,b=2;
    1.0*a/b//值是0.5
    a/b//值是0
    

    2.2021/10/25

    若要把一个数组传给一个函数,那么只要用不带方括号的数组名作为实参调用函数即可

    3.2021/10/28

    if/while关键字后面的括号内,分为0与非0两种值,若结果非0均与1等价

    4.2021/11/02

    在题目要求输出某句话的时候,请使用复制粘贴,防止手打打错

    5.2021/11/6

    对于部分oj要求的“整数之间有一个空格,最后一个整数后面没有空格”的要求
    如果输出整数的数量不确定(即难以判断最后输出的数是哪个)
    可以打一个标记,实现:第一个数之前不输出空格,其它数之前均输出一个空格

    6.2021/11/9

    struct如何进行声明?

    struct student
    {
      int score,id;
    }Q;
    struct student P;//c++转c的同学请注意,这里前面需要一个struct
    

    7.2021/11/10

    如何使用qsort函数
    注意要使用头文件<stdlib.h>
    函数原型为:void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );
    数组起始地址,数组元素个数,每一个元素的大小,函数指针,指向比较函数
    注意,这里的比较函数需要自己实现

    #include<stdio.h>//实现n个数从小到大排序
    #include<stdlib.h>
    int n,a[101];
    int cmp(const void*a ,const void*b)
    {
        return *(int *)a<*(int *)b?-1:1;//c++转c的同学请注意,这里需要用三目运算符,详细理解,如果a,b分列前后,-1就是不用换,0就是无所谓,1就是要换
    }
    int main()
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        qsort(a+1,n,sizeof(a[0]),cmp);//c++转c的同学请注意,每个参数含义不同
        for(int i=1;i<=n;i++)printf("%d ",a[i]);
        return 0;
    }
    

    理论

    1.2021/10/25

    Q:switch语句括号里不能是什么表达式?
    A:小数类型的表达式

    2.2021/10/27

    Q:如何说明((A+B)*(overline A +C)=(A+B)*(overline A +C)*(B+C))
    A:观察等式两边不同点在于右侧具有(B+C),讨论其取值:为1时显然等式左右两侧相等;为0时等式右侧值为0,等式左侧为(A*overline A)等于0

    2.2021/10/27

    Q:(设C=AB,overline {AB})(overline C)等价吗?
    A:不等价
    情况举例:
    (A=1,B=0)
    (C=AB=0)
    (overline {AB}=0*1=0)
    (overline C=1)
    (overline {AB} eqoverline C)

    3.2021/11/4

    Q:函数传参数会不会改变原变量值
    A:不会,如果需要改变原变量值,需要使用指针,比如swap函数应当是

    void Swap(int*x,int*y)
    {
      int z=(*x);
      (*x)=(*y);
      (*y)=z;
    }
    

    使用的时候写

    Swap(&a,&b);
    

    4.2021/11/7

    Q:表达式碰到运算符优先级不清楚怎么办?
    A:当然是建议多加括号,但是如果用熟练了,几种常见的还是可以不用括号的,比如(a<b-1<=>a<(b-1))

    调试经历

    1.2021/10/25

    快速排序代码
    解决:快速排序函数体内需要的内容应放入函数内,快速排序a[l],a[r]的赋值关系不能弄混,不能忘递归调用

    2.2021/10/26

    各种排序算法的效率
    解决:程序运行时间用clock函数,单位毫秒;插入排序、冒泡排序、选择排序时间复杂度相同,但写法不同,需注意

    3.2021/10/27

    数位翻转
    解决:注意前导0排除过程的实现

    4.2021/10/27

    质数判定
    解决:追求效率的同时不能影响正确性

    5.1021/10/30

    判定八进制数是否被三整除
    解决:应确定好初始状态的值

    6.2021/10/30

    输出组合数
    解决:程序出问题,可以通过输出调试来找到问题所在

    7.2021/10/31

    计算多边形边长
    解决:对于n变形的n为特殊值的情况,特判之后需要及时return 0,防止重复输出

    8.2021/10/31

    函数声明相关
    解决:自定义函数,在声明以及定义中都应当参数类型完整写出来。关于定义部分,不写参数类型会编译错误;关于声明部分,不写参数类型会报警告(其实声明有时候不写也可以过编译,但也会有警告),强烈建议写代码不要留警告,要养成好习惯。

    #include<stdio.h>
    int f(int x,int y);//声明
    int main()
    {
        printf("%d",f(2,1));
        return 0;
    }
    int f(int x,int y)//定义
    {
        return x>y?x:y;
    }
    

    9.2021/11/2

    程序明明很对,为什么错了
    解决:"ANSWER"打成了"ANWSER",这种错误一般比较难以发现,建议这种输出的文字使用复制粘贴确保正确

    10.2021/11/6

    解决:一个变量如果被多次使用,则要做好清零操作

    11.2021/11/7

    解决:题目说明里的每一个细节都需要注意,比如不输出非必要空格;样例输出要仔细比较,防止特殊情况出现

    12.2021/11/11

    解决:注意数据范围大小,针对不同情况作出处理

    13.2021/11/11

    解决:由于小数可能会出现精度问题,一些除法后判等于的操作可以通过整数乘法来实现

    14.2021/11/12

    解决:函数的功能先明确,再具体实现代码,逻辑比较复杂时可以拆开每一步,防止与或等逻辑用错

  • 相关阅读:
    Coding 初级教程(一)——用GitHub的GUI客户端对Coding的项目进行管理
    自己以前写的日记,现在公开(别的文章需要用)1
    7-网页,网站,微信公众号基础入门(微信配网_申请微信公众号)
    关于Keil4 转到 Keil5以后的一些错误解决
    6-网页,网站,微信公众号基础入门(PHP学习_1)
    5-网页,网站,微信公众号基础入门(配置网站--PHP配置上数据库)
    4-网页,网站,微信公众号基础入门(配置网站--下载安装PHP)
    3-网页,网站,微信公众号基础入门(学习网页_2)
    7-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(GPRS模块SSL连接MQTT)
    6-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(Wi-Fi模块SSL连接MQTT)
  • 原文地址:https://www.cnblogs.com/zhouyuheng2003/p/15463493.html
Copyright © 2020-2023  润新知