第四次作业
1.编写程序,输入一个整数x,按照下式输出对应的y值。
#include <stdio.h> int main() { int x,y,f,i; printf("请输入一个整数\n"); scanf("%d",&x); if(x%2!=0) { for(i=1,y=0;i<=x;i=i+2) { y=y+i; } printf("y=%d\n",y); } else if(x%2==0) { for(i=0,f=0;i<=x;i=i+2) { f=f+i; } printf("y=%d\n",y); } else { printf("y=0"); } return 0; }
实验总结:注意中文标点符号和英文标点符号的混乱。
知识点总结:if else与for可以嵌套使用,但最好是每个后面都加大括号。
2.编程求1-1/2+1/3-1/4+1/5- … +1/99-1/100,结果保留两位小数。
#include <stdio.h> int main() { int i,j; double sum,m,n; for(i=1,m=0;i<=99;i+=2) { m+=1.0/i; } for(j=2,n=0;j<=100;j+=2) { n+=1.0/j; } sum=m-n; printf("%.2lf",sum); return 0; }
实验总结:i为整型常量,m为实型常量,最简单的求1/i的方法是m=1.0/i。
知识点总结:当循环次数已知时,用for语句。
3.输出2000年至3000年所有闰年的年号,每输出10个年号换一行。最后统计一共有多少个闰年。
#include <stdio.h> int main() { int i,time; time=0; for(i=2000;i<=3000;i++) { if(i%4==0&&i%100!=0||i%400==0) { time++; printf(" %d",i); if(time%10==0&&time!=0) { printf("\n"); } } } printf("一共有%d个数",time); return 0; }
实验总结:1.当0作为除数时,结果会出现问题,运行不了或者出现乱码。
2.一共有几个数需要放在循环的外边。
知识点总结:闰年的表达方式是a%4==0&&a%100!=0||a%400==0。
4.输入一个实数x和一个整数m,计算xm,不允许调用pow()函数。
#include <stdio.h> int main() { int m,i; double x,y; printf("请输入一个实数和一个整数:\n"); scanf("%lf%d",&x,&m); for(i=1,y=1;i<=m;i++) { y=y*x; } printf("%lf\n",y); return 0; }
实验总结:y的初始值定义为1对乘法式子没影响。
知识点总结:for语句是一种计数控制的循环。
5.输入一串字符,分别统计其中字母、空格、数字和其他字符的个数。
#include <stdio.h> int main() { int i,j,m,n; char character; printf("请输入一串字符。\n"); scanf("%c",&character); i=0; j=0; m=0; n=0; while(character!='\n') { if(character==' ') { i++; } else if((character>='A'&&character<='Z')||(character>='a'&&character<='z')) { j++; } else if(character>='0'&&character<='9') { m++; } else { n++; } scanf("%c",&character); } printf("空格有%d个,字母有%d个,数字有%d个,其他字符有%d个\n",i,j,m,n); return 0; }
实验总结:1.最后的输出在循环的外边。
2.字母可以表示为>='A'&&<='Z'||>='a'&&<='z'.
知识点总结:1.while()的后边没有“;”do while的while后边带“;”。
2.while的()中表示的是当不满足时才循环。
6.输入一批数(正数和负数),输入0结束,分别计算其中正数的平均值和负数的平均值,
#include <stdio.h> int main() { int number,i,j,m,n; double average1,average2; average1=0; average2=0; printf("请输入一批非零整数输入0结束:\n"); scanf("%d",&number); i=0; j=0; m=0; n=0; while(number!=0) { if(number>0) { i++; m+=number; } else { j++; n+=number; } scanf("%d",&number); } if(m==0&&n!=0) { average1=0; average2=(float)n/j; } else if(n==0&&m!=0) { average1=(float)m/i; average2=0; } else { average1=(double)m/i; average2=(double)n/j; } printf("正数的平均数为%lf,负数的平均数为%lf:\n",average1,average2); return 0; }
实验总结:所有的未知变量都要赋给他一个值。
知识点总结:while语句以及所有的循环语句都可与if else嵌套。
7.输出1000以内的所有素数,每行10个,最后输出一共有多少个素数。(每列对齐)
#include <stdio.h> int main() { int i,prime,a; a=0; for(prime=2;prime<=1000;prime++) { for(i=2;i<prime;i++) { if(prime%i==0) break; } if(i>=prime) { printf(" %03d",prime); a++; if(a%10==0&&a!=0) printf("\n"); } } printf("\n1000以内一共有%d个素数\n",a); return 0; }
实验总结:1.% 3d=最高位前的空位用0补充。
2.程序还可以优化算到prime的开方即可,需加一个()=spar()
知识点总结:素数的表达方式prime number%i(自增变量)!=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=9;j>=2*i-1;j--) { printf("*"); } printf("\n"); } return 0; }
实验总结:这方面的知识还不够熟练,需要多加练习。
知识点总结:1.两个for语句嵌套外层控制行,内层控制列。
2.内层循环变量与外层循环变量不能相同。