コード例 #1
0
ファイル: main.c プロジェクト: zhangkaize123/2016-Review
int main(int argc, const char * argv[]) {
    int number =10;
    int n = change(number);
    printf("n=%d\n",n);
    printf("number=%d\n",number);//在这里number的值还是10,因为作用蜮的原因,传递的是值而不是地址。在swift中也是这样,
    int ages[3] = {1,2,3};
#pragma mark-zkz------用数组作为函数的参数的函数,在函数里修改数组的值,会影响外边的数组的值
    //数组名就是数组的地址。
    change1(ages);
    int count = sizeof(ages)/sizeof(int);
    for (int i = 0; i<count; i++) {
        printf("ages[%d]=%d\n",i,ages[i]);
        //ages[0]=88;
    }
    
    
#warning mark-zkz-
#pragma mark--zkz---当数组作为参数传递的时候是地址传递,所以自动转换成指针类型,指针类型和其他数据类型一样也是占据一定的存储空间,占用8个字节。所以数组无论有多大,它打印只是8个字节的元素。
    int ages1[3]={1,3,5};
    int count2 = sizeof(ages1);
    printf("main size count2 = %d\n",count2);
    change2(ages1);//打印的是1,3但是没有打印5因为指针类型的占用8个字节两个int类型一共占有8个字节,要想全部便利那么就要再传递那个数组的长度。
    change3(ages1,count2/sizeof(int));//在传递数组名(地址)的同时还要传递数组的长度。
    
    return 0;
}
コード例 #2
0
ファイル: transform.c プロジェクト: bitchbitch/ACM-ICPC
int main(){
   FILE *fin = fopen("transform.in","r");
   FILE *fout = fopen("transform.out","w");
   //freopen("/home/plac/fproblem/input.txt","r",stdin);
   //freopen("/home/plac/fproblem/output.txt","w",stdout);
   fscanf(fin,"%d",&n);
   memset(str,0,sizeof(str));
   memset(change,0,sizeof(change));
   for(int i = 1; i <= n;i ++)
	   fscanf(fin,"%s",&str[i][1]);
   for(int i =1 ;i<= n; i ++ )
	   fscanf(fin,"%s",&change[i][1]);
   if(change1(str))
	   fprintf(fout,"1\n");
   else if(change2(str))
	   fprintf(fout,"2\n");
   else if(change3(str))
	   fprintf(fout,"3\n");
   else if(change4(str))
	   fprintf(fout,"4\n");
   else if(change5(str))
	   fprintf(fout,"5\n");
   else if(change6(str))
	   fprintf(fout,"6\n");
   else fprintf(fout,"7\n");


return 0 ;
}
コード例 #3
0
ファイル: main.c プロジェクト: CellerX/myCPractice
int main(int argc, const char * argv[]) {
    //数组名称传递的是数组的地址
    
    int nums[3] = {1,3,5};
    change1(nums);
    printf("nums[%i] = %i",2,nums[2]);
    return 0;
}
コード例 #4
0
ファイル: transform.c プロジェクト: bitchbitch/ACM-ICPC
int change5(char s[][100])
{
    for(int i = 1;i<= n;i ++)
		for(int j = 1;j<= n;j ++)
		{
		  temp[i][j] = s[i][n-j+1];
		}
	if(change1(temp))
		return 1;
	if(change2(temp))
		return 1;
	if(change3(temp))
		return 1;
	return 0 ;
}
コード例 #5
0
ファイル: poj_2309.cpp プロジェクト: chetan-anand/coding
main()
{
	int icase,ncase;
	scanf("%d",&ncase);
	for (icase=1;icase<=ncase;icase++)
	{
		scanf("%d",&n);
		doit(n);
		change1();
		change2();
		printf("%d %d\n",count(ch1),count(ch2));
	}


	return 0;
}
コード例 #6
0
ファイル: 2.3a.c プロジェクト: lixiangbest/algorithm
void main(){
	stu stu1;
	stu1[0].num = 12;
	stu1[0].score = 78.5;
	stu1[1].num = 13;
	stu1[1].score = 90;
	stu1[2].num = 10;
	stu1[2].score = 95.5;
	printf("before change:\n");
	out(stu1);
	change(stu1);
	printf("\nafter changed:\n");
	out(stu1);
	
	change1(stu1);
	printf("\nafter changed1:\n");
	out(stu1);
}
コード例 #7
0
 // 11.1 ver1.1.cpp : 定义控制台应用程序的入口点。
 
 //
 
 #include "stdafx.h"
 /*
 int _tmain(int argc, _TCHAR* argv[])
 {
  return 0;
 }
 */
 /****************************************************/
 /*              pas.c                               */
 /*          高级语言到四元式                        */
 /****************************************************/
 
 #include  "stdio.h"
 #include  "string.h"
 #include  "time.h"
 #include  "conio.h"
