c语言循环结构实验报告
c语言循环结构实验报告
姓名:许欣明 实验地点:一教524 实验时间:2021-5.6
一、实验目的与要求
- 熟练掌握使用while、do...while、和for语句实现循环的方法。
- 了解三种循环语句的区别和转换、各自的适应性、嵌套循环的使用。
- 掌握在循环语句中使用break和continue语句改变程序流程的方法。
- 能在程序设计中使用循环的方法实现各种算法。
二、实验内容
实验5.3.1
1.问题描述:求出1,1+2,1+2+3,...数列中第i项的值,i的值由键盘输入
2.实验代码:
#include <stdio.h> int main() { int n,k,s=0; printf("Enter a number:\n"); scanf("%d",&n); for(k=1;k<=n;k++) { s=s+k; printf(" %d",s); } return 0; }
3.效果截图:
实验5.3.2
1.问题描述:从键盘输入若干学生成绩,统计最高和最低成绩,当输入负数时结束输入。
2.实验代码:
#include<stdio.h> int main() { float x,max,min; printf("please input scores\n"); scanf("%f",&x); max=min=x; while(x>=0) { if(x>max) max=x; if(x<min) min=x; scanf("%f",&x); } printf("\nmax=%f\nmin=%f\n",max,min); return 0; }
3.效果截图:
实验5.3.3
1.问题描述:计算满足不等式的n的最小值。
2.实验代码:
#include<stdio.h> int main() { float sum,value; int n; printf("Input value:"); while(1) { scanf("%f",&value); if(value>1) { sum=0.0; n=0; do { ++n; sum+=1.0/(float)n; }while(sum<value); printf("n=%d",n); break; } else { printf("输入错误,请重新输入。\n"); } } return 0; }
3.效果截图:
4.问题分析:注意输出的数据是不是符合大于一的正数,这里使用了while循环解决了判断的问题。
实验5.3.4
1.问题描述:输入4个字符型数字,将他转化为10进制整数后输出。
2.实验代码:
#include<stdio.h> int 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); return 0; }
3.效果截图:
实验5.3.5
1.问题描述:百马百担问题。
2.实验代码:
#include<stdio.h> int 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(3*m+2*n+k/2==100&&k%2==0) { printf("大马%3d;中马%3d;小马%3d.\n",m,n,k); sum++; } } } printf("共有%d种驮法。\n",sum); return 0; }
3.效果截图:
实验5.3.52
1.问题描述:有一个正整数数列,前四项之和等于26,前四项之积为880,求前六项的和,和前六项分别是多少。
2.实验代码:
#include<stdio.h> int main() { int a,b,c,d,i,sum=0; for(a=1;a<=26;a++) { for(d=1;d<=26;d++) { b=4*(a+a+3*d)/2; c=a*(a+d)*(a+2*d)*(a+3*d); if(b==26&&c==880) { printf("数列的初值为a=%d,差值为d=%d\n",a,d); printf("数列前6项的值:"); for(i=0;i<6;i++) { printf("%d ",a+i*d); sum=sum+(a+i*d); } printf("\n"); } } } printf("\n数列的前六项的和:%d\n",sum); return 0; }
3.效果截图:
实验5.3.53
1.问题描述:30个学生一起买小吃,共花费50元,大学生每人3元,初中生每人2元,小学生每人1元,求共有多少种组合。
2.实验代码:
#include<stdio.h> int 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(3*x+2*y+z==50) { printf("大学生%3d,中学生%3d,小学生%3d\n",x,y,z); sum=sum+1; } } } printf("共有%3d种组合。\n",sum); return 0; }
3.效果截图:
九九乘法表
1.问题描述:九九乘法表。
2.实验代码:
#include<stdio.h> int main() { int x,y; for(x=1;x<=9;x++) { for(y=1;y<=x;y++) { printf("%d*%d=%2d ",x,y,x*y); } printf("\n"); } return 0; }
3.效果截图:
4.问题分析:注意等式后面的数字的距离,改成%2d后使数字可以更好的对其,使之更美观。
三、实验小结:
三种for循环样式:
1、for(int i = 0;i < 100;i++) //递减和递加的算一种
2、for(;true;) //有空表达式的
3、for (int i = 100, j = 100; i > 0 || j>0 ; i--,j++) //有多表达式的
do...while...循环与while循环的区别是前者至少运行了一次循环体,而后者则可能不会运行循环体。
注意,while 后面的分号千万不能省略。
不足:
对一些问题的解决无法快速的运用高效简便的方法来解决问题,总的来讲还是程序的思维不够了解,还需要继续熟悉。