学习C语言程序开发范例
实例015 绘制余弦曲线
编程实现用“ * ”绘制余弦曲线
绘制余弦曲线用到了反余弦函数acos(),通过纵坐标的值来求出横坐标的值,确定了横坐标的值,其对称位置的横坐标值也就可以确定,即用621减去确定的横坐标值。
#include<stdio.h>
#include<math.h> //本程序中反三角函数的计算用到标准库中的math.h文件
main()
{
double y; /*此时y为浮点型,提高计算精度*/
int x, m;
for (y = 1; y >= - 1; y -= 0.1) /*0到π,π到2π分别绘制21个点。y值为-1到1,步长为0.1*/
{
m = acos(y) * 10; /*求出对应的横坐标位置*/
for (x = 1; x < m; x++)
printf(" "); /*画*前面的空格数,即左侧的空格*/
printf("*"); /*画出左边的*号*/
for (; x < 62 - m; x++) /*画出对称(右)面的*号*/
printf(" "); /*画出中间的空格数*/
printf("*\n"); /*每行只有两个*号,画出第二个*号后直接转到下一行*/
}
getch();
}
运行结果:
- 根据本实例,可以举一反三,编程绘制正切曲线和余切曲线。
实例016 打印乘法口诀表
1、输出最常见的左下三角形乘法口诀表
#include <stdio.h>
main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
printf("%d*%d=%2d ", i, j, i * j); /*等号后面为2d是为了输出时格式工整,每列对齐。2d后面要带空格*/
printf("\n");
}
}
输出结果如下:
*将等号后面的2d换成d时的输出结果:
2、右下三角形九九乘法表:
#include <stdio.h>
main()
{
int i, j, n;
for (i = 1; i <= 9; i++)
{
for (n = 1; n <= 9 - i; n++)
printf(" "); /*若下方的2d后面是一个空格,则此处打印7个空格;若2d后面为两个空格,则打印8个空格,以此类推。本例中为7个空格。*/
for (j = 1; j <= i; j++)
printf("%d*%d=%2d ", i, j, i * j);
printf("\n");
}
}
输出结果:
3、左上三角形九九乘法表:
int main() {
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
if (j < i)
printf("");
else
printf("%d*%d=%2d ", i, j, i * j);
}
printf("\n");
}
return 0;
}
输出结果:
/4、右上三角形九九乘法表:
int main() {
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++) {
if (j < i)
printf(" ");
else
printf("%d*%d=%2d ", i, j, i * j);
}
printf("\n");
}
return 0;
}
输出结果:
5、完整方形九九乘法表
#include <stdio.h>
int main() {
int i, j;
for (i = 1; i <= 9; i++) {
for (j = 1; j <= 9; j++)
printf("%d*%d=%2d ", i, j, i * j);
printf("\n");
}
return 0;
}
输出结果:
- 根据本实例,可以举一反三,利用循环输出以下图形:
实例017 打印杨辉三角
打印出以下的杨辉三角形(要求打印出10行)
要想打印出杨辉三角,必须知道杨辉三角的特点:
1.每一行的第一列均为1;
2.对角线上的数字也均为1;
3.除每一行第一列和对角线上的数字外,其余数字均等于其上一行同列数字与其上一行前一列数字之和。
#include<stdio.h>
main()
{
int i, j, a[11][11]; /*定义i,j,a[11][11]为基本整型*/
for (i = 1; i <= 10; i++) /*for循环i的范围从1到10*/
{
a[i][i] = 1; /*对角线元素全为1*/
a[i][1] = 1; /*每行第一列元素全为1*/
}
for (i = 3; i < 11; i++) /*for循环范围从第3行到第10行*/
for (j = 2; j <= i - 1; j++) /*for循环范围从第2列开始到该行行数减一列为止*/
a[i][j] = a[i - 1][j - 1] + a[i - 1][j]; /*第i行第j列等于第i-1行j-1列的值加上第i-1行j列的值*/
for (i = 1; i <= 10; i++)
{
for (j = 1; j <= i; j++)
printf("%4d", a[i][j]); /*通过上面两次for循环将二维数组a中元素输出*/
printf("\n"); /*每输出完一行进行一次换行*/
}
}
输出结果:
- 根据本实例,可以举一反三,在键盘中输入如下字母“a、b、c、d、e、f”,输出时的顺序为:“f、a、b、c、d、e”;编程实现通过循环按行顺序为一个5×5的二维数组data赋1-25的自然数,然后输出该数组的左下半三角形。
实例018 序列求和
用while循环做一个简单的计算s=1+1/2+1/3+…+1/n。
#include <stdio.h>
main()
{
int i = 1, n; /*定义变量i,j为基本整型并给i赋初值*/
double sum = 0; /*定义变量s为双精度型并赋初值0*/
printf("input n:\n");
scanf("%d", &n); /*scanf函数获取n的值*/
while (i <= n) /*当i小于等于n时,s逐次累加求和*/
{
sum = sum + 1.0 / (double)i;
i++;
}
printf("n=%d,sum=%1f\n", n, sum); /*将n与sum的值打印输出*/
}
输出结果:
当从键盘上输入数字17时,可得结果为3.439553
- 根据本实例,可以举一反三,求1-100中所有整数相加的和;求平均分:任意输入某学生的五门学科成绩,求出总成绩及平均分。
实例019 简单的级数运算
有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13,…… 求出这个数列的前20项和。
观察这个分数序列,我们不难发现,前一个分数的分子是后一个分数的分母,并且前一个分数的分子与分母的和是后一个分数的分子。题中要求求出这个数列的前20项之和,那么我们只要让循环执行20次即可。
#include <stdio.h>
main()
{
int n, t; /*定义变量n,t为基本整型*/
float a = 2, b = 1, sum = 0; /*定义变量a,b,sum单精度型并分别赋初值2,1,0*/
for (n = 1; n <= 20; n++) /*for循环变量n的范围从1到20*/
{
sum = sum + a / b; /*累加求和*/
t = a; a = a + b; b = t; /*借助中间变量t完成后一个分数与前一个分数间数值间的转换*/
}
printf("sum is %f\n", sum); /*将最终所求的和sum输出*/
}
- 根据本实例,可以举一反三,编程计算鸡兔同笼问题:鸡兔共有30只,脚共有90只,编程计算鸡、兔各有多少只。
实例020 用while语句求n!
用while语句求n的阶乘。
3!=3 * 2 * 1,5!=5 * 4 * 3 * 2 * 1,以此类推n!=n * (n-1) * … * 2 * 1
当n为0和1的时候我们单独考虑,此时他们的阶乘均为1。
#include <stdio.h>
main()
{
int i = 2, n; /*定义变量i,n为基本整型并为i赋初值2*/
float fac = 1; /*定义fac为单精度型并赋初值1*/
printf("please input an interger>=0.\n");
scanf("%d", &n); /*使用scanf函数获取n的值*/
if (n == 0 || n == 1) /*当n为0或1的时候输出阶乘为1*/
{
printf("factorial is 1.\n");
return 0;
}
while (i <= n) /*当满足输入的数值大于等于i时执行循环体语句*/
{
fac = fac * i; /*实现求阶乘的过程*/
i++; /*变量i自加*/
}
printf("factorial of %d is : %.2f.\n", n, fac); /*输出n和fac最终值*/
}
- 根据本实例,可以举一反三,从键盘中输入三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型;计算1-3+5-7+…-99+101的值。
实例021 特殊等式
有这样一个等式,xyz+yzz=532,编程求x、y、z的值(xyz和yzz分别表示一个三位数)
#include <stdio.h>
main()
{
int x, y, z, i;
for (x=1;x<10;x++)
for(y=1;y<10;y++)
for (z = 0; z < 10;z++)
{
i = 100 * x + 10 * y + z + 100 * y + 10 * z + z;
if (i == 532)
printf("x=%d,y=%d,z=%d\n", x, y, z);
}
}
输出结果:
x=3,y=2,z=1
- 根据本实例,可以举一反三,当xyz*yz=10248时,编程求x,y,z可能的值;当xyz-zyx=297时,编程求x,y,z可能的值。
62是一个近似值,即2π*10 ↩︎