您的位置:

c语言书上例题,c语言简单例题

本文目录一览:

C语言书上例题看不懂,能帮忙看一下吗?

我用文字解释一下吧,看看能不能清楚,提问的式子我都进行了加粗,希望能看得出来(图的话我觉得给出的图已经可以参考讲述的,可以结合我的文字看看)

这个传递数组名称的函数,输入有两个,一个是数组,一个是数组长度

那么我们知道:如果传递的n是10,数组长度是10的话,它的元素的索引应该是0-9,也就是最大索引是9,n-1所表示的就是索引最大值。

目标是返顺序存放,那么也就意味着应该将第一个元素(索引是0)与最后一个元素(索引是9)进行互换,将第二个元素(索引是1)和倒数第二个元素(索引是8)进行互换......以此类推,直到中间位置也就是索引是4和5进行交换的时候。这个时候的话,4这个截止条件与n的关系是什么呢?4=(n-1)/2,这里不是数学,因为n是整型变量,所以等号右边出来的只会是整数部分。这就是m=(n-1)/2的来源了,也就是设定交换的最后一个元素的索引号。这里你可以拿奇数个元素去试试,也是同样成立的。

根据交换过程,那么也就相应的有了:

i=0时,j=9=10-1-0

i=1时,j=8=10-1-1

...

也就是j=n-1-i这个式子的由来。

知道了左边,其实右边和左边是对应的,只不过左边用的数组的方式,右边使用的指针的方式。

注意右边的i,j声明的是整型的指针,也就是他只能指向一个整型的变量。题目中输入*x就是相当于给定数组头部的位置索引,所以i=x就是相当于让i这个指针指向数组第一个元素。数组就是一系列整型数字连续顺序存储的结果,所以i+1表示的就是i这个元素的下一个元素,也就是数组的第二个元素,因此j=x+n-1表示i这个指针指向到数组第n个元素,也就是数组的末尾了,此时i,j和前面不一样的,是都不再表示数组的索引号,而是都是指向某个数组元素的指针了。

这里还声明了一个p指针,移动了m位,m和上一个定义没有区别,就是找到中间位置和开头位置相差多少个元素,于是p=x+m也就是让p这个指针指向数组中间的元素。

C语言书上的一个例题看不懂

#includeiostream

#includemath.h

int main(){

int i,j,n,a[101];

for(i=1;i=100;i++)

a[i]=i;

a[1]=0;//1不是素数

for(i=2;isqrt(100.0);i++)//此处为求素数算法,后面讲

for(j=i+1;j=100;j++)

{

if(a[i]!=0a[j]!=0)

if(a[j]%a[i]==0)//能被整除,则不是素数,设置为0

a[j]=0;

}

printf("\n");

for(i=2,n=0;i=100;i++)

{

if(a[i]!=0)//这里是a[i],是因为已经是新的循环了,跟j无关

{

printf("%5d",a[i]);

n++;

}

if(n==10)//n为控制换行的计数器,每十个换行。

{

printf("\n");

n=0;

}

}

printf("\n");

system("pause");

return 0;

}

讲一下求素数的算法,以n为例,最简单的是从2-n/2枚举,如果n能被整除其中一个整除,就不是素数。这个方法简单却没有效率。

1-100的数中,任意取一个数,如果是非素数,都可以认为是(2-10)取一个数乘以一个小于50的数字,因为=10 后,与另一个数字相乘要=100 就必须另一个数字=10,所以只要测试这个数字能否被2-10整除就可以了这样就比上面一种方法测试次数少。

当然这也不是最简单的算法,这里介绍另一种。

for(i=3;i=100;i++)

if(i%2==0)//没必要判断2以外的偶数

a[i]=0;

else

a[i]=i;

a[1]=0;

a[2]=2;

for(i=3;i=100;i+=2)//从3开始,判断奇数即可

for(j=3;j=sqrt(i);j+=2)

//因为不用检测偶数,所以没必要让j从2开始,也没必要为偶数,因此j+=2

if(i%j==0)

a[i]=0;

这算法和上面方法相同,但反了一反,效果却差很多,不必从2-10都测试一遍,任意一个数都只要判断自己的平方根次就可以了,(因为一个数若能拆成2个整数相乘,其中一个必定=自身平方根,另一个=平方根),不必去测试额外的次数,对于大数据量十分有效。

编程的时候把缩进调整好,容易查看,你的缩进不好,程序结构层次不清,就容易造成误会,把后面的a[i]认为仍然是 for(j=i+1;j=100;j++)这个循环中了

c语言书上例题error C2660: 'strl' : function does not take 1 parameters

更改如下:

#includestdio.h

void main()

{

char str[20],*ch=str;

int strl(char); //函数声明有误,应含有1个参数,此处已修改

printf("input string: ");

scanf("%s",str);

printf("string leng=%d\n",strl(ch));

}

int strl(char *s)

{

char *p=s;

while(*p)

p++;

return(p-s);

}