C语言。输入一个整数数字串 然后对这个数字串的奇数偶数分别求和。例如我输入31246。那么奇数和为

C语言。输入一个整数数字串 然后对这个数字串的奇数偶数分别求和。例如我输入31246。那么奇数和为4。偶数和为12。应该怎么编。请附上解释说明………

#include <stdio.h>//望采纳

int main(void)
{
int value,j=0,o=0,temp,temp1;
printf ("请输入一个正整数:");
scanf("%d",&value);//获取输入的正整数
temp1=value;
//分割正整数,并求和
while(value!=0)
{
temp=value%10;//使temp的值为value值的最后一个数字,value取余得到的结果当然是最后一个数字
if(temp%2==0)//判断取得的最后一个数字是否为偶数
{
o=o+temp;//o表示偶数和
}
else
{
j=j+temp;//j为奇数和
}
value=value/10;//去除value最后一位数字
}
printf ("数%d的奇数和为:%d 偶数和为:%d\n",temp1,j,o);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-28
#include <stdio.h>

//数字转换(将字符型数字转换为int型数字)
int numTran(char ch)
{
return ch-'0'; //返回int型数字
}

//是否是偶数
int isEven(int num)
{
if (num%2 == 0) //能被2整数 则为偶数
return 1;
else
return 0;
}

int main(void)
{
int ch; //存放单个字符数字
int num; //转换后的int型数字
int evenSum = 0; //偶数和(注意初始化)
int unevenSum = 0; //奇数和(注意初始化)

while ((ch = getchar()) != '\n') //依次读取输入流中的字符 直到最后一个回车符结束
{
num = numTran(ch); //转换后的整型数字
if (isEven(num))
evenSum += num; //若为偶数 则累加偶数数字
else
unevenSum += num; //否则进行奇数累加
}
printf("%d %d\n", unevenSum, evenSum); //按照“奇数和” “偶数和” 的格式输出
return 0;
}

还有什么地方不懂的,可以继续@我追问

帮我看下这个好吗。。。我初学都不会。。。。

追答

抱歉,现在才有时间回复你

//介于你是初学者,我重新写一个程序给做参考(注意这个程序里的格式,一些符号间的空格/空行)

#include
#include

int main(void)
{
int dnSum = 0, ngSum = 0;
double num;

printf("Enter 7777 to STOP\n");

while (1)
{
printf("Enter a number: ");
scanf("%lf", &num); //输入一个数

if (7777 == num) //若输入为7777则退出循环
break;

if (num < 0)
{
printf("Number is negative\n");
printf("Square = %f\n", num * num); //num为负时仅输出平方值
ngSum++;
}
else
{
printf("Square = %f\n", num * num);
printf("Square root = %f\n", sqrt(num));
}
dnSum++;
}
printf("Number of items done = %d\n", dnSum);
printf("Negative items = %d\n", ngSum);

return 0;
}

/*
注意对变量的命名最好能够体现其表示意义
*/

本来还有一些内容,但是字数有点超,不能一次发完 你可以再回复一句,我把剩下的一部分也发给你

追问

太感谢了!!!学得心都累了TvT

追答

/*
#include
#include

double sqrt(long double _X); //重复声明,没有语法错误,但是最好不要有

main()
{
int i, m = 0, n = 0;
double a;
i = 1; //这里的i没有作用
printf("Enter 7777 to STOP");
do
{
m = m + 1; //最好放在最后面
printf("\nEnter a number: ");
scanf("%lf", &a);
if (a >= 0)
{
a = a * a; //这样就不能计算开方值了
printf("Square = %f", &a); //printf函数中a前面不加&
}
else
{
n = n + 1;
printf("Number is negative"); //printf函数中a前面不加&
a = a * a;
printf("\nSquare = %f", &a); //printf函数中a前面不加&
}
} while (a != 7777);
printf("\nNumber of items done = %d", &m); //printf函数中m前面不加&
printf("\nNegative items = %d", &n); //printf函数中a前面不加&
}
*/

/*
1. 一个显而易见的错误——printf在输出变量中的值时,变量前面一般不用取地址符&(除非以"%p"的格式输出变量的地址)
2. sqrt函数是头文件math.h中已经声明过的原函数(为标准库函数),所以没有必要在源文件中再次声明
3. 根据题意,程序进行下去的前提条件是,输入的数不等于“7777”,故应当首先判断输入的数是否为“7777”,不过最好用while(1){};格式的循环体
*/

这是之前对你的程序的修改,我也是过来人,在此推荐你一本C语言的教材——《C语言程序设计:现代方法(第二版)》

有不懂的可以继续问

追问

十万分感谢!

第2个回答  2014-10-27
#include <stdio.h>
int main()
{
char str[11]={0};
int ji=0,ou=0;
int i=0;
scanf("%s",str);
    for(i=0;str[i]!='\0';i++)
{
    if(str[i]%2)//13579的ASCII值为奇数
ji+=str[i]-48; //0的ASCII值为48
    else ou+=str[i]-48; 
}
printf("奇数和=%d\n偶数和=%d\n",ji,ou);
return 0;
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网