学习c语言第八天(函数练习)

1.打印100-200之间的素数

#define _CRT_SECURE_NO_WARNINGS
打印100-200之间的素数
循环方法
#include <stdio.h>
#include <math.h>
 int main()
{
	int i = 100;
	while (i<=200)
	{
		int x = 2;
		while (x<=i)
		{
			if (i % x != 0)
			{
				x++;
				if (x == i)
				{
					printf("%d ", i);
				}
			}
			else if(i%x==0)
			{
				break;
			}
		}
		i++;
	}
	return 0;
}
int main()
{
	int i = 0;
	for (i = 101; i <= 200; i+=2)
	{
		int flog = 1;
		int x = 0;
		for (x=2;x<=sqrt(i);x++)
		{
			if (i % x == 0)
			{
				flog = 0;
				break;
			}
		}
		if (flog == 1)
		{
			printf("%d ",i);
		}
	}
	return 0;
}
int sushu(int n)
{	
	int x = 2;
	for (x = 2; x <= sqrt(n); x++)
	{
		
		if (n % x == 0)
		{
			return	0;
		}
		
	}
	return 1;

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

 2.打印1000-2000闰年

//打印1000-2000之间的闰年。能被四整除,但不能被100整除,可以被400整除
//int runnian(int i)
//{
//	if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
//	{
//		return 1;
//	}
    return0;
//}
//int main()
//{
//	int i = 0;
//	for (i=1000;i<=2000;i++)
//	{
//		if(runnian(i))
        {
            printf("%d ",i);
        }
//	}
//	return 0;
//}
int main()
{
	int i = 0;
	for (i = 1000; i <= 2000; i++)
	{

		if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0)
		{
			printf("%d ", i);
		}
	}
	return 0;
}

要保证函数的单一功能

3.写一个函数,实现有序数组二分查找

//写一个函数,实现有序数组二分查找
int tow_serch(int arr[], int len, int k)
{
	int left = 0;
	int right = len - 1;
	while (left<=right)
	{
		int mid = left + (right - left) / 2;
		if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
			return mid;
	}
	if (left >= right)
	{
		return -1;
	}
}
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9};
	int k = 7;
	int len = sizeof(arr) / sizeof(arr[0]);
	int a = tow_serch(arr, len, k);
	if(a==-1)
	{
		printf("找不到");
		
	}
	else
	{
		printf("找到了,下标是:%d",a);
	}
	return 0;
}

数组传参穿的是首元素地址

4.写一个函数每调用一次num加一

//写一个函数每调用一次num加一
void add(int*p)
{
	(*p)++ ;
}
int main()
{
	int num = 0;
	add(&num);
	printf("%d",num);
	return 0;
}

5.接收一个整形值,按顺序打印

//接收一个整形值,按顺序打印
//例子1234	打印1 2 3 4
//void print(int a)
//{
//	if (a > 9)
//	{
//		a % 10;
//		print(a / 10);
//		printf("%d\n", a % 10);
//	}
//	else
//	{
//		printf("%d\n",a);
//	}
//}
void print(int a)
{
	if (a > 9)
	{
		print(a / 10);
	}
	printf("%d\n", a%10);
}
int main()
{
	int a = 0;
	scanf("%d",&a);
	print(a);
	return 0;
}

6.编写一个求字符穿长度的函数,不能创建临时变量

//编写一个求字符串长度的函数,不能创建临时变量
int my_strlen(char* arr)
{
	if (*arr != '\0')
	{
		return	1 + my_strlen(arr + 1);
	}
	else
		return 0;
}
int main()
{
	char arr[] = { "abcdef" };
	int ret = my_strlen(arr);
	printf("%d",ret);
	return 0;
}

7.用递归和迭代求n!

//用递归和迭代求n!
int jiecheng(int b)
{
	int i = 0;
	int a = 1;
	for (i = 1; i <= b; i++)
	{
		a = a * i;
	}
	return	a;
}
int fnc(n)
{
	if (n <= 1)
	{
		return 1;
	}
	else 
	{
		return n*fnc(n - 1);
	}
}
int main()
{
	int n = 2;
	scanf("%d",&n);
	int ret =jiecheng(n);
	/*int ret = fnc(n);*/
	printf("%d",ret);
	return 0;
}

8.求第n个斐波那契数列值

