一、实验目的与要求

1.用for语句实现循环

(1)求数列前n项和

  • 掌握for语句实现循环的方法

(2)求数列前n项和

  • 掌握for语句实现循环的方法
  • 循环嵌套的使用

2.用while循环语句实现循环

(1)统计学生的最高最低成绩

  • 用for循环计算第n项的值
  • 用for循环计算前n项的和
  • 注意每项的正负号变化

(2)求水仙花数

  • 进一步掌握while语句实现循环的方法

3.用do while 语句实现循环

  • 掌握do/while语句实现循环的方法

4.用while语句和for语句配合实现循环

  • 掌握while语句和for语句配合

5.用for语句嵌套实现循环

(1)百马百担问题

  • 掌握for语句嵌套实现循环的方法

(2)求等差数列

  • 掌握for语句嵌套(3层)
  • 掌握continue的语法

(3)食品分配问题

  • 掌握for语句嵌套实现循环的方法

掌握continue语句的用法

二、实验内容

5.3.1

(1)

1.问题的简单描述:

编写一程序,求出1,1+2,1+2+3···数列中前n项的值。

2.实验代码:

 
#include<stdio.h>
#include<conio.h>
main()
{
int i ,j=,k,s=;
printf("Enter a number:");
scanf("%d",&k);
for(i=;i<=k;)
{
s=s+i;
printf("%d",s);
j++;
} }

问题分析:首先其实我想到了有关等差数列前n项和的公式,运用这个公式虽然是可以得到结果,但思路和循环就没有什么关系了。

(2)

问题的简单描述:

编写一程序,求数列1,-3!,5!,-7!···[(-1)^(n-1)]*(2n-1)!前n项的和。n的值由键盘输入。

#include<stdio.h>
main()
{
int n,i,j,sign=;
float fac,sum;
printf("please input value of n:");
scanf("%d",&n);
sum=0.0;
for(i=;i<=n;i=i+)
{
fac=1.0;
for(j=;j<=*i-;j=j+)
{
fac=fac*j;
}
fac=fac*sign;
sum=sum+fac;
sign=-sign; }
printf("sum=%.0f\n",sum);
}

问题分析:思路个人认为由三部分组成。第一,n的值所规定的阶层的个数。第二,j循环所控制的单个奇数阶层。第三,sign控制的正负值的切换。其中,第二部分相对复杂,因为控制的是奇数的阶层,故是由奇数个数字相乘(比如,5!是由1~5五个数字相乘)。开始对于“阶层”的代码思路不是很熟悉,不知道引入“fac”的作用,导致一直出错。

5.3.2

(1)

1.问题的简单描述:

从键盘上输入若干学生的成绩,统计并输入最高成绩和最低成绩,当输入负数时结束输入。

2.实验代码:

#include<stdio.h>
#include<conio.h>
main()
{
float x,max,min;
printf("please input scores:");
scanf("%f",&x);
max=min=x;
while(x>=)
{
if(x>max) max=x;
if(x<min) min=x;
scanf("%f",&x);
}
printf("\nmax=%f\nmin=%f\n",max,min);
}

问题分析:while()语句的用法,对()内的条件进行填写,问题不大。

(2)

1.问题的简单描述:

求所有的水仙花数(水仙花数是一个三位数的自然数,该数各位数的立方等于该数本身,如153为水仙花数1^3+5^3+3^3=153)。

2.实验代码:

#include<stdio.h>
main()
{
int x,y,z;
int k=;
while(k<=)
{
x=k/;
y=(k/)%;
z=k%;
if(k==x*x*x+y*y*y+z*z*z)
printf("%d\n",k);
k++;
}
}

问题分析:依旧是对while()以及if的条件,基本没有问题。

5.3.3

1.问题的简单描述:

求满足1+1/2+1/3+...+1/n>value这个不等式的n最小值,其中,value是大于1的任何数。

2.实验代码:

#include<stdio.h>
main()
{
float sum,value;
int n;
printf("Input value:");
scanf("%f",&value);
sum=0.0;
n=;
do
{
++n;
sum+=1.0/(float)n;
}
while(sum<=value);
printf("n=%d",n);
}

问题描述:do while ()先进行循环再进行判断,除了这一点之外就是while()后面的条件了,想一下没什么问题。

5.3.4:

1.问题的简单描述:

输入4个数字字符,并将其转化为4位十进制整数后显示出来。

2.实验代码:

