编程c语言输入一批正整数以0或负数为结束标志求奇数的和要求定义和调用函数even 10
编程c语言输入一批正整数以0或负数为结束标志求奇数的和要求定义和调用函数even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0。...
编程c语言输入一批正整数以0或负数为结束标志求奇数的和要求定义和调用函数even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0。
展开
5个回答
展开全部
由于题目要求输入的整数的数目不确定,所以我认为用链表来解决这个问题
代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int num;
struct node* next;
}node,*link;
link input(void); //把输进来的数连接成一个链表
int sum(link head); //遍历整个链表 把奇数累加起来
int even(int n); //偶数返回1 奇数返回0
void del_all(link head); //销毁整个链表
int main ()
{
link head=NULL;
int(*p)()=sum; //这是一个指向函数的指针,让它指向求和函数sum
head=input();
printf("奇数和为%d\n",(*p)(head));
del_all(head);
return 0;
}
/*链表的建立*/
link input(void)
{
link head,p,last;
int x;
head=last=(link)malloc(sizeof(node)); //建立头结点
printf("输入一批正整数以0或负数为结束标:\n");
scanf("%d",&x);
while(x>0) //输入为正数就继续循环
{
p=(link)malloc(sizeof(node)); //建立一个新的结点用来储存x
p->num=x;
last->next=p; //连接到链表的最后一个节点的后面
last=p; //更新last的指向。让其指向当前的最后一个节点
scanf("%d",&x);
}
last->next=NULL; //把最后一个节点的指针域置空
return head; //把建立好的链表头返回
}
/*求奇数之和*/
int sum(link head)
{
link p=head->next; //指向第一个节点
int total=0; //用来记录奇数和的
while(p) //只要这个节点存在
{
if(!even(p->num)) //如果是不是偶数
total+=p->num; //累加起来
p=p->next;
}
return total; //返回最后的累加值
}
/*判断是否是偶数*/
int even(int n)
{
if(n%2==0)
return 1;
else return 0;
}
/*销毁整个链表*/
void del_all(link head)
{
link p=head,pr;
while(p)
{
pr=p;
p=p->next;
free(pr);
}
}
代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{
int num;
struct node* next;
}node,*link;
link input(void); //把输进来的数连接成一个链表
int sum(link head); //遍历整个链表 把奇数累加起来
int even(int n); //偶数返回1 奇数返回0
void del_all(link head); //销毁整个链表
int main ()
{
link head=NULL;
int(*p)()=sum; //这是一个指向函数的指针,让它指向求和函数sum
head=input();
printf("奇数和为%d\n",(*p)(head));
del_all(head);
return 0;
}
/*链表的建立*/
link input(void)
{
link head,p,last;
int x;
head=last=(link)malloc(sizeof(node)); //建立头结点
printf("输入一批正整数以0或负数为结束标:\n");
scanf("%d",&x);
while(x>0) //输入为正数就继续循环
{
p=(link)malloc(sizeof(node)); //建立一个新的结点用来储存x
p->num=x;
last->next=p; //连接到链表的最后一个节点的后面
last=p; //更新last的指向。让其指向当前的最后一个节点
scanf("%d",&x);
}
last->next=NULL; //把最后一个节点的指针域置空
return head; //把建立好的链表头返回
}
/*求奇数之和*/
int sum(link head)
{
link p=head->next; //指向第一个节点
int total=0; //用来记录奇数和的
while(p) //只要这个节点存在
{
if(!even(p->num)) //如果是不是偶数
total+=p->num; //累加起来
p=p->next;
}
return total; //返回最后的累加值
}
/*判断是否是偶数*/
int even(int n)
{
if(n%2==0)
return 1;
else return 0;
}
/*销毁整个链表*/
void del_all(link head)
{
link p=head,pr;
while(p)
{
pr=p;
p=p->next;
free(pr);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2010-05-11
展开全部
奇数有。。。。。-9,-7,-5,-3,-1,1,3,5,7,9。。。。。。。。。。。。
偶数有。。。。。-8,-6,-4,-2,0,2,4,6,8。。。。。。。。。。。。
是的,0是偶数,0绝对是偶数。
我们的教科书也出现过这个题目,说是0是偶数,我说是错的,结果老师给我打了一个大大的叉。
作为自然数,0既不是素数(质数)也不是合数。
平方数, 0是偶数。
0非正非负,0的相反数和绝对值是其本身。
0乘以任何实数都等于0,0加上任何实数等于其本身。
0没有倒数和负倒数,一个非0的数除以0无意义,0除以0有无穷多个解。
0的正数次方等于0,0的0和负数次方无意义。
0不能做对数的底数和真数。
0的0次方是未定义的,但有时亦采用为1其值。
偶数有。。。。。-8,-6,-4,-2,0,2,4,6,8。。。。。。。。。。。。
是的,0是偶数,0绝对是偶数。
我们的教科书也出现过这个题目,说是0是偶数,我说是错的,结果老师给我打了一个大大的叉。
作为自然数,0既不是素数(质数)也不是合数。
平方数, 0是偶数。
0非正非负,0的相反数和绝对值是其本身。
0乘以任何实数都等于0,0加上任何实数等于其本身。
0没有倒数和负倒数,一个非0的数除以0无意义,0除以0有无穷多个解。
0的正数次方等于0,0的0和负数次方无意义。
0不能做对数的底数和真数。
0的0次方是未定义的,但有时亦采用为1其值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include <stdio.h>
#define MAXLEN 1000
int even(int n)
{
return n%2;
}
int main( )
{
int x;
long sum=0;
scanf("%d",&x);
while(x)
{
if(even(x))
sum+=x;
scanf("%d",&x);
}
printf("sum=%ld\n",sum);
}
问题其实很简单,题目只要求出输入的所有奇数的和,所以没有必要定义数组.
#define MAXLEN 1000
int even(int n)
{
return n%2;
}
int main( )
{
int x;
long sum=0;
scanf("%d",&x);
while(x)
{
if(even(x))
sum+=x;
scanf("%d",&x);
}
printf("sum=%ld\n",sum);
}
问题其实很简单,题目只要求出输入的所有奇数的和,所以没有必要定义数组.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已在TC2下经过测试,如果觉得好,请采纳。。。
#include <stdio.h>
#include <stdlib.h>
int Even(int * array, int num); /*定义*/
void main()
{
int ii, MyArray[100] = {0};
clrscr();
printf("Pls input numbers, to end this input operation, pls put a number <=0 :\n");
for(ii=0;ii<100;ii++)
{
scanf("%d", &MyArray[ii]);
fflush(stdin);
if( MyArray[ii] <= 0 ) break;
}
printf("\nThe sum is %d\n", Even(MyArray, ii)); /*调用*/
system("pause");
}
int Even(int * array, int num)
{
int ii, sum = 0;
for(ii=0;ii<num;ii++)
{
if( ((*array) % 2 ) != 0 )
sum += *array;
array ++;
}
return sum;
}
#include <stdio.h>
#include <stdlib.h>
int Even(int * array, int num); /*定义*/
void main()
{
int ii, MyArray[100] = {0};
clrscr();
printf("Pls input numbers, to end this input operation, pls put a number <=0 :\n");
for(ii=0;ii<100;ii++)
{
scanf("%d", &MyArray[ii]);
fflush(stdin);
if( MyArray[ii] <= 0 ) break;
}
printf("\nThe sum is %d\n", Even(MyArray, ii)); /*调用*/
system("pause");
}
int Even(int * array, int num)
{
int ii, sum = 0;
for(ii=0;ii<num;ii++)
{
if( ((*array) % 2 ) != 0 )
sum += *array;
array ++;
}
return sum;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询