|
30鱼币
本帖最后由 坦_然 于 2013-3-30 08:54 编辑
- #include <stdio.h>
- #include <stdlib.h>
- #define SHI 1
- int yxjg ( char , char );
- int jia ( int , int );
- int jian ( int , int );
- int cheng ( int , int );
- int chu ( int , int );
- int qiuyu ( int , int );
- int (*qiuys( char ) )( int , int);
- int main( void )
- {
- int czs1 , czs2 , czs3 ; //共三个操作数
- char ysf1 ,ysf2 ; //俩个运算符
- int zhi ; //表达式的值
- int (*ys1)( int , int ),(*ys2)( int , int );//俩个运算输入
- printf( "请输入一个三元运算表达式.\n" );
- scanf ( "%d%c%d%c%d",&czs1,&ysf1,&czs2,&ysf2,&czs3 ) ;
- //确定与运算符对应的函数
- ys1 = qiuys ( ysf1 );
- ys2 = qiuys ( ysf2 ) ;
- if( yxjg( ysf2 , ysf1) == SHI){
- zhi=ys1( czs1,ys2(czs2,czs3) );
- }
- else {
- zhi=ys2( ys1( czs1,czs2 ),czs3 );
- }
- printf(" %d%c%d%c%d=%d \n",czs1,ysf1,czs2,ysf2,czs3,zhi);
- system("Pause");
- return 0;
- }
- //判断运算符 ysf2 是否比ysf1优先级高;
- int yxjg( char ysf2 ,char ysf1 )
- {
- if ( ysf2=='*'||ysf2=='/'||ysf2=='%' ){
- if( ysf1 == '+' || ysf2 == '-' ){
- return SHI;
- }
- }
- return !SHI;
- }
- int jia ( int s1 , int s2 )
- {
- return s1+s2;
- }
- int jian( int s1, int s2 )
- {
- return s1-s2 ;
- }
- int cheng ( int s1 , int s2 )
- {
- return s1*s2 ;
- }
- int chu ( int s1 , int s2 )
- {
- if (s2==0){
- printf( "表达式错误.\n" ) ;
- system( "Pause" );
- exit (1);
- }
- return s1/s2 ;
- }
- int qiuyu( int s1 , int s2 )
- {
- if( s2==0 ){
- printf("表达式错误.\n");
- system ("Pause");
- exit (1);
- }
- return s1%s2 ;
- }
- //求与运算符ysf 对应的函数;
- int (*qiuys (char ysf))( int , int)
- {
- if (ysf == '+')
- return jia;
- if ( ysf=='-' )
- return jian;
- if ( ysf == '*' )
- return cheng ;
- if ( ysf =='/' )
- return chu ;
- if ( ysf =='%')
- return qiuyu;
- }
- /* ys1 = qiuys ( ysf1 ); 函数原型中的 后俩俩个 int 类型的参数,没有实参, 可以给指针函数 赋值 吗?
- ** zhi=ys1( czs1,ys2(czs2,czs3) ); (char)的实参没有赋值,是用了 函数指针 初始化时的 ysf1 的值. 这样也可以?
- ** (*qiuys( char ) )( int , int); 和 qiuys( char , int , int ); 不同在于哪里. 前者的巧妙用法原理是什么,什么情况应用比较适合.
- ** 编译通过, 但是 杀软报毒, 代码的 缺陷在哪部分?
- */
复制代码
|
最佳答案
查看完整内容
主要问题在于对
int (*qiuys( char ) )( int , int);的理解,
这里qiuys是一个函数,该函数的输入参数是char类型的,该函数返回一个指针,该指针指向一个函数,该函数原型是int (int, int)
其它自己再看看
|