Bootstrap

【C语言程序设计】实验四 循环结构序设计

实验二 数据类型运算符与表达式

实验三 选择结构程序设计

实验四 循环结构序设计

实验五 数组和字符串

实验六 函数

实验七 指针

实验八 结构体与文件读写

结课实验 俄罗斯方块小游戏

目录

前言

知识纲要

实验内容

实验结果

第一个小实验

第二个小实验

第三个小实验

第四个小实验

结语


前言

这一系列文章所记录的是大一上学期学的一门名为《C语言程序设计》的实验内容,一共包括了八个实验,由于实验一是安装VC以及打印“hello,world”的基本操作,故没有放在这个系列里面,这些实验的代码部分参考与网上,仅供学习和参考~


知识纲要

  1. 循环程序设计的要点有两个方面:(1)循环控制(何时进入和退出循环),(2)循环体(每次循环要执行的语句,注意使条件变化)。
  2. 循环控制有两种方法:(1)计数法:要先确定循环次数,然后逐次测试,完成测试次数后,循环结束。(2)标志法:是达到某一目标后,使循环结束。计数法使用起来很方便,但它要求在程序执行前必须先知道循环的总次数;当不想或无条件使用计数法时,可以使用标志法。
  3. C语言中有三个形成循环控制结构的语句:while和for是先判断后执行循环体(循环体可能一次都不执行),而do … while是先执行循环体后判断(循环体至少会执行一次)。
  4. for循环的初始化和循环变量修改分别在for后圆括号中的第一和第三表达式中实现,而while和do … while循环的初始化要在循环语句之前,循环体中要有循环变量修改(或使循环条件表达式值发生变化)的语句。
  5. for语句括号中的三个表达式都可以省略,但两个分号不能省略,也不要写成逗号。不要在while和for语句后加分号,否则循环体是空语句,特别是while语句,加分号后将造成死循环。
  6. 一个循环的循环体内包含另一个完整的循环结构称为循环嵌套,循环结构可以相互嵌套构成多重循环,但循环结构不可以交叉。
  7. break和continue只能写在循环体内,不能写在循环体外。break立刻终止当前循环,而continue只终止本次循环,还要根据循环条件是否满足决定是否进行下一次循环。在嵌套的循环中break只终止所在层的循环,而不会终止外层循环结构的循环;
  8. 程序中的错误一般分为编译时错误(语法错误)、连接时错误(找不到函数)和运行时错误(异常、逻辑错误)三类。逻辑错误一般较难找到问题所在,可通过程序的动态跟踪和调试找到错误所在。
  9. 程序调试常用的技术有:单步执行、设置断点、变量和表达式监视、调用堆栈查看等

实验内容

1.利用公式1- \frac{1}{3} +\frac{1}{5}-\frac{1}{7}+\begin{matrix} & ....& \\ \end{matrix}+\frac{1}{n} 求π的近似值。

        要求:先提示“输入所需的精度:”,输入要求的精度,根据输入的精度要求求近似值。精度指循环到级数项1/n的值小于该给定值(如:1E-5)就结束循环。

2.输入一个不大于8位的正整数,生成各位与原数反序的另一个数(不能只是反序输出每一位),输出原数是几位数,反序后是什么。例如:输入123456,输出“123456是6位数,反序后是:654321”。

        提示:可通过在循环中除10取余求出输入数的每一位,循环的次数就是原数的位数,反序数可以通过每次循环中乘10再加本次求得的一位得到。

3.编写程序输出所有“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字之“立方和”等于该数本身。例如:153 = 13 + 53 + 33

        提示:有两种做法:1、用单循环从100到999,取出3位数的每一位进行计算和比较;2、用三重循环,个、十、百位分别循环,算出3位数进行计算和比较。

4.程序调试与跟踪:

        通过设置断点、单步执行、监视变量等程序调试手段,在VC的调试状态下一步一步执行程序,并观察程序执行的顺序与变量值的变化。


实验结果

第一个小实验

#include<stdio.h>
#include<math.h>
void main( )
{
    double pi=0.0,t=1.0,p;int s=1,n=1;
	printf("输入所需的精度:");
	scanf("%lf",&p);
	while(t>p)
{   pi=pi+s*t;
	n=n+2;
	s=-s; 
	t=1.0/n;
	
}
	printf("PI=%lf\n",4*pi);
}

第二个小实验

#include<stdio.h>
int main()
{
    long num;int num1,num2,num3,num4,num5,num6,num7,sum;
	long anum2,anum3,anum4,anum5,anum6,anum7;
	printf("输入一个不大于8位的正整数");
	scanf("%ld",&num);
    if(num>=1e+8)
	{
		printf("输入错误");
	     return 0;
	}
	else (num<1e+8);
		
		goto con;
//假如输入的是1234567	
con:num1=num/1e+6;//num1=1.234567 =1
	num2=(num/1e+5)-(num1*10);//num2=12.34567 ,12-10=2
	num3=(num/1e+4)-(num1*100)-(num2*10);//num3=123 -100-20=3
	num4=num/1e+3-(num1*1000)-(num2*100)-(num3*10);//num4=1234-1000-200-30=4
	num5=num/1e+2-(num1*10000)-(num2*1000)-(num3*100)-(num4*10);//num5=12345-10000-2000-300-40=5
	num6=num/1e+1-(num1*100000)-(num2*10000)-(num3*1000)-(num4*100)-(num5*10);//num6=123456-100000-20000-3000-400-50=6
	num7=num-(num1*1e+6)-(num2*1e+5)-(num3*1e+4)-(num4*1e+3)-(num5*1e+2)-(num6*1e+1);//num7=7
    anum2=num2*10;
	anum3=num3*1e+2;
	anum4=num4*1e+3;
	anum5=num5*1e+4;
	anum6=num6*1e+5;
	anum7=num7*1e+6;
	sum=num1+anum2+anum3+anum4+anum5+anum6+anum7;

		printf("%ld",sum);
	return 0;
}

第三个小实验

#include<stdio.h>
int main()
{
	int num=100;
	int numfrist,numsecond,numthird;
	for(num=100;num<=999;num++)
	{
		numfrist=num/100;
	    numsecond=(num-numfrist*100)/10;
		numthird=num-100*numfrist-10*numsecond;
		if(num==numfrist*numfrist*numfrist+numsecond*numsecond*numsecond+numthird*numthird*numthird)
		printf("%d=%d*%d*%d+%d*%d*%d+%d*%d*%d\n",num,numfrist,numfrist,numfrist,numsecond,numsecond,numsecond,numthird,numthird,numthird);
		
	}
	
	return 0;
}

第四个小实验

因为并无代码需要写,故省略了这个的具体操作方法。


结语

如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;