博客作业 (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随时跳出函数。
错误原因:没有头绪不会做题。
收获总结:刷题看书问同学滚去加油。

posted @ 2019-10-15 17:07  Styoool(曾广芝)  阅读(272)  评论(0编辑  收藏  举报