C语言程序设计-笔记3-循环结构

例4-1  用格雷戈里公式求给定精度的π值。使用格雷戈里公式求π的近似值,要求精确到最后一项的绝对值小于给定精度eps。

=1--+-+…

#include<stdio.h>

#include<math.h>

int main(void)

{

int denominator,flag,i;

double eps,item,pi;

printf("Enter eps:");

scanf("%lf",&eps);

i=1;

flag=1;

denominator=1;

item=1.0;

pi=0;

while(fabs(item)>=eps)

{

pi=pi+item;

i++;

flag=-flag;

denominator=denominator+2;

item=flag*1.0/denominator;

}

pi=pi+item;

pi=pi*4;

printf("pi=%.4f\n",pi);

printf("i=%d\n",i);

return 0;

}

例4-2  统计一批学生的平均成绩与不及格人数。更改例3-3。从键盘输入一批学生的成绩,计算平均成绩,并统计不及格学生的人数。

#include<stdio.h>

int main(void)

{

int count,num;

double score,total;

num=0;

total=0;

count=0;

printf("Enter scores:");

scanf("%lf",&score);

while(score>=0)

{

total=total+score;

num++;

if(score<60)

{

count++;

}

scanf("%lf",&score);

}

if(num!=0)

{

printf("Average is %.2f\n",total/num);

printf("Number of failures is %d\n",count);

}

else

{

printf("Average is 0\n");

}

return 0;

}

例4-3  统计一个整数的位数。从键盘读入一个整数,统计该数的位数。例如,输入12345,输出5;输入-99,输出2;输入0,输出1。

#include<stdio.h>

int main(void)

{

int count,number,t_number;

count=0;

printf("Enter a number:");

scanf("%d",&number);

t_number=number;

if(number<0)

{

t_number=-t_number;

}

do{

count++;

t_number=t_number/10;

}while(t_number!=0);

printf("It contains %d digits.\n",count);

return 0;

}

例4-4  逆序输出一个整数的各位数字。输入一个整数,将其逆序输出。例如,输入12345,输出54321.

#include<stdio.h>

int main(void)

{

int number;

printf("Enter a number:");

scanf("%d",&number);

do{

printf("%d ",number%10);

number=number/10;

}while(number!=0);

return 0;

}

例4-5  判断一个整数是否为素数。输入一个正整数m,判断它是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

#include<stdio.h>

#include<math.h>

int main(void)

{

int i,limit,m;

printf("Enter a number:");

scanf("%d",&m);

if(m<=1)

{

printf("No!\n");

}

else if(m==2)

{

printf("%d is a prime number!\n",m);

}

else

{

limit=sqrt(m)+1;

for(i=2;i<=limit;i++)

{

if(m%i==0)

{

break;

}

}

if(i>limit)

{

printf("%d is a prime nuber!\n",m);

}

else

{

printf("No!\n");

}

}

return 0;

}

例4-6  猜数游戏。更改例3-1简单的猜数游戏。输入你所猜的整数(假定为1-100),与计算机产生的被猜数比较,若相等,显示猜中;若不等,显示与被猜数的大小关系,最多允许猜7次。

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

int main(void)

{

int count=0,flag,mynumber,yournumber;

srand(time(0));

mynumber=rand()%100+1;

flag=0;

while(count<7)

{

printf("Enter your number:");

scanf("%d",&yournumber);

count++;

if(yournumber==mynumber)

{

printf("Lucky you!\n");

flag=1;

break;

}

else if(yournumber>mynumber)

{

printf("Too big\n");

}

else

{

printf("Too small\n");

}

}

if(flag==0)

{

printf("Game Over!\n");

}

return 0;

}

注:srand(time(0))是以当前时间,秒为单位,取种子,rand()以取的种子,产生随机数。实现每秒产生的随机数都不同的效果。

例4-7  使用函数求阶乘和。输入一个正整数n(n<=16),计算1!+2!+3!+…+n!。要求定义和调用fact(n)计算n的阶乘,如果n是非负数,则该函数返回n的阶乘,否则返回0。

//使用函数计算阶乘和

#include<stdio.h>

double fact(int n);

int main(void)

{

int i,n;

double sum;

printf("Enter n:");

scanf("%d",&n);

sum=0;

for(i=1;i<=n;i++)

{

sum=sum+fact(i);

}

printf("1!+2!+...+%d!=%.0f\n",n,sum);

return 0;

}

double fact(int n)

{

int i;

double result;

if(n<0)

{

return 0;

}

result=1;

for(i=1;i<=n;i++)

{

result=result*i;

}

return result;

}

例4-8  求最值问题。输入一批学生的成绩,找出最高分。

