C语言是万码之本

1.struct student* s=( struct student* ) malloc(sizeof(struct student) ) ;

这段代码是动态分配内存的语句,可以理解为:

  1. struct student* s:定义一个名为 s 的指针变量,其指向类型为 struct student 的结构体。

  2. malloc(sizeof(struct student)):调用 malloc 函数,分配 struct student 类型的内存块,并返回指向该内存块的指针,sizeof(struct student) 表示结构体 struct student 的大小。

  3. (struct student*):将 malloc 函数返回的指针强制转换为 struct student* 类型,与 s 指针变量类型相同。

所以,整句话的意思是:为类型为 struct student 的结构体动态分配内存,并将指向该内存块的指针赋值给 s 指针变量。

2.判断一个数是否为素数时,需要进行质因数分解。而质因数的范围一般是在2到该数的平方根之间。因此,如果一个数不是素数,那么它的质因数一定是小于或等于它的平方根的。

举个例子,如果要判断一个数n是否为素数,假设它有一个大于1且小于等于n的因数x,那么必然有另外一个因数y,使得x * y = n。如果x和y都大于平方根n,那么它们的乘积就会大于n,与假设矛盾。因此,判断素数时只需要从2到平方根n的范围内进行判断,如果没有找到任何一个因数,那么这个数就是素数。

因此,开方操作可以帮助我们缩小搜索范围,提高判断素数的效率。

1
2
3
4
5
6
int k = (int)sqrt((double)m);
for (i = 2; i <= k; i++) {
if (m%i == 0) {
break;
}
}