fp=fopen(FileName,"r"); //以读的方式打开文件
20: if (fp!=NULL){ //文件不为空
21: lineno=1; //这是初始化 ,文件元素个数
22: flag=1; //标记
23: while(1){
24: c=fgetc(fp); //在文件里以一个char类型取数据
25: if(c==EOF) break; //文件结束了
26: if(flag==1){ //
27: printf("%3d:",lineno);
28: lineno++; //累加
29: flag=0; //flag 就像是一个锁一样的,一会打开一会关闭
30: }
31: if(c=='\t'){ //如果是'\t' 输入" "
32: printf(" ");
33: }else{
34: printf("%c",c);
35: }
36: if(c=='\n'){ //如果换行符,flag置1
37: flag=1;
main()
{
int i;//定义一个整型变量i
for(i=3;i<10;i++) /循环输出3-10(不包括10),能被4整除的不被输出(即输出35679)/
{
if(i%4==0)//判断能不能被4整除
continue;//可以被整除则跳过此次循环,比如当i=4的时候,判断能被4整除了,则执行到\
//执行到continue的时候,将跳过接下来要执行的,直接到i=5的情况。(和break区别)
else
printf(“%d,”,i);//当i不被4整除,则输出。
}
}
//结果为:35679
//-----------------------------------------------------------
main(){ int x;
x=3;//初始化x = 3
do
{ printf(“%d”,x--);//先输出X的值(3),再将X-1
}while(!x); //X 不等于0,所以!x 等于0,即跳出循环
}
//结果为:3
//-----------------------------------------------------------------
main()
{ int a=8 , b=1;//定义并初始化a,b
a=a+b;//a = 9
b=ab;//b = 9
printf("%d,%d",a,b); }
//结果为:9,9
//---------------------------------------------------------------------------
fun(int a, int b)//定义一个函数,传入a,b两个参数(其实就是比较两个数的大小,把大的返回)
{ if(a>b) return (a);//如果a>b,就返回a
Else return (b); }//否则(即b>=a),就返回b
main()
{ int x=3,y=8,z=6,r;
r=fun(fun(x,y),2z);//分两步,第一,比较x和y,得到xy中最大的(显然y比较大为8),第二,把x,y中最大的(y)和2Z比较(即8和26比较),显然2z比较大为12,所以r=12
printf(“%d\n”,r); }
//结果为:12
//------------------------------------------------------------------------
main()
{ int n;
For(n=3; n<=10; n++)
{ if(n%5= =0)break;//break和continue的区别来了,break是直接跳出循环,continue是只跳过这次玄幻,比如n=5的时候,正好可以被5整除等于0,则执行break;就直接跳出循环了,而continue,则还会执行n=6,n=7的情况
Printf(“%d”,n); } }
//结果为:34
;定义堆栈段
stack segment stack
db 100 dup()
stack ends
;定义数据段
data segment
hello db "hello,world!",0dh,0ah,"$"
xxx db ()
data ends
;代码段
code segment
assume cs:code,ds:data,ss:stack ;指定段地址
start:
;下面两行是设置数据段地址
mov ax,data
mov ds,ax
;下面两行是键盘输入并回显,将输入存到al中
mov ah,1
int 21h
;将al存到xxx中
mov xxx, al
; 以下几行是回车换行
mov ah,2
mov dl,0ah
int 21h
mov ah,2
mov dl,0dh
int 21h
;输出xxx
mov ah,2
mov dl,xxx
int 21h
总体作用就是输入一个字符回显以后再显示出来,
DATAS
SEGMENT
;数据段定义伪指令,数据段名为DATAS
STRING
DB
'Hello
World!',13,10,'$'
;一个字符串以$结尾
DATAS
ENDS
;数据段结束
CODES
SEGMENT
;代码段定义
ASSUME
CS:CODES,DS:DATAS
;利用ASSUME伪指令指定某个段分配给哪一个寄存器,它并没有把段地址装入段寄存器,所以一般在代码段开始处,还必须把段地址装入相应的段寄存器(如DS)中。但是代码段和堆栈段不需要这样,CS、SS是由系统负责设置的
START:
MOV
AX,DATAS
;取段地址送入AX
MOV
DS,AX
;把段地址装入DS
LEA
DX,STRING
;LEA装入有效地址。将STRING的有效地址(或段内偏移量)送入DX,此时DX就指向了STRING所对应的一个存储单位
MOV
AH,9
INT
21H
;调用21H中断的9号功能。9号功能用于显示字符串,即在屏幕上显示由DX指向的字符串(即STRING指向的字符串),汇编语言规定,9号功能显示符串以'$'
结束。13,10(0DH,0AH)是回车和换行符的ASCII码。
MOV
AH,4CH
INT
21H
;调用21H中断的4CH功能,即返回到DOS
CODES
ENDS
;代码段结束
END
START
;从START处开始执行指令
总结:该程序就是将以STRING为首地址的字符串利用9号功能号输出显示在屏幕上,即在屏幕上显示Hello
World!并回车换一行。通常我们输出完一串数据或者字符串都是需要回车换一行的。
注:21H中断9号功能的使用要点
1、被显示的字符串应该以'$'作为结束符号
2、把要被显示字符串所在的首地址赋给DX
第一个是常开触点X0,意思是当X0为ON,导通运行后面的指令,X0为OFF,不导通不运行后面的指令。下面的T0,M1,M8002等常开触点都是。
第二个是常闭触点T1,意思是当T1为ON,不导通不运行后面的指令,T1为OFF,导通运行后面的指令。下面的M1常闭触点也是。
第三个T0 K2是定时器,定时2100ma后下面的T0触点为ON。下面的T1 K1同理。
C0 D0是计数器,意思是C0计数到D0个后,C0触点为ON,(这里这个D0不知道有什么意义,因为这个程序中把D0固定成4了,所以C0是计数4个,那可以直接用 C0 K4呀,为啥要用D0呢,还得多个MOV赋值)。
[= C0 K1]的意思是当C0中的数据等于1时 导通运行后面的指令。下面的同理。
(Y0)的意思是输出Y0,下面的同理。
RST C0是将C0复位成0,即复位了C0触点,也复位的C0的计数个数。下面同理。将M1复位0,也就是复位成OFF。
MOV K4 D0的意思是将十进制常数4赋值给寄存器D0。
上升沿触点M0,意思是当M0由OFF变成ON时发出一个扫描周期的脉冲。
SET M1是将M1置位,执行后M1为ON。
下降沿触点X,意思是当X0由ON变成OFF时发出一个扫描周期的脉冲。
望采纳。。。。。。
以上就是关于c语言谁给我解释解释 19行到37行的 每一步的意思啊 这是一个行数表示的程序全部的内容,包括:c语言谁给我解释解释 19行到37行的 每一步的意思啊 这是一个行数表示的程序、(入门级)C语言程序 看不懂,求详细每行注释、帮忙下解释下下面汇编程序每一行代码功能等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)