#include<stdio.h>

int main(void)

{

/*

int i,mark,max,n;

printf("Enter n:");

scanf("%d",&n);

printf("Enter %d marks:",n);

scanf("%d",&mark);

max=mark;

for(i=1;i<n;i++)

{

scanf("%d",&mark);

if(max<mark)

{

max=mark;

}

}

printf("max=%d\n",max);*/

int mark,max;

printf("Enter marks:");

scanf("%d",&mark);

max=mark;

while(mark>=0)

{

if(max<mark)

{

max=mark;

}

scanf("%d",&mark);

}

printf("max=%d\n",max);

return 0;

}

例4-9 斐波那契数列问题。输入正整数n(1<=n<=46),输出斐波那契数列的前n项:1,1,2,3,5,8,13,…,每行输出5个。斐波那契数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。

#include<stdio.h>

int main(void)

{

int i,n,x1,x2,x;

printf("Enter n:");

scanf("%d",&n);

if(n<1 || n>46)

{

printf("Invalid.\n");

}

else if(n==1)

{

printf("%10d",1);

}

else

{

x1=1;

x2=1;

printf("%10d%10d",x1,x2);

for(i=3;i<=n;i++)

{

x=x1+x2;

printf("%10d",x);

if(i%5==0)

{

printf("\n");

}

x1=x2;

x2=x;

}

}

return 0;

}

例4-10  素数问题。输入2个正整数m和n(1<=m<=n<=500),输出m到n之间的全部素数,每行输出10个。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

#include<stdio.h>

#include<math.h>

int main(void)

{

int count,i,k,flag,limit,m,n;

printf("Enter m n:");

scanf("%d%d",&m,&n);

count=0;

if(m<1||n>500||m>n)

{

printf("Invalid.\n");

}

else

{

for(k=m;k<=n;k++)

{

if(k<=1)

{

flag=0;

}

else if(k==2)

{

flag=1;

}

else

{

flag=1;

limit=sqrt(k)+1;

for(i=2;i<=limit;i++)

{

if(k%i==0)

{

flag=0;

break;

}

}

}

if(flag==1)

{

printf("%6d",k);

count++;

if(count%10==0)

{

printf("\n");

}

}

}

}

return 0;

}

例4-11  搬砖问题。已知男人一人搬3块,女人一人搬2块,小孩两人搬1块。如果想用n人正好搬n块,问有哪些搬法。

#include<stdio.h>

int main(void)

{

int n,men,women,children,cnt;

printf("Enter n:");

scanf("%d",&n);

cnt=0;

/*

for(men=0;men<=n;men++)

{

for(women=0;women<=n;women++)

{

for(children=0;children<=n;children++)

{

if(men+children+women==n && men*3+women*2+children*0.5==n)

{

printf("men=%d,women=%d,children=%d\n",men,women,children);

cnt++;

}

}

}

}

if(cnt==0)

{

printf("None\n");

}*/

int limit_m=n/3;

int limit_n=n/2;

cnt=0;

for(men=0;men<=limit_m;men++)

{

for(women=0;women<=limit_n;women++)

{

children=n-men-women;

if(men*3+women*2+children*0.5==n)

{

printf("men=%d,women=%d,children=%d\n",men,women,children);

cnt++;

}

}

}

return 0;

}

例4-12  找零钱问题。有足够数量的5分、2分和1分的硬币,现在要用这些硬币来支付一笔小于1元的零钱money,问至少要用多少个硬币?输入零钱,输出硬币的总数量和相应面额的硬币数量。

#include<stdio.h>

int main(void)

{

int n1,n2,n5,money,flag=1;

printf("Enter money:");

scanf("%d",&money);

for(n5=money/5;n5>=0&&flag==1;n5--)

{

for(n2=(money-n5*5)/2;n2>=0&&flag==1;n2--)

{

for(n1=money-n5*5-n2*2;n1>=0&&flag==1;n1--)

{

if(n5*5+n2*2+n1==money)

{

printf("n5=%d,n2=%d,n1=%d,total=%d\n",n5,n2,n1,n5+n2+n1);

flag=0;

}

}

}

}

return 0;

}

//贪心法

参考资料

C语言程序设计/何钦铭,颜晖主编.---4版.---北京:高等教育出版社,2020.9

