if(a%i==0)printf(“不是素数!
”);
printf(“是素数!
”);//若需要返回值,则把printf语句换成return语句。
}
6)如何求阶层:
n!
背诵这个程序!
intfun(intn)
{intp=1;
for(i=1;i<=n;i++)p=p*i;
returnp;
}
7)函数的参数可以是常量,变量,表达式,甚至是函数调用。
intadd(intx,inty){returnx+y;}
main()
{intsum;
sum=add(add(7,8),9);请问sum的结果是多少?
结果为24
}
8)一定要注意参数之间的传递
实参和形参之间传数值,和传地址的差别。
(考试的重点)
传数值的话,形参的变化不会改变实参的变化。
传地址的话,形参的变化就会有可能改变实参的变化。
9)函数声明的考查:
一定要有:
函数名,函数的返回类型,函数的参数类型。
不一定要有:
形参的名称。
intfun(inta[],intb[])
{
…………..
}
已经知道函数是这样。
这个函数的正确的函数声明怎么写?
intfun(int*a,int*b);这里是函数声明的写法,注意数组就是指针
intfun(inta[],intb[]);这种写法也是正确的
intfun(intb[],intc[]);这种写法也是正确的,参数的名称可以随便写
intfun(int*,int*);这种写法也是正确的,参数的名称可以不写
10)要求掌握的库函数:
a)库函数是已经写好了函数,放在仓库中,我们只需要如何去使用就可以了!
b)以下这些库函数经常考到,所以要背诵下来:
abs()、sqrt()、fabs()、pow()、
strcmp()、strcpy()、strlen()。
24.指针:
指针变量的本质是用来放地址,而一般的变量是放数值的。
1)定义:
int*p;后,表达式中*p和p的差别:
简单说*p是数值,p是地址!
*p可以当做变量来用;*的作用是取后面地址p里面的数值
p是当作地址来使用。
可以用在scanf函数中:
scanf(“%d”,p);
2)*p++和(*p)++的之间的差别:
改错题目中很重要!
考试超级重点
*p++是地址会变化。
口诀:
取当前值,然后再移动地址!
(*p)++是数值会要变化。
口诀:
取当前值,然后再使数值增加1。
例题:
int*p,a[]={1,3,5,7,9};
p=a;
请问*p++和(*p)++的数值分别为多少?
*p++:
这个本身的数值为1。
由于是地址会增加一,所以指针指向数值3了。
(*p)++这个本身的数值为1。
由于有个++表示数值会增加,指针不移动,但数值1由于自加了一次变成了2。
3)三名主义:
(考试的重点)
数组名:
表示第一个元素的地址。
数组名不可以自加,他是地址常量名。
(考了很多次)
函数名:
表示该函数的入口地址。
字符串常量名:
表示第一个字符的地址。
4)移动指针(经常加入到考试中其他题目综合考试)
char*s=“meikanshu”
while(*s){printf(“%c”,*s);s++;}
这个s首先会指向第一个字母m然后通过循环会一次打印出一个字符,s++是地址移动,打印了一个字母后,就会移动到下一个字母!
5)指针变量两种初始化(一定要看懂)
方法一:
inta=2,*p=&a;(定义的同时初始化)
方法二:
inta=2,*p; (定义之后初始化)
p=&a;
6)传数值和传地址(每年必考好多题目)
voidfun(inta,intb)voidfun(int*a,int*b)
{intt;{intt;
t=a;a=b;b=t;t=*a;*a=*b;*b=t;
}}
main()main()
{intx=1,y=3,{intx=1,y=3,
fun(x,y);fun(&x,&y)
printf(“%d,%d”,x,y);printf(“%d,%d”,x,y);
}}
这个题目答案是1和3。
这个题目的答案就是3和1。
传数值,fun是用变量接受,所以fun中传地址,fun用指针接受!
这个时候fun
的交换不会影响到main中的x和y。
中的交换,就会影响到main中的x和y。
传数值,形参的变化不会影响实参。
传地址形参的变化绝大多数会影响到实参!
7)函数返回值是地址,一定注意这个*号
int*fun(int*a,int*b)可以发现函数前面有个*,这个就说明函数运算结果是地址
{if(*a>*b)returna;returna可以知道返回的是a地址。
elsereturnb;
}
main()
{intx=7,y=8,*max;
max=fun(&x,&y);由于fun(&x,&y)的运算结果是地址,所以用max来接收。
printf(“%d”,*max);
}
8)考试重要的话语:
指针变量是存放地址的。
并且指向哪个就等价哪个,所有出现*p的地方都可以用它等价的代替。
例如:
inta=2,*p=&a;
*p=*p+2;
(由于*p指向变量a,所以指向哪个就等价哪个,这里*p等价于a,可以相当于是a=a+2)
25.数组:
存放的类型是一致的。
多个数组元素的地址是连续的。
1)一维数组的初始化:
inta[5]={1,2,3,4,5};合法
inta[5]={1,2,3,};合法
inta[]={1,2,3,4,5};合法,
inta[5]={1,2,3,4,5,6};不合法,赋值的个数多于数组的个数了
2)一维数组的定义;
inta[5];注意这个地方有一个重要考点,定义时数组的个数不是变量一定是常量。
inta[5];合法,最正常的数组
inta[1+1];合法,个数是常量2,是个算术表达式
inta[1/2+4];合法,同样是算术表达式
intx=5,inta[x];不合法,因为个数是x,是个变量,非法的,
#defineN5
inta[N];合法,define后的的N是符号常量,只是长得像变量
3)二维数组的初始化
inta[2][3]={1,2,3,4,5,6};合法,很标准的二维的赋值。
inta[2][3]={1,2,3,4,5};合法,后面一个默认为0。
inta[2][3]={{1,2,3},{4,5,6}};合法,每行三个。
inta[2][3]={{1,2},{3,4,5}};合法,第一行最后一个默认为0。
inta[2][3]={1,2,3,4,5,6,7};不合法,赋值的个数多余数组的个数了。
inta[][3]={1,2,3,4,5,6};不合法,不可以缺省行的个数。
inta[2][]={1,2,3,4,5,6};合法,可以缺省列的个数。
补充:
1)一维数组的重要概念:
对a[10]这个数组的讨论。
a)a表示数组名,是第一个元素的地址,也就是元素a[0]的地址。
(等价于&a)
b)a是地址常量,所