《程序设计技术》例程
《程序设计技术》第一章 C语言与程序设计(例程)
《程序设计技术》第二章 C语言基础知识(例程)
《程序设计技术》第三章 程序控制结构(例程)
《程序设计技术》第四章 数组和字符串(例程)
《程序设计技术》第五章 指针(例程)
《程序设计技术》第六章 函数(例程)
《程序设计技术》第七章 用户自定义类型(例程)
《程序设计技术》第八章 文件(例程)
《程序设计技术》第九章 编译预处理(例程)
第一章 C语言与程序设计
例1-1:
/* 例1-1 求任意两个数的和与平均值 */
#include <stdio.h>
int main(void)
{
float a, b, sum, average; /* 声明变量 */
scanf("%f,%f", &a, &b); /* 读入两个浮点数 */
sum = a + b; /* 求两个数的和 */
average = sum / 2; /* 求两个数的平均 */
printf("sum=%.3f, average=%.3f\n", sum, average);/* 输出结果 */
return 0;
}
例1-2A:
/* 例1-2 计算体育比赛的得分,10个裁判打分,去掉最低分和最高分。 */
#include<stdio.h>
#define N 10a
int main(void)
{
float s[N],max, min, sum, score;/* 声明变量 */
int i;
for(i=0; i<N; i++) /* 读入N个数 */
scanf("%f", &s[i]);
max = min = sum = s[0]; /* 计算最高分、最低分以及和值 */
for(i=1; i<N; i++)
{
if(s[i] > max)
max = s[i];
if(s[i] < min)
min = s[i];
sum += s[i];
}
score = (sum - max - min) / (N - 2); /* 计算最后得分 */
printf("Score=%.4f", score); /* 输出结果 */
return 0;
}
例1-2B:
/* 例1-2 计算体育比赛的得分,10个裁判打分,去掉最低分和最高分。 */
#include <stdio.h>
#include <limits.h>
#define N 10
int main(void)
{
float a, max, min, sum, score; /* 声明变量 */
int i;
/* 求最高分、最低分以及和值 */
max = INT_MIN;
min = INT_MAX;
sum = 0;
for(i=1; i<=N; i++) { /* 读入N个数,并计算最值及和 */
scanf("%f", &a);
if(a > max)
max = a;
if(a < min)
min = a;
sum += a;
}
score = (sum - max - min) / (N - 2); /* 求最后得分 */
printf("Score=%.4f", score); /* 输出结果 */
return 0;
}
例1-3A:
/* 例1-3 计算正整数m和n的最大公约数。
* 欧几里得算法的递归程序
*/
#include <stdio.h>
int gcd(int n, int m)
{
return n == 0 ? m : gcd(m % n, n);
}
int main(void)
{
int m, n;
while(~scanf("%d%d", &m, &n))
printf("%d\n", gcd(n, m));
return 0;
}
例1-3B:
/* 例1-3 计算正整数m和n的最大公约数。
* 欧几里得算法的递推程序
*/
#include <stdio.h>
int gcd(int n, int m)
{
int r;
while(n > 0) {
r = m % n;
m = n;
n = r;
}
return m;
}
int main(void)
{
int m, n;
while(~scanf("%d%d", &m, &n))
printf("%d\n", gcd(n, m));
return 0;
}
例1-3C:
/* 例1-3 枚举法:计算正整数m和n的最大公约数。*/
#include <stdio.h>
int main(void)
{
int m, n;
while(scanf("%d%d", &m, &n) != EOF) {
int x = m > n ? n : m;
for(;;) {
if(m % x == 0 && n % x == 0)
break;
x--;
}
printf("gcd=%d\n", x);
}
return 0;
}
例1-4:
/* 例1-4 枚举法:给定一个正整数,判断其立方根是否存在,若存在输出其值 */
#include <stdio.h>
int main(void)
{
int n, x = 1, c;
scanf("%d", &n);
/*
do {
c = x * x * x;
x++;
} while(c < n);
*/
c = x * x * x;
while(c < n) {
x++;
c = x * x * x;
}
if(c == n)
printf("%d", x);
else
printf("no result");
return 0;
}
例1-5A:
/* 例1-5 计算一个整数n的阶乘 */
#include <stdio.h>
int main(void)
{
int factorial=1, i=1, n;
scanf("%d", &n);
while(i<=n) {
factorial *= i++;
/*
factorial = factorial * i;
i = i + 1;
*/
}
printf("factorial=%04d\n", factorial);
return 0;
}
例1-5B:
/* 例1-5 计算一个整数n的阶乘(递推) */
#include <stdio.h>
long long factorial(int n)
{
long long factorial=1;
int i=1;
while(i<=n)
factorial *= i++;
return factorial;
}
int main(void)
{
int n;
scanf("%d", &n);
printf("n=%d\tfactorial=%lld\n", n, factorial(n));
return 0;
}
例1-6A:
/* 例1-6 用递归法计算一个整数n的阶乘。 */
#include <stdio.h>
long factorial(int);
int main(void)
{
int n;
scanf("%d", &n);
printf("n=%d fact=%ld\n", n, factorial(n));
return 0;
}
long factorial(int n)
{
if(n==0 || n==1)
return 1;
else
return n * factorial(n-1);
}
例1-6B:
/* 例1-6 计算一个整数n的阶乘(递归) */
#include <stdio.h>
/*
int fact(int n)
{
if(n == 1)
return 1;
else
return n * fact(n - 1);
}
*/
int fact(int n)
{
return n == 1 ? 1 : n * fact(n - 1);
}
int main(void)
{
int n;
scanf("%d", &n);
printf("factorial=%04d\n", fact(n));
return 0;
}
例1-7:
/* 例1-7 爬楼梯:每一步只能走1级或2级台阶,到达第n级台阶共有几种走法 */
#include <stdio.h>
int fib(int m)
{
if(m == 1)
return 1;
else if(m == 2)
return 2;
else
return fib(m - 1) + fib(m - 2);
}
int main(void)
{
int n;
while(scanf("%d", &n) != EOF)
printf("fib=%d\n", fib(n));
return 0;
}