c语言程序分析怎么写(C语言程序分析)

本文目录
- C语言程序分析
- 对于一个C语言程序,我们应该怎样去写需求分析
- C语言程序解析
- C语言 程序分析题 求详解
- C语言程序设计程序编写题目应该怎么怎样去解,一般的分析方法是什么,如下题,请写出结果及分析过程,谢谢
- c语言中的程序分析
- 急求!!!用C语言编写一个编译原理实验的简单优先分析法程序
- c语言中,程序段分析
- 单片机C语言程序分析
- 一个C语言程序求分析
C语言程序分析
程序的分析,都从main()函数说起:
main函数开始定义了5个变量a,b,c,d,p;
puts表示输入提示,第一个输入的是a,第二个输入的是b;
do表示循环大括号内的内容;现在进入大括号内部:
输出 :input operation:
getchar()表示输入一个字符,编译器用字符规则去判定;输入的字符复制给p
if 表示判断语句 :如果……
if(p==’+’) add(a,b,c):如果输入的符号是加号“+”则执行add(a,b,c)函数。这里面add是函数调用,它代表了一组功能,具体的功能在上面的add里面写得很清楚了。是将a+b的值给c 最后输出c
同理if(p==’-’) minus(a,b,c);else :如果输入的符号是“-”,执行minus(a,b,c)函数,具体函数功能见minus(a,b,c)函数,c=a-b 并把c输出
if(p==’*’) multiplication(a,b,c);else…………
if(p==’/’) div(a,b,d)………………
一个道理。
总结:
这个程序完成的是四则运算,首先输入两个数字,再输入一个运算符,程序会根据输入的运算符进行相应的运算;如果输入的运算符不是加、减、乘、除中的一个,则提示“没有注册这个运算符号”;当输入为0时,程序退出。
对于一个C语言程序,我们应该怎样去写需求分析
1、对要解决的问题进行需求分析时,是不用考虑用什么语言来实现的。2、需求分析只是要回答你所要开发的系统要向用户提供什么服务,即系统应该具有什么功能。并且还要分析系统的非功能性需求,即系统的可用性、可靠性,可维护性、可支持性等。3、在充分分析了系统的功能性需求和非功能性需求后,才开始设计如何实现系统,在这个阶段也不用过多的考虑如何用具体的语言来实现。4、当软件的设计写成后,就进入了系统构造的阶段,此时才考虑如何用编程语言来实现设计。
C语言程序解析
1.
#include "stdio.h"
main()
{
printf("\n\n%d,%d\n",20/7,-20/7);
printf("%f,%f\n",20.0/7,-20.0/7);
}
运行截图
分析:
\n 表示换行
%d 表示以十进制形式输出带符号整数(正数不输出符号)
%f 表示以小数形式输出单、双精度实数
2.
#include "stdio.h"
main()
{
int x;
char y;
x=65;
y=’B’;
printf("x=%c\n",x);
printf("y=%c\n",y);
printf("y=%d\n",y);
}
运行截图
分析:
%c 表示输出单个字符
3.
#include "stdio.h"
main()
{
int i=7,j=7,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,q,i,j);
}
运行截图
分析:
i++ 表示先使用i,然后i的值加1
++i 表示先把i的值加1,再使用i
C语言 程序分析题 求详解
这个程序应该是把
十进制数
转换成
二进制数
输出
#include
//
头文件
void
main()
{
int
a,b,c,i=0;
//
a存储待转换的十进制数,b存储转换后的二进制位,
//
c
是存储
余数
,
printf("输入一个整数\n");
scanf("%d",&a);
//
输入需转换的十进制数
while(a!=0)
//
只要a不为零,就继续转换
{
c=a%2;
//
把a除以2
的余数赋值给c
a=a/2;
//
把商存入a进行下一次循环
b=c;
//
把余数存到数组中作为二进制中的一位
i++;
}
for(;i》0;i--)
printf("%d",
b);
//反向输出余数,即得到二进制
例如输入4
因为4
!=
0
4
/
2
=
2((商=a)...........0(余数=c=b)
因为2
!=
0
2
/
2
=
1((商=a)...........0(余数=c=b)
因为1
!=
0
1
/
2
=
0((商=a)...........1(余数=c=b)
因为
0
=
0
结束循环输出
b
b
b
即
100,也就是二进制的
4
C语言程序设计程序编写题目应该怎么怎样去解,一般的分析方法是什么,如下题,请写出结果及分析过程,谢谢
void fun(char *w, int m) /* 可调用fun1函数左移字符 */
{
for(int i=0;i《m;i++)
fun1(w);
}
思路是这样的,我们已经知道了fun函数的目的是将字符串 w 向左移 m 位,而fun1函数已经为我们写好了,那么这时我们就可以判定:fun函数中的内容应该是将fun循环执行m次。
所以需要的是写一个循环,确定循环次数的循环,最简单的方法就是for循环了。
c语言中的程序分析
这个题目是if的选择顺序执行下来!按照你这样输出来会是x=0;y=9.5;
你的if有三个编译器不知道你想要的是哪一个!因为你的三个if处在一个并列的位置上面!如果你想输出x=-12.34;y=9.5;还有你的语法有点小错误就是x是double类型不是float;可以这样做:#include《stdio.h》
int main(void)
{float y=9.5;
double x;
x=-12.34;
if (x》0) {y=1;
if (x=0) {y=0;
if (x《0) y=-1;}}
printf("x=%f\ny=%f",x,y);
return 0;}
希望可以帮到你!
急求!!!用C语言编写一个编译原理实验的简单优先分析法程序
编译原理IF条件语句的翻译程序设计—简单优先法、输出四元式通过设计、编制、调试一个条件语句的语法及语义分析程序,加深对语法及语义分析原理的理解,并实现词法分析程序对单词序列的词法检查和分析。具体做到以下几点:①对输入语句进行词法分析。将输入的字符串进行扫描和分解,识别出一个个合法的单词。单词种类包括:关键字,标识符,运算符,常数和界限符②进行语法分析。编写条件语句的相应文法,按照语法分析方法中的简单优先分析法为文法设计简单优先表,对词法分析得到的单词序列进行语法分析,以判别输入的语句是否属于该文法的条件语句。③语法制导翻译。设计中间代码(四元式)序列的结构及属性文法,运用语法制导翻译,在进行语法分析的同时,执行相应的语义规则描述的动作,从而实现语义处理,生成中间代码以四元式的形式输出。④错误提示。对不同的错误给出简略描述,并终止程序的继续执行。下载地址如下,有你要的东西!pile.rar
c语言中,程序段分析
同学,第一个答案确是是"y=0"原因如下,首先我们要说自增和自减运算符“++”和“--”,如果该运算符的位置在操作数之前,则操作数在进行任何计算之前就已经发生改变,如果运算符在操作数后面,则操作数在完成表达式的计算之后才发生改变,例如int
a=5,b=8,c;c=a++*b;
//"++"在操作数a后面,先计算a*b=40,赋值给c,然后a++,a值为6,c的值为40c=++a*b;
//"++"在操作数a前面,先a++,a=7,再a*b,c=56然后我们来看你给的程序,因为是y--,"--"在y后面,则先判断while的条件,此时y=1,即true,为真,然后y--,y=0,然后输出y:y=0;然后再判断while,因为此时y=0,为假,跳出循环,结束。要注意顺序,先判断whlie,然后y--,若while条件为真,则执行while的语句。
若改成"--y"的话,则先计算"--y",y=0,再判断while的条件,此时y=0,即false,为假,直接跳出循环,即什么都不做,结束。
第二题,你要注意的是while的条件不是"k==1"而是"k=1",不是一个判断语句,而是一个赋值语句。即while的条件永远都是“k被赋值为1,然后k作为条件”进行判断,此时k是1,即true,为真会永远进行下去。
单片机C语言程序分析
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
没看到啊,已经有人答完了。哎,早知道就不写这么多字了。
一个C语言程序求分析
分析一:这个程序的输入是变量"_",因为标准C中是允许下划线开头的变量的,仅有下划线也满足变量命名的要求;
分析二:双下划线"__"这里不能理解为变量,我猜测"__TIME__"是C语言中的一个宏定义,是一个整体;
分析三:断句。仔细从“乱码”中能一眼看出两个关键字"main"和"putchar"。main函数里面居然还有main?!对,没错,这是一个递归函数。
把在分号后面添加回车,假如适量缩进,并把"_"用"argc"代替。程序的主要结构大致如下:
main(argc)
{
argc^448 && main(-~argc);
putchar(
--argc%64?32|-~7/(argc&2?1:8)%8&1:10
);
}
分析四:如何实现的递归?没有返回值,没有if-else语句,怎么能递归,这貌似是不太可能的事,但是仔细分析一下第一句,即"_^448 && main(-~_);"
这是一个"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/(argc&2?1:8)%8&1)
:
10
);
}
我特意把"condition ? value1 : value2"这个三目运算符写的非常明显,楼主可看懂?
其实这个三目运算符就是相当与一个if-else语句,这条putchar()语句和下面的是等效的:
if(--argc % 64)
putchar(32|-~7/(argc&2?1:8)%8&1);
else
putchar(10);
如果楼主不信,可以将刚刚的代码替换原来的putchar一句,你会发现结果是一致的。
分析六:到此时,最复杂的东西就是第一个putchar的内容。其实根据运算符的优先级和结合性来分析的话,第一个putchar里的内容有下面几块:
32 | -~
7
》》
";;;====~$::199"/(argc&2?1:8)%8
&
1
咋一看,有几个中括号若隐若现,于是想到了数组,但是却没发现有数组名,难道是错觉吗?!
如果楼主对数组与指针非常熟悉的话就应该知道,其实数组名就是一个地址,而地址就是一个特定含义的数字罢了。
所以"7"是一个地址;
";;;====~$::199"也是一个地址
第一个地址非常好理解,就是第7号地址
第二个其实也非常直观,就是字符串";;;====~$::199"在内存中的地址。你可以定义一个全局变量如下:
char *str = ";;;====~$::199";
然后再代码中用str代替";;;====~$::199",结果是一致的。
现在将这两个地址的“带入原来的putchar语句中(怎么有点解方程的意思……)得:
32
|
-~ 7 / D % 8
&
1
其中
A = __TIME__-argc/8%8
B = "》’txiZ^(~z?"-48
C = argc*2&8|argc/64
D = argc&2?1:8
=================================================
好,分析先告一段落,我们来吧代码重新整理一下
#define A (__TIME__-argc/8%8)
#define B ("》’txiZ^(~z?"-48)
#define C (argc*2&8|argc/64)
#define D (argc&2?1:8)
char *str = ";;;====~$::199";
main(argc)
{
if(argc^448)
main(-~argc);
if(--argc%64)
{
putchar(32|-~ (7/D%8&1);
}
else
putchar(10);
}
怎么样,是不是看起来规范了一点呢^_^,最重要的是运行结果和之前的完全匹配
=================================================
结论:
我觉得我已经把代码整理得够清晰的了,至于"__TIME__"是什么?第7号地址是什么?以及宏定义B中的"》’txiZ^(~z?"有何特殊意义楼主还是自己去查查资料吧,相信弄懂后你会对C语言的具体实现过程有非常深刻的了解的。
有疑问百度hi给我留言,虽然我不能保证及时答复,但只要是我知道的我一定会回答的
如果楼主喜欢这种怪异的C代码,我推荐下面几个例子,包爽!
***隐藏网址***
***隐藏网址***
最后,这个程序输出的是该可执行文件的修改时间。对于这个程序的设计者,我表示深深地膜拜!!

更多文章:
avantage怎么设置为中文(Avantage安装丢失GIT)
2026年10月15日 03:00
activex控件未注册怎么办(登陆视频监控网页时提示activex控件未注册,怎么解决)
2026年10月14日 20:30
excel连接sql数据库教程(excel怎么连接sql数据库)
2026年10月14日 19:40








