C语言初学函数(练习)

发布时间:2024年01月10日

//练习1:写一个函数在100-200之间可以判断一个数是不是素数

#include<stdio.h>
int is_prime(int z)
{
?? ??? ?int j = 0;
?? ??? ?for (j = 2; j < z; j++)
?? ??? ?{
?? ??? ??? ?if (z % j == 0)
?? ??? ??? ??? ?return 0;
?? ??? ?}
?? ?return 1;
}

int main()
{
?? ?int i = 0;
?? ?for (i = 100; i <= 200; i++)
?? ?{
?? ??? ?if (is_prime(i) == 1)
?? ??? ??? ?printf("%d ", i);
?? ? ?}
?? ?return 0;
}

//练习2:写一个函数判断在1000-2000年之间的闰年

#include<stdio.h>
int is_run_year(int z)
{
?? ?if ((z % 4 == 0) && (z % 100 != 0) || (z % 400 == 0))
?? ??? ?return 1;
?? ?else
?? ??? ?return 0;
}
int main()
{
?? ?int i = 0;
?? ?for (i = 1000; i <= 2000; i++)
?? ?{
?? ??? ?//判断i是否为闰年
?? ??? ?int ret = is_run_year(i);
?? ??? ?if (ret == 1)//这里必须改为ret,不能是is_run_year==1
?? ??? ??? ?printf("%d ", i);
?? ?}
?? ?return 0;
}

//练习3:写一个函数,实现一个整形有序数组的二分查找

#include<stdio.h>
int main() //二分法
{
?? ?int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
?? ?int k = 7;
?? ?int sz = sizeof(arr) / sizeof(arr[0]);
?? ?int left = 0;
?? ?int right = sz - 1;
?? ?int mid = 0;
?? ?while (left <= right)
?? ?{
?? ??? ? mid = (left + right) / 2;//这里不能加int给mid
?? ??? ?if (arr[mid] < k)
?? ??? ?{
?? ??? ??? ?left = mid + 1;
?? ??? ?}
?? ??? ?else if (arr[mid] > k)
?? ??? ?{
?? ??? ??? ?right = mid - 1;
?? ??? ?}
?? ??? ?else
?? ??? ??? ?break;
?? ?}
?? ?if (left <= right)
?? ??? ?printf("找到了,下标是%d", mid);
?? ?else
?? ? ? ?printf("找不到");
?? ?return 0;
}
//二分查找函数版
? ? ? ? ? ? ? ? ?//本质上arr是一个指针
binary_search(int arr[], int k,int sz)
{
?? ?//算法的实现
?? ?
?? ?int left = 0;
?? ?int right = sz - 1;
?? ?while (left<=right)
?? ?{
?? ??? ?
?? ??? ?int mid = (left + right) / 2;
?? ??? ?if (arr[mid] < k)
?? ??? ?{
?? ??? ??? ?left = mid + 1;
?? ??? ?}
?? ??? ?else if (arr[mid] > k)
?? ??? ?{
?? ??? ??? ?right = mid - 1;
?? ??? ?}
?? ??? ?else
?? ??? ?{
?? ??? ??? ?return mid;
?? ??? ?}
?? ?}
?? ?return -1;
}
int main()
{
?? ?//在一个有序数组中查找具体的某个数
?? ?//如果找到了返回这个数的下标,找不到返回-1
?? ?int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
?? ?int k = 7;
?? ?int sz = sizeof(arr) / sizeof(arr[0]);
?? ?int ret= binary_search(arr,k,sz);//在arr里找k。传过去的是arr首元素的地址
?? ?if (ret == -1)
?? ?{
?? ??? ?printf("找不到指定的数字");
?? ?}
?? ?else
?? ?{
?? ??? ?printf("找到了,下标是:%d\n", ret);
?? ?}
?? ?return 0;
}

//练习4:写一个函数,每调用一次这个函数,就会将num的值增加1

#include<stdio.h>
void Add(int* p)
{
? ? (*p)++;
}
int main()
{
? ? int num = 0;
? ? Add(&num);
? ? printf("num=%d\n", num);
? ? Add(&num);
? ? printf("num=%d\n", num);
? ? Add(&num);
? ? printf("num=%d\n", num);
? ? return 0;
}

文章来源:https://blog.csdn.net/2301_80300263/article/details/135508245
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。