最近的一波代码

一.
实现一个变量交换函数,调用它对一个数组进行排序
void swap(int* p1,int* p2);

#include <stdio.h>
#include <stdlib.h>

void swap(int* p1,int* p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}

void sort(int arr[],int len)
{
for(int i=0; i<len-1; i++)
{
for(int j=i+1; j<len; j++)
{
if(arr[i] > arr[j])
{
swap(&arr[i],&arr[j]);
}
}
}
}

int main(int argc,const char* argv[])
{
int arr[20] = {};
for(int i=0; i<20; i++)
{
arr[i] = rand() % 100;
}
sort(arr,20);
for(int i=0; i<20; i++)
{
printf("%d ",arr[i]);
}
}

二.
实现一个函数,该函数计算两个整数的最大公约数、最小公倍数,最大公约数用return返回,最小公倍数使用指针处理
3 6 3
3 7 21
int max_min(int num1,int num2,int* p);

#include <stdio.h>

int max_min_number(int num1,int num2,int* p)
{
int max = 0;
for(int i=1; i<=num1; i++)
{
if(0 == num1%i && 0 == num2%i)
{
max = i;
}
}
for(int i=num1*num2; i>=num1; i–)
{
if(0 == i%num1 && 0 == i%num2)
{
*p = i;
}
}
return max;
}

int main(int argc,const char* argv[])
{
int num1 = 0,num2 = 0;
printf(“请输入两个整数:”);
scanf("%d%d",&num1,&num2);

int min = 0;
int max = max_min_number(num1,num2,&min);
printf("max=%d,min=%d\n",max,min);

}

三.
计算出100~1000之间的所有素数,结果要存储在堆内存中,不能浪费内存
1、先算有多少个,一下申请内存,再计算放入
2、边算边扩充内存

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <stdbool.h>

bool is_prime(int num)
{
for(int i=2; i<=sqrt(num); i++)
{
if(0 == num%i) return false;
}
return true;
}

int main(int argc,const char* argv[])
{
int* arr = NULL,cnt = 0;
for(int i=100; i<=1000; i++)
{
if(is_prime(i))
{
arr = realloc(arr,sizeof(int)*(cnt+1));
arr[cnt++] = i;
}
}

for(int i=0; i<cnt; i++)
{
	printf("%d ",arr[i]);	
}
free(arr);
arr = NULL;
return 0;

}

四.
使用递归模拟n层汉诺塔移动过程

#include <stdio.h>

//s表示起点,t表示中转点,d表示终点
void hanio(int n,char s,char t,char d)
{
if(1 == n)
{
printf(“1 from %c to %c\n”,s,d);
return;
}
hanio(n-1,s,d,t);
printf("%d from %c to %c\n",n,s,d);
hanio(n-1,t,s,d);
}

int main(int argc,const char* argv[])
{
hanio(3,‘A’,‘B’,‘C’);
}

五.
0~9 的全排列

#include <stdio.h>

// n表示全排列的起点下标,m终点下标
void range(int arr[],int n,int m)
{
if(n == m)
{
//当n和m重合时,这次已经排列完毕,输出数组
for(int i=0; i<=m; i++)
{
printf("%d “,arr[i]);
}
printf(”\n");
return;
}
for(int i=n; i<=m; i++)
{
//把第i位的值交换到第0位
int tmp=arr[i]; arr[i]=arr[n]; arr[n]=tmp;
//把除了第0位的数据进行全排列
range(arr,n+1,m);
//把原来第i位的数据交换回第i位
tmp=arr[i]; arr[i]=arr[n]; arr[n]=tmp;
}
}

int main(int argc,const char* argv[])
{
int arr[] = {0,1,2,3,4,5,6,7,8,9};
range(arr,0,9);
}

六.
实现一个函数,判读字符串是否是回文串 “abcba”

#include <stdio.h>
#include <stdbool.h>

bool is_char(char* str)
{
size_t len = 0;
while(str[len]) len++;
for(int i=0; i<len/2; i++)
{
if(str[i] != str[len-i-1]) return false;
}
return true;
}

int main(int argc,const char* argv[])
{
char str[256] = {};
printf("%s\n",is_char(gets(str))?“是回文串”:“不是回文串”);

七.
实现一个函数,把一个数字字符串转换为整数 “12345” 12345

#include <stdio.h>

int str_to_int(const char* str)
{
int num = 0;
while(*str && ‘0’ <= *str && ‘9’ >= str)
{
num = num
10 + *str - ‘0’;
str++;
}
return num;
}

int main(int argc,const char* argv[])
{
char str[256] = {};
printf("%d\n",str_to_int(gets(str)));
printf("%s\n",str);
}

八.
实现一个函数,把一个字符串逆序

#include <stdio.h>

char* reverse(char* const str)
{
size_t len = 0;
while(str[len]) len++;

for(int i=0; i<len/2; i++)
{
	char t = str[i];
	str[i] = str[len-i-1];
	str[len-i-1] = t;
}
return str;

}

int main(int argc,const char* argv[])
{
char str[256] ={};
reverse(gets(str));
puts(str);
}

九.
实现strlen strcpy strcat strcmp 四个常用的字符串处理函数:

#include <stdio.h>
#include <string.h>
#include <assert.h>

size_t str_len(const char* str)
{
assert(NULL != str);
const char* tmp = str;
while(*tmp) tmp++;
return tmp - str;
}

char* str_cpy(char* dest,const char* src)
{
assert(NULL != str && NULL != dest);
char* tmp = dest;
while(*tmp++ = *src++);
return dest;
}

char* str_cat(char* dest,const char* src)
{
assert(NULL != str && NULL != dest);
char* tmp = dest;
while(*tmp) tmp++;
while(*tmp++ = *src++);
return dest;
}

int str_cmp(const char* s1,const char* s2)
{
assert(NULL != s1 && NULL != s2);
while(*s1 && *s1 == *s2) s1++,s2++;
// return *s1 - *s2;
if(*s1 > *s2)
return 1;
if(*s1 < *s2)
return -1;
else
return 0;
}

int main(int argc,const char* argv[])
{
char str[256] = “hehe”;
// printf("%d\n",strlen(NULL));
printf(“strlen:%d\n”,str_len(NULL));
printf(“strcpy:%s\n”,str_cpy(str,“ha”));
printf(“strcat:%s\n”,str_cat(str,“qqq”));
printf(“strcmp:%d\n”,str_cmp(“abd”,“abc”));

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值