C语言编程,输入两个正整数,计算两个正整数之间的所有奇数的和,要求考虑非正整数出现的情况

作者&投稿:甘龙 (若有异议请与网页底部的电邮联系)
编写C语言程序代码,要求任意输入n个正整数,程序统计其中的奇数和偶数各有多少个~

如果不考虑数组存储,那直接循环输入然后判断就行了。比如:

#includeint main(){ int n,even=0,odd=0; printf("输入任意个正整数(输入-1结束输入):"); scanf("%d",&n); while(n!=-1) { if(n>0 && n%2==0) even++; if(n>0 && n%2!=0) odd++; scanf("%d",&n); } printf("其中偶数个数:%d个,奇数个数:%d个
",even,odd); return 0;}如果想要保存任意输入的数组,需要动态申请(不需要事先规定数组大小):

#include#includeint main(){ int i,n,even=0,odd=0,len=0,*nums=(int *)malloc(sizeof(int)),*nSave=NULL; if(!nums) { printf("内存申请失败!
"); return 1; } printf("输入任意个正整数(输入-1结束输入):"); scanf("%d",&n); while(n!=-1) { len++; if(len>1) { if((nSave=(int *)realloc(nums,sizeof(int)*len))) nums=nSave; else { printf("内存申请失败!
"); return 1; } } nums[len-1]=n; if(n>0 && n%2==0) even++; if(n>0 && n%2!=0) odd++; scanf("%d",&n); } printf("输入的数组为:"); for(i=0;i<len;i++) printf("%d ",nums[i]); printf("其中偶数个数:%d个,奇数个数:%d个
",even,odd); return 0;}

一、算法分析:
要计算a b之间所有奇数和,那么最朴素的算法可以设计如下:
1、输入a,b值;
2、循环遍历a b之间的所有数值,如果为奇数,则累加;
3、输出结果。
二、算法优化:
1、由于连续奇数之间差值为2,所以可以判断出第一个奇数,然后依次加2得到所有奇数,将所有奇数累加即可。
2、连续奇数属于等差数列,所以可以利用等差数列求和公式,更快捷的得到结果。
三、参考代码:
1、原始算法代码:
#include int add(int a, int b){ int m,n,s=0; if(a<b) m=a,n=b; else m=b,n=a;//判断a b大小,增加健壮性。 for(; m<=n; m ++) if(m%2==1) s+=m;//判断并累加奇数。 return s; //返回结果。}int main(){ int a,b; scanf("%d%d",&a,&b);//输入a,b值。 printf("%d
", add(a,b));//计算并输出结果。 return 0;}2、优化算法1:
#include int add(int a, int b){ int m,n,s=0; if(a<b) m=a,n=b; else m=b,n=a;//判断a b大小,增加健壮性。 if(m%2==0) m+=1;//找到第一个奇数。 for(; m<=n; m +=2)//仅遍历奇数。 s+=m;//累加奇数。 return s; //返回结果。}int main(){ int a,b; scanf("%d%d",&a,&b);//输入a,b值。 printf("%d
", add(a,b));//计算并输出结果。 return 0;}3、优化算法2:
#include int add(int a, int b){ int m,n,s=0; if(a<b) m=a,n=b; else m=b,n=a;//判断a b大小,增加健壮性。 if(m%2==0) m+=1;//找到第一个奇数。 if(n%2==0) n-=1;//找到最后一个奇数。 s=(m+n)*((n-m)/2+1)/2;//根据等差数列求和公式计算和。 return s; //返回结果。}int main(){ int a,b; scanf("%d%d",&a,&b);//输入a,b值。 printf("%d
", add(a,b));//计算并输出结果。 return 0;}

#include<stdio.h>

