前言
来到吉林大学,也遇到了一群小伙伴
在软件工程专业,大多同学都是从零开始摸索
作为一个老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
解决:函数的功能先明确,再具体实现代码,逻辑比较复杂时可以拆开每一步,防止与或等逻辑用错