//求第n个斐波那契数列值
int feibo(int n)
{
	if (n <= 2)
	{
		return 1;
	}
	else
	{
		return feibo(n-2) + feibo(n - 1);
	}
}

int naqie(n)
{
	int i = 0;
	int a = 1;
	int b = 1;
	int c = 1;
	while (n >= 3)
	{
		a = b;
		b = c;
		c = a + b;
		n--;
	}
		return c;
}

int main()
{
	int n = 0;
	scanf("%d",&n);
	/*int ret = feibo(n);*/
	int ret = naqie(n);
	printf("%d",ret);
	return 0;
}

8.小题

1.下面代码执行的结果是:(死循环打印5)

#include <stdio.h>
int main

{
int i = 0;
for(i=0;i<10; i++)
{

        if(i=5)

                printf("%d “,i);

}
return 0;

}

2.关于if吾句说法正确是:(c)
题目内容
A .i语句后面只能跟一条语句
B.i语句中0表示假,1表示真
C.if语句是一种分支语句,可以实现单分支,也可以实现多分支

D.else语句总是和它的对齐的if语句匹配

3.关于switch说法不正确的是:c
A .switct语句中的default子句可以放在任意位置

B.switch语句中case后的表达式只能是整形常量表达式

C.switch语句中case子句必须在defaut子句之前

D .switch语句中case表达式不要求顺序

4.func(1)=0

int func(int a)
{
int b;
switch
   { case 1:b=30;
     case 2:b=20;
     case 3:b=16;
     default:b=0;
    }
return b;
}
则func(1)=()

5.switch(c)据句中,c不可以是什么类型(d)        char存的是ASCII值
题目内容:
A .int
B .long

C .char
D .float

6.输出结果:hellothird

#include <stdio.h>
int main()
{
    int x=3;
    int y = 3;
    switch(x%2)
    {
         case 1:
            switch(y)
                {    
                case 0:
                     printf("first");
                case 1:
                     printf("second");
                     break;
                default: 
                     printf("hello");
                }
         case 2:printf("third");
    }
return 0;
}

9.小题

1.题目名称:
关于实参和形参描述错误的是:c
题目内容:
A .形参是实参的一份临时拷贝
B.形参是在函数调用的时候才实例化,才开辟内存空间
C.改变形参就是改变实参
D.函数调用如果采用传值调用,改变形参不影响实参

2.题目名称:
函数调用exec((v1,v2),(v3,v4),v5,v6);中,实参的个数是:B
A.3
B.4
C.5
D.6

3.

题目名称:
以下关于函数设计不正确的说法是:b
题目内容
A.函数设计应该追求高内聚低耦合(降低跟别人的关联,内容单一)
8.要尽可能多的使用全局变量
C.函数参数不易过多
D.设计函数时,尽量做到谁申请的资源就由谁来释放

4.
关于C语言函数描述正确的是:C

A.函数必须有参数和返回值
B.函数的实参只能是变量
C.库函数的使用必须要包含对应的头文件

D.有了库函数就不需要自定函数了

5.
C语言规定,在一个源程序中,main函数的位置(C)
A.必须在最开始
8.必须在库函数的后面
C.可以任意
D .必须在最后

6.
以下叙述中不正确的是:D
A .在不同的函数中可以使用相同名字的变量
B.函数中的形式参数是在栈中保存
C.在一个函数内定义的变量只在本函数范围内有效
D .在一个函数内复合语句中定义的变量在本函数范围内有效(复合语句指函数中的
成对括号构成的代码)

7.
能把函数处理结果的二个数据返回给主调函数,在下面的方法中不正确的是:A
A .retum 这二个数
B.形参用数组
C.形参用二个指针
D.用二个全局变量

8.
关于函数调用说法不正确的是:C
A.数可以传值调用,传值调用的时候形参是实参的一份临时拷贝

B.函数可以传址调用,传址调用的时候,可以通过形参操作实参
C.函数可以嵌套定义,但是不能嵌套调用
D.函数可以嵌套调用,但是不能嵌套定义

9.在函数调用时,以下说法正确的是B
A.函数调用后必须带回返回值

B.实际参数和形式参数可以同名
C.函数间的数据传递不可以使用全局变量

D.主调函数和被调函数总是在同一个文件里

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值