嵌入式驱动开发的前期Linux 和 C学习(七)

来源:互联网 发布:淘宝直播加入要钱吗 编辑:程序博客网 时间:2024/05/24 02:15
 
1.注意char s[5]=”hello”;这里是定义并初始化一个字符数组。 当用一个字符串初始化一个数组时,一般将数组定义的大些,以便能装’\0’字符。
如果定义的字符数组长度为5,而赋值时的字符数也为5,那么在打印该字符数组的时候会出现错误!


2.Strcpy(*dest,*src),该字符串拷贝函数是将从src开始的内容拷贝到dest中,直到遇到 '\0' 为止(将 '\0' 拷完后退出循环)。


3.变量的作用域和生命期:局部变量(局部作用域和函数执行完后生命期自动结束)、全局变量(全局作用域和整个进程生命期)、静态局部变量(局部作用域和整个进程生命期)、静态全局变量(作用域限定于本文件,整个进程生命期)。
一个文件中使用其它文件定义的全局变量,必须用extern进行声明。


4.对于函数,默认为全局函数(extern),如果加上一个static,表示函数的作用域为本文件,其它文件对本文件中函数不可见。


5.字符串比较库函数strcmp:两个字符串从第一个字符开始进行比较,一直到遇到两个不同字符(即第一个字符相同才进行第二个字符之间的比较) 或者 两个字符同为‘\0’为止。当两个字符串相等时返回值为0,当第一个字符串大于第二个字符串时返回值为正数,当第一个字符串小于第二个字符串时返回值为负数。


6.当我们在使用递归运算时,如果能够使用循环结构的最好使用循环结构,因为递归运算比循环结构更加浪费内存空间!


编程例题:


1.将一个整数十进制转换为十六进制。
int main()
{
int num,i=0,tmp;
char a[20]={0};
printf("input the num:");
scanf("%d",&num);
do
{
tmp=num%16;    //先取模,再算除法
if(tmp>=10)
{
tmp=tmp+55;  //将大于等于10 的数通过ascii 码转化为大写字母
}else
{
tmp=tmp+48;  //将0 ~ 9 的int类型的数字转为ascii 码所对应的数字
}
a[i++]=tmp;
}while((num/=16)!=0);
for(i=strlen(a)-1;i>=0;i--)
{
printf("%c",a[i]);
}
printf("\n");
}


2.选择排序(掌握该算法)
int main(void)
{
int i,j,k;
int max=0;
int temp;
int a[7]={5,3,2,8,7,11,13};
for(i=0;i<7-1;i++)
{
for( j=1;j<7-i;j++)
{
if(a[j]>a[max])
max=j;
}
if(max != (7-i-1))
{
temp=a[max];
a[max]=a[7-i-1];
a[7-i-1]=temp;
}
max=0;
}
for(i=0;i<7;i++)
{
printf("%d  ",a[i]);
}
putchar('\n');
return 0;
}


3.递归实现加法
int fn(int start,int end)
{
if(start==end) return end;
return start+fn(start+1,end);
}
int main()
{
int s,n;
printf("please input the startnum:");
scanf("%d",&s);
printf("please input the endnum:");
scanf("%d",&n);
n=fn(s,n);
printf("ret is %d\n",n);
return 0;
}
4.实现字符串的比较和拷贝
int strcmp(char a[],char b[])
{
int i;
for(i=0;(a[i]==b[i])&&(a[i]!='\0')&&(b[i]!='\0');i++) ;
return a[i]-b[i];
}
Char* strcpy(char a[],char b[])
{
int i;
for(i=0;b[i]!='\0';i++)
{
a[i]=b[i];
}
a[i] = '\0';
return a;
}
5.将一个字符串循环向右移n位。(了解有哪几种实现方法)
int main(void)
{
int n,i,tmp;
int s[5]={3,5,7,9,1};
printf("please input the n:");
scanf("%d",&n);
n=(5-n%5)%5; //该在n这个标号前面这里分开,n是第2个数组的首元素下标
for(i=0;i<n/2;i++)  //第一个数组排序
{
tmp=s[i];
s[i]=s[n-i-1];
s[n-i-1]=tmp;
}
for(i=0;i<(5-n)/2;i++)    //第二个数组排序
{
tmp=s[i+n];
s[i+n]=s[5-i-1];
s[5-i-1]=tmp;
}
for(i=0;i<5/2;i++)       //整个数组排序
{
tmp=s[i];
s[i]=s[5-i-1];
s[5-i-1]=tmp;
}
for(i=0;i<5;i++)
{
printf("%d ",s[i]);
}
printf("\n");
return 0;
}



原创粉丝点击