目录
前言
这一系列文章所记录的是大一上学期学的一门名为《C语言程序设计》的实验内容,一共包括了八个实验,由于实验一是安装VC以及打印“hello,world”的基本操作,故没有放在这个系列里面,这些实验的代码部分参考与网上,仅供学习和参考~
知识纲要
- 循环程序设计的要点有两个方面:(1)循环控制(何时进入和退出循环),(2)循环体(每次循环要执行的语句,注意使条件变化)。
- 循环控制有两种方法:(1)计数法:要先确定循环次数,然后逐次测试,完成测试次数后,循环结束。(2)标志法:是达到某一目标后,使循环结束。计数法使用起来很方便,但它要求在程序执行前必须先知道循环的总次数;当不想或无条件使用计数法时,可以使用标志法。
- C语言中有三个形成循环控制结构的语句:while和for是先判断后执行循环体(循环体可能一次都不执行),而do … while是先执行循环体后判断(循环体至少会执行一次)。
- for循环的初始化和循环变量修改分别在for后圆括号中的第一和第三表达式中实现,而while和do … while循环的初始化要在循环语句之前,循环体中要有循环变量修改(或使循环条件表达式值发生变化)的语句。
- for语句括号中的三个表达式都可以省略,但两个分号不能省略,也不要写成逗号。不要在while和for语句后加分号,否则循环体是空语句,特别是while语句,加分号后将造成死循环。
- 一个循环的循环体内包含另一个完整的循环结构称为循环嵌套,循环结构可以相互嵌套构成多重循环,但循环结构不可以交叉。
- break和continue只能写在循环体内,不能写在循环体外。break立刻终止当前循环,而continue只终止本次循环,还要根据循环条件是否满足决定是否进行下一次循环。在嵌套的循环中break只终止所在层的循环,而不会终止外层循环结构的循环;
- 程序中的错误一般分为编译时错误(语法错误)、连接时错误(找不到函数)和运行时错误(异常、逻辑错误)三类。逻辑错误一般较难找到问题所在,可通过程序的动态跟踪和调试找到错误所在。
- 程序调试常用的技术有:单步执行、设置断点、变量和表达式监视、调用堆栈查看等
实验内容
1.利用公式 求π的近似值。
要求:先提示“输入所需的精度:”,输入要求的精度,根据输入的精度要求求近似值。精度指循环到级数项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;
}
第四个小实验
因为并无代码需要写,故省略了这个的具体操作方法。
结语
如果有疑问欢迎大家留言讨论,你如果觉得这篇文章对你有帮助可以给我一个免费的赞吗?我们之间的交流是我最大的动力!