C语言程序设计-笔记3-循环结构的更多相关文章

  1. 160809209_李梦鑫_C语言程序设计实验3 循环结构程序设计

    <C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学    期 2016-2017 第1学期 指导教师 黄俊莲 吉吉老师 实验地点 C05 ...

  2. 160809228_符瑞艺_C语言程序设计实验3 循环结构程序设计

      #include <stdio.h> int main(){ //使用for循环完成1+2+......+100 ; ;i<=;i++) sum +=i; //sum = sum ...

  3. Go语言学习笔记十: 结构体

    Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...

  4. 160809209_李梦鑫_C语言程序设计实验2+选择结构程序设计_进阶

    <C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学    期 2016-2017 第1学期 指导教师 黄俊莲 吴喆 实验地点 C05 机 ...

  5. Python语言程序设计之一--for循环中累加变量是否要清零

    最近学到了Pyhton中循环这一章.之前也断断续续学过,但都只是到了函数这一章就停下来了,写过的代码虽然保存了下来,但是当时的思路和总结都没有记录下来,很可惜.这次我开通了博客,就是要把这些珍贵的学习 ...

  6. 【C语言学习】-03 循环结构

    本文目录 循环结构的特点 while循环 do...while循环 for循环 回到顶部 一.循环结构的特点 程序的三种结构: 顺序结构:顺序执行语句 分支结构:通过进行一个判断在两个可选的语句序列之 ...

  7. Apex语言(五)循环结构

    1.循环结构 循环语句允许我们多次执行一个语句或一组语句(重执行语句).  2.while语句 只要给定条件为真,目标语句就会重复执行. [格式] while (循环条件){ 语句; } [流程图] ...

  8. c语言学习笔记 for循环的结构

    其实感觉for循环没有while循环那么直白好理解. for(i=0;i<n;i++) { dosth(); } i=0是i的初始值. i<n是循环进行的条件. i++是每次循环要做的事情 ...

  9. JAVA语言程序设计-笔记摘录

    JAVA 程序语言设计(基础篇) 笔记摘录 为避免输入错误, 不要在nextByte().nextShort().nextInt()等等后面使用nextLine() nextXXXXX()都称为令牌读 ...

  10. 计算机二级-C语言-程序设计题-190112记录-结构体的遍历和结构体的数据的交换处理,文件的操作。

    //程序设计题:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回 ...

随机推荐

  1. C++ Concurrency in Action 读书笔记一:thread的管理

    为避免混淆,用thread表示std::thread及其对象实例,用线程表示操作系统概念下的线程 Chapter 2 thread的管理 2.1 thread的创建(构造函数) a. 默认构造函数 d ...

  2. Java12版本特性【一文了解】

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  3. Redis源码学习(1)──字符串

    redis 版本:5.0 本文代码在Redis源码中的位置:redis/src/sds.c.redis/src/sds.h 源码整体结构 src:核心实现代码,用 C 语言编写 tests:单元测试代 ...

  4. Java事件侦听器学习记录

    前言 我们监听事件之前要有事件源source,创建事件源(Event),发布事件(publishEvent),然后才能到监听事件. 事件驱动机制是观察者模式(称发布订阅)具体实现,事件对象(Event ...

  5. TCL之基本语法1

    TCL之基本语法1 1:set  and puts set就是变量声明,这个声明在需要使用的指令下会自动执行,不会出现没有声明的错误.但是对于puts这类定向访问的是不能没有声明的.这里简单理解TCL ...

  6. KingbaseES 语句like前匹配如何使用索引

    前言 有现场同事反馈 sql语句 like 使用后缀通配符 % 不走索引. 至于执行计划没走索引的原因与KingbaseES数据库中的排序规则相关. 测试 测试环境: KingbaseESV8R6C7 ...

  7. PicGo图床配置github仓库上传typora图片

    (前提是已注册github并新建一个仓库作为你上传图片的位置) 首先在PicGo官网下载软件:https://picgo.github.io/PicGo-Doc/zh/ 打开typora,找到偏好设置 ...

  8. 国民经济行业分类与代码(GB/T 4754-2002、GB/T 4754-2011、GB/T 4754-2017)并存入MySQL数据库【可获取下载】

    戳链接下载:https://download.csdn.net/download/weixin_45556024/34913490 或关注公众号[靠谱杨阅读人生]回复[行业]获取. 整理不易,资源fu ...

  9. .net和java串口通讯压力测试对比

    最近由于工作要求,需要对一个串口通讯设备进行压力测试,要求连续持续对串口设备发送指令,无间隔,测试设备是否会死机. 要求做到毫秒级,测试第三方的工具,基本上都无法达到毫秒级,最少的也是10毫秒. 于是 ...

  10. #线段树,组合计数,二项式定理#CF266E More Queries to Array

    洛谷传送门 CF266E传送门 分析 首先区间修改区间查询首选线段树 要找突破口,\((i-l+1)^k\)中\(i\)不是定值, 显然得拆开,而且\(k\)很小,根据二项式定理, \[\sum_{i ...