首页技术c语言程序分析怎么写,简单c语言程序例子

c语言程序分析怎么写,简单c语言程序例子

编程之家2026-05-261014次浏览

大家好,感谢邀请,今天来为大家分享一下c语言程序分析怎么写的问题,以及和简单c语言程序例子的一些困惑,大家要是还不太明白的话,也没有关系,因为接下来将为大家分享,希望可以帮助到大家,解决大家的问题,下面就开始吧!

c语言程序分析怎么写,简单c语言程序例子

一个C语言程序求分析

分析一:这个程序的输入是变量"_",因为标准C中是允许下划线开头的变量的,仅有下划线也满足变量命名的要求;

分析二:双下划线"__"这里不能理解为变量,我猜测"__TIME__"是C语言中的一个宏定义,是一个整体;

分析三:断句。仔细从“乱码”中能一眼看出两个关键字"main"和"putchar"。main函数里面居然还有main?!对,没错,这是一个递归函数。

把在分号后面添加回车,假如适量缩进,并把"_"用"argc"代替。程序的主要结构大致如下:

main(argc)

{

c语言程序分析怎么写,简单c语言程序例子

argc^448&&main(-~argc);

putchar(

--argc%64?32|-~7[__TIME__-argc/8%8][">'txiZ^(~z?"-48]>>";;;====~$::199"[argc*2&8|argc/64]/(argc&2?1:8)%8&1:10

);

}

分析四:如何实现的递归?没有返回值,没有if-else语句,怎么能递归,这貌似是不太可能的事,但是仔细分析一下第一句,即"_^448&&main(-~_);"

c语言程序分析怎么写,简单c语言程序例子

这是一个"condition1&&condition2"条件运算语句,如果condition1和condition2同为真(true),则该语句为真(true),否则,只要有一个condition为假(false),则该语句为假。C语言为了提高效率,如果condition1为假,程序是不会再去运算condition2的,很明显,在condition1==0时无论condition2是真是假,结果都是假。所以当"argc^448"的值为0时,递归结束。

递归就实现了。

