第四次作业

一、实验内容

1.实验要求:编写程序,输入一个整数x,按照下式输出对应的y值。

 

      

 

代码:

#include<stdio.h>
int main()
{
int m,x,y=0;
printf("请输入x的值:\n");
scanf("%d",&x);
if(x%2!=0)
    {
        for(m=1;m<=x;m+=2)
        {
            y+=m;
        }
    }
else 
    {
        for(m=2;m<=x;m+=2)
        {
            y+=m;
        }
    }
printf("y=%d",y);
return 0;
}

 

 

 

程序运行结果:

 

 

 

 

 

 

 

2.实验要求:编程求1-1/2+1/3-1/4+1/5- … +1/99-1/100,结果保留两位小数。

 

代码:

#include<stdio.h>
int main()
{
int i;
float j=0,o=0,sum;
for(i=2;i<=100;i+=2)
{
    o=o+1.0/i;
}
for(i=1;i<=100;i+=2)
{
    j=j+1.0/i;
}
sum=j-o;
printf("%.2f",sum);
return 0;
}

 

 

 

程序运行结果:

 

 

3.实验要求:输出2000年至3000年所有闰年的年号,每输出10个年号换一行。最后统计一共有多少个闰年。

 

代码:

#include<stdio.h>
int main()
{
int year,i=0;
for(year=2000;year<=3000;year++)
{
    if (year%400==0||year%4==0&&year%100!=0)
    {
        printf("% d",year);
        i++;
        if(i%10==0)
        {
            printf(" \n");
        }
    }
}
printf("有% d个闰年\n",i);
return 0;
}

 

 

 

程序运行结果:

 

4.实验要求:输入一个实数x和一个整数m,计算xm,不允许调用pow()函数。

 

代码:

#include<stdio.h>
int main()
{
int m,i;
float x,p=1;
printf("请输入一个实数x和一个整数m:\n");
scanf("%f,%d",&x,&m);
for(i=1;i<=m;i++)
{
    if(m==0)
    {
        p=1;
    }
    else if(m<0)
    {
        p=1/p*x;
    }
    else if(m>0)
    {
        p=p*x;
    }
}
printf("%f",p);
return 0;
}

 

 

 

 

程序运行结果:

 

5.实验要求:输入一串字符,分别统计其中字母、空格、数字和其他字符的个数。

 

代码:

#include<stdio.h>
int main()
{
char c;
int a,b,d,e,other;
a=0;
b=0;
d=0;
e=0;
other=0;
printf("请输入一串字符,按回车结束:\n");
scanf("%c",&c);
while(c!='\n')
{
    if(c>='A'&&c<='z')
    {
        a++;
    }
    else if(c>='a'&&c<='z')
    {
        b++;
    }
    else if(c==' ')
    {
        d++;
    }
    else if(c>='0'&&c<='9')
    {
        e++;
    }
    else
    {
        other++;
    }
    scanf("%c",&c);
}
printf("共有%d个大写字母,%d个小写字母,%d个空格,%d个数字,%d个其他字符",a,b,d,e,other);
return  0;
}

 

 

 

程序运行结果:

 

6.实验要求:输入一批数(正数和负数),输入0结束,分别计算其中正数的平均值和负数的平均值,

 

代码:

#include<stdio.h>
int main()
{
int x,a,b,c,d;
a=0;
b=0;
c=0;
d=0;
scanf("%d",&x);
while(x!=0)
{
	if(x>0)
	{
		a+=x;
		c++;
		
	}
	if(x<0)
	{
		b+=x;
		d++;
	}
	scanf("%d",&x);
}
if(c==0&&d!=0)
{
	printf("正数的平均值为0,负数的平均值是%.2f",(float)b/d);			
}
else if(c!=0&&d==0)
{
	printf("正数的平均值为%.2f,负数的平均值是0",(float)a/c);
}
else if(c==0&&d==0)
{
	printf("正数的平均值为0,负数的平均值是0");
}
else if(c!=0&&d!=0)
{
	printf("正数的平均值为%.2f,负数的平均值是%.2f",(float)a/c,(float)b/d);
}
return 0;
}

 

 

 

