继续发初学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 编辑 ]











