C语言题目求助

qq_40929641 2017-11-04 01:42:28
本人是C语言初学者,最近在做一道题:我们认为2是第一个素数,3是第二个素数,5是第三个素数,依次类推。
现在,给定两个整数n和m,0<n<=m<=200,你的程序要计算第n个素数到第m个素数之间所有的素数的和,包括第n个素数和第m个素数。
编的代码如下:
#include <stdio.h>
#include <stdlib.h>

int main()
{
int data[200],i,n,m,dataNumber=2,sum=0;
for(i=0;i<
200;i++)
{
if(dataNumber=2)
{
data[i]=dataNumber;
dataNumber++;
}
else
{
data[i]=dataNumber;
dataNumber=dataNumber+2;
}
}
scanf("%d%d",&n,&m);
for(n<=m;n++;)
{
sum=sum+data[n];
}
printf("%d\n",sum);
return 0;
}





但是最后结果是乱码,有大神可以帮我看一下哪里错了吗?谢谢(运行没有报错)
...全文
217 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2017-11-06
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int is_prime(int num);

int main(void)
{

#if 1
    int m, n, cnt = 0, sum = 0;
    int i;

    scanf("%d%d", &m, &n);

    if (m < n)
        return 0;

    for (i = 2; i < 200; i++)
        if (is_prime(i)) {
            printf("%d\n", i);
            cnt++;
            if (cnt > m)
                break;
             if (cnt >= n)
                 sum += i;
        }
    printf("sum = %d\n", sum);
#else

    int data[200],i,n,m,dataNumber=2,sum=0;
    for(i=0;i<
            200;i++)
    {
        if(dataNumber=2)
        {
            data[i]=dataNumber;
            dataNumber++;
        }
        else
        {
            data[i]=dataNumber;
            dataNumber=dataNumber+2;
        }
    }
    scanf("%d%d",&n,&m);
    for(n<=m;n++;)
    {
        sum=sum+data[n];
    }
    printf("%d\n",sum);
#endif
    return 0;
}

/*check prime */
int is_prime(int num)
{
    int i;

    int len = sqrt(num) + 1;
    for (i = 2; i< len; i++)
        if (num % i == 0)
            break;

    if (i >= len)
        return 1;
    else
        return 0;
}
参考一下吧
Davidsdu 2017-11-04
  • 打赏
  • 举报
回复
寻找素数的算法有问题: 1.楼主的方法除了2以外,寻找的都是奇数,奇数不一定是素数。 2. if(dataNumber=2)这一句会导致寻找的200个素数全部为2。 后续计算问题: 1. for(n<=m;n++;)会导致循环无法退出。 附上根据楼主的思路修改的程序,请查阅,有问题请指出 int main(void) { int data[200],i,n,m,dataNumber=2,sum=0; for(i=0;i<200;i++) { if(dataNumber==2) { data[i]=dataNumber; dataNumber++; printf("%d\n",data[i]); } else { int j=2; for(j=2;j<dataNumber;j++) { if(dataNumber%j==0) { dataNumber+=2; } } data[i]=dataNumber; dataNumber=dataNumber+2; printf("%d\n",data[i]); } } scanf("%d%d",&n,&m); for(;n<=m;n++) { sum=sum+data[n]; } printf("%d\n",sum); return 0; } 这个问题其实分两步: 1. 找出200个素数。 2. 计算第n与第m之间的素数和。 我的建议是: 1. 先寻找素数。从寻找5个素数开始,逐步增加,并打印信息,可以迅速定位问题。然后扩展到200个素数。 2. 进行计算和。 3. 考虑异常情况。 如有错误,请指出。
m_y_Answer 2017-11-04
  • 打赏
  • 举报
回复
请看代码,不懂留言

#include <stdio.h>
int judgePrime(int num); //这是用来判断是否是素数的
int main()
{
	int n = 1, m = 9, sum = 0;
	for(int i = n; i <= m ; i++)
	{
		if( judgePrime(i))
		{
			printf("%d\n",i);
			sum = sum + i;
		}
	}
	printf("所有的素数的和是%d\n",sum);
}
int judgePrime(int num) //判断素数的函数的实现
{
	int i = 2,j = num;
	for( i ; i < j ; i++)
	{
		if( num % i == 0 )
		{
			return 0;
		}
	}
	return 1;
}

一生要强的Zz 2017-11-04
  • 打赏
  • 举报
回复
算法有误,可以打印出来看看。
Intel0011 2017-11-04
  • 打赏
  • 举报