#include  "stdlib.h"

 
 void my_delay(unsigned long ms)
 
{
         double start_time = (double)clock() / CLOCKS_PER_SEC * 1000;
         while ( (double)clock() / CLOCKS_PER_SEC * 1000 - start_time < ms ) ;
     
}
 #define      ACC     -2
 /****************************************/
 #define sy_if        0
 #define sy_then      1
 #define sy_else      2
 #define sy_while 3
 #define sy_begin 4
 #define sy_do        5
 #define sy_end       6
 #define a            7
 #define semicolon    8
 #define e            9
 #define jinghao      10
 #define S            11
 #define L            12
 
 #define tempsy      15
 #define EA           18 /*E and*/
 #define EO           19 /*E or*/
 
 #define plus     34
 #define minus       35  //添加  减号的关键字
 #define times        36
 #define division    37  //添加 除号的关键字
 #define becomes      38
 #define op_and       39
 #define op_or        40
 #define op_not       41
 #define rop          42
 
 #define lparent      48
 #define rparent      49
 #define ident       56
 #define intconst    57
 /******************************************/
 char ch = '\0'; /*当前字符*/
 int     count = 0;
 static   char    spelling[10] = {""}; /*存放识别的字*/
 static   char    line[81] = {""}; /*一行字符缓冲区*/
 char *pline;/*字符缓冲区指针*/
 char ch_exit;
 static   char    ntab1[100][10];
 struct   ntab
         