int main(void)
{
    int a,b,i,N,temp,sum;
    scanf("%d",&N);
    while(N--)
    {
      sum=0;
      scanf("%d%d",&a,&b);
      if(a>b)//保证a小b大
      {
        temp=a;
        a=b;
        b=temp;
      }
      if(b<0) a=b=0;
      else if(a<0) a=0;
      if(a%2==1) i=a;
      else i=a+1;
      for(;i<=b;i=i+2)
      {
         sum+=i;
      }
       printf("%d
",sum);
    }

return 0;
}



c语言编程题编写一个c程序,要求从键盘输入两个数,并依据提示输入的数字...
include "stdio.h"\/\/ void main(void){ int a,b,c;printf("请输入两个十进制整数!\\na=");scanf("%d",&a);printf("b=");scanf("%d",&b);printf("请输入运算符(1加法;2乘法;3除法):\\n运算符:");for(;;){ scanf("%d",&c);if(c==1){ printf("a+b=%d\\n",a+b);break...

C语言编程题:从键盘上输入两个实型数,求两数的和.差.积,输出结果时要求...
include<stdio.h>int main(){ double a,b; scanf("%lf %lf",&a,&b); printf("a+b=%.2lf\\n",a+b); printf("a-b=%.2lf\\n",a-b); printf("a*b=%.2lf\\n",a*b); return 0;} 望采纳

c语言编程题:定义函数con()将两个字符串连接,主函数输入两个字符串,调...
include <stdio.h> void con(char*s1,char*s2){int i,j;for(i=0;s1[i];i++);for(j=0;s1[i++]=s2[j++];);} int main(){ char s1[200],s2[100];gets(s1);gets(s2);con(s1,s2);puts(s1);return 0;}

C语言编程题:输入两个整数a=10、b=20,将它们的值交换后输出。。。具体...
includ<stdio.h>main(){int a,b,c;a=10,b=20;c=b;b=a;a=c;printf("a=%d,b=%d",a,b);} 1.编程是编写程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,是计算体系按照该计算方式运行,并最终得到相应结果的过程。2.为了使计算机能够理解人的意图,...

用C语言编程:从键盘上输入两个正整数n和a, 求Sn=a+aa+aaa+ …a…aa的...
include <stdio.h> include <math.h> long fac(int n,int a){ long sum;if(n==1){ sum=a;} else { sum=(long)(pow(10,n-1)*a)+fac(n-1,a);} return(sum);} main(){int a,n,i;long temp,sum=0;printf("plz input number a\\n");scanf("%d",&a);printf("plz input...

c语言编程: 输入两个数组,每个数组不超过10个元素,将只在一个数组中出 ...
printf("请输入第2组10个数\\n");for(i=0;i<10;i++)scanf("%d",&b[i]);printf("未重复的是:\\n");for(i=0;i<10;i++){ for(j=0;j<10;j++){ if(a[i]==b[j]) sign=1;} if(sign!=1)printf("%3d",a[i]);sign=0;} for(i=0;i<10;i++){ for(j=0;j<10...

大一C语言,问题,编程,输入两个数。求两个数的最大共约数。
用这新的m再次对新的n进行取余,如果结果不为0,那么把这个n的值赋给m,把这次m对n取余得到的结果赋给n,……直到m%n=0,此时m的值就是原来m、n的最大公约数。最小公倍数=原来的连个数的乘积除以最大公约数。include <stdio.h> void main(){ int p,r,m,n;printf("请输入两个正...

C语言编程:首先输入两个数和一个运算符号,然后根据运算符号来做相应的...
改正一楼的二个地方就是,include <stdio.h> void main(){ int n1,n2,result; \/*result代表结果*\/ char oper;printf("请输入两个数: ");scanf("%d%d",&n1,&n2);fflush(stdin)\/*此处清除键盘缓冲区,否则结果是错的*\/ printf("\\n请输入运算");\/*此处是printf书写错误*\/ scanf("%c",...

用java语言编程?
public class test { public static void main(String[] args) { \/\/输入两个整数,计算他们的和,如果和大于100,就输出这两个数的乘积,如果和小于100,就输出这两个数的商 Scanner scanner = new Scanner(System.in);System.out.println("请输入两个整数");int a = scanner.nextInt();int ...

求大神用C语言编程 求两个整数的最大值的代码
include<stdio.h> int main(){ int a,b,max;printf("请输入两个整数:");scanf("%d,%d",&a,&b);if(a>b){ max = a;} else { max = b;} printf("较大的数是:%d",max);return 0;} 简洁的语言 C语言包含的各种控制语句仅有9种,关键字也只有32个,程序的编写要求不...

舒城县17328555661: 用c语言编写程序,输入两个正整数m和n,计算m!+n! -
宰父刻勤克: #include <stdio.h> void main() {//计算阶乘数的加和float i,m,n,ji=1,sum=0,sum1=0,sum2=0;scanf("%f",&m);scanf("%f",&n);for(i=1;i<=m;i++){ji*=i;sum1+=ji;}for(i=1;i<=n;i++){ji*=i;sum2+=ji;}sum0=sum1+sum2;printf("阶乘的加和结果是:%.2f\n",sum0); }

舒城县17328555661: 用C语言编写一个程序,从键盘输入两个正整数,输出这两个整数的最小公倍数 -
宰父刻勤克: 用欧几里德算法,最经典的了 #include <stdio.h> #include <stdlib.h> main() {int p0,q0;printf("输入两个正整数:");scanf("%d%d",&p0,&q0);int p=min(p0,q0),q=max(p0,q0);//min(),max()自己写吧int r=p;while(p%q!=0)p+=r;printf("最小公倍数为:%d",p); }

舒城县17328555661: c语言输入两个正整数,求它们相除所得的商,商的整数部分,小数部分及余数 -
宰父刻勤克: #include <iostream> #include "math.h" #include "stdlib.h" int main(int argc, char** argv) {int m=0,n=0,z=0,x=0;//m为输入的第一个数 n为第二个数 z为整数部分 x为小数部分double dm,dn,s=0; //S是商,dm,dn分别为输入的第一,二个数的...

舒城县17328555661: 编写C程序,计算并输出两个正整数的最小公倍数. -
宰父刻勤克: void main() {int a,b; int max,min; int n=1; printf("Input a,b:");scanf("%d%d",&a,&b); max=a>b?a:b; min=a>b?b:a; while(1) { if(max*n%min==0) {printf("%d\n",max*n); break; } else n++; } }

舒城县17328555661: c语言编程求两个正整数的最大公约数和最小公倍数! -
宰父刻勤克:[答案] main() { int p,r,n,m,temp; printf("Please enter 2 numbers n,m:"); scanf("%d,%d",&n,&m);//输入两个正整数. if(n

舒城县17328555661: c语言编程.输入两个正整数,分别赋给变量a,b,计算ab之间所有整数之和. -
宰父刻勤克: #include<stdio.h> void main() {int a,b,sum=0;printf("请输入两个正整数:\n");scanf("%d %d",&a,&b);if(a>b){int temp;temp=a;a=b;b=temp;}for(int i=a;i<=b;i++)sum+=i;printf("两者之间所有正整数的和为:%d\n",sum); }

舒城县17328555661: C语言编程 跪求完整过程 简单版最好 输入两个正整数,计算几何平均值和算术平均值. -
宰父刻勤克: #include#includeint main(int argc, char *argv[]){int a,b,s1,s2;printf("请输入2个整数:");scanf("%d%d",&a,&b);s1=(a+b)/2; // 求算数平均值s2=sqrt(a*b); // 求几何平均值printf("算数平均值为:%d,几何平均值为:%d\n",s1,s2);return 0;}

舒城县17328555661: C语言,输入两个正整数m和n,求两正整数最大公约数,输入要求判断数据合理性,即当输入的m和n不满足 -
宰父刻勤克: #include int main(void) { int a, b; scanf("%d%d", &a, &b); int tmp = a > b ? a : b; int t = tmp; while(tmp%a || tmp%b) { tmp += t; } printf("%d\n", tmp); }

舒城县17328555661: C语言求两个正整数的最小公倍数和最大公约数 -
宰父刻勤克: Q1、 用欧几里德算法(辗转相除法)求两个数的最大公约数的步骤如下: 先用小的一个数除大的一个数,得第一个余数; 再用第一个余数除小的一个数,得第二个余数; 又用第二个余数除第一个余数,得第三个余数; 这样逐次用后一个数去...

舒城县17328555661: 用C语言.输两个正整数,求其中最大公约数和最小公倍数. -
宰父刻勤克: //输入的两个数请用空格分隔,如:12 18#include int main() { int p,r,n,m,temp; printf("请输入两个正整数n,m:"); scanf("%d%d,",&n,&m); if (n { temp=n; n=m; m=temp; } p=n*m; while(m!=0) { r=n%m; n=m; m=r; } printf("它们的最大公约数为:%d\n",n); printf("它们的最小公约数为:%d\n",p/n); return 0; }

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