C语言:练习3

简介: C语言:练习3

题一:模拟实现strlen

strlen的模拟(递归实现)

递归和非递归分别实现strlen

非递归

#include <stdio.h>
int my_strlen(char* arr)
{
  int i = 0;
  int count = 0;
  while( *arr != '\0' )
  {
    count++;
    arr++;
  }
  return count;
}
int main()
{
  int n = 0;
  char arr[] = "ab111cdef";
  n = my_strlen(arr);
  printf("%d\n", n);
  return 0;
}

递归

#include <stdio.h>
my_strlen(char* arr)
{
  int count = 0;
  if (*arr == '\0')
  {
    return 0;
  }
  else
  {
    count++;
    count = count + my_strlen(++arr);
  }
  return count;
}
int main()
{
  int n = 0;
  char arr[] = "ab111cdef";
  n = my_strlen(arr);
  printf("%d\n", n);
  return 0;
}

题二:求阶乘

求阶乘

递归和非递归分别实现求n的阶乘(不考虑溢出的问题)

非递归

#include <stdio.h>
int my_factorial(int n)
{
  int i = 0;
  int sum = 1;
  for (i = 1; i <= n; i++)
  {
    sum *= i;
  }
  return sum;
}
int main()
{
  int n = 0;
  int a = 0;
  scanf("%d", &n);
  a = my_factorial(n);
  printf("%d\n", a);
  return 0;
}

递归实现

#include <stdio.h>
int my_factorial(int n)
{
  int sum = 0;
  if (n == 1)
  {
    return 1;
  }
  else
  {
    return sum = n * my_factorial( n-1 );
  }
  
}
int main()
{
  int n = 0;
  int a = 0;
  scanf("%d", &n);
  a = my_factorial(n);
  printf("%d\n", a);
  return 0;
}

题三:递归打印

打印一个数的每一位

递归方式实现打印一个整数的每一位

#include <stdio.h>
void my_int(int n)
{
  int one = 0;
  if ((one = n % 10) > 0)
  {
    my_int(n / 10);
    printf("%d ", one);
  }
  
}
int main()
{
  int n = 0;
  scanf("%d", &n);
  my_int(n);
  return 0;
}

题四:操作数组

使用函数实现数组操作

创建一个整形数组,完成对数组的操作

实现函数init() 初始化数组为全0

实现print()  打印数组的每个元素

实现reverse()  函数完成数组元素的逆置。

要求:自己设计以上函数的参数,返回值。

#include <stdio.h>
void init(int* arr, int sz)
{
  int i = 0;
  for (i = 0; i <sz ;i++)
    *(arr + i) = 0;
}
void print(int* arr,int sz)
{
  int i = 0;
  for (i = 0; i < sz+1; i++)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");
}
void reverse(int* arr, int sz)
{
  int tmp = 0;
  int i = 0;
  for (i = 0; i <= (sz / 2); i++)
  {
    tmp = (arr[i]);
    (arr[i]) = (arr[sz]);
    (arr[sz]) = tmp;
    sz--;
  }
}
int main()
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,0 };
  int sz = 0;
  sz = sizeof(arr) / sizeof(arr[0]) - 1;
  
  reverse(&arr, sz);
  print(&arr,sz);
  init(&arr,sz);
  print(&arr, sz);
  return 0;
}

题五:冒泡排序

冒泡排序

实现一个对整形数组的冒泡排序

#include <stdio.h>
int main()
{
  int arr[] = {3,4,6,8,1,2,5,7,9,0};
  int sz = 0;
  sz = sizeof(arr) / sizeof(arr[0]) - 1;
  int i = 0;
  int j = 0;
  for (j = 0;j <sz;j++ )
  {
    for (i = 0; i < sz-j; i++)
    {
// int isChange = 0;优化路线
      int tmp = 0;
      if (arr[i] >= arr[i + 1])
      {
        tmp = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = tmp;
// isChange = 1; 
      }
    }
//if(!isChange)
//          return;如果后面没有交换说明已经排好了,直接退出,(需要输出就用break)。
    
  }
  for (i = 0; i < 10; i++)
  {
    printf("%d ",arr[i]);
  }
  return 0;
}

题六:交换数组

【一维数组】交换数组

将数组A中的内容和数组B中的内容进行交换。(数组一样大)

#include <stdio.h>
int main()
{
  char arr1[20] = "abcde";
  char arr2[20] = "zxcvb";
  int tmp = 0;
  int right = sizeof(arr1)/sizeof(arr1[0] - 1);
  int len = 0;
  int i = 0;
  for (i = 0; i < right; i++)
  {
    tmp = arr1[i];
    arr1[i] = arr2[i];
    arr2[i] = tmp;
  }
  printf("%s\n", arr1);
  printf("%s\n", arr2);
  return 0;
}
目录
相关文章
|
6月前
|
C语言 数据安全/隐私保护
C语言初阶②(分支语句和循环语句)编程练习
C语言初阶②(分支语句和循环语句)编程练习
56 1
|
6月前
|
算法 C语言 容器
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(上)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
47 0
|
6月前
|
C语言
C语言指针——练习
C语言指针——练习
|
6月前
|
编译器 C语言
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。(下)
C语言进阶⑪(指针上)(知识点和对应练习)回调函数模拟实现qsort。
42 0
|
5月前
|
C语言
C语言练习代码第一篇
C语言练习代码第一篇
|
6月前
|
编译器 C语言 C++
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题
53 2
从C语言到C++⑥(第二章_类和对象_中篇_续)大练习(日期类)+笔试选择题(下)
|
5月前
|
C语言
|
6月前
|
存储 前端开发 算法
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣(下)
从C语言到C++_18(stack和queue的常用函数+相关练习)力扣
21 0
|
5月前
|
编译器 C语言
|
5月前
|
C语言