#include<stdio.h>
main()
{
char c;
int k,data;
data=;
for(k=;k<;k++)
{
while()
{
c=getchar();
if(c>=''&&c<='')
break;
}
if(k==) data+=(c-'')*;
else if(k==) data+=(c-'')*;
else if(k==) data+=(c-'')*;
else if(k==) data+=(c-'');
}
printf("Data=%d",data);
}

问题描述:思路,if的嵌套以及for 循环都相对简单,只是编写的语法不是很理解。

5.3.5:

(1)

1.问题的简单描述:

有100匹马,要驼100担货物,其中1匹大马可以驼3担,1匹中马可以驼两担,两匹小马可以驼1担,请问,大马、中马和小马可以有多少种组合。

2.实验代码:

#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);
}

 问题分析:显然,大,中,小马的数量都要满足(0~100)之内。故在满足等式3m+2n+0.5k=100即可。每求出一组m,n,k,则sum加一,在重新进行循环。

(2)

1.问题的简单描述:

编写程序,求一正整数等差数列的前6项的和,该数列前4项之和是26,前4项之积是880。

2.实验代码:

#include<stdio.h>
main()
{
int a,b,c,d,i,sum=;
for(a=;a<=;a++)
for(d=;d<=;d++)
{
b=*a+*d;
if(b!=)
continue;
else
{
c=a*(a+d)*(a+*d)*(a+*d);
if(c!=)
continue;
else
for(i=;i<;i++)
{
printf("%d,",a+i*d);
sum=sum+(a+i*d);
}
}
}
printf("\n 数列的前六项的和:%d\n",sum);
}

问题分析:首先要知道这个六个数组成的数列要用什么来代替输出的结果。由题意可知,数列的第一项(a)要知道,前四项的和(b)以及前四项的积(c)都要知道。接下来是这个数列的项数(i)以及等差数列的公差(d).搞清楚这些元素所表示的东西之后思路就很清楚了。无非是先对整个数列的前四项和、前四项积进行判断好确定是否是我们要求的数列。用if条件进行判断然后continue跳出不符合大的数列,继续循环直到正确为止。最后求出前六项的和。

(3)

问题描述:有30个学生一起买小吃,共花钱50元,其中每个大学生花3元,每个中学生花2元,每个小学生花1元,问大、中、小学生的人数分配共有多少种不同的解(去掉某类学生数为0的解)?。

实验代码:

#include<stdio.h>
main()
{
int x,y,z,sum;
sum=;
for(x=;x<;x++)
{
for(y=;y<;y++)
{
z=-x-y;
if((z!=)&&(*x+*y+z==))
{
printf("大学生%3d\t中学生%3d\t小学生%3d\n",x,y,z);
sum=sum+;
}
else
continue;
}
}
printf("sum=%d\n",sum);
}
#include<stdio.h>
main()
{
int x,y,z,sum;
sum=;
for(x=;x<;x++)
{
for(y=;y<;y++)
{
z=-x-y;
if((z!=)&&(*x+*y+z==))
{
printf("大学生%3d\t中学生%3d\t小学生%3d\n",x,y,z);
sum=sum+;
}
else
continue;
}
}
printf("sum=%d\n",sum);
}

问题分析:其实这道题的思路和(1)题使用一样的,同样是通过for循环逐渐对问题的结果进行筛选,当然,这里用到的是continue语法,相当是前两题的集合。

小结:看一个问题要知道需要多少变量很重要,尤其是要知道它们分别表示什么,不然就很难看懂,更别说是编写出来。在知道每个变量所表示的含义之后对其循环的使用就会更加得心应手,而相关条件语句的使用相信大家都已经比较熟悉了。

