校内同学答疑帖

前言

来到吉林大学,也遇到了一群小伙伴
在软件工程专业,大多同学都是从零开始摸索
作为一个老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

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

原文地址:https://www.cnblogs.com/zhouyuheng2003/p/15463493.html