| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 804 人关注过本帖
标题:一道二级的上机题目,请大家帮忙看一下
只看楼主 加入收藏
snowgaby
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-7-6
收藏
 问题点数:0 回复次数:3 
一道二级的上机题目,请大家帮忙看一下

主要是看函数fun的功能,将所有大于1小于m的非素数存入xx所指数组中,非素数个数通过k传回 比如输入17,得到的结果是9和4 6 8 9 10 12 14 15 16 下面写好的程序可是运行结果是错误的 如果能找出原因的话请帮忙说一下, 也希望能有更好的算法

#include "stdio.h" #include "conio.h" void fun(int m,int *k,int xx[]) {int i,j,t=0; for(i=4;i<m;i++) {for(j=2;j<i-1;j++) if(i%j!=0&&i%(j-1)!=0) break; if(j<i) { xx[t]=i; t++; break; } } *k=t; } main() { int m,n,zz[100]; clrscr(); printf("please enter an integer number between 10 and 100:"); scanf("%d",&n); fun(n,&m,zz); printf("there are %d non-prime numbers less than %d:",m,n); for(n=0;n<m;n++) printf("%4d",zz[n]); }

搜索更多相关主题的帖子: 上机 
2004-09-07 14:39
young
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:223
专家分:160
注 册:2004-9-5
收藏
得分:0 

if(i%j!=0&&i%(j-1)!=0) // 看这句假设i = 5; j = 3; 那么if语句为true,终止循环 break; if(j<i) { xx[t]=i; // 根据上面的注释, j < i 也成立, 把5写进数组(不符合题目要求),并且又执行的break,跳出了外层的循环. t++; break; }

// 下面我自己写了一个,没有经过验证,可能有错,而且效率估计不怎么样.

void fun(int m,int *k,int xx[]) { int i,j,t=0; for(i=4;i<m;i++) { j=2; while(j < i) { if((i % j) == 0) { xx[t]= i; t++; break; } } } *k = t; } // 不知道我说的对不对,请各位指教了


如果你爱C语言,请你爱指针; 如果你爱指针,请你爱指针的指针;
2004-09-07 19:12
Jorbo
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2004-9-8
收藏
得分:0 

一共有三处错误!!

1.if(i%j!=0&&i%(j-1)!=0)中的j-1改为j+1;

2.if(i%j!=0&&i%(j-1)!=0) break; 中的break改为continue;

3.if(j<i)改为else.

改后为:

#include "stdio.h" #include "conio.h" void fun(int m,int *k,int xx[]) {int i,j,t=0; for(i=4;i<m;i++) {for(j=2;j<i-1;j++) if(i%j!=0&&i%(j+1)!=0) //break; continue; //if(j<i) else { xx[t]=i; t++; break; //continue; } } *k=t; } main() { int m,n,zz[100]; //clrscr(); printf("please enter an integer number between 10 and 100:"); scanf("%d",&n); fun(n,&m,zz); printf("there are %d non-prime numbers less than %d:",m,n); for(n=0;n<m;n++) printf("%4d",zz[n]); }


2004-09-15 11:35
lgp311
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-8-29
收藏
得分:0 

fun改为

void fun(int m,int *k,int xx[]) {int i,j,p=0; for(i=4;i<m;i++) {for(j=2;j<=i/2;j++) if(i%j==0) {xx[p]=i;p++;break;} } *k=p; }

2004-09-15 22:25
快速回复:一道二级的上机题目,请大家帮忙看一下
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016660 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved