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

来源:互联网 发布:java中间件 编辑:程序博客网 时间:2024/06/06 08:39

1)掌握折半查找(也叫二分查找)算法。(下面会给出折半查找的例子代码)
2)掌握几个特殊的宏:__func__(表示函数名)、__FILE__(表示文件名)、__LINE__(表示行数)。可以在代码中直接使用printf打印出来。
注意都是两个下划线

3)Int a[10], Int *ptr=a+1; 了解ptr、&ptr、*ptr区别。掌握ptr+4和ptr-1的意义分别是什么?
ptr 表示数组a 的首地址; &ptr表示ptr 指针的地址; *ptr表示a数组的第一个元素的值。
ptr+4 表示数组a的第五个元素a[4], ptr -1所指向的内存空间不属于存放数组的内存空间!

4)int a[10]; a++; 这样写是错误的,对于数组,数组名是一个常量。不能改变其值。在定义一个数组时,要明确指定数组的大小、即下标只能是常量或者常量表达式。在定义时不能使用变量作为数组的下标。

5)strcat库函数(字符串谅解函数)、bzero库函数 与 memset库函数 都可以用于清空数组。bzero  和memset 的使用如下:
char a[20]="helo";
int b[20];

memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
bzero(b,sizeof(b));
bzero(a,sizeof(a));

6)gcc编译选项 –c、-o、-I、-S、-l(链接库)

7)掌握宏的定义和使用,掌握预包含指令#include<> 与#include””的区别。
“ ” 表示用户自定义的头文件 
   掌握条件编译的几种形式:
①。#ifdef命令     (如果标识符被定义过则执行程序段)
#ifdef 标识符
程序段
#endif
②。#ifndef命令 (如果标识符未被定义过则执行程序段)
#ifndef 标识符
程序段
#endif
③。#if命令 (如果常量表达式的值为真则执行程序段)
#if 常量表达式
程序段
#endif
8)as 2.s -o 2.o    把汇编文件转化为.o 文件

编程例题:
1.有17个人坐一圈(编号是0-16),第0号开始的人从1开始报数,凡报道3的倍数的人离开圈子,直到剩下最后一个人,问此人原来是多少号?
int main()
{
int a[17]={0},counter=0,i=0;
int quit=0;

for(;quit!=16;i=(++i)%17)
{
if(a[i] == 1)
continue;
counter++;
if(counter%3 == 0)
{
a[i]=1;
quit++;
}
}

for(i=0;i<17;i++)
{
if(a[i]==0)
break;
}
printf("person:%d\n",i+1);
return 0;
}  


2.打印杨辉三角
#include <stdio.h>
#define N 6
/*打印杨辉三角*/
int main()
{
int a[N][N],i,j;
//特殊元素
for(i=0;i<N;i++)
{
a[i][0]=1;
a[i][i]=1;
}
//其他元素
for(i=2;i<N;i++)
{
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
printf("共%d行的杨辉三角如下:\n",N);
for(i=0;i<N;i++)
{
for(j=0;j<=i;j++)
{
printf("%d\t",a[i][j]);
}
printf("\n");
}


return 0;
}


3.折半查找(熟练掌握)
#include<stdio.h>
#define n 5
int main(void)
{
int num;
printf("please the number you want to search!\n");
scanf("%d",&num);
int a[n]={1,5,9,10,15};
int low=0,end=n-1,temp;
temp=(low+end)/2;
while(1)
{
if(a[temp]<num)
{
low=temp+1;
temp=(low+end)/2;
}
else if(a[temp]>num)
{
end=temp-1;
temp=(low+end)/2;
}
else {
printf("你要找的是第%d个数!",temp+1);
return 0;
}
if(low>=end){
printf("没有找到你要找的数!\n");
return 0;
}
}
}


4.求长方形的周长和面积、用宏定义实现。
#define LENARE(len,area,a,b) len=2*(a+b);area=a*b
int main()
{
int leng,area,l=6,h=7;


LENARE(leng,area,l,h);
printf("%d,%d\n",leng,area);
}


5.在一个数组中,求最大元素在其中的位置。(用指针实现)
int main()
{
int a[5]={1,2,9,4,6};
int *p,*s;

for(p=a,s=a;p-a <5 ;p++)
{
if(*s < *p)
s= p;
}
printf("%d\n",s-a);

}


6.实现strcat函数
char *strcat(char *dest,const char *src)
{
char *dest1=dest;
while(*dest1 != '\0')
dest1++;
while(*src != '\0')
{
*dest1 = *src;
dest1++;
src++;
}
*dest1 = '\0';

return dest;
}
main(void)
{
char a[20]="hello";
char b[10]="zhang";
  strcat(a,b);
printf("%s\n",a);
}
原创粉丝点击