1 . 思维导图
2 . 认识语句
(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只能用于循环。
3 . PTA分数截图
( 1 )
( 2 )
( 3 )
4 . 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随时跳出函数。 错误原因:没有头绪不会做题。 收获总结:刷题看书问同学滚去加油。