求助一个编程题,分别用C和JAVA做
题目是这样的,输入N个数,要求输出这些数中大于平均值的数。
我想了想不太会,因为N是不确定的,前提是由输入者自己决定是否继续输入,所以又不能确定数组的长度,不知道用数组能不能做。
求各位高手相助,本人新手正在努力学习中...
[解决办法]
#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内核中找到
#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;}