1、冒泡排序:
void BubbleSort(int arr[], int len)
{
for (int i = 0; i < len-1; i++)
{
for (int j = 0; j < len - 1 - i; j++)
{
if (arr[j] > arr[j+1])
{
Swap(&arr[j], &arr[j+1]);
}
}
}
}
2、字符串拷贝函数strcpy实现:
char * strcpy(char * dest,const char * src)
{
if((dest==NULL) || (src==NULL))
return NULL;
char * tmpdest=dest;//保存目标字符串首地址
const char * tmpsrc=src;
while((*tmpdest++ = *tmpsrc++) != '\0');//把src地址开始的字符串复制到dest开始的字符串中
return dest;//返回目标字符串的地址
}
3、反转字符串strcpy实现:
char *revstr(char* str)
{
char *start=str;//start指向字符串的开始位置
char *end=str+strlen(str)-1;//end指向字符串的结束位置
char tmp;
if(str != NULL)
{
while(start < end)//字符串是奇数时候,start会出现等于end,该位置不用交换
{
tmp = *start;
*start++ = *end;//*start++,它的运算顺序是先返回 *start的值,然后start再++。
*end-- = tmp;//*end--,它的运算顺序是先返回 *end的值,然后end再--。
}
return start;
}
}
4、判断内存存储大端小端的程序:
int function()
{
union test
{
int i;
char c;
}tt; //定义一个有两个数据项的联合体,特征就是任何一个元素均是从联合体的基地址开始存储或保存
tt.i=1;
return (tt.c==1);//返回真则为小端模式,返回假则为大端模式
}
5、要求输入一个整数n,(n<=39) ,请你输出斐波那契数列(1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946…)的第n项(从0开始,第0项为0):
//递归版:
int Fib(int n)
{
if (n<=0)
return 0;
else if (n==1 || n==2)
return 1;
else
return Fib(n-1)+Fib(n-2);
}
//动态规划版:
int Fib(int n)
{
if(n <=0 )
return 0;
int first=1;
int second=1;
while(--n > 1)
{
second=first+second;
first=second-first;
}
return second;
}
6、设置绝对地址0x45a8的整形变量的值为0x55aa:
int* p;
p=(int *)0x45a8;
*p=0x55aa;
7、实现函数,输入一个整数,输出该二进制表示中1的个数,例如,把9表示成二进制是1001,有2位是1,因此输出是2:
//思路:把一个整数减1,将得到的整数与原来的整数做 位与 运算,会把该整数最右边的1变成0,
//依次循环,直到整数中所有的1变成0循环结束。则循环执行的次数就是该整数的二进制数中包含的1的个数。
//如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,
//原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。
//例如:10010000 ----> 10001111
int Numberof1(int n)
{
int count=0;
while(n!=0)
{
++count;
n = n & (n-1);
}
return count;
}
8、从键盘输入一个4位数正整数a,使用int进行存储,将该数反序输出到另一个int型变量b中(过程中不使用字符串操作)。例如,若输入的是1357,则输出的是7531。
#include<stdio.h>
void main()
{
int a, b = 0;
printf("请输入一个四位整数:");
scanf("%d", &a);
while (a)
{
b *= 10;//每次将b乘以10 0,7,70,750,7530
b += a % 10;//对输入数取余数,即最后一个数7,将该数与输出数相加,b的第一个数是7,75,753,7531
a /= 10;//取余后,将输入数除以10取整数,即拿到去掉最后一个数的数字135,13,1,0
}
printf("倒序后为:%d\n", b);
system("pause");
}
9、遍历单链表中确定值最大的点
int GetMax(LinkList L)
{
if(L->next == NULL)
return NULL;
LNode *pmax,*p;
pmax=L->next;//假定第一个节点中数据最大
p=L->next->next;
while(p)
{
if(p->data > pmax->data)
pmax=p;//若p值大于max值,则重新赋值
p=p->next;//遍历链表
}
return pmax->data;
}