1.编写一程序,对输入的正整数,求他的约数和。
如:18的约数和为1+2+3+6+9=39
#include <stdio.h>
int getsum(int n){
int i,sum=0;
for(i=1;i<=n;i++)
if(n%i==0)
sum+=i;
return sum;
}
int main(){
int sum = getsum(18);
printf("%d",sum);
}
2.设2000以内的素数序列(从小到大)为:x1,x2....编一序列,求如下序列y1,y2....,其中:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int isprime(int n){
if(n<=1)
return 0;
int i=0;
for(i=2;i<=sqrt(n);i++)
if(n%i==0)
return 0;
return 1;
}
void newlist(){
int i,count=0;
int *arr=(int *)malloc(2000*sizeof(int));
for(i=0;i<2000;i++)
if(isprime(i))
arr[count++]=i;
for(i=0;i<count-1;i++)
printf("%d-%d=%d\n",arr[i+1],arr[i],arr[i+1]-arr[i]);
}
int main(){
newlist();
}
3.A为整型数组,我们要把A中的0移动到数组A的后部,非零元素移动到A的前部,且非零元素保持原序。例如
0 3 0 0 -1 2 0 1
3 -1 2 1 0 0 0 0
设A为有100个元素的整型数组,编一函数,实现上述功能
#include <stdio.h>
void sort(int *arr,int n){
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(arr[j]==0){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
int main(){
int arr[8]={0,3,0,0,-1,2,0,1};
sort(arr,8);
int i;
for(i=0;i<8;i++)
printf("%d ",arr[i]);
}
4.设A为5*5的二维数组,编一函数,求A中出现频度最高的数。
#include <stdio.h>
#include <stdlib.h>
int findmax(int **arr){
int maxarr[1000]={0};
int max=0,i,j,flag;
for(i=0;i<5;i++)
for(j=0;j<5;j++)
maxarr[arr[i][j]]++;
for(i=0;i<1000;i++)
if(maxarr[i]>max){
max=maxarr[i];
flag=i;
}
return flag;
}
int main(){
int **arr=(int **)malloc(sizeof(int *)*5);
int i,j;
for(i=0;i<5;i++)
arr[i]=(int *)malloc(sizeof(int)*5);
for(i=0;i<5;i++)
for(j=0;j<5;j++)
scanf("%d",&arr[i][j]);
int max=findmax(arr);
printf("%d",max);
}