#include <stdio.h>
main () {
int m, n;
for (n = 1; n <= 200; n++)
for (m = 1; m * m <=
n; m++)
if (m * m == n)
printf("%d ", n);
printf("\n"); /* 最后换一行 */
}
例:利用sqrt求1到200之间的完全平方数
for (n = 1; n <= 200; n++)
if ((int)sqrt(n) * (int)sqrt(n) == n)
printf("%d ", n);
例:利用sqrt求1到200之间的完全平方数的改进程序
for (n = 1; n <= 200; n++) {
m = (int)sqrt(n);
if (m * m == n)
printf("%d ", n);
}
例:利用从1开始逐个打印计数变量值的平方,求1到200之间的完全平方数
for (n = 1; n * n <= 200; n++)
printf("%d ", n * n); /* 注意应当打印什么 */
int primeQ (int n) { /* 判断一个数是否素数 */
int m = 2;
for ( ; m * m <= n; m++)
if (n % m == 0) return 0;
/* 发现因子,不是素数 */
return 1; /* 可能性均考虑过,没有因子,是素数 */
}
double cbrt(double x){
double x1, x2;
x1 = x;
x2 = (2.0 * x1 + x / (x1 * x1)) / 3.0;
while (fabs((x2 - x1) / x1) >= 1E-6) {
x1 = x2;
x2 = (2.0 * x1 + x / (x1
* x1)) / 3.0;
}
return x2;
}
double cbrt(double x){
double x1, x2;
if (x == 0.0) return 0.0;
for (x1 = x;
x2 = (2.0 * x1 + x / (x1 * x1)) / 3,
fabs((x2 - x1)/x1) >= 1E-6;
)
x1 = x2;
return x2;
}
long fib (int n) {
return n < 2 ? 1 : fib(n-1) + fib(n-2);
}
#include <stdio.h>
#include <time.h>
long fib (int n) {
return n <= 1 ? 1 : fib(n-1) + fib(n-2);
}
main () {
double x;
x = clock() / CLOCKS_PER_SEC;
fib(33);
x = clock() / CLOCKS_PER_SEC - x;
printf("Timing fib(33): %f\n", x);
}
long fib1 (int n) {
long f1 = 1, f2 = 1, f3, i;
if (n <= 1) return 1;
for (f3 = f1 + f2, i = 2; i < n; i++) {
f1 = f2;
f2 = f3;
f3 = f1 + f2;
}
return f3;
}
#include <stdio.h>
long count (double m) {
long n;
double sum = 0.0;
for (n = 0; sum <= m; n++)
sum += 1.0 / n;
return n;
}
main () {
printf("Sum of %ld terms exceeds %f\n",
count(100.0), 100.0);
printf("Sum of %ld terms exceeds %f\n",
count(200.0), 200.0);
printf("Sum of %ld terms exceeds %f\n",
count(1000.0), 1000.0);
}
例:从1开始逐个递增求最大公约数
long gcd (long m, long n) {
long d = 1, k = 2;
for ( ; k <= m && k <= n; k++)
if (m % k == 0 &&
n % k == 0)
d = k;
return d;
}
for ( k = (m > n ? n : m);
m % k != 0 || n % k != 0; k--)
; /* 空循环体 */
return k; /* 循环结束时,k总是最大公约数 */
long gcd(long m, long n) {
if (m < 0) m = -m;
if (n < 0) n = -n;
return n == 0 ? m : gcd1(m, n);
}
long gcd2 (long m, long n) {
long r;
if (n == 0) return m;
for (r = m % n; r != 0; r = m % n) {
m = n;
n = r;
}
return n;
}
for (n = 6; n <= 200; n += 2)
for (m = 3; m <= n/2; m+= 2)
if (primeQ(m) &&
primeQ(n - m))
printf("%d = %d + %d\n", n, m, n-m);
例:由输入得到的一个字符输出,并换一行
#include <stdio.h>
main () {
int c;
c = getchar();
putchar(c);
putchar('\n');
}
#include <stdio.h>
main () {
int c;
do {
c = getchar();
printf("%d ", c);
} while (c != '\n');
}
#include <stdio.h>
main () {
int c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}
例:统计由标准输入得到的文件中字符的个数
#include <stdio.h>
main () {
int c; long n = 0;
while ((c = getchar()) != EOF)
n++;
printf("%ld\n", n);
}
例:读入一系列数值,把每个数据作为一个圆盘的半径,分别计算出每个圆盘的面积
#include <stdio.h>
void pc_area (double r) {
printf ("r = %f, S = %f\n", r, 3.14159265 * r *
r);
}
main () {
double x;
while (scanf("%lf", &x) == 1)
if (x < 0)
printf("Input error: %lf\n", x);
else
pc_area(x);
}
#include <stdio.h>
main () {
double sum = 0.0, biggest, smallest, x;
int count = 1;
scanf("%lf", &sum);
biggest = smallest = sum;
while (scanf("%lf", &x) == 1) {
sum += x;
count++;
if (x > biggest) biggest
= x;
if (x < smallest) smallest
= x;
}
printf("Count of numbers: %d\n", count);
printf("Biggest: %lf, Smallest: %lf, Average: %lf\n",
biggest,
smallest, sum / count);
}
例:分别统计输入文件中的空格、行、数字、花括号以及其他所有字符
#include <stdio.h>
main (void) {
int c;
int nd = 0, nb = 0, nl = 0, nc = 0, nn = 0; /*5个计数器*/
while ((c = getchar()) != EOF)
switch (c) {
case ' ':
nb++; break;
case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9': case '0':
nd++; break;
case '\n':
nl++; break;
case '{':
case '}':
nc++; break;
default:
nn++; break;
}
printf("spaces: %d, lines: %d, digits: %d", nb,
nl, nd);
printf("{ and }: %d, others: %d\n", nc, nn);
}
#define OUT 0
main (void) {
int c, count = 0, state = OUT;
while ((c = getchar()) != EOF)
if (c == ' ' || c == '\t'
|| c == '\n')
state = OUT;
else if (state == OUT) {
state = IN;
count++;
}
printf("word count: %d\n", count);
}