注册 登录
编程论坛 C语言论坛

如有 int a[10],如果有负数将所有的负数变为正数,然后输出奇数、偶数、素数和 完数的个数。

opq2020 发布于 2020-04-20 19:14, 2774 次点击
#include<stdio.h>
int main()
{int a[10],i,j=0,p=0,l=0,q=0,s;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
{if(a[i]<0)
a[i]=-a[i];
for(i=0;i<10;i++)
{
if(a[i]%2==0)
j++;
else
p++;}
for(p=2;p<=a[i];p++)
{ if(a[i]%p==0)
break;
if(p>a[i])
l++;
}s=0;for(p=2;p<=a[i];p++)
{if(a[i]%p==0)
s+=p;
}if(s==a[i])
q++;
}printf("奇数是%d,偶数是%d,素数是%d,完数是%d",j,p,l,q);
}结果是错的,找了半天也没发现,求大佬帮忙
3 回复
#2
lin51616782020-04-20 19:26
每个统计单独写一个函数处理 不要挤在一起
然后缩进对齐做好 并且 用[code]标签把代码括起来
#3
return_02020-04-20 22:01
怎么每个if都没有前括号只有后括号?!?!
#4
吕孟伟2020-04-21 12:27
程序代码:
#include <stdio.h>
#define N 10

void Convert_NegVal_to_posVal(int* a, int length)
{
    for(size_t i = 0; i != length; ++i){
        if(a[i] < 0){
            a[i] = -a[i];
        }
    }
}
unsigned odd(int* a, int length)
{
    unsigned odd = 0;
    for(size_t i = 0; i < length; ++i){
        if(a[i]%2){
            ++odd;
        }
    }
    return odd;
}
unsigned even(int* a, int length)
{
    unsigned even = 0;
    for(size_t i = 0; i < length; ++i){
        if(!(a[i]%2)){
            ++even;
        }
    }
    return even;
}
unsigned prime(int* a, int length)
{
    unsigned prime = 0;
    int i, j;
    for(i = 0; i < length; ++i){
        for( j = 2; j <= a[i]; ++j){
            if(0 == a[i] % j){
                break;
            }
        }
        if(j == a[i]){
            ++prime;
        }
    }
    return prime;
}
unsigned complete(int* a, int length)
{
    unsigned complete = 0;
    unsigned sum;
    size_t i, j;
    for(i = 0; i < length; ++i){
        for( j = 1, sum = 0; j < a[i]; ++j){
            if(0 == a[i]%j){
                sum += j;
            }
        }
        if(0 == a[i]){
            continue;
        }
        if(sum == a[i]){
            ++complete;
        }
    }
    return complete;
}

int main(void)
{
    int a[N] = {0};
    unsigned oddval, evenval, primeval, completeval;
    oddval = evenval = primeval = completeval = 0;
    printf("Please you input the array element: ");
    for(size_t i = 0; i != N; ++i){
        scanf("%d", &a[i]);
    }
    int length = sizeof(a)/sizeof(int);
    //将负数转换成正数
    Convert_NegVal_to_posVal(a, length);
    //判断奇数、偶数、素数和 完数的个数
    oddval = odd(a, length);
    evenval = even(a, length);
    primeval = prime(a, length);
    completeval = complete(a, length);
    printf("odd has %d, even has %d, prime has %d, complete has %d\n", oddval, evenval, primeval, completeval);
    return 0;
}
1