继续发初学C做的作业 感觉写的挺垃圾的 欢迎各位来拍板砖。。
这是我发自己写的作业的帖子 看不惯的请自觉散退罢 我是来接受批评提高自己的 不是来找骂当出气筒的。。报数程序写了个更好的 https://bbs.bccn.net/forum-5-1.html
编写一个函数int prime( int a ),判断参数是否为素数。函数有一个形参a,当a为素数时,返回1,反之,返回0。
程序代码:
#include<stdio.h> #include<math.h> int prime(int a) { int i = 2; for (i=2; i<=(int)sqrt(a); i++) { if (a%i == 0) { return 0; } } return 1; } int main(void) { int a = 0,b = 0; printf("please input a number:"); scanf("%d",&a); b = prime(a); if (b ==1) { printf("the number is a prime number."); } else { printf("the number is not a prime number."); } return 0; }
编写两个函数,分别求两个正整数的最大公约数和最小公倍数,结果作为函数返回值返回。在main函数中实现输入与输出。
程序代码:
#include<stdio.h> #include<math.h> int gongyueshu(int a,int b) { int r = 1; if (a < b) { r = a; a = b; b = r; } while (b != 0) { r = a % b; a = b; b = r; } return a; } int gongbeishu(int a,int b) { return (a*b/gongyueshu(a,b)); } int main(void) { int a = 0,b = 0,c = 0,d = 0; printf("Please input two integer numbers:"); scanf("%d%d",&a,&b); c=gongyueshu(a,b); d=gongbeishu(a,b); printf("gongyueshu is %d\ngongbeishu is %d",c,d); return 0; }
m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)。若m=6,则输出n=1<CR> 3 6 4 2 5 1;若m=10,则输出n=4<CR> 3 6 9 2 7 1 8 5 10 4;若m=100,则输出n=91<CR> 3 6 9……100 58 91。函数int fun(int n ,int *p)实现上述功能,返回n个人中最后余的1人的起始序号,并将退出的序号顺序写入p指向的数组中。
这个的算法有点垃圾 不过貌似节省内存
程序代码:
#include<stdio.h> #include<string.h> #include<time.h> #define FAST /* for test */ #define M 100000 int baoshu(int n,int *p) { int i = 0; int pick = 1; int j = 0; for (; i<n-2; i++) { pick += 2; /* (n-i) nums */ if (pick > (n-i)) { pick -= (n-i); } p[n+1] = p[pick]; /* p[pick] == *(p+pick) */ #ifndef FAST for (j=pick; j<n+1; j++) { p[j] = p[j+1]; } #else /* faster */ /* memcpy (void*, const void*, size_t); */ memcpy((void *)&p[pick],(void *)&p[pick+1],(n-pick+1)*sizeof(int)); #endif } if (pick > (n-i)) { pick -= (n-i); } /* 2 nums left */ p[n+1] = p[pick]; #ifndef FAST for (j=pick; j<n+1; j++) { p[j] = p[j+1]; } #else memcpy((void *)&p[pick],(void *)&p[pick+1],(n-pick+1)*sizeof(int)); #endif p[n+1] = p[1]; #ifndef FAST for (j=1; j<n+1; j++) { p[j] = p[j+1]; } #else memcpy((void *)&p[1],(void *)&p[2],n*sizeof(int)); #endif return (p[n]); } int main(void) { int m = 0; int a[M] = {'\0'}; int i = 1; long start = 0l; long end = 0l; printf("Please input m(1<m<%d):",M-1); scanf("%d",&m); /* a[0] will not be used */ for (i=1; i<=m; i++) { a[i] = i; } start = clock(); printf("n=%d\n",baoshu(m,a)); end = clock(); for (i=1; i<=m; i++) { printf("%3d ",a[i]); } printf("\n"); printf("I use %ld ms.\n",end-start); return 0; }
编写宏,求两个数的最大值。
程序代码:
#include<stdio.h> #define MAX(a,b) ((a)>(b))?(a):(b) int main(void) { int a = 0,b = 0; printf("Please input a,b:"); scanf("%d,%d",&a,&b); printf("Max is %d",MAX(a,b)); return 0; }
[ 本帖最后由 zklhp 于 2011-5-10 20:25 编辑 ]