素数
判断素数
int x;
scanf("%d", &x);
int i;
int isprime = 1; //x是素数
for ( i = 2; i < x; i++ ) {
if ( x % i == 0) {
isprime = 0;
}
}
if ( isprime == 1 ) {
printf("是素数\n");
} else {
printf("不是素数\n");
}
求100以内的素数
int x;
for ( x = 1; x <= 100; x++ ) {
int i;
int isprime = 1;
for ( i = 2; i < x; i++ ) {
if ( x % i ) {
isprime = 0;
break;
}
}
if ( isprime == 1 ) {
printf("%d", x);
}
}
前50个素数(每5个一行输出)
int x;
int cnt = 0;
x = 1;
while ( cnt < 50 ) {
int i;
int isprime = 1;
for ( i = 2; i < x; i++ ) {
if ( x % i == 0 ) {
isprime = 0;
break;
}
}
if ( isprime == 1 ) {
cnt ++;
printf("%d\t", x);
if ( cnt % 5 == 0 ) {
printf("\n");
}
}
break 跳出循环
countinue 跳过循环这一轮剩下的语句进入下一轮
break和countine 只能对它所在的循环做
嵌套的循环
嵌套循环各个循环的控制变量应该不一样
goto
goto out ... out
goto无条件跳转容易破坏程序流程结构,只建议在多重循环中使用
前n项求和
f(n)=1+1/2+1/3+...+1/n
int n;
int i;
double sum = 0.0;
scanf("%d", &n);
n = 10;
for ( i = 1; i <= n; i++ ) {
sum += 1.0/i;
}
printf("f(%d)=%f\n", n, sum);
f(n)=1-1/2+1/3-1/4+...+1/n
int n;
int i;
double sum = 0.0;
int sign = 1;
scanf("%d", &n);
for ( i = 1; i <= n; i++ ) {
sum += sign * 1.0 / i;
sign = -sign;
}
printf("f(%d)=%f\n, n, sum");
整数分解
int x;
scanf("%d", &x);
x = 13425;
int mask = 1;
int t = x;
while ( t > 9 ) {
t /= 10;
mask *= 10;
}
printf("x=%d, mask=%d\n", x mask);
do {
int d = x / mask;
printf("%d", d);
if ( mask > 9 ) {
printf(" ");
}
x %= mask;
mask /= 10;
} while ( mask > 0 );
printf("\n");
求最大公约数
1.枚举法(有序地去尝试每一种可能)
int a,b;
int min;
scanf("%d %d", &a, &b);
if ( a < b ) {
min = a;
} else {
min = b;
}
int ret = 0;
int i;
for ( i = 1; i < min; i++ ) {
if ( a % i == 0 ) {
if ( b % i ) {
ret = i;
}
}
}
printf("%d和%d的最大公约数是%d.\n", a, b, ret);
2.辗转相除法
(1)如果b等于0,计算结束,a就是最大公约数;
(2)否则,计算a除以b的余数,让a等于b,而b等于那个余数;
(3)回到第一步
int a,b;
int t;
scanf("%d %d", &a, &b);
while ( b != 0 ) {
t = a % b;
a = b;
b = t;
}
printf("gcd=%d\n", a);
整数之间相除,结果是整数。
浮点数除以整数,结果是浮点数。