C语言作业3的更多相关文章

  1. C语言作业评价标准

    C语言作业评价标准 作业内容: 每周作业分为基础作业.挑战作业和预习作业: 基础作业为本周所学内容的巩固: 挑战作业包括但不仅限于所学知识的综合运用: 预习作业为下周所学内容的任务单,要求必须在课前完 ...

  2. 第一次c语言作业。

    第一次c语言作业 作业1 2.1 你对软件工程专业或者计算机科学与技术专业了解是怎样? 我认为计算机科学与技术是研究信息过程.用以表达此过程的信息结构和规则及其在信息处理系统中实现的学科.这门学科是为 ...

  3. 我的第三次C语言作业

    我的第三次C语言作业 这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2 这个作业要求在哪里 https://edu.cnblogs.co ...

  4. 做完c语言作业的心得

    算是第一次自己接触c语言,并不是很深入的了解了,但也完成了第一次课的作业.在没有复制粘贴的情况下,8遍的简单编程让我记下了它基本的格式. 实验1.2.3.7都是基本的输入字,和课上的练习差不多,巩固最 ...

  5. 第一周C语言作业

    一.PTA实验作业 题目1.温度转换 1.实验代码 int main() { int fahr = 150,celsius; celsius = 5 * (fahr - 32) / 9; printf ...

  6. C语言作业--函数

    一.PTA实验作业 题目1: 400-499 中4出现的次数 1. 本题PTA提交列表 2. 设计思路 一.main函数 1.函数声明int fun(int x) 2.定义变量i,k,i表示输入的值, ...

  7. C语言作业(三)

    一.完成PTA上四题作业 二.具体解题 (一).A乘以B 1.实验代码 #include <stdio.h> int main() { int A,B,C; scanf("%d ...

  8. c语言作业01-分支、顺序结构

    1.本章思考总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 这一个星期算是我学习c语言的起点,因为暑假没有提前自学c语言,所以一上课时会觉得比较吃力也难以跟上其他大部分同 ...

  9. C语言作业03-函数

    1.本章学习总结 1.1 思维导图 1.2本章学习体会,代码量学习体会 1.2.1学习体会 通过这几周的函数学习,让我明白了函数的重要性,在很多时候运用函数,会使得代码分工明确,逻辑严密,不繁琐.函数 ...

  10. 第一次C语言作业:博客随笔

    1)你觉得大学和高中有什么差别?具体学习上哪? 大学自主学习较多,锻炼自己独立的品质.在学习上,增加了课程的深度和难度,由更多的活动. 2)我希望大学的师生关系是?阅读上述博客后对师生关系有何感想? ...

随机推荐

  1. THUWC2019 游记

    DAY1 开场先看 t1,发现答案的分子就是 \(\sum_i\) 颜色 \(i\) 在 A 中的出现次数乘上颜色 \(i\) 在 B 中的出现次数,分母就是 B 的长度,就去写了一个按颜色的出现次数 ...

  2. ML笔记-sklearn.classification_report

    主要用于显示主要分类指标的文本报告,在报告中显示每个类的精确度.召回率.F1等信息 首先数据测试结果分为以下4种情况: TP:预测为正,实现为正 FP:预测为正,实现为负 FN:预测为负,实现为正 T ...

  3. 常用API接口签名验证参考

    项目中常用的API接口签名验证方法: 1. 给app分配对应的key.secret2. Sign签名,调用API 时需要对请求参数进行签名验证,签名方式如下: a. 按照请求参数名称将所有请求参数按照 ...

  4. STDIN_FILENO和stdin

    title: STDIN_FILENO和stdin date: 2019/03/15 22:03:22 toc: true --- STDIN_FILENO和stdin https://blog.cs ...

  5. 老男孩Python全栈学习 S9 日常作业 013

    1.写一个求正方形周长和面积的类 class perimeter: def __init__(s,long): s.long = long def Perimeter(s): print((s.lon ...

  6. CSS定位 深入理解定位(position)的偏移

    前言 CSS有三种基本的布局机制:普通流.浮动和绝对定位.利用定位,可以准确地定义元素框相对于其正常位置应该出现的位置,或者相对于父元素.另一个元素甚至浏览器窗口本身的位置.但元素究竟如何定位,定位到 ...

  7. Java线程池源码解析

    线程池 假如没有线程池,当存在较多的并发任务的时候,每执行一次任务,系统就要创建一个线程,任务完成后进行销毁,一旦并发任务过多,频繁的创建和销毁线程将会大大降低系统的效率.线程池能够对线程进行统一的分 ...

  8. 2018-2019 ICPC, NEERC, Southern Subregional Contest (Online Mirror, ACM-ICPC Rules, Teams Preferred)

    A. Find a Number 找到一个树,可以被d整除,且数字和为s 记忆化搜索 static class S{ int mod,s; String str; public S(int mod, ...

  9. 【FF14】工匠配方爬取

    目标:爬取最终幻想14工匠配方到excel表格.(一个装修仔的尊严) 代码: from bs4 import BeautifulSoup import urllib.request import xl ...

  10. Ubuntu18.04格式化U盘为NTFS的方法

    1.先安装工具ntfs-3g sudo apt-get install ntfs-3g 2.找到需要格式化的U盘在系统中的序号 df -h 找到U盘的序列号后记下来,例如“/dev/sdd1” 3.解 ...