
struct person st[MAX];
int n=0;
/
@brief
选择排序:
假定数组中存在一个分界值,
分界值前面的为已排序部分,分界值后面为未排序部分(最初已排序部分为0个,所以第0个数据就是分界值)。
选择排序外层循环进行n-1次,每次选出未排序部分的最小值来与分界值交换。
这样当前的分界值就加入到“已排序部分”,分界值位置向后移动一个。
当分界值到达n-1时,排序完成。
@param 无
无参数;
隐含入参:全局变量struct person数组st
隐含入参:全局变量n,表示数组st中数据的个数
@return void
/
void sort()
{
struct person temp; / 用于交换的临时变量 /
int i,j,k; / i,j为循环变量,k用于记录未排序部分和分界值的最小值的下标 /
/ 以下的“最小值”均指“未排序部分和分界值”中的最小值 /
for(i=0;i<n-1;i++) / 外层循环n-1次,i就是分界值下标; 找到新的最小值之后,i++,表示分界值后移 /
{
k=i; / k为最小值下标,默认分界值最小 /
for(j=i+1;j<n;j++)/ 对所有未排序部分进行查找 /
if(st[k]no>st[j]no) / 如果有比当前最小值更小的,就把k改为那个更小值的下标 /
k=j;
if(k!=i) / 如果k==i,表示分界值就是最小值,则不用交换;k!=i则需要交换 /
{
/ 这里进行交换(分界值与最小值) /
temp=st[k];
st[k]=st[i];
st[i]=temp;
}
}
}
#include <cstdio>
void main()
{
int stre(char[]);//函数声明
char str[10], p = str ;//定义一个指向char类型的指针,其赋初值,使其指向数组str的首个元素
gets(p);//从终端获取一串字符,长度要小于10
printf("%d\n", stre(p));//打印stre的返回值
}
int stre(char str[])
{
int num = 0 ;
while( (str + num) != '\0' ) num ++ ;//这句相当于while(str[num]!='\0')num++;统计字符串字符的个数
return (num);
}
#include <reg52h>//头文件
sbit LED = P3^0;//位定义 指定P3^0口为led的输出口,并把P3^0的名称用LED来代替
unsigned char a=0;//定义变量a,并把a的初值设为0
void main (void)
{
TMOD =0x01; //设置定时器0(T0)的模式为1
TH0 =0xd8; //给定时器TH0的高8位赋初始值
TL0 =0xf0; //给定时器TL0的低8位赋初始值
TR0 =1; //启动T0定时器
IE0 =1; // 开放外部中断0
TF0 = 0;//把定时器T0的中断请求标志清零
while (1) //while循环 如果while (1)中的1不为0,那么while 的顺环将一直持续下去, 由于去由于while (1)中所带的参数1是常量 永远不可能为0,所以这个顺环将永远持续下去;
{
if (TF0 != 0) //这部分其实就是一段延时程序,如果TF0=1,也就是当定时器0溢出时,TF0将变成1,那么执行执行下面的语句
{
a++; // a=1 //变量a自增1;相当于a=a+1
TH0 =0xd8;//给定时器T0高位赋初值
TL0 =0xf0;//给时器T0低位赋初值 TF0 = 0;
if (a >50)//如果a>50
{
a=0; //如果a>50 那么把a的值清零 为下一次循环做好准备
LED =~LED;//把LED取反因为开始定义了sbit LED = P3^0,相当于把P3口的0位取反(这句话也可以这样理解:如果原来是+1 那么现在要变成-1的意思,反之也一样)
}
}
}//程序返回到大顺环的入口处
}
这就是C语言的代码,没有语法错误,可以成功运行
下面是我的注释
#include <conioh>
#include <stdioh>
//判读是否是字母的函数
int ischar(char ch)
{
return ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) 1 : 0;
}
//主函数
int main(int argc, char argv[])
{
int charnum[256];//存放对应字符的个数,下标与字符的ASCII码对应
int charcount = 0;//计算字符个数
int words = 0;//计算单词数
int isword = 0;//是否是单词
int maxlen[2] = {0, 0};//记录单词的最大长度
int cumax = 0;//用来做下标逻辑的
char ch;//读取到的字符
char longword[2][256];//存放 单词,用来找出最长的单词
int i;//循环变量
FILE fp1;//文件指针
char srcfilename[255];//文件名
printf("input file name: ");//输入用户名
gets(srcfilename);//获取用户名
//数组值全部初始化为0
for (i = 0; i < 256; i++)
{
charnum[i] = 0;
}
//打开文件,失败则返回
if ((fp1 = fopen(srcfilename, "rb")) == NULL)
{
printf("can not open source file\n");
return 1;
}
//循环读取文件内容,直至文件结尾
while (!feof(fp1))
{
ch = fgetc(fp1);//读取
charnum[ch]++;//对应字符的个数加1
printf("%c", ch);//输出该字符
if (ischar(ch))//是否是字母
{
if (isword == 0)//是单词
{
words++;//单词数加1
isword = 1;//单词状态置为1,表示正在单词中读取字符
}
charcount++;//字母计数加1
longword[cumax][maxlen[cumax]++] = ch;//2维数组,存储的长度小的那个重新存储下一个单词
}
else
{//非单词
isword = 0;//单词状态置为0,即一个单词已读取结束
longword[cumax][maxlen[cumax]] = '\0';//给保存单词的加上字符串结束标记
if (maxlen[cumax] > maxlen[1 - cumax])//判断保存单词的二维数组的长度,短的用来存储下一个单词
cumax = 1 - cumax;
maxlen[cumax] = 0;//短的长度置为0
}
}
fclose(fp1);//关闭指针
//输出
printf("\n\n\nwords: %d\n", words);
printf("tab: %d\n", charnum[9]);
printf("space: %d\n", charnum[32]);
printf("total charater: %d\n", charcount);
printf("the longest word: %s\n", longword[1 - cumax]);
printf("length of the longest word: %d\n", maxlen[1 - cumax]);
return 0;
}
汇编语言的注释是每行从分号“;”开始的,分号之后的内容都属于注释。一般而言,汇编语言的注释在以下几个地方:
1、程序的最前面,注释内容一般说明该程序总的说明,解释程序的主要功能,程序的版本号,程序的修改日志,程序的编制人等等
2、子程序的前面,一般说明该子程序或函数完成的功能,输入参数,输出参数,影响的标志位等等。
3、指令行的后面,注释该行语句的功能。
比如以下简单程序的注释。
;--------------------------------------
;该程序完成一个LED灯的闪烁
;编制时间:XXXXX
;完成人:XXXX
;--------------------------------------
ORG
0000H
LJMP
MAIN:
ORG
0030H
MAIN:
CLR
P10
;led置低
LCALL
DELAY
;延时
SETB
P10
;LED置高
LCALL
DELAY
;延时
SJMP
MAIN
;转MAIN循环
;------------------------------
;延时子程序
;输入参数:无
;输入参数:无
;------------------------------
DELAY:
MOV
R2,#200
D1:
MOV
R3,#250
DJNZ
R3,$
DJNZ
R2,D1
RET
END
以上就是关于懂C语言帮忙注释下这个程序!全部的内容,包括:懂C语言帮忙注释下这个程序!、请高手给下面程序给点详细的注释,多谢!、帮我注释一下这段程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)