目录
写一个可调用的函数,每次调用可使num的值增加1
提示:需用到传址调用(指针)(如果需要可移步我主页第一篇了解传值调用和传址调用的区别)
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void Add (int *p)
{
(*p)++; //不能写成*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;
}
结果为:
判断100到200之间的素数
提示:质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数。根据它的定义,我们可以想到利用C语言中的“%”,取其余数,余数不为0,这个数便是素数,余数为0,这个数便不是素数。
答案如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int sushu (int i)
{
int j = 0;
for (j = 2; j < i ; j++)
{
if ( i%j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int i = 0;
for (i = 100; i <= 200; i++)
{
if (sushu(i) == 1)
{
printf("%d ", i);
}
}
return 0;
}
其结果为:
判断1000到2000年之间的闰年
提示:逢四年为润,逢百年不润,逢四百年再润。
答案如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int runnian(int year)
{
if ( ( (year % 4 == 0) && ( year % 100 != 0) ) || year % 400 == 0)
{
return 1;
}
return 0;
}
int main()
{
int year = 0;
for (year = 1000; year <= 2000; year++)
{
if (runnian(year) == 1)
printf("%d ", year);
}
return 0;
}
其结果为:
利用二分法查找有序数组
二分法查找定义:
二分查找的基本思想是将n个元素分成大致相等的两部分,取a [n/2]与x做比较,如果x=a [n/2],则找到x,算法中止;如果x<a [n/2],则只要在数组a的左半部分继续搜索x,如果x>a [n/2],则只要在数组a的右半部搜索x. 时间复杂度即是while循环的次数。
举例:下图为1到10的有序数组,底下从0到9为其每个所对应的下标,我们利用下标来进行查找我们的数字。当我们要查找数字7时,左下标为0,右下标为9,0+9/2为4.5,取整形为4,下标4对应其数字为5,此时我们发现5要比我们想查找的数要小,我们便可将左下表提至下表4+1=5,右下标为9,在循环此过程直到找到数字7。
那我们便可写出答案:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int serch (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()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int ret = serch(arr, k, sz);
if (ret == -1)
{
printf("找不到指定数字\n");
}
else
{
printf("找到了,下标是:%d\n", ret);
}
return 0;
}
其结果为:
以上便是经典初学者函数题目了!喜欢可以点个小赞!感谢浏览!
(如有问题请大神指出,我会及时纠正!!)