C语言程序分析

C语言程序分析,第1张

while(1)

{

if(fabs(z)>10)

{

x=y;

y=z;

z=x/y;

}

else

break;

}

这个就是一个循环,要是(fabs(z)>10即z的绝对值大于一,赋值,小于等于1就退出循环

for(a=1;printf("b"),a<3;a++);

像中间这种写法,以逗号分隔,是逗号表达式,其值,是最右侧的值。

这就是说判断时,其判断的时最右侧的表达式值的真与假,

像上面这个,就是判断 a<3是否成立。

for(a=1;printf("b"),a<3,printf("c");a++);

就是判断printf("c")的值为真为假,所以才会造成上面的问题。

#include <stdioh>

//函数声明

int f(int x);

main()

{

int n=1,m;

/

调用函数f三次,将最后一次调用的返回值赋给m,第2,第3次调用分别用前次调用的返回值作为实参再调用f。

第一次,f(1),返回12,等于2,

第二次,f(2),返回22,等于4,

第三次,f(4),返回42,等于8,

最后,m=8。

/

m=f(f(f(n)));

//输出m的值8,并换行

printf("%d\n",m);

}

//f函数的定义,返回一个整数,返回的整数是传入的参数x的2倍

int f(int x)

{ return x2;}

uint8_t ptr uint8_t len 这是传入参数。 len可能是长度,ptr可能指向的是一个数组

^= 按位异或后赋值。

crc ^= ptr++; //首先将数组第一位异或后复制给Crc。之后ptr再向前一步,简单理解就是指向数组的下一位。

for(i = 0;i < 8;i++) { if(crc & 0x01) crc = (crc >> 1) ^ 0x8C; else crc >>= 1; }

//将取到数组第一位值,与0x01上。如果非零,crc就需要右移一位,再与0x8C异或。否则右移1位。每位数组值要做8次。

while(len--) //表示要判断数组内len个值。或则说是取得数组内len长度的元素个数。

return crc; //len个数组值都作完以后,将Crc返回。

我想你需要了解一下 0x01的意义,0x8C的意义。

0x01 = 0000 0001

0x8c = 1000 1100

没看到啊,已经有人答完了。哎,早知道就不写这么多字了。

#include <iostream>

#include <string>

using namespace std;

string key[6] = {"begin", "if", "then", "while", "do", "end"};

//关键字

bool isKey( string str, int &syn) //判断是否为关键字,若是传回相

应关键码的种别名

{

int i;

for(i=0; i<6; i++)

{

if(str == key[i])

{

syn = i + 1;

return true;

}

}

return false;

}

bool isLetter(char c) //是否为字母

{

if((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'))

return true;

else

return false;

}

bool isDigit(char c) //是否为数字

{

if(c >= '0' && c <= '9')

return true;

else

return false;

}

void analyse(FILE fileP)

{

int n;

char c;

string str = "";

while((c = fgetc(fileP)) != EOF)

{

if(c == ' ' || c == '\n' || c == '\t')

continue;

else if(isDigit(c)) //数字

{

while(isDigit(c))

{

str += c;

c = fgetc(fileP);

}

fseek(fileP, -1, SEEK_CUR);

cout << "(11, " << str << ")" << endl;

str = "";

}

else if(isLetter(c)) //字母开头的

{

while(isDigit(c) || isLetter(c))

{

str += c;

c = fgetc(fileP);

}

fseek(fileP, -1, SEEK_CUR);

if(isKey(str, n))

cout << "(" << n << ", " << str << ")" << endl; //关键码

else

cout << "(10, " << "\'"<< str << "\'" << ")" << endl; //标志符

str = "";

}

else // *** 作符等

{

switch(c)

{

case '+':

cout << "(13, +)" << endl;

break;

case '-':

cout << "(14, -)" << endl;

break;

case '':

cout << "(15, )" << endl;

break;

case '/':

cout << "(16, /)" << endl;

break;

case ':':

{

if(c=fgetc(fileP) == '=')

cout << "(18, :=)" << endl;

else

{

cout << "(17, :)" << endl;

fseek(fileP, -1, SEEK_CUR);

}

break;

}

case '<':

{

c=fgetc(fileP);

if(c == '=')

cout << "(22, <=)" << endl;

else if(c == '>')

cout << "(21, <>)" << endl;

else

{

cout << "(20, <)" << endl;

fseek(fileP, -1, SEEK_CUR);

}

break;

}

case '>':

{

c=fgetc(fileP);

if(c == '=')

cout << "(24, >=)" << endl;

else

{

cout << "(23, >)" << endl;

fseek(fileP, -1, SEEK_CUR);

}

break;

}

case '=':

cout << "(25, =)" << endl;

break;

case ';':

cout << "(26, ;)" << endl;

break;

case '(':

cout << "(27, ()" << endl;

break;

case ')':

cout << "(28, ))" << endl;

break;

case '#':

cout << "(0, #)" << endl;

break;

}

}

}

}

int main()

{

FILE fileP;

fileP = fopen("testtxt", "r");

cout << "------词法分析如下------" << endl;

analyse(fileP);

return 0;

}

1,输入十个整数,然后从大到小排列,并打印出来。

2,主函数里面的第一个输出语句K=12,第二个输出语句P=3,K=273,第三个输出语句输出的是Irogram;

第三个输出语句输出 computer

sub1()执行:

for(i=0;i<MAX;i++) a[i]=i+i;

所以数组a的各成员值为:

a[0]:0+0=0

a[1]:1+1=2

a[2]:2+2=4

a[9]:9+9=18

sub3(a)

将全局数组首地址a传递给int a[],其实这里的a就是一个指针,指向了数组a的首地址,

随后在sub3中通过指针进行数字遍历,输出各成员值:

0 2 4 6 8 10 12 14 16 18

sub2();

这里请注意,这个函数里面 *** 作的是其内部的临时变量a[MAX]的值,对于全局量a[MAX]没有任何影响

sub3(a)

将全局数组首地址a传递给int a[],其实这里的a就是一个指针,指向了数组a的首地址,

随后在sub3中通过指针进行数字遍历,输出各成员值:

0 2 4 6 8 10 12 14 16 18

所以结果为B

以上就是关于C语言程序分析全部的内容,包括:C语言程序分析、C语言 分析这程序、求教 C语言 大佬分析一下这个程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9342203.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存