首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一个编程题,分别用C和JAVA做

2012-04-22 
求助一个编程题,分别用C和JAVA做题目是这样的,输入N个数,要求输出这些数中大于平均值的数。我想了想不太会,

求助一个编程题,分别用C和JAVA做
题目是这样的,输入N个数,要求输出这些数中大于平均值的数。
我想了想不太会,因为N是不确定的,前提是由输入者自己决定是否继续输入,所以又不能确定数组的长度,不知道用数组能不能做。
求各位高手相助,本人新手正在努力学习中...

[解决办法]

C/C++ code
#include <stdio.h>#include <stdlib.h>typedef struct Node{    int dat;    struct Node *pNext;}NODE,*pNODE;pNODE create_list(int *, int *);void search(pNODE pHead, int *paverge);            /* 这个方法很一般,有待改进的地方 */int main(void){    int len = 0;    int sum = 0;    pNODE pHead =create_list(&len, &sum);    int averge = sum / len;    printf("len = %d, sum = %d, averge = %d\n", len, sum, averge);    search(pHead, &averge);    return 0;}pNODE create_list(int *pLen, int *pSum){    int val = 0;    int len = 0;    int sum = 0;    pNODE pHead = (pNODE)malloc(sizeof(NODE));    if (NULL == pHead)    {        printf("内存分配失败!\n");        exit(-1);            /* 内存分配失败,退出程序 */    }    pNODE pTail = pHead;            /* 定义一个临时的头节点指针,因为这个临时的头结点指针会变化,                                                    就是通过这个和后面的节点联系起来的 */    pTail->pNext = NULL;    printf("请输出数字:\n");    while(scanf("%d",&val) != EOF)        /* 你输完数字后,按回车,再按ctrl + z,再按回车 */    {        pNODE pNew = (pNODE)malloc(sizeof(NODE));        if (NULL == pNew)        {            printf("内存分配失败!\n");            exit(-1);        }        pNew->dat = val;            /* 给节点赋值 */        pTail->pNext = pNew;            /* 让每个新节点都连接在最后一个节点的后面 */        pNew->pNext = NULL;            /* 算给每个新的节点的指针初始化吧 */        pTail = pNew;                /* 再让最后一个节点指针指向此新节点 */        len++;        sum += val;    }    *pLen = len;    *pSum = sum;    return pHead;}void search(pNODE pHead, int *averge){    pNODE p = pHead->pNext;                /* 定义一个临时的节点指针 */    printf("比平均值大的数是:");    while (NULL != p)                /* 判断是否存在此节点 */    {        if (p->dat > *averge)        {            printf("%d ", p->dat);        }        p = p->pNext;                /* p一直指向此节点*/    }    printf("\n");}
[解决办法]
C语言版本,list.h的头文件可以在linux内核中找到
C/C++ code
#include <stdio.h>#include <string.h>#include <malloc.h>#include "list.h"typedef struct mystruct {    float number;    struct list_head lst;} mystruct_t;static struct list_head g_list_head;int main(int argc, char *argv[]){    float num, sum, average;    int i;    mystruct_t *p, *pos, *n;        INIT_LIST_HEAD(&g_list_head);    num = 0.0;    sum = 0.0;    i = 0;        printf("please input(exit input 0):");    while(1) {        scanf("%f", &num);        if (num == 0.0) {            break;        }        p = (mystruct_t *)malloc(sizeof(mystruct_t));        if (p == NULL) {            printf("malloc error.\n");            return -1;        }        memset(p, 0, sizeof(mystruct_t));        sum += num;        i++;        p->number = num;        list_add_tail(&p->lst, &g_list_head);    }    /* 求平均值 */    average = sum / i;    printf("average:%f\noutput:", average);    list_for_each_entry_safe(pos, n, &g_list_head, lst, mystruct_t) {        if (pos->number > average) {            printf("%f ", pos->number);        }    }    printf("\n");        return 0;} 

热点排行