C语言程序设计-笔记3-循环结构
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-循环结构的更多相关文章
- 160809209_李梦鑫_C语言程序设计实验3 循环结构程序设计
<C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学 期 2016-2017 第1学期 指导教师 黄俊莲 吉吉老师 实验地点 C05 ...
- 160809228_符瑞艺_C语言程序设计实验3 循环结构程序设计
#include <stdio.h> int main(){ //使用for循环完成1+2+......+100 ; ;i<=;i++) sum +=i; //sum = sum ...
- Go语言学习笔记十: 结构体
Go语言学习笔记十: 结构体 Go语言的结构体语法和C语言类似.而结构体这个概念就类似高级语言Java中的类. 结构体定义 结构体有两个关键字type和struct,中间夹着一个结构体名称.大括号里面 ...
- 160809209_李梦鑫_C语言程序设计实验2+选择结构程序设计_进阶
<C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学 期 2016-2017 第1学期 指导教师 黄俊莲 吴喆 实验地点 C05 机 ...
- Python语言程序设计之一--for循环中累加变量是否要清零
最近学到了Pyhton中循环这一章.之前也断断续续学过,但都只是到了函数这一章就停下来了,写过的代码虽然保存了下来,但是当时的思路和总结都没有记录下来,很可惜.这次我开通了博客,就是要把这些珍贵的学习 ...
- 【C语言学习】-03 循环结构
本文目录 循环结构的特点 while循环 do...while循环 for循环 回到顶部 一.循环结构的特点 程序的三种结构: 顺序结构:顺序执行语句 分支结构:通过进行一个判断在两个可选的语句序列之 ...
- Apex语言(五)循环结构
1.循环结构 循环语句允许我们多次执行一个语句或一组语句(重执行语句). 2.while语句 只要给定条件为真,目标语句就会重复执行. [格式] while (循环条件){ 语句; } [流程图] ...
- c语言学习笔记 for循环的结构
其实感觉for循环没有while循环那么直白好理解. for(i=0;i<n;i++) { dosth(); } i=0是i的初始值. i<n是循环进行的条件. i++是每次循环要做的事情 ...
- JAVA语言程序设计-笔记摘录
JAVA 程序语言设计(基础篇) 笔记摘录 为避免输入错误, 不要在nextByte().nextShort().nextInt()等等后面使用nextLine() nextXXXXX()都称为令牌读 ...
- 计算机二级-C语言-程序设计题-190112记录-结构体的遍历和结构体的数据的交换处理,文件的操作。
//程序设计题:学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:把分数低的学生数据放在b所指的数组中,注意:分数最低的学生可能不止一个,函数返回 ...
随机推荐
- 攻防世界 gametime 使用IDA pro+OD动调
自学犟种琢磨动调的一个记录,算是第一次动调的新手向,大佬请飘过 题目 准备工作--IDA pro(32X) 下载得到一个exe文件,首先丢到PE里面--无壳,32bit 丢到IDA pro(x32)里 ...
- KingbaseES 使用sys_bulkload远程导入
前言 sys_bulkload 常见场景是本地导入数据,也可以在远程运行 sys_bulkload ,对数据库上的CSV 文件进行导入.远程导入数据时候需要注意,csv文件和ctl文件所在服务器.以下 ...
- Linux服务器定时器
网络程序需要处理的第三类事件是定时事件,比如定期检测一个客户连接的活动状态.服务器程序通常管理着众多定时事件,因此有效地组织这些定时事件,使之能在预期的时间点被触发且不影响服务器的主要逻辑,对于服务器 ...
- C#/.NET/.NET Core优秀项目和框架2024年3月简报
前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍.功能特点.使用方式以及部分功能截图 ...
- 4 HTML表格标签
4 表格标签 表格标签也是一种复合标签.由:table,tr,td,th,thead,tbody组合,由行和列组合成,行和列交叉的地方就是单元格.在HTML中使用table来定义表格.网页的表格和办公 ...
- #交互,栈#LOJ 3005 「JOISC 2015 Day 4」Limited Memory
题目 分析 一开始想的是栈的匹配,但是位数不够,而且还忘记写memory.h, 考虑它询问次数不超过一万五千次,\(O(n^2)\)的询问是绰绰有余的, 如果每一个符号都能被匹配那整个串也能被匹配,而 ...
- 网络协议之:haproxy的Proxy Protocol代理协议
目录 简介 Proxy Protocol的实现细节 版本1 版本2 Proxy Protocol的使用情况 总结 简介 代理大家应该都很熟悉了,比较出名的像是nginx,apache HTTPD,st ...
- 基于OpenHarmony的智能金属探测器
一.简介 智能金属探测器是基于 OpenAtom OpenHarmony(以下简称"OpenHarmony")操作系统,利用电磁感应原理来探测周围的金属物体.该样例采用多设备协同 ...
- 使用 bat 注册 ocx 控件
注册 新建 reg.bat cd /d %~dp0 regsvr32 ./xxx.ocx 反注册 新建 unreg.bat cd /d %~dp0 regsvr32 /u ./xxx.ocx
- 鼠标移动出现雪花-js实现
// 鼠标移动出现雪花.html <!DOCTYPE html> <html> <head> <title></title> <scr ...