一.
实现一个变量交换函数,调用它对一个数组进行排序
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 = num10 + *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”));
}