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语言 大佬分析一下这个程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)