1.在判断素数的时候,往往会使用for循环,要注意for里的初始变量要从2或3开始,写完程序后要记得检验1,2,3是否成立。
2.在判断素数的时候,往往需要思考如何减小时间复杂度,一种是使用sqrt函数,i < sqrt + 1;
还有一种是
int prime(int n)
{
int i;
for (i=2; i<=n/i; i++)
if(n%i == 0)
return 0;
return 1;
}
这个不用调用sqrt函数计算,从时间上应该是更加的简单。
3.使用switch函数时,每个case后面记得要加一个break,不然会继续执行下面的case,用一个比喻来描述的话,case相当于入口,break相当于程序的出口,如果不写出口的话,程序会一直执行下去。
4.关于malloc函数的思考
malloc函数是动态内存,往往与静态数组相对照,静态数组是一块儿连续的空间,每个字节之间都是连续的,而malloc函数不要求连续的空间,见缝插针的感觉。但是这样会在使用时遇到一个问题,p = (int *)malloc(sizeof(int) * n), *p 为第一个字节的地址,*p 等价于 *(p+0)等价于p[0]。那么*(p+1)呢,笔者的理解是,malloc是把一些不连续的内存,提取聚合成一段连续的内存,一个动态数组,*(p+1)就是malloc函数里的第二个空间,即p[1]。这是笔者由果索因的思考,不知道是否正确。
5.二进制与十进制即其他进制间的相互转化
二进制转化为十进制,从小到大, 依次与1,2,2*2,2*2*2......相乘,需要注意二进制数往往很长,因此可以使用long long(%lld)或long int(%ld)来进行储存其值。
int convertBinaryToDecimal(long long n)
{
int decimalNumber = 0, i = 0, remainder;
while (n!=0)
{
remainder = n%10;
n /= 10;
decimalNumber += remainder*pow(2,i);
++i;
}
return decimalNumber;
}
十进制转化为二进制,使用短除法,不断除二,直至商为1或0,然后倒序写余数。
while (number != 0)
{
result[i] = number%2;
number /= 2;
i++;
}
for (j=i-1; j>=0;j--)
printf("%d", result[j]);
笔者对于其他进制的转化,采用的是间接转化,先将已知的转化为十进制,然后在进行转化,
6.字符串的翻转
这里有许多方法,一种是使用巧妙地递归来实现
void reverseSentence()
{
char c;
scanf("%c", &c);
if( c != '\n')
{
reverseSentence();
printf("%c",c);
}
}
void reverseStr(char* str)
{
if(*str=='\0') return;
reverseStr(str+1);
printf("%c",*str);
}
还有一种是借用了strlen函数(在#include<string.h>中),通过这个函数可以计算出数组里到\0为止前的空间个数,即字符个数,然后运用for循环将字符数组倒序输出,实现翻转的功能。
char c[40];
int i=1;
int j=strlen(c);
do{
printf("%c",c[j-i]);
++i;
} while(i<=j);
7.关于二维数组的疑惑,二维数组如a[3][4]是连续的12个空间吗,还是一个有3个连续的空间,加上3段有4个空间的空间吗,如何用指针变量来实现其值的表示呢(在跨函数调用以及改变值时使用)?
8.在函数返回值时,往往只能返回一个值,当返回两个值时,可以使用pair,pair的本质是一个结构体,那么根据这个,当需要返回多个值时,可以自己定义一个结构体,然后返回值(笔者还没实验过,此处纸上谈兵)。
pair是将2个数据组合成一组数据,当需要这样的需求时就可以使用pair,如stl中的map就是将key和value放在一起来保存。另一个应用是,当一个函数需要返回2个数据的时候,可以选择pair。 pair的实现是一个结构体,主要的两个成员变量是first second 因为是使用struct不是class,所以可以直接使用pair的成员变量。
————————————————
版权声明:本文为CSDN博主「sevencheng798」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/sevenjoin/article/details/81937695