程序设计流程:
1.读题:了解掌握现实世界问题,明确输入和输出,即明确用什么数据算什么结果;
2.数据表示(Data Description):用数据表示问题;
3.设计算法(Algorithm Design):设计计算步骤或流程;
4.编写程序(Programming):根据数据描述和算法编写程序;
5.运行调试(Run,Testing & Debug):运行程序、测试程序和修改错误。
第一章
ex1-1 求n!
解法一:用宏定义实现程序通用性
/* ex1-1 求n! */
#include <stdio.h>
#define N 5
int main(void)
{
int i, p = 1;
for(i = 1; i <= N; i++)
p *= i;
printf("%d\n", p);
return 0;
}
解法二:根据读入数据进行计算
/* ex1-1 求n! */
#include <stdio.h>
int main(void)
{
int n, i, p = 1;
scanf("%d", &n);
for(i = 1; i <= n; i++)
p *= i;
printf("%d\n", p);
return 0;
}
解法三:把功能封装到函数
/* ex1-1 求n! */
#include <stdio.h>
int fact(int n)
{
int i, p = 1;
for(i = 1; i <= n; i++)
p *= i;
return p;
}
int main(void)
{
int n;
scanf("%d", &n);
printf("%d\n", fact(n));
return 0;
}
ex1-3 求1-1/2+1/3-1/4+…+1/99-1/100
解法一:用宏定义实现程序通用性
/* ex1-3 求1-1/2+1/3-1/4+......+1/99-1/100 */
#include <stdio.h>
#define N 100
int main(void)
{
int i;
float sum = 0, sign = 1;
for(i = 1; i <= N; i++) {
sum += sign * (1.0 / i);
sign = -sign;
}
printf("%f\n", sum);
return 0;
}
解法二:根据读入数据进行计算
/* ex1-3 求1-1/2+1/3-1/4+......+1/99-1/100 */
#include <stdio.h>
int main(void)
{
int n, i;
float sum = 0, sign = 1;
scanf("%d", &n);
for(i = 1; i <= n; i++) {
sum += sign * (1.0 / i);
sign = -sign;
}
printf("%f\n", sum);
return 0;
}
解法三:把功能封装到函数
/* ex1-3 求1-1/2+1/3-1/4+......+1/99-1/100 */
#include <stdio.h>
float sum(int n)
{
int i;
float sum = 0, sign = 1;
for(i = 1; i <= n; i++) {
sum += sign * (1.0 / i);
sign = -sign;
}
return sum;
}
int main(void)
{
int n;
scanf("%d", &n);
printf("%f\n", sum(n));
return 0;
}
ex1-4 鸡兔同笼
解法一:枚举法,同时枚举鸡和兔的数量x和y。
/* 鸡兔同笼:给定鸡兔的头数和脚数(n和m),计算鸡和兔的数量 */
#include <stdio.h>
int main(void)
{
int n, m, x, y;
scanf("%d%d", &n, &m);
for(x = 0; x <= n; x++)
for(y = 0; y <= n; y++)
if(x + y == n && 2 * x + 4 * y == m) {
printf("%d %d\n", x, y);
x = n;
break;
}
return 0;
}
解法二:枚举法,枚举鸡的数量x,兔的数量y=n-x。
/* 鸡兔同笼:给定鸡兔的头数和脚数(n和m),计算鸡和兔的数量 */
#include <stdio.h>
int main(void)
{
int n, m, x;
scanf("%d%d", &n, &m);
for(x = 0; x <= n; x++)
if(2 * x + 4 * (n - x) == m) {
printf("%d %d\n", x, n - x);
break;
}
return 0;
}
解法三:数学法,直接计算兔的数量。
/* 鸡兔同笼:给定鸡兔的头数和脚数(n和m),计算鸡和兔的数量 */
#include <stdio.h>
int main(void)
{
int n, m, y;
scanf("%d%d", &n, &m);
y = (m - 2 * n) / 2;
printf("%d %d\n", n - y, y);
return 0;
}
ex1-5 判定大于或等于3的正整数是否为素数
/* ex1-5 判定大于或等于3的正整数是否为素数 */
#include <stdio.h>
#include <math.h>
int isprime(int n)
{
if(n % 2 == 0) return 0;
int end = sqrt(n), i;
for(i = 3; i <= end; i += 2)
if(n % i == 0) return 0;
return 1;
}
int main(void)
{
int n;
while(scanf("%d", &n) != EOF)
printf(isprime(n) ? "YES\n" : "NO\n");
return 0;
}
第4章
例4-7 分段函数
解法:把功能封装到函数
/* 例4-7 分段函数 */
#include <stdio.h>
int f(int x)
{
if(x < 0)
return 3 * x + 2;
else if(x == 0)
return 0;
else if(0 < x && x <= 5)
return 2 * x - 1;
else
return x * x + 3;
}
int main(void)
{
int x;
while(scanf("%d", &x) != EOF)
printf("y=%d\n", f(x));
return 0;
}
ex4-9 根据三角形的三条边计算三角形面积
解法:把功能封装到函数,使用数学函数进行计算
/* ex4-9 根据三角形的三条边计算三角形面积 */
#include <stdio.h>
#include <math.h>
double area(double a, double b, double c)
{
double s = (a + b + c) / 2;
return sqrt(s * (s - a) * (s - b) * (s - c));
}
int main(void)
{
double a, b, c;
while(scanf("%lf%lf%lf", &a, &b, &c) != EOF) {
printf("area=%5.2f\n", area(a, b, c));
}
return 0;
}
第5章
ex5-1 计算1+2+3+…+100
解法:使用循环语句while,使用++运算符(++写在前面则先加1再使用,++写在后面则先使用再加1)
/* ex5-1 计算1+2+3+...+100 */
#include <stdio.h>
#define N 100
int main(void)
{
int i = 1, sum = 0;
while(i <= N)
sum += i++;
printf("%d\n", sum);
return 0;
}