C语言知识点笔记4
此笔记是我考研备考专业课期间听课的一些C语言知识点混记,可能会有一点乱,有需要的朋友们可以翻阅一下,有利于巩固C语言知识点!
1🚩 例题:计算一个数的每位之和(递归实现)
int DigitSum(int n)
{
if(n>9)
{
return DigitSum(n / 10) + n % 10;
}
else
{
return n;
}
}
int main()
{
int num = 1729;
int sum = DigitSum(num);
printf("%d\n", sum);
return 0;
}
2🚩 例题:编写一个函数实现n的k次方,使用递归实现
double Pow(int n, int k)
{
if(k == 0)
return 1;
else if(k > 0)
return n * Pow(n, k - 1);
else
return 1.0 / (Pow (n,-k));
}
int main()
{
int n = 0;
int k = 0;
scanf("%d %d", &n, &k);
double ret = Pow(n,k);
printf("%lf\n", ret);
return 0;
}
3🚩 字符串的初始化:
int main()
{
char ch1[] = "bit";
//[b i t \0]
char ch2[] = {'b','i','t'};
//[b i t]
printf("%s\n",ch1);//输出bit
printf("%s\n",ch2);//输出bit烫烫烫烫it 没有结束符'\0'
}
4🚩 数组名是数组首元素的地址 △但是有两个例外: (1)sizeof(数组名)--数组名表示整个数组--计算的是整个数组的大小-单位是字节 (2)&数组名-数组名表示整个数组-取出的是整个数组的地址
5🚩 二维数组初始化:
#include <stdio.h>
int main()
{
//创建
int arr1[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};//按顺序存放,第一行1234,第二行5678,第三行9 10 11 12
int arr2[3][4] = {1,2,3,4,5,6,7};//不完全初始化--按顺序存放,后面补0
int arr3[3][4] = {{1,2},{3,4},{4,5}}//每行后面补上两个0
int arr4[][4] = {{1,2},{3,4},{4,5}};//行可以省略,列不能省略。
//打印二维数组
int i = 0;
int j = 0;
for(i = 0; i < 3; i++)
{
for(j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
6🚩 排序算法之冒泡排序※(很重要的排序算法)
void bubble_sort(int arr[],int sz) //形参arr本质是指针
{
int i = 0;
//确定趟数
for(i = 0;i < sz-1; i++)
{
//一趟冒泡排序的过程
int j = 0;
for(j = 0; j < sz-1-i; j++)
{
if(arr[j] > arr[j+1])
{
//交换
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
return;
}
int main()
{
int arr[] = {9,8,7,6,5,4,3,2,1,0};
//改变排序为升序-冒泡排序
//冒泡排序的思想:两两相邻的元素进行比较,并且可能的话需要交换。
//计算数组元素个数
int sz = sizeof(arr) / sizeof(arr[0]);//在外面计算好再传进去
bubble_sort(arr,sz);//数组传参的时候,其实传递的是数组首元素的地址
return 0;
}