{
              int tc;
              int fc;
     
} ntab2[200];
 int label = 0;
      /*存放临时变量的表的定义 */
 struct   rwords
{
                  char    sp[10];
                  int     sy;
     
};
 /*存放文件的结构*/
 struct rwords reswords[10] = {{"if", sy_if},
                              {"do", sy_do},
                              {"else", sy_else},
                              {"while", sy_while},
                              {"then", sy_then},
                              {"begin", sy_begin},
                              {"end", sy_end},
                              {"and", op_and},
                              {"or", op_or},
                              {"not", op_not}
};
 struct  aa
{
          int sy1;
          int pos;
     
} buf[1000], /*词法分析结果缓冲区*/
      n,/*当前字符*/
      n1,/*当前表达式中的字符*/
      E,/*非终结符*/
      sstack[100],/*符号栈*/
      ibuf[100],
      stack[1000];
 struct  aa oth;
 struct  fourexp
{
                  char op[10];
                  struct aa arg1;
                  struct aa arg2;
                  int result;
     
} fexp[200];
 /*四元式的结构*/
 
 int      ssp = 0; /*指向sstack[100]*/
 struct   aa  *pbuf = buf; /*指向词法分析缓冲区*/
 int     nlength = 0;
 int     lnum = 0; /*源程序长度*/
 
 int     tt1 = 0;
 FILE    *cfile;
 FILE    *mfile;
 /*********************************************************/
 int newt = 0;
 /*临时变量*/
 int nxq = 100;
 /*nxq指向下一个形成的四元式的地址*/
 int  lr;
 int lr1;
 int sp = 0;
 /* 状态栈定义*/
 int stack1[100];
 int sp1 = 0;
 /*状态栈1的定义*/
 int num = 0;
 struct ll
{
      int nxq1;
      int tc1;
      int fc1;
     
} labelmark[10];
 int labeltemp[10];
 int pointmark = -1, pointtemp = -1;
 int sign = 0;
 /*sign=1,表达式为赋值语句;sign=2,表达式为布尔表达式。*/
 /***********************************************/
 static int   action[19][13] =
 /*0*/        {{2, -1, -1, 3, 4, -1, -1, 5, -1, -1, 10, 1, -1},
     /*1*/        { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, ACC, -1, -1},
     /*2*/        { -1, -1, -1, -1, -1, -1, -1, -1, -1, 6, -1, -1, -1},
     /*3*/        { -1, -1, -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1},
     /*4*/        {2, -1, -1, 3, 4, -1, -1, 5, -1, -1, -1, 9, 8},
     /*5*/        { -1, -1, 104, -1, -1, -1, 104, -1, 104, -1, 104, -1, -1},
     /*6*/        { -1, 10, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
     /*7*/        { -1, -1, -1, -1, -1, 11, -1, -1, -1, -1, -1, -1, -1},
     /*8*/        { -1, -1, -1, -1, -1, -1, 12, -1, -1, -1, -1, -1, -1},
     /*9*/        { -1, -1, -1, -1, -1, -1, 105, -1, 13, -1, -1, -1, -1},
     /*10*/       {2, -1, -1, 3, 4, -1, -1, 5, -1, -1, -1, 14, -1},
     /*11*/       {2, -1, -1, 3, 4, -1, -1, 5, -1, -1, -1, 15, -1},
     /*12*/       { -1, -1, 103, -1, -1, -1, 103, -1, 103, -1, 103, -1, -1},
     /*13*/       {2, -1, -1, 3, 4, -1, -1, 5, -1, -1, -1, 9, 16},
     /*14*/       { -1, -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
     /*15*/       { -1, -1, 102, -1, -1, -1, 102, -1, 102, -1, 102, -1, -1},
     /*16*/       { -1, -1, -1, -1, -1, -1, 106, -1, -1, -1, -1, -1, -1},
     /*17*/       {2, -1, -1, 3, 4, -1, -1, 5, -1, -1, -1, 18, -1},
     /*18*/       { -1, -1, 101, -1, -1, -1, 101, -1, 101, -1, 101, -1, -1}
};
 
 //下面的是添加了减法和除法的算术表达式SLR矩阵
 static int action1[14][9] =
 /*0*/        {{3, -1, -1, -1, -1, 2, -1, -1, 1},
     /*1*/        { -1, 4, 5, 6, 7, -1, -1, ACC, -1},
     /*2*/        {3, -1, -1, -1, -1, 2, -1, -1, 8},
     /*3*/        { -1, 106, 106, 106, 106, -1, 106, 106, -1},
     /*4*/        {3, -1, -1, -1, -1, 2, -1, -1, 9},
     /*5*/        {3, -1, -1, -1, -1, 2, -1, -1, 10},
     /*6*/        {3, -1, -1, -1, -1, 2, -1, -1, 11},
     /*7*/        {3, -1, -1, -1, -1, 2, -1, -1, 12},
     /*8*/        { -1, 4, 5, 6, 7, -1, 13, -1, -1},
     /*9*/        { -1, 101, 5, 101, 7, -1, 101, 101, -1},
     /*10*/      { -1, 102, 102, 102, 102, -1, 102, 102, -1},
     /*11*/       { -1, 103, 5, 103, 7, -1, 103, 103, -1},
     /*12*/       { -1, 104, 104, 104, 104, -1, 104, 104, -1},
     /*13*/       { -1, 105, 105, 105, 105, -1, 105, 105, -1}
};
 
 
 static int action2[16][11] =
 /*0*/        {{1, -1, 4, -1, 5, -1, -1, -1, 13, 7, 8},
     /*1*/        { -1, 2, -1, 101, -1, 101, 101, 101, -1, -1, -1},
     /*2*/        {3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
     /*3*/        { -1, -1, -1, 102, -1, 102, 102, 102, -1, -1, -1},
     /*4*/        {1, -1, 4, -1, 5, -1, -1, -1, 11, 7, 8},
     /*5*/        {1, -1, 4, -1, 5, -1, -1, -1, 6, 7, 8},
     /*6*/        { -1, -1, -1, 104, -1, 9, 10, 104, -1, -1, -1},
     /*7*/        {1, -1, 4, -1, 5, -1, -1, -1, 14, 7, 8},
     /*8*/        {1, -1, 4, -1, 5, -1, -1, -1, 15, 7, 8},
     /*9*/        {105, -1, 105, -1, 105, -1, -1, 105, -1, -1, -1},
     /*10*/       {107, -1, 107, -1, 107, -1, -1, 107, -1, -1, -1},
     /*11*/       { -1, -1, -1, 12, -1, 9, 10, -1, -1, -1, -1},
     /*12*/       { -1, 103, -1, 103, -1, 103, 103, 103, -1, -1, -1},
     /*13*/       { -1, -1, -1, -1, -1, 9, 10, ACC, -1, -1, -1},
     /*14*/       { -1, -1, -1, 106, -1, 9, 10, 106, -1, -1, -1},
     /*15*/       { -1, -1, -1, 108, -1, 9, 10, 108, -1, -1, -1}
};
 /****************从文件读一行到缓冲区***********************************/
 void readline()
 
{
      char ch1;
      pline = line;
      ch1 = getc(cfile);
      while (ch1 != '\n')
          {
         ////////////////////////////////////////////////////////////////////////////
              my_delay(50);
              printf("%c", ch1);
         ///////////////////////////////////////////////////////////////////////////////
              *pline = ch1;
              pline++;
              ch1 = getc(cfile); //取下一个字符
         
    }
      *pline = '\0';
      pline = line;
      printf("\n");
     
}
 /*********************************从缓冲区读一个字符************************/
 void readch()
 
{
      if (ch == '\0')
          {
         
              readline();
              lnum++;
         
         
    }
      ch = *pline;
      pline++;
     
     
}
 /****************标志符和关键字的识别************************************/
 find(char spel[])
 
{
      int ss1 = 0;
      int ii = 0;
      while ((ss1 == 0) && (ii < nlength))
          {
              if (!strcmp(spel, ntab1[ii])) ss1 = 1;
              ii++;
         
    }
      if (ss1 == 1) return ii - 1;
      else return -1;
     
}
 void identifier()
 
{
      int iii = 0, j, k;
      int ss = 0;
      k = 0;
      do
          {
              spelling[k] = ch;
              k++;
              readch();
         
    }
    while (((ch >= 'a') && (ch <= 'z')) || ((ch >= '0') && (ch <= '9')));
      pline--;
      spelling[k] = '\0';
      while ((ss == 0) && (iii < 10))
          {
              if (!strcmp(spelling, reswords[iii].sp)) ss = 1;
              iii++;
         
    }
      /*关键字匹配*/
      if (ss == 1)
          {
              buf[count].sy1 = reswords[iii - 1].sy;
         
    }
      else
          {
              buf[count].sy1 = ident;
              j = find(spelling);
              if (j == -1)
                  {
                      buf[count].pos = tt1;
                      strcpy(ntab1[tt1], spelling);
                      tt1++;
                      nlength++;
             
        }
              else buf[count].pos = j;
         
    }
      count++;
      for (k = 0; k < 10; k++) spelling[k] = '\0';
     
}
 /*****************数字的识别***********************************/
 void number()
 
{
      int ivalue = 0;
      int digit;
      do
          {
              digit = ch - '0';
              ivalue = ivalue * 10 + digit;
              readch();
         
    }
    while ((ch >= '0') && (ch <= '9'));
      buf[count].sy1 = intconst;
      buf[count].pos = ivalue;
      count++;
      pline--;
     
}
 /**************扫描主函数*************************************/
 void scan()
 
{
      int i;
      while (ch != '~')
          {
              switch (ch)
                  {
              case ' ':
                      break;
              case 'a':
              case 'b':
              case 'c':
              case 'd':
              case 'e':
              case 'f':
              case 'g':
              case 'h':
              case 'i':
              case 'j':
              case 'k':
              case 'l':
              case 'm':
              case 'n':
              case 'o':
              case 'p':
              case 'q':
              case 'r':
              case 's':
              case 't':
              case 'u':
              case 'v':
              case 'w':
              case 'x':
              case 'y':
              case 'z':
                      identifier();
                      break;
              case '0':
              case '1':
              case '2':
              case '3':
              case '4':
              case '5':
              case '6':
              case '7':
              case '8':
              case '9':
                      number();
                      break;
              case '<':
                      readch();
                      if (ch == '=')
                          {
                              buf[count].pos = 0;
                 
            }
                      else
                          {
                              if (ch == '>') buf[count].pos = 4;
                              else
                                  {
                                      buf[count].pos = 1;
                                      pline--;
                     
                }
                 
            }
                      buf[count].sy1 = rop;
                      count++;
                      break;
              case '>':
                      readch();
                      if (ch == '=')
                          {
                              buf[count].pos = 2;
                 
            }
                      else
                          {
                              buf[count].pos = 3;
                              pline--;
                 
            }
                      buf[count].sy1 = rop;
                      count++;
                      break;
              case '(':
                      buf[count].sy1 = lparent;
                      count++;
                      break;
              case ')':
                      buf[count].sy1 = rparent;
                      count++;
                      break;
              case '#':
                      buf[count].sy1 = jinghao;
                      count++;
                      break;
              case '+':
                      buf[count].sy1 = plus;
                      count++;
                      break;
              case '-':                   //ex
                      buf[count].sy1 = minus;
                      count++;
                      break;
              case '/':                   //ex
                      buf[count].sy1 = division;
                      count++;
                      break;
              case '*':
                      buf[count].sy1 = times;
                      count++;
                      break;
              case ':':
                      readch();
                      if (ch == '=')
                          buf[count].sy1 = becomes;
                      count++;
                      break;
              case '=':
                      buf[count].sy1 = rop;
                      buf[count].pos = 5;
                      count++;
                      break;
              case ';':
                      buf[count].sy1 = semicolon;
                      count++;
                      break;
             
        }
              readch();
         
    }
      buf[count].sy1 = -1;
     
}
 /******************************************************************/
 void readnu()
 
{
      if (pbuf->sy1 >= 0)
          {
              n.sy1 = pbuf->sy1;
              n.pos = pbuf->pos;
              pbuf++;
         
    }
     
}
 /******************中间变量的生成**************************/
 newtemp()
 
{
      newt++;
      return newt;
     
}
 /**************************生成四元式****************/
 gen(char op1[], struct aa arg11, struct aa arg22, int result1)
 
{
      strcpy(fexp[nxq].op, op1);
      fexp[nxq].arg1.sy1 = arg11.sy1;
      fexp[nxq].arg1.pos = arg11.pos;
      fexp[nxq].arg2.sy1 = arg22.sy1;
      fexp[nxq].arg2.pos = arg22.pos;
      fexp[nxq].result = result1;
      nxq++;
      return nxq - 1;
     
}
 /**********布尔表达式的匹配****************/
 merg(int p1, int p2)
 
{
      int p;
      if (p2 == 0) return p1;
      else
          {
              p = p2;
              while (fexp[p].result != 0) p = fexp[p].result;
              fexp[p].result = p1;
              return p2;
         
    }
     
}
 void backpatch(int p, int t)
 
{
      int tempq;
      int q;
      q = p;
      while (q != 0)
          {
              tempq = fexp[q].result;
              fexp[q].result = t;
              q = tempq;
         
    }
     
}
 /*******************************************/
 change1(int chan)
 
{
      switch (chan)
          {
      case ident:
      case intconst:
              return 0;
      case plus:
              return 1;
      case times:
              return 2;
      case minus:       //返回减号在 算术表达式SLR表中的 列号
              return 3;
      case division:     ///返回除号在 算术表达式SLR表中的 列号
              return 4;
      case lparent:
              return 5;
      case rparent:
              return 6;
      case jinghao:
              return 7;
      case tempsy:
              return 8;
         
    }
     
}
 change2(int chan)
 
{
      switch (chan)
          {
      case ident:
      case intconst:
              return 0;
      case rop:
              return 1;
      case lparent:
              return 2;
      case rparent:
              return 3;
      case op_not:
              return 4;
      case op_and:
              return 5;
      case op_or:
              return 6;
      case jinghao:
              return 7;
      case tempsy:
              return 8;
      case EA:
              return 9;
      case EO:
              return 10;
         
    }
     
}
 /************赋值语句的的分析***************************/
 void lrparse1(int num)
 
{
      lr1 = action1[stack1[sp1]][change1(n1.sy1)];
      if (lr1 == -1)
          {
              printf("\n算术表达式或赋值语句出错!\n");
              getch();
              exit(0);
         
    }
      if (ibuf[0].sy1 != ident) //对赋值表达式的检查
          {
              printf("\n赋值语句出错!赋值号的左边不是变量名\n");
              getch();
              exit(0);
         
    }
      if ((lr1 < 14) && (lr1 >= 0)) //14 ――标记算术表达式SLR表中的状态数
          {
              sp1++;
              stack1[sp1] = lr1;
              if (n1.sy1 != tempsy)
                  {
                      ssp++;
                      num++;
                      sstack[ssp].sy1 = n1.sy1;
                      sstack[ssp].pos = n1.pos;
             
        }
              n1.sy1 = ibuf[num].sy1;
              n1.pos = ibuf[num].pos;
              lrparse1(num);
         
    }
      if ((lr1 >= 100) && (lr1 < 107))
          {
              switch (lr1)
                  {
              case 100:
                      break;
              case 101:
                      printf("\nE->E+E 归约\n");
                      E.pos = newtemp();
                      gen("+", sstack[ssp - 2], sstack[ssp], E.pos + 100);
                      ssp = ssp - 2;
                      sstack[ssp].sy1 = tempsy;
                      sstack[ssp].pos = E.pos;
                      sp1 = sp1 - 3;
                      break;
                      /*E->E+E*/
              case 102:
                      printf("\nE->E*E 归约\n");
                      E.pos = newtemp();
                      gen("*", sstack[ssp - 2], sstack[ssp], E.pos + 100);
                      ssp = ssp - 2;
                      sstack[ssp].sy1 = tempsy;
                      sstack[ssp].pos = E.pos;
                      sp1 = sp1 - 3;
                      break;
                      /*E->E*E*/
              case 103:          //添加的  对减法归约的语义代码
                      printf("\nE->E-E 归约\n");
                      E.pos = newtemp();
                      gen("-", sstack[ssp - 2], sstack[ssp], E.pos + 100);
                      ssp = ssp - 2;
                      sstack[ssp].sy1 = tempsy;
                      sstack[ssp].pos = E.pos;
                      sp1 = sp1 - 3;
                      break;
                      /*E->E-E*/
              case 104:          //添加的  对除法归约的语义代码
                      printf("\nE->E/E 归约\n");
                      E.pos = newtemp();
                      gen("/", sstack[ssp - 2], sstack[ssp], E.pos + 100);
                      ssp = ssp - 2;
                      sstack[ssp].sy1 = tempsy;
                      sstack[ssp].pos = E.pos;
                      sp1 = sp1 - 3;
                      break;
                      /*E->E/E*/
              case 105:
                      printf("\nE->(E) 归约\n");
                      E.pos = sstack[ssp - 1].pos;
                      ssp = ssp - 2;
                      sstack[ssp].sy1 = tempsy;
                      sstack[ssp].pos = E.pos;
                      sp1 = sp1 - 3;
                      break;
                      /*E->(E)*/
              case 106:
                      printf("\nE->i 归约\n");
                      E.pos = sstack[ssp].pos;
                      sp1--;
                      break;
                      /*E->i*/
             
        }
              n1.sy1 = tempsy; /*规约后为非终结符*/
              n1.pos = E.pos;
              lrparse1(num);
         
    }
      if ((lr1 == ACC) && (stack1[sp1] == 1))
          {
              /*归约A->i:=E*/
              printf("\nA->i:=E 归约\n");
                  gen(":=", sstack[ssp], oth, ibuf[0].pos);
              ssp = ssp - 3;
              sp1 = sp1 - 3;
         
    }
     
}