第四次作业
一、实验内容
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.不能忘记取地址符。