C语言知识点笔记3(例题合集)
此笔记是我考研备考专业课期间听课的一些C语言知识点混记,可能会有一点乱,有需要的朋友们可以翻阅一下,有利于巩固C语言知识点!
本集为例题合集,推荐大家认真看完并上机敲一下
1🚩 例题1:用函数判断100~200之间的素数:
#include <math.h>
int is_prime(int n)
{
//2~n-1之间的数字
int j = 0;
for(j=2;j<=sqrt(n);j++)
{
if(n%j==0)
return 0;
}
return 1;
}
int main()
{
//100~200之间的素数
int i = 0;
int count = 0;
for(i=100; i<=200; i++)
{
//判断i是否为素数
if(is_prime(i)==1)
{
count++;
printf("%d", i);
}
}
printf("\n count = %d\n",count);
return 0;
}
2🚩 例题2:用函数判断是不是闰年:
//is_leap_year如果判断是闰年返回1;不是闰年返回0。
//一个函数如果不写返回类型,默认返回int类型
int is_leap_year(int n)
{
if((n%4==0&&n%100!=0) || (n%400=0)) //1、能被4整除且不能被100整除 2、能被400整除
return 1;
else
return 0;
}
int main()
{
int y = 0;
for(y=1000;y<=2000;y++)
{
if(is_leap_year(y)==1)
{
printf("%d ",y);
}
}
return 0;
}
3🚩 例题3:写一个函数,实现一个整型有序数组的二分查找:
int binary_search(int a[],int k, int s)
{
int left = 0;
int right = s - 1;
while(left<=right)
{
int mid = (left +right) / 2;
if(a[mid] > k)
{
right = mid - 1;
}
else if(a[mid] < k)
{
left = mid + 1;
}
else
{
return mid;
}
}
return -1;//找不到了
}
int mian()
{
int arr[]={1,2,3,4,5,6,7,8,9,10};
int key = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
//找到了就返回找到的位置的下标
//找不到返回-1
int ret = binary_search(arr, key, sz);
//数组arr传参,实际传递的不是数组的本身;仅仅传过去了数组首元素的地址
if(-1 == ret)
{
printf("找不到\n");
}
else
{
printf("找到了,下标是:%d\n",ret);
}
return 0;
}
4🚩 例题4:写一个函数,每调用一次这个函数,就会将num的值增加1。
void Add(int *p)
{
(*p)++;
}
int main()
{
int num = 0;
Add(&num);
printf("%d\n", num);//1
Add(&num);
printf("%d\n", num);//2
Add(&num);
printf("%d\n", num);//3
return 0;
}
5🚩 例题5(递归):接受一个整型值(无符号),按照顺序打印它的每一位。例如:输入1234,输出 1 2 3 4
void print(unsigned int n)
{
if(n>9)
{
print(n/10);
}
printf("%d ", n % 10);
}
int main()
{
unsigned int num = 0;
scanf("%u", &num);//1234 &u输入无符号整型
//递归-函数自己调用自己
print(num);//print函数可以打印参数部分数字的每一位
return 0;
}
6🚩 例题6(递归):编写函数不允许创建临时变量,求字符串的长度
int my_strlen(char* str)
{
//递归
if(*str != '\0')
return 1+my_strlen(str+1);//加1对应下一个字符的地址
else
return 0;
}
int main()
{
char arr[] = "bit";
//['b']['i']['t']['\0']
//模拟实现一个strlen函数
printf("%d\n", my_strlen(arr));
return 0;
}
7🚩 例题7(递归):计算阶乘
int Fac(int n)
{
if (n<=1)
return 1;
else
return n*Fac(n-1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fac(n);
printf("%d\n", ret);
return 0;
}
8🚩 例题8. 求第n个斐波那契数: 1 1 2 3 5 8 13 21 33 55....
int Fib(int n)
{
//递归可以求解,但是效率太低
法一:
if(n<=2)
return 1;
else
return Fib(n-1)+Fib(n-2);
法二:
int a = 1;
int b = 1;
int c = 1;
while(n>2)
{
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
scanf("%d",&n);
int ret = Fib(n);
printf("%d\n", ret);
return 0;
}
9🚩 例题9:计算1/1-1/2+1/3-1/4....+1/99-1/100的值,打印出结果
int main()
{
int i = 0;
double sum = 0.0;
int flag = 1;
for(i=1;i<=100;i++)
{
sum += flag*1.0/i;
flag = -flag;
}
printf("%lf\n",sum);
return 0;
}
10🚩 例题10:求十个整数中最大值
int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int max = arr[0];
int i = 0;
for(i=0;i<10;i++)
{
if(arr[i]>max)
{
max = arr[i];
}
}
printf("%d\n",max);
return 0;
}
11🚩 例题11:输出乘法口诀表
int main()
{
int i = 1;
//行数
for (i=1;i<=9;i++)
{
//打印一行
int j = 0;
for(j=1; j<=i; j++)
{
printf("%d*%d=%-2d",i,j,i*j);
}
printf("\n");
}
return 0;
}