C语言程序设计实验报告(四)
C程序设计实验报告
姓名:黄静微 实验地点:家 实验时间:2020.03.25
实验项目
5.3.1 练习2 求数列的和
5.3.2 求水仙花数
5.3.4 十进制转换
5.3.5 练习1 百马百担问题
5.3.5 练习2 求等差数列
5.3.5 练习3 食品分配问题
九九乘法表
一、实验目的与要求
- 熟悉循环嵌套的使用方法
- 巩固对循环的概念
- 掌握用for语句实现循环的方法
- 掌握用while语句实现循环的方法
- 掌握do···while语句实现循环的方法
- 练习while和for语句配合实现循环的方法
二、实验内容
1、实验练习:5.3.1 练习2 求数列的和
问题的简单描述:
编写程序,求数列1,-3!,5!,-7!,···,(-1)n-1(2n-1)!前n项的和。
流程图:
实验代码:
#include <stdio.h>
main()
{
int n,i,j,sign=1;
float fac,sum;
printf("Please input value of n:");
scanf("%d",&n);
sum=0.0;
for(i=1;i<=n;i++)
{
fac=1.0;
for(j=1;j<=2*i-1;j++)
{
fac=fac*j;
}
fac=fac*sign;
sum=sum+fac;
sign=-sign;
}
printf("sum=%.0f\n",sum);
}
问题分析:
在写这个程序的时候,外循环的表达式条件表达式和循环变量表达式写错了,虽然编译没有问题,但是得不出正确得结果。经过老师和同学的讲解将错误改正,获得正确的运行结果。
2、实验练习:5.3.2 求水仙花数
问题的简单描述:
求所有的水仙花数(水仙花数是一个3位自然数,该数各位数的立方和等于该数本身,如153为水仙花数13+53+33)。
流程图
实验代码:
#include <stdio.h>
main()
{
int x,y,z;
int k=100;
while(k<=999)
{
x=k/100;
y=(k/10)%10;
z=k%10;
if(k==x*x*x+y*y*y+z*z*z)
printf("%d\n",k);
k++;
}
}
问题分析:
判断是否为水仙花数的程序在之前已经有过学习,所以没有什么问题,但是还是要注意x3+y3+z3)的表达。
3、实验练习:5.3.4 十进制转换
问题的简单描述:
输入4个字符型数字,并把其转换为十进制整数后显示出来。
流程图
实验代码:
#include <stdio.h>
main()
{
char c;
int k,data;
data=0;
for(k=0;k<4;k++)
{
while(1)
{
c=getchar();
if(c>='0'&&c<='9')
break;
}
if(k==0) data+=(c-'0')*1000;
if(k==1) data+=(c-'0')*100;
if(k==2) data+=(c-'0')*10;
if(k==3) data+=(c-'0');
}
printf("Data=%d",data);
}
问题分析:
编写这个程序的时候,把data+=(c-'0')里面的单引号忘记了,运行结果错误,然后就重新分析了一下流程图,发现少了单引号,加上去就得出了正确的结果。
4、实验练习:5.3.5 练习1 百马百担问题
问题的简单描述:
有100匹马,要驮100担货物。其中,1匹大马可以驮3担货物,1匹中马可以驮量担货物,两匹小马可以驮1担货物,求所需要的大马、中马和小马可以有多少种组合。
流程图
实验代码:
#include<stdio.h>
main()
{
int m,n,k;
int sum=0;
printf("各种驮法如下:\n");
for(m=1;m<=100;m++)
for(n=1;n<=100-m;n++)
{
k=100-m-n;
if((k%2==0)&&(3*m+2*n+0.5*k==100))
{
printf("大马%3d匹;中马%3d匹;小马%3d匹.\n",m,n,k);
sum++;
}
}
printf("共有%d种驮法.\n",sum);
}
问题分析:
百马百担问题里面有一个条件是两匹小马驮1担货物,一开始没有考虑到这个问题,只判断了(3m+2n+0.5k=100),结果不会出现错误,但向其他同学的代码进行比对后,发现同时满足k%2=0和3m+2n+0.5k=100更加严谨,两匹小马驮一担,所以小马的数量必须是偶数k%2=0。
5、实验练习:5.3.5 练习2 求等差数列
问题的简单描述:
有一个整数等差数列,已知该数列前4项之和等于26,前4项之积等于880,编写程序求出该数列前6项的值及该数列前6项的和。
实验代码:
#include <stdio.h>
main()
{
int a,b,c,d,i,sum=0;
for(a=1;a<=26;a++)
for(d=1;d<=26;d++)
{
b=4*a+6*d;
c=a*(a+d)*(a+2*d)*(a+3*d);
if((b==26)&&(c==880))
{
printf("数列的初始值为a=%d,差值为d=%d\n",a,d);
printf("\n数列前6项的值:");
for(i=0;i<6;i++)
{
printf("%d ",a+i*d);
sum=sum+(a+i*d);
}
printf("\n");
}
}
printf("\n数列的前6项的和:%d\n",sum);
}
问题分析:
编写这个for语句嵌套的算法要专注一点,因为嵌套里面很多花括号。
6、实验练习:5.3.5 练习3 食品分配问题
问题的简单描述:
有30个学生一起卖买小吃,共花费50元,其中,每个大学生花3元,每个中学生花2元,每个小学生花1元,求大、中、小学生的人数分配共有多少种不同的组合(不计算某类学生数为0的组合)。
实验代码:
#include <stdio.h>
main()
{
int x,y,z,sum;
sum=0;
for(x=1;x<30;x++)
{
for(y=1;y<30;y++)
{
z=30-x-y;
if((z!=0)&&(3*x+2*y+z==50))
{
printf("大学生%3d\t中学生%3d\t小学生%3d\n",x,y,z);
sum=sum+1;
}
else
continue;
}
}
printf("sum=%d\n",sum);
}
问题分析:
这个问题和百马百担问题相似,需要注意的是z=30-x-y,在表述共有30个学生的时候,不能写成x+y+z=30,这样会导致编译错误,因为这个表达式是赋值,在编写百马百担问题的时候出现了这个错误,通过写这个代码发现了百马百担的问题。
7、实验练习:九九乘法表
问题的简单描述:
编写程序,在屏幕上输出阶梯式的乘法口诀表。
流程图:
实验代码:
#include <stdio.h>
main()
{
int i=0;
int j=0;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%dx%d=%d\t",j,i,i*j);
}
printf("\n");
}
}
问题分析:
九九乘法表用到的是for循环结构的嵌套,一开始没有在每一行后换行,也没有在每一个式子后面设置空格,然后出现式子比较混乱,将"%dx%d=%d"改为"%dx%d=%d\t"在外循环加printf("\n"), 问题就解决了。
四、实验小结
循环结构有点绕,分析起来有点头晕,有时候绕得没有清晰的思路,所以在编写代码之前需要流程图帮助理解,但是通过这次实验,我发现我对循环结构的理解还不是很到位,在判断条件上还需要考虑得周全一点,还需要多分析C语言程序代码,多理解,多分析循环结构。
原文地址:https://www.cnblogs.com/JSZ-Angel/p/12662801.html
- 13.MySQL(一) 数据库简介mysql安装数据库操作Mysql数据类型存储引擎
- 3314: [Usaco2013 Nov]Crowded Cows
- BZOJ4766: 文艺计算姬
- 14.MySQL(二) 数据之表操作表内容操作Mysql 连接事务外键
- 3450: Tyvj1952 Easy
- SP104 HIGH - Highways
- 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝
- 15.MySQL(三) 索引类型
- 1054: [HAOI2008]移动玩具
- MatrixTree速成
- 1元搭建自己的云服务器&解析域名
- 洛谷P4180 [Beijing2010组队]次小生成树Tree
- 携程开源数据库访问框架
- LOJ #108. 多项式乘法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 配置Linux使用LDAP用户认证的方法
- linux Dig命令使用大全
- Ubuntu虚拟机下使用cutecom进行串口通信的方法
- 虚拟机Linux系统忘记密码修改root或其他用户密码的方法
- 在 RHEL8 /CentOS8 上建立多节点 Elastic stack 集群的方法
- linux 搭建svn服务器的方法步骤
- linux 下隐藏进程的一种方法及遇到的坑
- Ubuntu 18.04中截图工具shutter的编辑按钮不可用的解决办法
- Linux服务器利用防火墙iptables策略进行端口跳转的方法
- Linux下PHP网站服务器安全配置加固防护方法【推荐】
- CentOS8 yum/dnf 配置国内源的方法
- 浅析在 RHEL8 配置静态 IP 地址的不同方法
- ubuntu16.04自动设置行号的步骤详解
- CentOS 8安装ZABBIX4.4的指南
- Linux 3.X/4.x/5.x 忘记宝塔面板密码的解决方法