有负数时
分析:
本程序只有一个函数,即入口函数main函数。
在main函数中,首先声明int型变量p、r、n、m、temp;接着从屏幕输入n、m的值。
在if语句中把大数放在n中,小数放在m中。
将n和m的乘积保存在p中,以便求最小公倍数时用。
在while循环中求两数的最大公约数。
保存于n中。
第一个输出语句输出最大公约数n;第二个输出语句输出最小公倍数,p/n即为最小公倍数。
2、输入一行字符,分析统计出其中的英文字母、空格、数字和其他字符的个数。
程序如下:
#include
voidmain()
{
charc;
intletters=0,space=0,digit=0,other=0;
printf("请输入一行字符串:
\n");
while((c=getchar())!
='\n')
{
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
elseif(c=='')
space++;
elseif(c>='0'&&c<='9')
digit++;
else
other++;
}
printf("字母数:
%d\n空格数:
%d\n数字数:
%d\n其他字符数:
%d\n",
letters,space,digit,other);
}
运行情况:
分析:
程序先声明了字符变量c用来保存获取的字符。
接着定义了letter、space、digit、other分别用了保存字符数、空格数、数字数和其他字符数,并给他们赋值为0。
然后用户在屏幕上输入一行字符串,程序用c=getchar()接收从屏幕上输入的字符。
if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letters++;
判断保存在c中的字符是否是普通字符。
如果是,则letters加1;letters等同于letters=letters+1,以下的space++也一样。
elseif(c=='')判断c中保存的是否是空格;elseif(c>='0'&&c<='9')判断c中保存的是否是数字。
While循环一直进行,直到c中保存的为换行符“\n”为止。
最后分别把字符数、空格数、数字数和其他字符数输出。
程序结束。
3、用牛顿迭代法求方程
在1.5附近的根。
程序如下:
#include
#include
voidmain()
{
floatx1,x0,f,f1;
x1=1.5;
do
{
x0=x1;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x1=x0-f/f1;
}
while(fabs(x1-x0)>=1e-5);
printf("Therootofequationis%5.2f\n",x1);
}
运行情况:
分析:
floatx1,x0,f,f1;声明浮点型变量x1,x0,f,f1。
do
{
}while()
是先执行一遍循环,再判断是否进行下一步循环,其循环体至少运行一遍;而while语句是先判断再执行循环,其循环体可能一次也不执行。
在本程序中先执行一遍以下语句
x0=x1;
f=((2*x0-4)*x0+3)*x0-6;
f1=(6*x0-8)*x0+3;
x1=x0-f/f1;
再判断是否满足fabs(x1-x0)>=1e-5,当满足条件fabs(x1-x0)>=1e-5时,接着执行一遍循环体;当条件fabs(x1-x0)>=1e-5不满足时,跳出循环执行下一条语句
最后输出运行结果,程序执行结束。
4、猴子吃桃问题。
猴子当天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃了一半,又多吃了一个。
以后每天早上都吃了前一天的一半零一个。
到第十天早上再想吃的时候,见只剩下一个桃子。
求第一天共摘了多少个桃子。
由题意得程序:
#include
voidmain()
{
intday,x1,x2;
day=9;
x2=1;
while(day>0)
{
x1=(x2+1)*2;
x2=x1;
day--;
}
printf("猴子第一天共摘了%d个桃子\n",x1);
}
运行情况:
在得到正确的结果后,修改题目,改为猴子每天吃了前一天的一半后又多吃了两个,请修改程序并运行,查看运行结果是否正确。
修改后得程序
#include
voidmain()
{
intday,x1,x2;
day=9;
x2=1;
while(day>0)
{
x1=(x2+2)*2;
x2=x1;
day--;
}
printf("猴子第一天共摘了%d个桃子\n",x1);
}
运行情况:
分析:
用x1保存第一天的桃子数,用x2保存第二天的桃子数。
应为第十天早上只剩下一个桃子了。
所有x2赋初值为1。
x1=(x2+1)*2;第一天的桃子数是第二天的桃子数加1后的两倍。
while(day>0)
{
x1=(x2+2)*2;
x2=x1;
day--;
}
循环9次,得到第一天共摘得的桃子数。
四、实验总结。
while语句
while语句的一般形式为:
while(表达式)语句;其中表达式是循环条件,语句为循环体。
while语句的语义是:
计算表达式的值,当值为真(非0)时,执行循环体语句。
do-while语句的一般形式为:
do
语句;
while(表达式);
其中语句是循环体,表达式是循环条件。
do-while语句的语义是:
先执行循环体语句一次,再判别表达式的值,若为真(非0)则继续循环,否则终止循环。
do-while语句和while语句的区别在于do-while是先执行后判断,因此do-while至少要执行一次循环体。
而while是先判断后执行,如果条件不满足,则一次循环体语句也不执行。
for语句
for语句是C语言所提供的功能更强,使用更广泛的一种循环语句。
其一般形式为:
for(表达式1;表达式2;表达3)
语句:
表达式1 通常用来给循环变量赋初值,一般是赋值表达式。
也允许在for语句外给循环变量赋初值,此时可以省略该表达式。
表达式2 通常是循环条件,一般为关系表达式或逻辑表达式。
表达式3 通常可用来修改循环变量的值,一般是赋值语句。
这三个表达式都可以是逗号表达式,即每个表达式都可由多个表达式组成。
三个表达式都是任选项,都可以省略。
一般形式中的“语句”即为循环体语句。
for语句的语义是:
1.首先计算表达式1的值。
2.再计算表达式2的值,若值为真(非0)则执行循环体一次,否则跳出循环。
3.然后再计算表达式3的值,转回第2步重复执行。
在整个for循环过程中,表达式1只计算一次,表达式2和表达式,3则可能计算多次。
循环体可能多次执行,也可能一次都不执行。
2010年月日