一、判断1-100里的数那个是素数,并确定数目;
1.定义输入变量,输入所要判断的数值;
int n = 0;
scanf("%d", &n);
2.数值进入函数,进行判断;
sushu(n);
3.开始判断,将数值与2到所输数值-1的数取模,如果全部不能整除,falg回增加到所判断的数值,则是素数;
void sushu(int x)//函数是为了一个特殊功能
{
int k = 0;//注意变量初始化
int cunt = 0;
while (x <= 100)
{
int flag = 0;
for (k = 2;k <= sqrt(x);k ++)
{
if (x % k == 0)
{
flag++;
break;//直接跳出for循环;
}
else
{
}
}
if (flag != 1)
{
printf("%d是素数\n", x);
cunt++;
}
x++;
}
printf("共%d个素数\n", cunt);
}
4.每打印一个素数,计数器加一;
if (x % k == 0)
{
flag++;
break;//直接跳出for循环;
5.打印所有的素数和个数;
if (flag != 1)
{
printf("%d是素数\n", x);
cunt++;
}
x++;
}
printf("共%d个素数\n", cunt);
6.完整代码;
void sushu(int x)//函数是为了一个特殊功能
{
int k = 0;//注意变量初始化
int cunt = 0;
while (x <= 100)
{
int flag = 0;
for (k = 2;k <= sqrt(x);k ++)
{
if (x % k == 0)
{
flag++;
break;//直接跳出for循环;
}
else
{
}
}
if (flag != 1)
{
printf("%d是素数\n", x);
cunt++;
}
x++;
}
printf("共%d个素数\n", cunt);
}
int main()
{
int n = 0;
scanf("%d", &n);
sushu(n);
return 0;
}
7.运行结果;
二、判断1000-2000的闰年,并打印出个数;
1.定义计数变量和年份变量;
int y = 0;
int cunt = 0;
2.使用for循环得出1000-2000年份;
for (y = 1000;y <= 2000;y++)
3.将所输出的年份进入判断函数,是闰年则返回1,打印出年份,计数变量加1;
if (1 == panduan(y))
{
printf("%d是闰年\n", y);
cunt++;
}
}
printf("共%d个闰年\n", cunt);
4.判断函数使用逻辑运算符来判断闰年的条件是否成立;
int panduan(int x)
{
return (((0 == x % 4) && (0 != x % 100)) || (0 == x % 400));
}
5.完整代码;
int panduan(int x)
{
return (((0 == x % 4) && (0 != x % 100)) || (0 == x % 400));
}
int main()//先写函数怎么应用,再去开发
{
int y = 0;
int cunt = 0;
for (y = 1000;y <= 2000;y++)
{
if (1 == panduan(y))
{
printf("%d是闰年\n", y);
cunt++;
}
}
printf("共%d个闰年\n", cunt);
return 0;
}
6.运行结果;
三、函数实现二分查找;
1.定义顺序数组;输入所要找的数;
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//找到了返回下标;找不到返回-1;
int k = 0;
2.算出最右边值的下标;
int sz = sizeof(arr) / sizeof(arr[0]);
3.进入二分函数,输入参数;
int back = erfen(arr,sz,k);
4.定义初始的left和right,mid;
int left = 0;
int right = sz - 1;
int mid = (left + right) / 2;
5.进入while循环,条件是left<=right,进行判断,并根据判断结果对left right的值进行调整;
while (left<=right)
{
/*int mid = (left + right) / 2;*///防止left+right过大导致溢出;
int mid = left + (right-left)/ 2;
if (k == arr[mid])
{
return mid;
}
else if (k > arr[mid])
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
6.找到或找不到都会返回值,根据返回值,打印相应内容;
if (-1 != back)
{
printf("下标是%d\n",back);
}
else
{
printf("找不到\n");
}
7.完整代码;
int erfen(int* arr,int sz,int k)//函数里只能使用自己函数创建和外部传入的变量;
{
int left = 0;
int right = sz - 1;
int mid = (left + right) / 2;
while (left<=right)
{
/*int mid = (left + right) / 2;*///防止left+right过大导致溢出;
int mid = left + (right-left)/ 2;
if (k == arr[mid])
{
return mid;
}
else if (k > arr[mid])
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
return -1;//找不到就跳出循环,返回-1;
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//找到了返回下标;找不到返回-1;
int k = 0;
scanf("%d", &k);
int sz = sizeof(arr) / sizeof(arr[0]);
int back = erfen(arr,sz,k);//穿了三个参数;
if (-1 != back)
{
printf("下标是%d\n",back);
}
else
{
printf("找不到\n");
}
return 0;
}
8.输出结果;