Day6
一、思维导图
二、作业
判断是否为完数
输入一个数,计算是否是完数
完数:除本身约数和等于本身
eg:6: 1 2 3 6
1+2+3==6
代码
#include <stdio.h>
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;
}
运行结果
计算数组中素数个数
循环输入n个元素存到数组,计算数组中素数的个数
代码
#include <stdio.h>
#include <math.h>
#include <string.h>
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
运行结果
冒泡排序
循环输入数组,实现冒泡降序排序,循环输出
代码
#include <stdio.h>
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;
}
运行结果
计算第二大值
循环输入数组,计算第二大值
int arr[]={12,33,24,33,13};
第二大值计算24
代码
#include <stdio.h>
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;
}
遇到的问题
此段代码在写的过程中,如下图
我一开始并没有加入max2=max,这将会导致max2的值不会正常更新
还有如果max和max2的初始值一样,在输入的数组第一个值就为最大值时,会发生输出值其实为最大值的情况,因此我通过如上操作使二者初始值不同。