请问谁能帮忙讲解一下这道程序吗!萌新想起来有点绕!谢谢!

作者&投稿:贝董 (若有异议请与网页底部的电邮联系)
求助各位高手,帮忙解释一下这个程序,详细点更好,还有后面的while(!s3);语句,一直看不明白什么意思。~

void keycan1()
{
uint i; //声明一个unsigned int类型的变量i
if(s3==0)
{
delay(30); //当S3等于0的时候执行延时函数delay(30);
if(s3==0)
{ i++; //当S3等于0的时候i的值加1
switch(i)
{
case 1: //根据I的值来选择将赋予P216进制的数据
P2=0x7f;
break;
case 2:
P2=0xbf;
break;
case 3:
P2=0xdf;
break;
case 4:
P2=0xef;
break;
case 5:
P2=0xf7;
break;
case 6:
P2=0xfb;
break;
case 7:
P2=0xfd;
break;
case 8:
P2=0xfe;
break;
default:i=0;
}
while(!s3); //当!S3为真的时候,即S3为假的时候执行空语句
}
}

这个代码其实还是很清楚明了的。
DELY1:PUSH AX ;延时子程序,这里PUSH AX 其实可以不要的,因为AX没有做任何改动
PUSH CX ; 因为使用了CX来计数,所以先保存CX进堆栈
MOV CX,30H ; 循环30H也就是48次
DLY1:CALL DELY2 ; 在次调用一个延时子程序
LOOP DLY1 ; 循环,48次,不到次数则继续循环
POP CX ; 恢复被保护的原来CX的值
POP AX ; 恢复被保护的原来AX的值
RET ; 过程返回
DELY2:PUSH CX ; 内部调用的过程,也需要把CX当前的值保护进堆栈
MOV CX,8000H ; 循环8000H也就是32768次
LOOP $ ; $ 表示当前地址,也就是自己的地址,32768次循环不到则原地踏步
POP CX ; 恢复被保护的CX的值
RET ; 过程返回

解答如下:

注:解答中使用的形如a->a=5的语句,翻译为:指针a指向整型变量a,整型变量a=5

文字版如下:

#include<stdio.h>

void fun(int *a, int *b, int *c)

{

//此处形参a,b,c就相当于指针p1,p2,p3

int *t;//⑤定义了一个指针变量t

t = a; a = b; b = t;//⑥另说

*t = *b; *b = *c; *c = *t;//⑦另说

printf("%d%d%d
", *a, *b, *c);//⑧分别输出指针a,b,c所对应的值:7,3,3

//⑨fun执行结束,转到main函数

}

int main()

{

//①程序从main函数开始执行

int a = 5, b = 7, c = 3;//②定义了三个整型变量a,b,c并分别赋值5,7,3

int *p1 = &a, *p2 = &b, *p3 = &c;//③定义了三个指针p1,p2,p3分别指向变量a,b,c

fun(p1, p2, p3);//④将p1,p2,p3作为实参传入函数fun,转到fun执行

printf("%d%d%d", a, b, c);//⑩输出a,b,c的值,3,7,3

}

/*

⑤a->a=5  b->b=7  c->c=3  t

⑥t->a=5  a->b=7  b->a=5  c->c=3此时*t=5,*a=7,*b=5,*c=3

⑦*t=*b执行后*t=5,*b=*c执行完后*b=3(注意此时指针b是指向整型变量a的,*b=3时就将整型变量a的值更改为了3,即a=3)

执行*c=*t后*c=3(由⑥可知t和b同时指向a,而a已经变为了3,所以*t也为3)

至此:*a=7,*b=3,*c=3,而整型变量a=3,b=7,c=3

*/



把函数中*t=*b;*b=*c;*c=*t;这段注释掉前后对比下,应该就理解的差不多啦:



#include<stdio.h>

void fun(int *a,int *b,int *c)

{

    int *t;

    t=a;     // *t = 5;

    a=b;     // *a = 7

    b=t;     // *b = 5, b, t指向同一个地址初识a的地址

    *t=*b;     // *t = *b = 5

    *b=*c;     // *b = 3, 因为b, t 指向同一个地址所以*t = 3

    *c=*t;     // *c = 3

    printf("%d%d%d
",*a,*b,*c);     // *a = 7; *b = 3; *c=3

}



#include<stdio.h>
void fun(int *a,int *b,int *c)//&a,&b,&c ==>对应5,7,3
{
int *t;
t=a;//t = &a;
a=b;//a = &b;
b=t;//b = &a; 在这三步之后并没有交换main函数中的值,只是形参传入顺序变为a = &b,b = &a,c = &c
*t=*b; //*t = *b = *(&a) = 5
*b=*c;//*b = *(&c) = 3 由于t与b指向同一段内存,所以*t = 3 ==>>main函数中a等于3
*c=*t;//*c = 3 ==>>main函数中的c等于3
printf("%d%d%d\n",*a,*b,*c);//由于a保存的是b的地址,所以*a = 7,*b被赋值为3,*c被赋值为3
}
int main()
{
int a=5,b=7,c=3;
int *p1=&a,*p2=&b,*p3=&c;
fun(p1,p2,p3);//&a,&b,&c
printf("%d%d%d",a,b,c);//输出3,7,3
}
所以最终输出:7 3 5
3 7 5

#include<stdio.h>
void fun(int *a,int *b,int *c)
{
int *t;
t=a;
a=b;
b=t;
/* 上面几条语句:
* 指针a与b的交换,也就是说 现在 a == p2, b == p1, c 不变== p3
* *a == 7
* *b==5
* *c==3
* b和t 指向是同一个地址
* */

*t=*b; // 这条语句相当于啥也没干,因为 t 和 b 的 地址一样 相当于 *b==*b
*b=*c; // 现在 b和 t 的内容 == *c == 3 也就是原来的 因为b==p1 所以 指针p1的内容*p1==3
*c=*t; // 经过上面那个语句,*t的值自然==3 赋值后 *c 也==3了 c一直没有被动过,所以 c 和p3一直指向同一块内存,改变内容后,*c ==*p3==3

printf("%d%d%d\n",*a,*b,*c);
}
int main()
{
int a=5,b=7,c=3;
int *p1=&a,*p2=&b,*p3=&c;
fun(p1,p2,p3);
printf("%d%d%d",a,b,c);
}


谁帮忙解答一下!谢谢
比如站在魔鬼面前问:“他会告诉我怎么去”,然后魔鬼指出的肯定是错误的,只要往相反的方向走就可以。再比如站在天使面前问:“他会告诉我怎么去”,然后天使回答的肯定是魔鬼想的错误的答案,所以只要往相反的方向走就可以。不管是问谁,都往相反的方向走。

我想问一下,谁能给我仔细讲解一下物理中的自然坐标系啊?最好举个例子...
显然,自然坐标系中各点的切(法)向坐标轴一般不会同向。研究曲线运动时往往沿质点的运动轨迹建立自然坐标系,一条公路可以看成一个自然坐标,公路旁的里程牌可视为坐标点,零公里里程牌可视为坐标原点。

谁可以帮我讲解一下《儒林外史》啊?
进士王惠被任命为南昌知府,他上任的第一件事,不是询问当地的治安,不是询问黎民生计,不是询问案件冤情而是查询地方人情,了解当地有什么特产,各种案件中有什么地方可以通融;接着定做了一把头号的库戥,将衙门中的六房书办统统传齐,问明了各项差事的余利,让大家将钱财归公。从此,衙门内整天是一片戥子声、算盘声、...

急问!谁能帮忙讲解下:93年闰三月初五出生的塔罗牌是???
〖阳历〗:公元 1993年04月26日 金牛座 〖阴历〗:农历 一九九三年闰三月初五日 生肖属鸡 〖灵魂塔罗牌〗:战车 〖个性塔罗牌〗:倒吊人 生日塔罗牌组合透析 (战车 & 倒吊人) 你是个深懂权衡利害得失的人,外表看起来非常大胆,但是在行动前却早已经过相当谨慎冷静的思考,最后才作出决定,比...

谁可以帮我讲解一下爱情方面的问题?
没有人是故意要变心的,他爱你的时候是真的爱你, 可是他不爱你的时候也是真的不爱你了, 他爱你的时候没有办法假装不爱你; 同样的,他不爱你的时候也没有办法假装爱你。 当一个人不爱你要离开你, 你要问自己还爱不爱他(她), 如果你也不爱他(她)了,千万别为了可怜的自尊而...

我问女朋友对我什么感觉,她说她也不知道,谁能帮忙解释一下啊?
时间这么短,没感觉很正常的,像这种经常一年见不到几次面的异地恋,我看你最好还是多花点心思,主要还是体现在很关心她方面上吧,而且还要无微不致的关心.起码要让他对你一种依赖,,像你每天都打电话叫她起床,这点很好,不过也不用总是天天坚持,偶尔一两天不叫,让她知道你的存在.让她也能关注到你....

谁能帮我讲解一下硫和磷元素的成键规律,耐心听我问问题的才给分
4,6,成键数与化合价有关,当硫为单质或硫化物(如H2S)时为2,当硫为四价时,成键为4,如SO2 当硫为6价时,成键为6,如SO3,硫酸等 P成键数与化合价相关性不大,一般是3,4,5个键 -3价PH3,+3价PCl5,+3价偏磷酸是3个键,0价白磷是4个键,+5价PF5,P2O5,磷酸是5个键 ...

有谁能帮忙解释一下我的房贷利率计算问题
式中:月利率=年利率\/12,n表示贷款月数,^n表示n次方,如^360,表示360次方(贷款30年、360个月)1、如果按最新(7月7日)的贷款利率7.05%计算:400000*7.05%\/12*(1+7.05%\/12)^360\/[(1+7.05%\/12)^360-1]=2674.66元 2、按你提供的月供2994元,利率应该是上浮了:A、如果...

谁可以帮忙介绍一下 doc系统 ?
比较长 希望可以帮到你  DOS实际上是Disk Operation System(磁盘操作系统)的简称。顾名思义,这是一个基于磁盘管理的操作系统。与我们现在使用的操作系统最大的区别在于,它是命令行形式的,靠输入命令来进行人机对话,并通过命令的形式把指令传给计算机,让计算机实现操作的。DOS是1981~1995年的个人...

我向一个女孩子表白了,反映好奇怪啊。谁能帮忙解释下?
她好像觉得你跟谁有一腿所以不会答应你,也可能是你跟谁在一起被她知道了,然后她就会问你家那个某某,会不会生气啊 , 所以 可能就是觉得你表白只是纯属的开开玩笑--。记得采纳啊

顺河回族区18239333056: 请问谁能解释一下这个程序吗?
凭郭风湿: setw(5)是为让输出隔开,如第一个3,前面有4个空格,12前面有3个空格. *p++是先输出p指向的值,之后地址加一,指向下一位.可以等价于,a[i] i由for循环增加

顺河回族区18239333056: 帮我讲解一下这道程序题
凭郭风湿: 定义两个正整数a、b,输入一个正整数将变量存储的数据以%d的格式输入,并将a的立方加1赋值给b,如果b除3的余数为0,则b=b/3,以下相同.最后另起一行输出(100*a-b)/2.如果是函数的话,返回值为0.

顺河回族区18239333056: 小弟初学C语言,现在卡在函数那一章,哪位朋友能给我讲解下这道程序
凭郭风湿: 当然有 他是返回一个float型 的值 main函数中不是有个要打印出y值吗 fac返回的f值 传给y这样就打印出Y值了 举个简单的例子 1现在在你自己家里有一个口袋 刚开始口袋里什么东西都没有 口袋里的苹果数我用int a;表示 2你时不时的想去看那个口袋里面的苹果数量 下面那个fac就相当于有人放进去了一个苹果然后他告诉你这个口袋中苹果的数量有一个 然后你就知道苹果数量了对吧

顺河回族区18239333056: 谁可以帮我看一下这道程序呢...
凭郭风湿: 首先,我对楼主的程序提几个建议 1.楼主的程序里的函数无任何作用,只为满足老师的要求而强加的,没半点实际意义,纯属累赘 2.楼主的程序结构混乱,if后面的语句最好用括号包起来,就算是单句,其次,每个语句最好独立成行 else printf...

顺河回族区18239333056: 谁帮我讲解下这道VBA编程题的思路和答案? -
凭郭风湿: 总体思路:用循环结构,判断数值是否3的倍数,如果是,就把它保存起来及累加起来,如果不是,跳入下一个数字 Private Sub trad() 定义一个叫trad()的过程 Dim M As Integer, N As Integer, S As Integer 定义M,N,S为整型变量 Dim K As ...

顺河回族区18239333056: 帮我解释一下这个C语言程序 谢谢!!!
凭郭风湿: 这道题考点是运算符优先级,-负号 ++的运算符优先级相等 表达式 x=-m++;先试图将m付给x 然后加1,但是前有有个负号 所以当负号和n进行运算的时候,x已经变成4了, 所以x=-4 表达式 x=x+8/++n;其中n先加1等于4 然后去除8 等于2 所以-4+2等于-2

顺河回族区18239333056: 谁帮我解决下这道C语言的题 并且帮忙讲解下 -
凭郭风湿: #include<stdio.h> void main() { char ch; int sum1=0,sum2=0,sum3=0; while((ch=getchar())!='\n') { if(ch>='A'&&ch<='z') //是大写A到小写z sum1++; else if('0'<=ch&&ch<='9') sum2++; else sum3++; } printf("字母数:%d,数字数:%d,其他字符数:%d",sum1,sum2,sum3); }

顺河回族区18239333056: 有谁可以帮我解释下这道C语言的函数嵌套求平方和的程序吗!!!谢谢.. -
凭郭风湿: 主要就是用fun2求平方 再相加

顺河回族区18239333056: C语言 能讲一下这道题的解题过程吗? -
凭郭风湿: scanf("%c") 的时候,是以回车作为结束符的,所以你输入Fig flower is red 的时候,前7个字符赋值给了b数组,替代了b数组的前7个字符.剩下的wer is red则给了a数组,并且它是0结尾的了.所以a数组成了wer is red

顺河回族区18239333056: 谁能帮我讲解下这道程序的过程及结果为什么等于6
凭郭风湿: 你写了这几行代码 跟最后的printf有关系的 只有 int a[]={2,4,6,8,} C数组下标是 0开始 a[0]对应的是2 a[2]那对应就就是6了

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网