回复
1.语法问题 if(dataNumber=2) ---> if(dataNumber==2) for(n<=m;n++;) --> for(;n<=m;n++) 2.另外你的素数产生算法是错误的
#include "iostream.h" #include "string.h" #include "stdlib.h" int g; //g是接收功能选择的变量 // 加法函数 void out() { cout<<" 程序功能:可以完成任意大数的加法,减法和比较大小"<y?m=x:m=y; ma=m; i=x-1; j=y-1; for(;m>0;i--,j--,m--) { if(j=xx) s=int(a[i])-48+jin; //将字符转换成整型 else if(i=yy) s=int(b[j])-48+jin; else if(i>=xx && j>=yy) s=(int(a[i])-48+int(b[j])-48+jin); if(s>9) { jin=1; c[m]=char(s+38); } else { jin=0; c[m]=char(s+48); } } if(jin==1) c[0]='1'; else c[0]=' '; if(g==1) { cout<<"两数相加的结果为:"; if(f==0) for(i=0;i=0;i--,j--,m--) { if(j=xx) s=int(a[i])-48-jin; else if(i>=xx&&j>=yy) s=(int(a[i])-48)-(int(b[j])-48)-jin; if(s<0) { jin=1; c[m]=char(s+58); } else { jin=0; c[m]=char(s+48); } } if(g==1) { cout<<"两数相加的结果为:"; if(f==0) for(i=0;iy) { if(a[0]=='-') cout<<"数一小于数二"<b[i]) { cout<<"数一小于数二"<b[i]) { cout<<"数一大于数二"<>a; cout<<" 输入第二个大数:"; cin>>b; while(1) { cout<<"(1:加法 2:减法 3:比较 4:乘法 5:除法 6:求余)请选择:"; cin>>g; x=strlen(a); y=strlen(b); if(a[0]=='-' && b[0]=='-' && g==1) { f=1; d=3; add(a,b,x,y,f,d); } if(a[0]!='-' && b[0]!='-' && g==1) { f=0; d=0; add(a,b,x,y,f,d); } if(a[0]=='-' && b[0]!='-' && g==1) { if(x-1>y) { f=1; d=1; jian(a,b,x,y,f,d); } if(x-1==y) { for(int i=0;ib[i]) { f=1; d=1; jian(a,b,x,y,f,d); break; } if(a[i+1]y-1) { f=0; d=2; jian(a,b,x,y,f,d); } if(x==y-1) { for(int i=0;ib[i+1]) { f=0; d=2; jian(a,b,x,y,f,d); break; } if(a[i]y) { f=1; d=1; jian(a,b,x,y,f,d); } if(x==y) { for(int i=1;ib[i]) { f=1; d=1; jian(a,b,x,y,f,d); break; } if(a[i]y) { f=0; d=0; jian(a,b,x,y,f,d); } if(x==y) { for(int i=0;ib[i]) { f=0; d=0; jian(a,b,x,y,f,d); break; } if(a[i]>yn; if(yn!='Y' && yn!='y') break; } }赞同0| 评论 向TA求助 回答者: PFanAya | 四级采纳率:27% 擅长领域: C/C++ 参加的活动: 暂时没有参加的活动 提问者对回答的评价: 谢了 相关内容 2012-2-6 请设计一个有效的算法,可以进行两个n位大整数的乘法运算。 2011-5-31 c语言题目 1.编写两个函数,输入的整数按字符串形式逆序输出,要求... 2011-4-21 用c语言表达,输出 思路写两个例子,不要printf("\n").其次:需... 2 2011-4-3 请你设计个算法,在整数边长的直角三角形ABC的斜边c的长度确定的情... 2009-5-14 如何用栈设计个C语言计算器,高手请跟我说说算法,特别是那些括号... 7 更多相关问题>> 查看同主题问题: 整数 乘法 c++ 算法 长度 两个 其他回答 共2条 2010-10-4 09:56 alfredzzj | 三级 网上很多的呀,Google一下。 按照乘法的运算思想就可以,这是每次都将进位缓存起来。 赞同0| 评论 2010-10-5 13:44 陈学阳 | 十二级 感觉这个好~~你可以挨着比较两个字符,需要匹配的可以不去比较,或者是问号的就当成是相等的字符 bool Match(const char* pSrc,const char* pMatch) { while(*pSrc!=0) { if(*pMatch==0) return false; if(*pMatch != '?' && *pSrc != *pMatch) return false; pMatch++; pSrc++; } if(*pMatch!=0) return false; else return true; }

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