《C语言程序设计》函数-循环-数组-指针-教学课件(非AI生成).ppt
源程序doublef1(doublex){return(x*x);}doublef2(doublex){return(sin(x)/x);}doublecalc(double(*f)(double),doublea,doubleb){doublez;z=(b-a)/2*((*f)(a)+(*f)(b));/*调用f指向的函数*/return(z);}intmain(void){doubleresult;result=calc(f1,0.0,1.0);/*函数名f1作为函数calc的实参*/printf(1:resule=%.4f\n,result);funp=f2;result=calc(funp,1.0,2.0);/*函数指针funp作为函数calc的实参*/printf(2:resule=%.4f\n,result);return0;}1:resule=0.50002:resule=0.6481*判断sub是否是str的子串striababab\0subjaba\0思路:charsub[100],str[100];//两个字符串inti;//循环变量,从0..(lstr-lsub),表示a在b中出现的起始位置intj;//循环变量,从0…(lsub-1),表示待匹配的位置若sub[j]==str[j+i],则继续比较sub,str的下一位置(j++)否则,(当前i位置起没有子串)不再比较(sub从头j=0,str从下一位置i++开始重新匹配)intcount=0;//计数器,若所有sub的与str匹配(jlsub),则count++思考:下一次匹配,i,j为什么值?i最大为什么值?*//判断sub是否是str的子串#includestdio.h#includestring.hintmain(){ charsub[100],str[100]; intlsub,lstr,Count; inti,j; printf(请输入串str和子串sub:\n); scanf(%s%s,str,sub); lsub=strlen(sub);//获取串长度 lstr=strlen(str); Count=0;//未开始匹配* for(i=0;i=lstr-lsub;i++)//i++:str左移 { for(j=0;jlsub;j++)//j=0:sub从头开始匹配 { if(sub[j]!=str[i+j])//匹配不成功 break; } if(j=lsub)Count++;//匹配成功 } if(Count==0)//str有子串sub printf(sub不是str的子串\n); else printf(sub在str中出现了%d次\n,Count); return0; }*intmain()//主函数{input_data();//输入数据solve();//解问题output_data();//输出结果return0;}*voidsolve()//自定义函数{inti,j;//定义整型变量intmatch;//定义布尔型变量la=strlen(a);lb=strlen(b);//计算a串长和b串长Count=0;//计数器清零for(i=0;i=lb-la;i++)//循环,i指向b串{match=true;//预置能匹配for(j=0;jla;j++)//循环,j指向a串{if(a