#include"stdio.h"//printf的头文件
void func1(int i);//对于函数1的提前声明
void func2(int i);//对于函数2的提前声明
char st[]="hello,friend";//定义一个长度为12的字符数组
//c++里所有的数组都是从0开始计数的哦
void func1(int i) { //其实如果提前声明了↑↑(第2行),这个函数还可以写在主函数(main)的后面
printf("%c",st[i]);//等于putchar(st[i]); 作用:输出一个字符
if(i<3) {//等于i<=2 判断i是否小于3
i+=2;//等于i=i+2,表示i自增2
func2(i);//调用func2函数
}
}
void func2(int i) {
printf("%c",st[i]);//一样的
if(i<3) {//还是一样的
i+=2;//...
func1(i);//再调用func1函数
}
}
main() {//主函数可以不写"int main()",但在一些比赛中是不允许的。
int i;//定义一个局部变量
i=0;//把i的值设为0
func1(i);//调用func1(0)
printf("\n");//输出换行
//其实最好要再写一个"return 0;"结束程序
}
/*
程序流程:
主函数内调用func1(0):
输出st[0]->h
i<3? (i=0) -> i<3
i+2 i=2 调用func2(2):
输出st[2]->l
i<3? (i=2) -> i<3
i+2 i=4 调用func1(4):
输出st[4]->o
i<3? (i=4) -> i>3
返回!
返回!
返回!
返回!
返回!
返回!
返回!
输出换行
结束程序
*/
在func1中,首先打印st[i],即st[0],即字符串的第一个字符h,向下执行到if条件句,当前i小于3,则执行i+=2, 相当于i=i+2 => i=0+2 => i=2,接着调用func2函数,此时i为2,作为参数传入
在func2中,先打印st[2],即字符串中的第三个字符l,接下来判断if条件,当前i为2小于3满足条件,执行i+=2得到i为4,接着调用func1,将4作为参数传入
在func1中,首先打印st[i],即st[4],即字符串的第5个字符o, 判断if条件,发现此时i大于3不满足条件,不再执行下面的语句。
回到主函数main中,打印换行符后程序结束
最后结果为hlo
先输出h,然后i变为2,再调用fun2(2)
在fun2中,输出l,然后i变为4,再调用fun1(4),输出o后,直接返回
全部的输出就是:
hlo
能解释一下为什么输出h,l这些吗?就是这里不懂
哦,在char st中是从零开始计数的是吗?
t=t*p%c; %号优先级最高,
i = 1 时 t = t * 2 %2009 = 1*2 =2
s=(s+t)%c; ()优先级最高
以此类推
所以结果如下:
11 2
i=1 t=2
j=1 s=2i=2 t=4j=1 s=6 j=2 s=10
i=3 t=8j=1 s=18 j=2 s=26 j=3 s=34
i=4 t=16j=1 s=50 j=2 s=66 j=3 s=82 j=4 s=98
i=5 t=32j=1 s=130 j=2 s=162 j=3 s=194 j=4 s=226 j=5 s=258
i=6 t=64j=1 s=322 j=2 s=386 j=3 s=450 j=4 s=514 j=5 s=578 j=6 s=642
i=7 t=128
j=1 s=770 j=2 s=898 j=3 s=1026 j=4 s=1154 j=5 s=1282 j=6 s=1410 j=7
s=1538i=8 t=256
j=1 s=1794 j=2 s=41 j=3 s=297 j=4 s=553 j=5 s=809 j=6 s=1065 j=7 s=1
321 j=8 s=1577i=9 t=512
j=1 s=80 j=2 s=592 j=3 s=1104 j=4 s=1616 j=5 s=119 j=6 s=631 j=7 s=1
143 j=8 s=1655 j=9 s=158i=10 t=1024
j=1 s=1182 j=2 s=197 j=3 s=1221 j=4 s=236 j=5 s=1260 j=6 s=275 j=7 s
=1299 j=8 s=314 j=9 s=1338 j=10 s=353i=11 t=39
j=1 s=392 j=2 s=431 j=3 s=470 j=4 s=509 j=5 s=548 j=6 s=587 j=7 s=62
6 j=8 s=665 j=9 s=704 j=10 s=743 j=11 s=782 782