程序运行结果:

 

 

 

7.实验要求:输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)

 

代码:

#include<stdio.h>
int main()
{
int i,m,num;
num=0;
pritf("1000以内的素数:\n");
for(i=2;i<=1000;i++)
{
    for(m=2;m<i;m++)
    {
        if(i%m==0)
        {
            break;
        }
    }
    if(i<=m)
    {
        printf("%03d",i);
        num++;
        if(num%10==0)
        {
            printf("\n");
        }
    }
}
printf("共有%d个素数",num);
return 0;
}

 

 

 

程序运行结果:

 

 

 

 

 

8.实验要求:打印下列图形

 

             

 

代码:

#include<stdio.h>
int main()
{
    int i,j;
    for(i=1;i<=5;i++)
    {
        for(j=1;j<=i-1;j++)
        {
            printf(" ");
        }
        for(j=1;j<=2*(5-i)+1;j++)
        {
            printf("*");
        }
        printf("\n");
    }
    return 0;
}

 

 

 

程序运行结果:

 

 

二、   本次课知识点总结

1. 本次课学习了循环结构,那么,就三种循环的形式、执行过程、注意事项以及适宜的应用场合做总结。

for 语句

for(表达式1;表达式2;表达式3)

{

   循环体语句

}

for语句中表达式可以部分或全部省略,但两个“;”不能省略。当省略表达式2时,因为缺少循环条件的判断,会形成无限循环。

for语句中的表达式可以是任意有效的C语言表达式。

表达式2一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非零,就执行循环体。

while 语句

while(表达式)

 {

   循环体语句;

}

特点:

先判断表达式,后执行循环体,循环体有可能一次也不执行

do ~ while 语句

do

{

   循环体语句;

} while(表达式);

特点:

先执行循环体,后判断表达式,至少执行一次循环体。

 

 

 

循环次数已知

计数控制的循环

for语句

循环次数未知

由给定条件控制

条件控制的循环

while语句

循环体至少要执行一次

do…while语句

 

 

2.break和continue区别何在?

 都是循环控制语句。

break语句:在循环语句和switch语句中,终止并跳出循环体或开关体。

break只能终止并跳出最近一层的结构

break只能用于循环语句和switch语句中

在循环语句中,break语句一般都是与if语句一起使用。

while(表达式1)

{

   语句组1

    if(表达式2)  break;

    语句组2

}

continue语句 :结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断。

continue语句只能用在循环语句中。 一般都是与if语句一起使用。

while(表达式1)

   {

   语句组1

   if(表达式2)  continue;

   语句组2

   }

continue语句只结束本次循环,而不是终止整个循环的执行。而break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。

3.从本次课开始,我们接触到了一些典型算法,对累加型问题和阶乘型问题进行总结,注意事项是什么?

累加:

和初始化为0或第一项

关键是寻找累加和的构成规律(通项)

   1. 寻找累加项与循环变量之间的关系

   2. 寻找累加项前后项之间的关系     

s=0;

for( i=1 ;i<=n  ;i++  )

{    

   s=s+通项;

 }

阶乘:乘积初始化为1

p=1;

for( i=1 ;i<=n  ;i++  )

{

    p=p*通项;

 }

4.理解循环嵌套

三种循环可互相嵌套,层数不限

外层循环可包含两个以上内循环,但不能相互交叉。

for( ; ;)

   {    ……

          do

          {   ……

          }while();

          ……

         while()

           {   ……

           }

          …...

  }

 

 

 

 

 

三、实验总结

 1.变量一定要附初值。

 2.循环语句之间的逻辑关系一定要想清楚。

3.注意0和o

4.不能忘记取地址符。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2016-10-27 19:37  张晓楠  阅读(463)  评论(6编辑  收藏  举报