博客作业 (1)
一. 思维导图
二. 认识语句
(1)if-else
if (表达式)
语句1;
else
语句2;
该语句用于实现分支结构,根据表达式的值选择语句1或语句2中一条执行;
else与它最接近的if配对。
(2)switch
switch(表达式){
case常量表达式1:语句段1;break;
case常量表达式2:语句段2;break;
...
case常量表达式n:语句段n;break;
default: 语句段n+1;break;
}
switch语句中,case后面出现的应是一个常量表达式;
在switch语句中不使用break语句。
(3)for
for(表达式1;表达式2;表达式3)
循环体语句
for语句中用两个分号分隔三个表达式,但for后面没有分号,因为for与其后的循环体语句合为一条完整语句;
for语句执行过程中表达式1只在进入循环前执行一次;
如果循环体语句由多条语句组成,必须使用大括号变成一条复合语句。
(4) while
while (表达式)
循环体语句
while语句执行过程,当表达式值为‘‘真’’时,循环执行,直到表达式的值为‘‘假’’,循环中止并继续执行while的下一条语句;
while语句中的表达式可以是任意合法的表达式,循环体语句只能是一条语句。
(5) do-while
do{
循环体语句
}while (表达式);
do-while语句先执行循环体,后判断循环条件。
(6) break及continue
switch(表达式){
case常量表达式1:语句段1;break;
case常量表达式2:语句段2;break;
...
case常量表达式n:语句段n;break;
default: 语句段n+1;break;
}
for(语句1;语句2;语句3)
{
语句1;
continue;
语句2;
}
不使用break时,如果表达式值与常量表达式2值相等,不但执行语句段2,还执行其后的所有语句段;
break语句强制循环结束;
continue只是跳过后面语句的循环;
break除了可以中止循环,还用于switch语句,而continue只能用于循环。
三. PTA分数截图
( 1 )
( 2 )
( 3 )
四. PTA代码分析
( 1 ) 2.3 2.4作业
7-8 求阶乘序列前N项和 (15 分)
本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。
输入格式:
输入在一行中给出一个不超过12的正整数N。
输出格式:
在一行中输出整数结果。
输入样例:
5
输出样例:
153
#include<stdio.h>
int main(){
int n,i,s = 0,j,x=1;
scanf("%d",&n);
for(i=1;i<=n;i++){
for(j=1;j<=i;j++){
x = x*j;
}
s = s+x;
j = 1;
x = 1;
}
printf("%d",s);
return 0;
}
思路分析:由于求阶乘每次相加都会使用,所以可将‘‘求阶乘’’单独写成一个函数,这样在main()函数中循环调试即可。
错误原因:直接判断是否i<=12进行累加导致序列计算的是前12项阶乘之和。
收获总结:学会循环语句for的使用。
( 2 ) 第三章作业
7-2 比较大小 (10 分)
本题要求将输入的任意3个整数从小到大输出。
输入格式:
输入在一行中给出3个整数,其间以空格分隔。
输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。
输入样例:
4 2 8
输出样例:
2->4->8
#include<stdio.h>
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
if(a>b&&a>c&&b>c){
printf("%d->%d->%d",c,b,a);
}
if(a>b&&a>c&&c>b){
printf("%d->%d->%d",b,c,a);
}
if(b>a&&b>c&&a>c){
printf("%d->%d->%d",c,a,b);
}
if(b>a&&b>c&&c>a){
printf("%d->%d->%d",a,c,b);
}
if(c>a&&c>b&&a>b){
printf("%d->%d->%d",b,a,c);
}
if(c>a&&c>b&&b>a){
printf("%d->%d->%d",a,b,c);
}
if(a==b&&b==c&&a==c){
printf("%d->%d->%d",a,b,c);
}
return 0;
}
思路分析:输入三个整数嵌套if语句,通过逻辑运算符连接比较a b c的大小。
错误原因:遗漏了三者相等的情况并且条件中将=与==混淆使得程序错误。
收获总结:规范书写代码。
( 3 ) 4.1作业
7-6 统计素数并求和 (20 分)
本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:
输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:
在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:
10 31
输出样例:
7 143
#include <stdio.h>
#include <math.h>
int isPrime(int n) {
int i, max;
if (n < 2) {
return 0;
}
max = sqrt(n);
for (i = 2; i <= max; i++) {
if (n%i == 0) {
return 0;
}
}
return 1;
}
int main(void) {
int m, n, count = 0, sum = 0, i;
scanf("%d %d", &m, &n);
for (i = m; i <= n; i++) {
if (isPrime(i)) {
count++;
sum += i;
}
}
printf("%d %d\n", count, sum);
return 0;
}
思路分析:为了函数的可转移性,设置多个return随时跳出函数。
错误原因:没有头绪不会做题。
收获总结:刷题看书问同学滚去加油。