#include<stdio.h>
int main(){
int n,divisor,add =0;
int sign = 0;
int i;
scanf("%d",&n);
printf("%d的约数和为:",n);
for(i=1;i<=n;i++)
if(n % i == 0)
if(sign == 0){
printf("%d",i);
add += i;
sign = 1;
}else{
printf("+%d",i);
add += i;
}
printf("=%d\n",add);
}
有关质数:判断时,只需除以从2到根号n进行的正整数,若有能整除,则不是素数
#include<stdio.h>
#include<stdbool.h>//C中没有bool类型,需要引入<stdbool.h>头文件
#define N 2000
int main(){
bool isPrime(int x);
int prime[N];
int y[N];
int i,j=0;
printf("{Xn}序列为:\n");
for(i=2;i<=N;i++)
if(isPrime(i)){
prime[j] = i;
printf("%d\t",prime[j]);
j++;
}
printf("\n{Yn}序列为:\n");
for(i=0;i<j-1;i++){
y[i] = prime[i+1] - prime[i];
printf("%d\t",y[i]);
}
printf("\n");
return 0;
}
/*判断x是否为素数,是返回true,不是返回false*/
bool isPrime(int x){
int i;
bool is_prime=true;
for(i=2;i<=sqrt(x);i++)
if(x%i == 0){
is_prime = false;
break;
}
return is_prime;
}
#include<stdio.h>
#define N 12
int main(){
int A[N]={0,3,0,1,0,0,0,0,-1,2,0,1};
int i,j,k=N;
printf("原来序列为:\n");
for(i=0;i<N;i++)
printf("%d\t",A[i]);
printf("\n修改后的序列为:\n");
while(k>0){
for(i=0;i<N;i++){
if(A[i]==0){//发现0元素,将此位之后的全部元素向前移一位,最后一位插入0
for(j=i;j<N-1;j++)
A[j]=A[j+1];
A[N-1]=0;
}
}
k--;
}/*
之所以用到while循环,是因为,有可能此位之后还是0元素,即几个连续的0元素,
当把此位之后的全部元素向前移一位后,i++,则下次判断跳过了这个0,所以失败
N位数组最多存放N个连续的0,所以while循环N遍,保证每一个0都判断到,操作到位
*/
for(i=0;i<N;i++)
printf("%d\t",A[i]);
printf("\n");
return 0;
}
方法二:
#include<stdio.h>
int main(){
int *sort(int A[],int n);
int A[12]={0,3,0,1,0,0,0,0,-1,2,0,1};
int i;
printf("原来序列为:\n");
for(i=0;i<12;i++)
printf("%d\t",A[i]);
printf("\n修改后的序列为:\n");
int *b = sort(A, 12);
for(i=0;i<12;i++){
A[i] = b[i];
printf("%d\t",A[i]);
}
printf("\n");
return 0;
}
int *sort(int A[],int n){
int *b = (int *)malloc(n*sizeof(int));
int i,j=0;
for(i=0;i<n;i++){//把非零元素放在b中
if(A[i]!=0){
b[j] = A[i];
j++;
}
}
for(i=j+1;i<n;i++)//其余位置0
b[i] = 0;
return b;
}
#include<stdio.h>
#define N 5
#define M N*N
int main(){
int A[N][N]={{3,2,4,5,1},{10,9,3,4,2},{8,7,6,7,7},{8,3,4,1,2},{4,5,3,1,1}};
int Frequency[M][2];//{元素,频度}
int i,j,k,n=0;
int sign;
int max,max_i;
printf("%d×%d的矩阵A如下:\n",N,N);
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d\t",A[i][j]);
sign =0;
for(k=0;k<n;k++){
if(A[i][j]==Frequency[k][0]){
Frequency[k][1]++;
sign =1;
break;
}
}if(sign==0){
Frequency[n][0] = A[i][j];
Frequency[n][1] = 1;
n++;
}
}printf("\n");
}
/*找出频度最大的数*/
max = 1;//保存最大的频度
max_i = 0;//保存频度最大的数的下标
for(k=0;k<n;k++){
if(max<Frequency[k][1]){
max = Frequency[k][1];
max_i=k;
}
}
printf("出现频度最高的元素为:%d,出现了%d次\n",Frequency[max_i][0],max);
return 0;
}