作业练习
1.输入一个数,计算是否是完数
#include <stdio.h>
int main(int argc, const char *argv[])
{
int n,i=1,p=0;
scanf("%d",&n);
for(i=1;i<n;i++)
{
if(n%i==0)
{
p+=i;
}
}
if(p==n)
{
printf("%d是完数\n",n);
}
else
{
printf("%d不是完数\n",n);
}
return 0;
}
ubuntu@ubuntu:day6$ gcc 1.c
ubuntu@ubuntu:day6$ ./a.out
6
6是完数
ubuntu@ubuntu:day6$ ./a.out
12
12不是完数
ubuntu@ubuntu:day6$ ./a.out
496
496是完数
2.循环输入n个元素存到数组,计算数组中素数的个数
#include <stdio.h>
int main(int argc, const char *argv[])
{
int n,k=0;
printf("数组元素个数:");
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<n;i++)
{
for(int j=2;j<a[i];j++)
{
if(a[i]%j==0)
{
k+=1;
break;
}
}
}
printf("素数个数为%d个\n",n-k);
return 0;
}
ubuntu@ubuntu:day6$ gcc 2.c
ubuntu@ubuntu:day6$ ./a.out
数组元素个数:4
6
9
13
8
素数个数为1个
3.循环输入数组,实现冒泡降序排序,循环输出(前半部分为最大值和最小值输出)
#include <stdio.h>
int main(int argc, const char *argv[])
{
int n,max,min;
scanf("%d",&n);
int arr[n];
for(int i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(int i=0;i<n;i++)
{
if(max<arr[i])
{
max=arr[i];
}
if(min>arr[i])
{
min=arr[i];
}
}
printf("max=%d\nmin=%d\n",max,min);
//冒泡排序
for(int i=1;i<n;i++)//循环轮数
{
int count=0;//计算交换次数
for(int j=0;j<n-i;j++)//循环每一轮的比较次数
{
if(arr[j]<arr[j+1])
{
int t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
count++;
}
}
if(count==0)//如果count==0,则表示序列为有序序列
break;
}
for(int i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
ubuntu@ubuntu:day6$ gcc 3.c
ubuntu@ubuntu:day6$ ./a.out
5
60
40
96
23
12
max=96
min=12
96 60 40 23 12 ubuntu@ubuntu:day6$
4.循环输入数组,计算第二大值
#include <stdio.h>
int main(int argc, const char *argv[])
{
int n;
printf("数组元素个数:");
scanf("%d",&n);
int a[n];
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;
}
int k=2;
while(k<=n)
{
if(a[n-k]<a[n-k+1])
{
printf("第二大值为%d\n",a[n-k]);
break;
}
k++;
}
return 0;
}
ubuntu@ubuntu:day6$ gcc 4.c
ubuntu@ubuntu:day6$ ./a.out
数组元素个数:5
60
55
98
76
33
第二大值为76