*【例5.1】假设今年我国人口总数为13亿,若按每年2%增长,计算从现在开始10年内每年人口的数量
文字描述:
1.定义int变量n,year,定义double变量number,rate;
2.n赋值为13,rate赋值为0.02,year赋值为1;
3.判断year<=10是否成立,若成立则计算“number=n*pow((1+rate),year)”并输出year和number;
4. year=year++;
5.继续运行第3步直到year>10,此时程序结束.
流程图:
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int n = 13, year;
double number, rate = 0.02;
for(year=1;year<=10;year++)
{
number = n * pow((1 + rate), year);
printf("%2d年后,人数为:%.2f亿\n", year, number);
}
return 0;
}
运行结果:
【例5.2】编写程序,计算1-1/4+1/7-1/10+1/13-1/16+···的和,直到某一项的绝对值小于10^-6为止
文字描述:
1.定义double变量sum,item,flag,denominator;
2.sum赋值为0,item赋值为1,flag赋值为1,denominator赋值为1;
3.当|item|>=0.000001时,执行循环语句;
4.计算“sum=sum+item”,“flag=-flag”,“denominator=denominator+3”,“item=flag/denominator”;
5.输出sum.
流程图:
代码:
#include<stdio.h>
#include<math.h>
main()
{
double sum, item, flag, denominator;
sum = 0; item = 1; flag = 1; denominator = 1;
while (fabs(item) >= 1e-6)
{
sum = sum + item;
flag = -flag;
denominator = denominator + 3;
item = flag / denominator;
}
printf("sum=%f\n", sum);
return 0;
}
运行结果:
【例5.3】输入一个正整数n,求的值
文字描述:
1.定义int变量n,sum;
2.输入n;
3.sum赋值为0,i赋值为i;
4.如果i<=n为真则“sum=sum+i,i=i++”,否则进行下一步;
5.输出sum.
流程图:
代码、运行结果:
【例5.4】输入一个正整数n,求n!
文字描述:
1.定义int变量i,n,定义double变量factorial;
2.输入n;
3.factorial赋值为1,i赋值为1;
4.如果i<=n则factorial=factorial*i,i=i++,否则进行下一步;
5.输出n,factorial.
流程图:
代码:
#include<stdio.h>
int main()
{
int i, n;
double factorial;
printf("输入n的值:");
scanf_s("%d", &n);
factorial = 1;
for (i = 1; i <= n; i++)
factorial = factorial * i;
printf("%d!=%.0f\n", n, factorial);
return 0;
}
流程图:
【例5.5】编写程序,输入一个整数n,计算1-1/4+1/7-1/10+1/13-1/16+···
文字描述:
1.定义int变量n,i,定义float变量sum,item;
2.输入n;
3.flag赋值为1,denominator赋值为1,sum赋值为0,i赋值为1;
4.如果i<=n那么“item=flag*1.0/denominator,sum=sum+item,flag=-flag,denominator=denominator+3”,i=i++否则运行下一步;
5.输出sum.
流程图:
代码、运行结果:
【例5.6】编写程序,输入10个数,输出其中的最大数
文字描述:
1.定义int变量i,float变量x,max;
2.输入x;
3.使max赋值为x,i赋值为1;
4.如果i<=9那么输入第i+1个数x再判断x>max是否成立,若成立则进行i=i++并循环语句直到i>9时进行下一步;
5.输出max.
流程图:
代码、运行结果:
【例5.7】编写程序,输出所有水仙花数
文字描述:
1.定义int变量number,a,b,c;
2.number定义为1000;
3.如果number<=999为真那么“a=number/100,b=number%100/10,c=number%10”“number=a*a*a+b*b*b+c*c*c”并转到第4步,否则直接转第5步;
4.number++,并转到第3步;
5.输出number;
流程图:
代码:
#include<stdio.h>
main()
{
int number, a, b, c;
for (number = 100; number <= 999; number++)
{
a = number / 100;
b = number % 100 / 10;
c = number % 10;
if (number == a * a * a + b * b * b + c * c * c)
printf("%5d", number);
}
return 0;
}
流程图:
【例5.8】编写程序,由键盘输入一个正整数,判断其是否为完数
文字描述:
1.定义int变量number,sum,i;
2.输入number;
3.sum赋值为0,i赋值为1;
4.如果i<=number-1为真则计算i++,number%i==0,sum=sum+1并在次循环语句若为假则进行下一步;
5.判断是否符合number==sum,若符合则完数,否则不是;
6.结束;
流程图:
代码、流程图:
【5.9】统计由键盘中输入的若干个字符中,大写英文字母、小写英文字母、数字字符和其他字符的个数
文字描述:
1.定义int变量upper,lower,digit,i,other,定义char变量ch;
2.使upper,lower,digit,other赋值为0,i赋值为1;
3.如果i<=10成立那么进行下一步,不成立则跳转到第7步;
4.输入ch;
5.如果ch>'a'&&ch<='z'为真那么lower++,为假则判断ch>='A'&&ch<='Z'是否为真,若为真则upper++否判断ch>+='0'&&ch<='9'是否为真,若为真则digit++,若为假则other++,转到第6步;
6.i++,转到第3步;
7.输出upper,lower,digit,other;
流程图:
代码、运行结果:
【5.10】任意输入一行小写字母,将它们转换成大写字母后输出
文字描述:
1、定义int变量i,char变量ch;
2、i赋值为1;
3,如果(ch=getchar())!='\n'为真那么putchar(ch-32)并且i++,如果为假则结束程序.
流程图:
代码:
#include<stdio.h>
int main()
{
int i;
char ch;
for (i = 1; (ch = getchar() )!= '\n';i++)
putchar(ch-32);
return 0;
}
运行结果:
【5.11】由键盘输入3个数字,将其组合成一个整数并输出
文字描述:
1.定义int变量n,i,定义char变量ch;
2.将n赋值为0,i赋值为1;
3.如果i<=3那么输入ch并使n=n+ch-'0'并进行第4步,否则直接输出n;
4.i++并循环第3步;
流程图:
代码:
#include<stdio.h>
int main()
{
int n = 0, i;
char ch;
printf("输入3个数字:");
for (i = 1; i <= 3; i++)
{
scanf_s("%c", &ch);
n = n * 10 + ch - '0';
}
printf("%d\n", n);
return 0;
}
运行结果
【5.12】编写程序,由键盘输入一个正整数,判断其是否为素数
文字描述:
1.定义int变量i,flag,number;
2.输入number;
3.flag赋值为1,i赋值为2;
4.如果“i<=number-1&&flag”为真那么判断“number%i==0”是否为真,若为真那么数并使flag=0,i++,否则再判断flag真假,为真输出“number是素数”为假则输出“number不是素数”;
流程图:
代码、运行结果:
【例5.13】计算sum=的值
文字描述:
1.定义int变量i,sum;
2.i赋值为1,sum赋值为0;
3.如果i<=100为真那么执行第4步,为假执行第5步;
4.使sum=sum+i,i=i+1,跳回第3步;
5.输出sum.
流程图:
代码、运行结果:
【例5.14】输入一个正整数n,计算n!
文字描述:
1.定义int变量i,long变量n,fact;
2.i赋值为2,fact赋值为1;
3,输入n;
4,若i<=n为真执行第5步为假执行第6步;
5,使fact=fact*i,i=i+1跳转到第4步;
6.输出n,fact;
流程图:
代码:
#include<stdio.h>
int main()
{
int i; long n, fact;
i = 2; fact = 1;
printf("请输入n的值:");
scanf_s("%ld", &n);
while (i <= n)
{
fact = fact * i;
i = i + 1;
}
printf("%ld!=%ld\n", n, fact);
return 0;
}
运行结果:
【例5.15】由键盘输入一串字符,分别统计输入字符中数字字符、字母字符、及其他字符的个数
文字描述:
1. 定义int变量digit,letter,other,定义char变量ch;
2.使digit、letter、other都赋值为0;
3.输入ch;
4.若“ch!='\n'”为真则继续执行第3步,为假则执行第5步;
5.若“(ch>='0')&&(ch<'9')”为真则执行digit++,为假则执行第6步;
7.若“(ch>='a'&&ch<='z')||(ch>='A'&&ch'Z')”为真则l执行etter++,为假则执行other++;
8.输出digit,letter,other.
流程图:
代码、运行结果:
【例5.16】使用do-while语句计算sum=的值
文字描述:
1.定义int变量i,sum;
2.i赋值为1,sum赋值为0;
3.若i<=100为真那么执行第4步否则执行第5步;
4.执行sum=sum+1,i++并返回第3步;
5.输出sum.
流程图:
代码:
#include<stdio.h>
int main()
{
int i, sum;
i = 1, sum = 0;
do
{
sum = sum + i;
i = i + 1;
} while (i <= 100);
printf("sum=%d\n", sum);
return 0;
}
运行结果:
【例5.17】求两个自然数的最大公约数和最小公倍数
文字描述:
1.定义int变量a,b,c,r,n,m;
2.输入a,b;
3.使m=a,n=b;
4.若“r!=0”为真则执行第5步,为假则执行第6步;
5.使r=a%b,a=b,b=r,并跳转到第4步;
6.输出最大公约数和最小公倍数.
流程图:
代码、运行结果:
【例5.18】输入一个整数,统计该数的位数
文字描述:
1.定义long变量n,m,定义int变量count;
2.count赋值为0;
3.输入n;
4.使m=n;
5.若n<0为真则n=-n,为假则进行下一步;
6.判断“n!=0”,若为真则“n=n/10,count++”并重复第6步,为假则执行下一步;
7.输出m,count.
流程图:
代码:
#include<stdio.h>
int main()
{
long n, m;
int count = 0;
printf("请输入一个整数:");
scanf_s("%ld", &n);
m = n;
if (n < 0)n = -n;
do
{
n = n / 10;
count++;
} while (n != 0);
printf("整数%ld有%d位数\n", m, count);
return 0;
}
运行结果:
【例5.19】分析下面程序的运行结果
文字描述:
1.定义int变量i,
2.将i赋值为5;
3.判断“i%3==1”,若为真则进行第4步,若为假则执行第5步;
4.判断“i%5==2”,若为真则输出i,若为假则执行第5步;
5.i++;
6.判断“i!=0”,若为真则返回第3步,若为假则结束程序
流程图:
代码:
#include<stdio.h>
int main()
{
int i=5;
do
{
if(i%3==1)
if (i%5 == 2)
{
printf("%d", i);
break;
}
i++;
} while (i != 0);
return 0;
}
运行结果:
【例5.20】编写程序,由键盘输入一个正整数,判断其是否为素数
文字描述:
1.定义int变量n,m,i;
2.输入n;
3.m=sqrt(n);
4.i赋值为2;
5.判断i<=m,若为真则执行下一步,若为假则执行第7步;
6.判断n%i==0,若为真则执行下一步,若为假则返回第5步;
7.判断i>m,若为真则输出n是素数,若为假则输出n不是素数;
流程图:
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int n, m, i;
printf("请输入一个正整数:");
scanf_s("%d", &n);
m = sqrt(n);
for (i = 2; i <= m; i++)
if (n % i == 0)
break;
if (i > m)
printf("%d是素数!\n", n);
else
printf("%d不是素数!\n", n);
return 0;
}
运算结果:
【例5.21】从键盘输入一批学生的成绩(以负数作为结束标志),计算平均分,并统计不及格成绩个数
文字描述:
1.定义int变量num,n,定义float变量score,total;
2.使score,total赋值为0;
3.num赋值为0,n赋值为0;
4.输入score;
5.判断score<0,若为假则执行下一步,若为真则执行第9步;
6.判断score<60,若为真则执行下一步,若为假则执行第9步;
7.num++,total=total+score,n++;
8.返回第4步;
9.输出total/n,num.
流程图:
代码:
#include<stdio.h>
int main()
{
int num, n;
float score, total=0;
num = 0; n = 0;
while (1)
{
printf("请输入分数#%d(0~100):", n + 1);
scanf_s("%f", &score);
if (score < 0)
break;
if (score < 60)
num++;
total = total + score;
n++;
}
printf("平均分数是%.2f.\n", total / n);
printf("不及格的有:%d.\n", num);
return 0;
}
运行结果:
【例5.22】把1~100之间能被7整除的数,以每行5个的形式在屏幕上输出
文字描述:
1.定义int变量i,n;
2.i赋值为1,n赋值为1;
3.判断i<=100,若为真则执行下一步,若为假则结束程序;
4.判断i%7!=0,若为真则返回第3步,若为假则执行下一步;
5.输出i;
6.判断n++%5=0,若为真则输出\n,若为假则执行下一步;
7.i++,并返回第3步;
流程图:
代码:
#include<stdio.h>
int main()
{
int i, n = 1;
for (i = 1; i <= 100; i++)
{
if (i % 7 != 0)
continue;
printf("%4d", i);
if (n++ % 5 == 0)printf("\n");
}
return 0;
}
运行结果:
【例5.23】分析下面程序的运行结果
文字描述:
1.定义int变量n,s;
2.s赋值为0,n赋值为1;
3.判断n<10,若为真则使s=s+n并执行下一步,若为假则执行第6步 ;
4.判断s>5,若为真则执行第6步,若为假则执行下一步;
5.判断n%2==1,若为真则返回第3步,若为假则执行n++;
6.输出s,n
流程图:
代码、运行结果:
【例5.24】使用goto语句计算sum=的值
文字描述:
1.定义int变量i,sum;
2.i赋值为1,sum赋值为0;
3.判断i<=100,若为真则执行sum=sum+1并执行下一步,若为假则输出sum;
4.i=i+1;
5.返回第3步;
流程图:
代码:
#include<stdio.h>
int main()
{
int i, sum;
i = 1, sum = 0;
loop:if (i <= 100)
{
sum = sum + i;
i = i + 1;
goto loop;
}
printf("sum=%d\n", sum);
return 0;
}
运行结果:
【例5.25】求1!+2!+3!+···+10!
文字描述:
1.定义int变量i,j,定义double变量factorial;
2. factorial赋值为1,s赋值为0,i赋值为1;
3.判断i<=10,若为真则执行“factorial=1,j=1”并继续执行下一步,若为假则结束程序;
4.判断j<=i,若为真则执行“factorial=factorial*j,j++”并重新执行第4步,若为假则执行“s=s+factorial,i++”,并返回第3步;
流程图:
代码:
#include<stdio.h>
int main()
{
int i, j;
double factorial, s = 0;
for (i = 1; i <= 10; i++)
{
factorial = 1;
for (j = 1;j <= i; j++)
factorial = factorial * j;
s = s + factorial;
}
printf("1!+2!+3!+···+10!=%.0f\n", s);
return 0;
}
运行结果:
【例5.26】编写程序,输出乘法口诀表
文字描述:
1.定义int变量i,j;
2.i赋值为1;
3.判断i<=9,若为真则使j=1并继续执行下一步,若为假则结束程序;
4.判断j<=i,若为真则输出“j*i=j*i”使i++并重新执行第4步,若为假则i++并返回第3步;
流程图:
代码:
#include<stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
printf("%d*%d=%d\t", j, i, j * i);
printf("\n");
}
return 0;
}
运行结果:
【例5.27】求100以内的素数。要求每行输出10个
文字描述:
1.定义int变量i,n,k,count;
2.count赋值为0,n赋值为2,;
3.判断n<100,若为真则“k=sqrt(n),i=2”并继续执行下一步,若为假则结束程序;
4.判断j<=k,若为真则执行下一步,若为假则执行第6步;
5.判断n%i==0,若为真则执行 i++并返回第4步,若为假则执行下一步;
6.判断i>k,若为真则输出n并执行下一步,若为假则执行n++后结束程序;
7.判断++count%10==0,若为真则输出\n,若为假则执行n++后结束程序
流程图:
代码:
#include<stdio.h>
#include<math.h>
int main()
{
int i, n, k, count = 0;
n = 2;
while (n < 100)
{
k = sqrt(n);
for (i = 2; i <= k; i++)
if (n % i == 0)break;
if(i>k)
{
printf("%4d", n);
if (++count % 10 == 0)printf("\n");
}
n++;
}
return 0;
运行结果:
【例5.28】将10~20之间的正整数分解质因数
文字描述:
1.定义int变量i,j;
2.m赋值为10;
3.判断m<=20,若为真则执行“n=m,i=2”,若为假则结束程序;
4.输出n,并执行下一步;
5.判断n%i==0,若为真则输出i并执行下一步,若为假则执行i++并执行第7步;
6.n=n/i,继续执行下一步;
7.判断n!=i,若为真则返回第5步,若为假则执行m++并返回第3步;
流程图:
代码:
#include<stdio.h>
int main()
{
int i, n, m;
for (m = 10; m <= 20; m++)
{
n = m, i = 2;
printf("%d=", n);
do
{
if (n % i == 0)
{
printf("%d*", i);
n = n / i;
}
else
i++;
} while (n != i);
printf("%d\n", n);
}
return 0;
}
运行结果:
【例5.29】猴子吃桃问题:猴子第一天摘下若干个桃子,吃了一半,还觉得不过瘾,又多吃了一个,第二天早上有又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃前一天剩下的一半零一个。到第十天早上时,只剩下一个桃子了。问第一天共摘了多少桃子
文字描述:
1.定义int变量day,d1,d2;
2.day赋值为9,d2赋值为1;
3.使d1=(d2+1)*2;
4.使d2=d1,--d;
5.判断day>0,若为真则返回第3步,若为假则输出d1;
流程图:
代码、运行结果:
【例5.30】求sin(x)=x=x-x^3/3!+x^5/5!-x^7/7!+···
文字描述:
1.定义int变量n,float变x,double变量fz,fm;
2.n赋值为1,fm赋值为1;
3.输入x;
4.使fz=x,sinx=x;
5.n=n+1;
6.fz=fz*x*x;
7.fm=fm*(2*n-2)*(2*n-1);
8.sinx=sinx+fz/fm;
9.判断fabs(fz/fm>eps),若为真则返回第5.步,若为假则输出sin(x)=sinx;
10.输出sin(x)=sin(x)
流程图:
代码、运行结果
【例5.31】用牛顿迭代法求方程2x^3-4x^2+3x-6=0在1.0附近的根
文字描述:
1.定义 float变量x1,x0,f,f1;
2,x1赋值为1.0;
3.x0=x1;
4.f=((2*x0-4)*x0+3)*x0-6;
5.f1=(6*x0-8)*x0+3;
6.x1=x0-f/f1;
7.判断fabs(z1-z0)>eps,若为真则返回第3步,若为假则输出x1
流程图:
代码,运行结果:
【例5.32】搬砖问题:36块砖,36人搬。男搬4、女搬3、两个小孩抬一砖,要求一次全搬完,问男、女、小孩各若干
文字描述:
1.定义int变量men,women,child;
2.men赋值为0;
3.判断men<=9,若为真则women=0,若为假则结束程序;
4.判断women<=12,若为真则child=36-men-women,若为假则m++并返回第3步;
5.判断men*4=women*3=child*0.5==36,若为真则输出men,women,child;
6.women++,并返回第3步;
流程图:
代码
#include<stdio.h>
int main()
{
int men, women, child;
for (men = 0; men <= 9; men++)
for (women = 0; women <= 12; women++)
{
child = 36 - men - women;
if (men * 4 + women * 3 + child * 0.5 == 36)
printf("男:%d,女:%d,小孩:%d\n", men, women, child);
}
return 0;
}
运行结果
【例5.33】编写程序,判断由1、2、3、4四个数字能组成多少个互不相同且无重复数字的三位数?输出这些数
文字描述:
流程图:
代码
#include<stdio.h>
int main()
{
int i, j, k, n=0;
for(i=1;i<5;i++)
for(j=1;j<5;j++)
for(k=1;k<5;k++)
if (i != k && i!=j && j != k)
{
printf("%d%d%d\t", i, j, k);
if (++n % 5 == 0)printf("\n");
运行结果
【例5.34】编写程序如下图形:*
***
*****
*******
*********
文字描述:
1.定义int变量i,j;
2.i赋值为1;
3.判断i<=20-i,若为真则输出""执行j++并再次执行第3步,若为假则j=1;
4.判断j<=20*i-1,若为真则输出*,执行i++并再一次执行第4步,若为假则输出\n;
流程图:
代码
#include<stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 5; i++)
{
for (j = 1; j <= 20 - i; j++)
printf("");
for (j = 1; j <= 2 * i - 1; j++)
printf("*");
printf("\n");
}
return 0;
}
运行结果
【例5.35】猜数字游戏:由计算机随机产生一个10~80之间的数据,然后由用户进行猜数,在5次之内猜中则成功,否则给出大小提示。猜5次后结束程序
代码
#include<stdio.h>
#include<stdlib.h>
int main()
{
int m, n, count=0;
m = rand() % (80 - 10 + 1) + 10;
printf("请输入一个10~80之间的整数:");
while (1)
{
scanf_s("%d", &n);
count++;
if (m == n)
{
printf("恭喜!你答对了,你真棒!");
break;
}
else if (m > n && count < 5)
printf("对不起!你猜小了!再来一次!");
else if (m < n && count < 5)
printf("对不起!你猜大了!再来一次!");
if (count == 5)
{
printf("对不起!你没有机会了!\n这个数是:%d,游戏结束!\n", m);
}
}
return 0;
}
运行结果
【例5.36】编写程序输出100~1000内的回文素数。回文素数是指既是回文数同时也是素数的整数。例如,131既是回文数也是素数,因此131是回文素数
代码
#include<stdio.h>
#include<math.h>
int main()
{
int x, i, j = 0, n, k = 0;
for (x = 100; x < 1000; x++)
{
k = sqrt(x);
for (i = 2; i <= k; i++)
if (x % i == 0)
break;
if(i>k)
{
k = x;
n = 0;
while(k>0)
{
n = n * 10 + k % 10;
k /= 10;
}
if(x==n)
{
printf("%d\t", x);
if (++j % 5 == 0)printf("\n");
}
}
}
return 0;
}
运行结果
【例5.37】在所有三位整数中找出平方数中有连续的三位数字是该数本身的数,例如,50的平方是62500,250便是所要找的一个满足条件的三位整数
文字描述:
1.定义int变量x,t;
2.i\topwer\n;
3.xz赋值为100;
4.判断x<1000,若为真则执行t=x*x,若为假则结束程序;
5.判断t!=0,若为真则执行下一步,若为假则执行x++并再次执行第4步;
6.判断x==t%1000,若为真则输出x,x*x并返回第5步,若为假则执行并t=t/10并返回第5步;
流程图:
代码
#include<stdio.h>
int main()
{
int x, t;
printf("i\tpower\n");
for (x = 100; x < 1000; x++)
{
t = x * x;
while (t != 0)
{
if (x == t % 1000)
{
printf("%d\t%d\n", x, x * x);
break;
}
else
t = t / 10;
运行结果: