嵌入式学习-C语言基础-Day6

Day6

一、思维导图

二、作业

判断是否为完数

输入一个数,计算是否是完数

完数:除本身约数和等于本身

eg:6: 1 2 3 6

1+2+3==6

代码
#include 
int main(int argc, const char *argv[])
{
	int num;
	printf("please enter num:");
	scanf("%d",&num);
	int sum=1;
	for(int i=2;i<num;i++)
	{
		if(num%i==0)
		{
			sum+=i;
		}
	}
	if(sum==num)
		printf("%d is a perfect number\n",num);
	if(sum!=num)
		printf("%d is not a perfect number\n",num);
	return 0;
}
运行结果

嵌入式学习-C语言基础-Day6_第1张图片

计算数组中素数个数

循环输入n个元素存到数组,计算数组中素数的个数

代码
#include 
#include 
#include 
int main(int argc, const char *argv[])
{
    int n;
    printf("please enter n:");
    scanf("%d",&n);
    int arr[n];
    for(int i=0;i<n;i++)
    {
        printf("please enter %d element:",i+1);
        scanf("%d",arr+i);
	}
	int sum=0;
	for(int i=0;i<n;i++)
	{
		int flag=1;
		for(int j=2;j<=sqrt(arr[i]);j++)
		{
			if(arr[i]%j==0)
			{
				flag=0;
				break;
			}
		}
		if(flag==1)
			sum+=1;
	}
	printf("The number of prime is %d\n",sum);
	return 0;
}
遇到的问题

int flag=1一定要写在循环里,本人因为一开始一起初始化,这样会导致一旦flag变为0,后续会一直为0

运行结果

嵌入式学习-C语言基础-Day6_第2张图片

冒泡排序

循环输入数组,实现冒泡降序排序,循环输出

代码
#include 
int main(int argc, const char *argv[])
{
	int n;
	printf("please enter num:");
	scanf("%d",&n);
	int a[n-1];
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(int i=1;i<n;i++)
	{
		int count = 0;
		for(int j=0;j<n-i;j++)
		{
			if(a[j]<a[j+1])
			{
				int t =a[j];
				a[j]=a[j+1];
				a[j+1]=t;
				count++;
			}
		}
		if(count==0)
			break;
	}	
	for(int i = 0;i<n;i++)
	{
		printf("a[%d]=%d\n",i,a[i]);
	}
	return 0;
}
运行结果

嵌入式学习-C语言基础-Day6_第3张图片

计算第二大值

循环输入数组,计算第二大值

int arr[]={12,33,24,33,13};

第二大值计算24

代码
#include 
int main(int argc, const char *argv[])
{
	int n;
	printf("please enter n:");
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	int max=(a[0]>a[1]?a[0]:a[1]);
	int max2=(a[0]>a[1]?a[1]:a[0]);
	for(int i=0;i<n;i++)
	{
		if(max<a[i])
		{
			max2=max;
			max=a[i];
		}
		else if(max2<a[i]&&a[i]<max)
		{
			max2=a[i];
		}
	}
	printf("the second max num is:%d\n",max2);
	return 0;
}
遇到的问题

此段代码在写的过程中,如下图

嵌入式学习-C语言基础-Day6_第4张图片

我一开始并没有加入max2=max,这将会导致max2的值不会正常更新
还有如果max和max2的初始值一样,在输入的数组第一个值就为最大值时,会发生输出值其实为最大值的情况,因此我通过如上操作使二者初始值不同。

运行结果

嵌入式学习-C语言基础-Day6_第5张图片

你可能感兴趣的:(学习,c语言,算法)