本文通过一个个实际案例程序来讲解C语言。
研究案例一
工具: Turboc C v2.0,Debug,MASM v5.0,NASM
实例C程序:
/* example1.c */
char ch
int e_main()
{
e_putchar(ch)
}
目标内容:C语言调用函数的方法与细节
我们使用的C编译器是16位的Turboc C v2.0,它生成的是16位的代码,比较简单,方便我们来研究。同时我们也需要用到DOS下的DEBUG来进行反汇编。由于我们很多案例中的程序并不是完整的C程序,所以Turboc下的Tlink并不能为我们生成目标程序,所以我将使用MASM中的link.exe,同时里面的exe2bin.com也可以为我们把exe文件转换成bin文件。
这个程序没有main函数,我们用e_main来代替main函数.这样我们能避开C语言对main函数进行一系列处理的代码.同样,我们也用e_putchar()来代替我们平常使用的putchar().这里"e"的意思就是"example"。
没有了main函数,我们的C程序就没有了入口,所以在开始编译这段C代码之前,我还得写几行简单的汇编代码,通过它来作为我们程序的入口。
C程序的入口 start.asm
[BITS 16]
[global start]
[extern _e_main]
start:
call _e_main
这个程序应该是把十进制数
转换成
二进制数
输出
#include
//
头文件
void
main()
{
int
a,b[10],c,i=0
//
a存储待转换的十进制数,b[10]存储转换后的二进制位,
//
c
是存储
,
printf("输入一个整数\n")
scanf("%d",&a)
//
输入需转换的十进制数
while(a!=0)
//
只要a不为零,就继续转换
{
c=a%2
//
把a除以2
的余数赋值给c
a=a/2
//
把商存入a进行下一次循环
b[i]=c
//
把余数存到数组中作为二进制中的一位
i++
}
for(i>0i--)
printf("%d",
b[i-1])
//反向输出余数,即得到二进制
例如输入4
因为4
!=
0
4
/
2
=
2((商=a)...........0(余数=c=b[0])
因为2
!=
0
2
/
2
=
1((商=a)...........0(余数=c=b[1])
因为1
!=
0
1
/
2
=
0((商=a)...........1(余数=c=b[2])
因为
0
=
0
结束循环输出
b[2]
b[1]
b[0]
即
100,也就是二进制的
4
题目01:在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同的单词。
直接编译,程序执行结果如下图所示:
题目02:编写一个int string_len(char *s),返回字符串s的字符长度(不包括\0)。
直接编译,程序执行结果如下图所示:
扩展资料:C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。
尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)