分析五:putchar(*&^%$##$^^&***&^%&)。

putchar()函数不用多讲,是最简单的函数了,其作用就是输出一个ascii码对应的字符,例如要输出"a",只需写putchar('a');即可。所以可以推测putchar两个小括号之间应该是某个字符对应的ascii码。

根据C语言运算符的优先级结合性再对代码进行断句:

main(argc)

{

argc^448&&main(-~argc);

putchar(

--argc%64

?

(32|-~7[__TIME__-argc/8%8][">'txiZ^(~z?"-48]>>";;;====~$::199"[argc*2&8|argc/64]/(argc&2?1:8)%8&1)

:

10

);

}

我特意把"condition?value1:value2"这个三目运算符写的非常明显,楼主可看懂?

其实这个三目运算符就是相当与一个if-else语句,这条putchar()语句和下面的是等效的:

if(--argc%64)

putchar(32|-~7[__TIME__-argc/8%8][">'txiZ^(~z?"-48]>>";;;====~$::199"[argc*2&8|argc/64]/(argc&2?1:8)%8&1);

else

putchar(10);

如果楼主不信,可以将刚刚的代码替换原来的putchar一句,你会发现结果是一致的。

分析六:到此时,最复杂的东西就是第一个putchar的内容。其实根据运算符的优先级和结合性来分析的话,第一个putchar里的内容有下面几块:

32|-~

7[__TIME__-argc/8%8][">'txiZ^(~z?"-48]

>>

";;;====~$::199"[argc*2&8|argc/64]/(argc&2?1:8)%8

&

1

咋一看,有几个中括号若隐若现,于是想到了数组,但是却没发现有数组名,难道是错觉吗?!

如果楼主对数组与指针非常熟悉的话就应该知道,其实数组名就是一个地址,而地址就是一个特定含义的数字罢了。

所以"7"是一个地址;

";;;====~$::199"也是一个地址

第一个地址非常好理解,就是第7号地址

第二个其实也非常直观,就是字符串";;;====~$::199"在内存中的地址。你可以定义一个全局变量如下:

char*str=";;;====~$::199";

然后再代码中用str代替";;;====~$::199",结果是一致的。

现在将这两个地址的“带入原来的putchar语句中(怎么有点解方程的意思……)得:

32

|

-~7[A][B]>>str[C]/D%8

&

1

其中

A=__TIME__-argc/8%8

B=">'txiZ^(~z?"-48

C=argc*2&8|argc/64

D=argc&2?1:8

=================================================

好,分析先告一段落,我们来吧代码重新整理一下

#defineA(__TIME__-argc/8%8)

#defineB(">'txiZ^(~z?"-48)

#defineC(argc*2&8|argc/64)

#defineD(argc&2?1:8)

char*str=";;;====~$::199";

main(argc)

{

if(argc^448)

main(-~argc);

if(--argc%64)

{

putchar(32|-~(7[A][B])>>str[C]/D%8&1);

}

else

putchar(10);

}

怎么样,是不是看起来规范了一点呢^_^,最重要的是运行结果和之前的完全匹配

=================================================

结论:

我觉得我已经把代码整理得够清晰的了,至于"__TIME__"是什么?第7号地址是什么?以及宏定义B中的">'txiZ^(~z?"有何特殊意义楼主还是自己去查查资料吧,相信弄懂后你会对C语言的具体实现过程有非常深刻的了解的。

有疑问百度hi给我留言,虽然我不能保证及时答复,但只要是我知道的我一定会回答的

如果楼主喜欢这种怪异的C代码,我推荐下面几个例子,包爽!

最后,这个程序输出的是该可执行文件的修改时间。对于这个程序的设计者,我表示深深地膜拜!!

C语言程序设计实验报告怎么写啊

只是个例子,不可照抄。

实验内容与要求:

[实验内容]

1、通过本试验初步培养计算机逻辑解题能力。熟练掌握赋值语句和if语句的应用;掌握switch多路分支语句和if嵌套语句的使用

2、将前期所学习到的基本数据类型、运算符和表达式等程序设计基础知识运用于具体的程序设计。

3、进一步熟练掌握输入输出函数scanf, printf和getchar的使用,熟悉math.h中常用数学函数的使用方法

4、掌握循环语句的应用方法。

5、了解随机数生成函数。

[实验要求]

在规定期限独立完成实验内容

1、提交实验报告(电子版)

2、提交相应源程序文件(文件名 EX6_x姓名.c,如EX6_1彭健.c)

3、要求从简单到复杂,后面的要求均在前面的基础上进行修改,前六题,每题均需要保留各自的程序,六题以后,每题均在前一题基础上修改,保留最后一个程序即可(如做到第九题,则保留EX6_9姓名.c,做到第11题,则保留ex6_11姓名.c)

二、实验原理和设计方案:

1、函数头的选则,while循环语句,switch(case)语句,条件表达式,if else条件语句,自增运算符,设置复杂变量,输出随机操作数。

2、变量要有分数变量和等级变量,要有选择算法题数的变量和计算正确与否的变量,要有随机输出的两个操作数变量和自己按运算符号输入结果的变量,最后还有判断是否要进行的变量字符。中间结果有选择运算符的switch()和分数等级的switch()和错题对题的自增和选择运算符计算的自增。

3、问题的分析方法:先考虑设置整形变量和字符变量,考虑到要不断循环计算,选择用while语句来循环。在循环体中,将前面的输出提示运算符,和自行选择运算符、答案及输出随机操作数完成。再用switch语句对选择的运算符进行判断,并用变量进行自增运算,计算出错题于对题个数和选择了那种运算符号。在循环体最后用if else语句来判断是否继续执行还是跳出循环。最后根据自增计算的结果和公式进行分数计算,并用switch语句来是想等级的制定。

三、源代码

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void main()

{

..........

}

四、试验结果和启发

因为输入y要继续循环,所以选择用while语句。在while语句中要结合前面的按提示计算,并嵌套switch语句并用条件表达式,来计算结果正确与否,计算的题型是什么。最后再用switch语句来完成分数等级的判断。

五、实验体会:

描述自己在编程或程序编译运行中遇到的难点和问题及解决的办法。

求C语言编译原理语法分析程序

#include<iostream>

using namespace std;

#define m 45

#define n 100

#define t 10

int main()

{

FILE*fp;

char filename[20],c[n];

printf("Type the file name which you want to open:");

scanf("%s",&filename);

fp=fopen(filename,"r+");/*以r-只读方式打开指定文件*/

if((fp=fopen(filename,"r"))==NULL)/*文件不存在输出错误*/

{cout<<"文件不存在!"<<endl;exit(-1);}

cout<<"文件中内容如下:"<<endl;

for(int j=0;!feof(fp);j++){

c[j]=fgetc(fp);//从流中读取字符

}

char keyword[m][t]={"include","int","string","cout","cin","auto","break","case","char","class","const",

"continue","default","delete","do","double","else","enum","extern","float","for","friend","if","inline",

"int","long","new","operator","private","protected","public","register","return","short","sizeof","static",

"struct","switch","template","this","typedef","union","virtual","void","while"};//关键字数组

char a[t],*p=c,*q=a,*s=a;

bool w=0,r=0;

int i=0;

for(i=0;i<10;i++)a[i]=NULL;//初始化临时数组

while(*p!=NULL){

q=s=a;

if((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z')||*p=='_'){//识别标识符

*q=*p;p++;q++;

while((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z')||(*p>='0'&&*p<='9')||*p=='_'){

*q=*p;p++;q++;

}

for(i=0;i<m;i++)if(strcmp(keyword[i],a)==0){r=1;break;}

if(r==1){cout<<"关键字为:";r=0;}

else cout<<"标识符为:";

while(s!=q){

cout<<*s;

s++;

}

cout<<endl;

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

}

else if(*p=='\''){//识别字符常量

p++;

while(*p!='\''){

*q=*p;

p++;

q++;

}

cout<<"字符常量为:";

while(s!=q){

cout<<*s;

s++;

}

cout<<endl;

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

p++;

}

else if(*p=='\"'){//识别字符串常量

p++;

while(*p!='\"'){

*q=*p;

p++;

q++;

}

cout<<"字符串常量为:";

while(s!=q){

cout<<*s;

s++;

}

cout<<endl;

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

p++;

}

else if(*p=='+'||*p=='-'||*p=='*'||*p=='/'||*p=='='||*p=='%'||*p=='/'){//识别运算符

cout<<"运算符为:"<<*p;

cout<<endl;

p++;

}

else if(*p==';'||*p==','){//识别分解符

cout<<"分界符为:"<<*p;

cout<<endl;

p++;

}

else if(*p>='0'&&*p<='9'){

s=q=a;

*q=*p;p++;q++;

while(*p>='0'&&*p<='9'||*p=='.'){

*q=*p;p++;q++;

}

while(s!=q){

if(*s=='.'){w=1;break;}//识别实型常量

s++;

}

s=a;

if(w==1){

cout<<"实型常量为:";

while(s!=q){

cout<<*s;

s++;

}

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

}

else{

cout<<"整型常量为:";

while(s!=q){//识别整型常量

cout<<*s;

s++;

}

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

}

cout<<endl;

}

else p++;

}

return 0;

}

文章分享结束,c语言程序分析怎么写和简单c语言程序例子的答案你都知道了吗?欢迎再次光临本站哦!

dedecms门户网站?DedeCMS 授权c语言一般用什么编程软件,c语言开发的软件有哪些