11 .要求输入100~200之间不能被3整除的数。
#include <stdio.h>
#include<stdlib.h>
main()
{
int n;
for (n = 100; n <= 200; n++)
{
if (n % 3 == 0)
continue; /*contnue语句的应用:每次n%3成立时执行一次continue,跳过printf即不输出,提前终止本次循环;不同于break,它会终止整个循环*/
printf("%-8d", n); /*左对齐,好看点*/
}
printf("\n");
system("pause");
}
或:
#include <stdio.h>
#include<stdlib.h>
main()
{
int n;
for (n = 100; n <= 200; n++)
{
if (n % 3 !=0) printf("%-8d", n); /*注意!=的输入方式!!!!必须英文输入状态下*/
}
printf("\n");
system("pause");
}
用\t对齐最好!
12 .输出以下4*5矩阵。
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 1216 20
#include <stdio.h>
#include<stdlib.h>
main()
{
int i, j, n = 0;
for (i = 1; i <= 4; i++) /*外循环输出一行数据(外循环执行一次,内循环执行5次)*/
for (j = 1; j <= 5; j++, n++) /*内循环输出一列数据(注意输出格式,即每行输出5个数换行)n用来累计数据个数*/
{
if (n % 5 == 0) printf("\n"); /*换行语句*/
printf("%d\t", i*j); /*算法第一行和第一列的乘积,注意i,j的变化方式*/
}
printf("\n");
system("pause");
}
改一:用break减少输出一行
#include <stdio.h>
#include<stdlib.h>
main()
{
int i, j, n = 0;
for (i = 1; i <= 4; i++) /*外循环输出一行数据(外循环执行一次,内循环执行5次)*/
for (j = 1; j <= 5; j++, n++) /*内循环输出一列数据(注意输出格式,即每行输出5个数换行)n用来累计数据个数*/
{
if (n % 5 == 0) printf("\n"); /*换行语句*/
if (i == 3 && j == 1)break; /*遇到第三行第一列,终止内循环(break在哪就终止哪个循环,也注意这种用if语句定位的思想)*/
printf("%d\t", i*j); /*算法第一行和第一列的乘积,注意i,j的变化方式*/
}
printf("\n");
system("pause");
}
原因:遇到第三行,第一列时,提前终止内循环,流程进入外循环
改二:用coniute减少某一数据的输出。
把上述“break”改为“continue”即可
原因:遇到第三行,第一列时,continue跳过了一次内循环,少输出一次“\t”,所以后面四个数据向前移动一个tab位置
13.循环算法
(1)用π/4≈1-1/3+1/5-1/7…..求π的近似值,知道发现某一项的绝对值小于10-6为止(该项不累加)
#include <stdio.h>
#include<stdlib.h>
#include<math.h> /*数学函数头文件*/
main()
{
int sign = 1; /*sign表示数值的符号*/
double pi = 0.0, n = 1.0, term = 1.0; /*pi代表开始多项式的值,最后代表pi的值,n代表分母;term代表临时变量,存放当前值*/
while (fabs(term) >= 1e-6) /*注意fab函数使用方法,要想提高精度,只要改变这一行的条件就行*/
{
pi = pi + term;
n = n + 2;
sign = -sign; /*符号转换算法*/
term = sign / n;
}
pi = pi * 4;
printf("π=%10.8f\n", pi); /*数据占10位,其中小数占8位*/
system("pause");
}
注:fabs()函数求绝对值输出为双精度数
abs()函数求绝对值输出为整数
(2)斐波那契数列,求前40个数。
F1=1 (n=1)
F2=1 (n=1)
Fn=Fn-1+Fn-2 (n≥3)
#include <stdio.h>
#include<stdlib.h>
main()
{
int f1 = 1, f2 = 1, f3,i;
printf("%12d\n%12d\n", f1, f2); /*f1和f2的输出方法,,真是醉了。。。*/
for (i = 1; i <= 38; i++) /*注意循环范围*/
{
f3 = f1 + f2;
printf("%12d\n", f3); /*思想:中间即输出!!*/
f1 = f2; /*f4=f3+f2,交换赋值*/
f2 = f3;
}
system("pause");
}
程序优化(一行输出四个)
#include <stdio.h>
#include<stdlib.h>
main()
{
int f1 = 1, f2 =1, i;
for (i = 1; i <= 20; i++) /*改为每次输出两个,所以只循环20次*/
{
printf("%12d%12d", f1, f2);
if (i % 2 == 0) /*此if语句的作用是使输出4个数后换行,i为偶数时换行,*/
printf("\n");
f1 = f1 + f2;
f2 = f2 + f1; /*注意这一行的f1数值已变成f3*/
}
system("pause");
}