C语言作业1

江枫思渺然 提交于 2019-12-01 07:10:58

一.思维导图

二.语法认识

1.if—else.

if(条件1)
{
  语句1;
}
else
{
  语句2;
}

遇到的问题:对于if和else的两两配对理解不够,导致程序判断结构异常。
解决方法:牢记else和if的匹配准则:else与最靠近它的、没有与别的else匹配过的if相匹配。并在编辑代码时采用多层缩进的书写格式,使判断结构层次分明。
注意事项:else后无需再编辑条件,为养成良好的编辑习惯,if-else语句的大括号要打出来。

2.switch.

switch(整形表达式)
{ 
    case 常量表达式1:  语句1;break;
    case 常量表达式2:  语句2;break;
    … 
    case 常量表达式n:  语句n;break;
    default:  语句n+1;

}

遇到的问题:过于依赖switch,导致有时编辑出的代码质量不好,不便于检查和后期的程序维护。
解决方法:在解决问题时只在switch语句的优势十分明显时使用switch语句,慎用、智用switch语句。
注意事项:switch语句中的break语句并不是每个case语句后都必须有, 这个机制可以让switch语句的用途大大增加,所以要在switch语句中智慧的安排break的位置。

3.for.

for(表达式1; 表达式2; 表达式3)
{
    循环体语句
}

遇到的问题:在某些问题中,经常会控制不好for语句的循环次数,导致运算结果错位。
解决方法:在运用for语句前,先在纸上写出程序模拟图,计算无误后再打代码。
注意事项:for语句中的表达式1只是负责在开始时提供一个起点,只运算一次。表达式2是是否再一次执行循环的判断条件。表达式3为循环提供变量,避免程序陷入死循环。

4.while.

while(循环条件)
{
    循环体语句
}

注意事项:while语句是循环语句的一员,其他循环语句写出的代码几乎都能化为while语句,所以在自己读不懂某个循环代码时,将其化为while语句不失为一种方法,一来可以换一种方式看问题,二来可以增进自己对这个代码的理解度。

5.do-while.

do
{
    循环体语句
}while(循环条件);

遇到的问题:此语句与前两个循环语句的循环思路并不一样,相同的条件在此循环语句中很可能会输出不一样的结果。
解决方法:理解此语句的循环原理和特殊的循环顺序,多加训练,当自己一看到问题就能判断出是否用do-while语句时,就意味着对do-while有了比较正确的理解。
注意事项:需要注意的是,do-while语句的循环顺序与前两个循环语句都不一样,先循环再判断的顺序决定了它至少循环一次的特性,这种特性在解决如“计算一个数的位数”的这种问题时显得得心应手,要善用此特性,而且要记得在语句的最后加上分号。

6.break.

switch(整形表达式)
{ 
    case 常量表达式1:  语句1;break;
    … 
    case 常量表达式n:  语句n;break;
    default:  语句n+1;

}

for(表达式1; 表达式2; 表达式3)
{
    语句1;
     continue;
    语句2;
        
}

注意事项:break语句可以出现在选择结构和循环结构里,但continue语句只能用在循环语句中,continue语句使用后,本次循环直接结束,不再执行continue之后的语句,直接进行下一轮循环。break语句是跳出当前执行行的语句,二者各有特色,各有各的作用。

pta分数截图

2.3,2.4分数

第3章分数

4.1分数

四.pta代码分析

1.7-8 求阶乘序列前N项和 (15 分)

本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。
输入格式:
输入在一行中给出一个不超过12的正整数N。
输出格式:
在一行中输出整数结果。
输入样例:
5
输出样例:
153
#include<stdio.h>
int fac(int n)    /*函数声明*/
{
    int mul = 1;
    for (int i = n; i > 0; i--)
    {
        mul = mul*i;  
    }
    return mul;    /*将结果返回主函数*/
}
int main()   
{
    int n = 0;
    scanf("%d", &n);
    int sum = 0;
    int i = 1;
    while (i <= n)
    {
        sum = sum + fac(i);/*调用函数*/
        i++;
    }
    printf("%d", sum);
    system("pause");
    return 0;
}

问题:主要想不到程序该怎么写,还有就是函数不知道怎么定义;

2.7-5 查询水果价格 (15 分)

给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。
首先在屏幕上显示以下菜单:
[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。
输入格式:
输入在一行中给出用户连续输入的若干个编号。
输出格式:
首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。
#include<stdio.h>

int main()
{
    printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");/*首先输出水果种类及序号*/

    int i,num;

    for(i=0;i<=4;i++){    /*for循环*/

        scanf("%d",&num);

        if(num==0){
            break;
        }

        switch(num){    /*switch语句*/

            case 1:printf("price = 3.00\n");
            break;

            case 2:printf("price = 2.50\n");
            break;

            case 3:printf("price = 4.10\n");
            break;

            case 4:printf("price = 10.20\n");
            break;

            default:printf("price = 0.00\n");
            break;
        }
    }

    return 0;
}

问题:未理解“用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。”这句话的意思

解决方法:认真审题,并借助网上的解析完成。

3.7-1 求奇数和 (15 分)

本题要求计算给定的一系列正整数中奇数的和。
输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。
输出格式:
在一行中输出正整数序列中奇数的和。
输入样例:
8 7 4 3 70 5 6 101 -1
输出样例:
116
#include <stdio.h>
int main(){
    int sum=0, n=-1;
    while(1){    /*小技巧,while(1)永远为真*/ 
        if(n<=0){    /*小于零直接跳出循环*/ 
            break;
        }
        if(n%2==1){    /*判断奇数*/
            sum += n;    /*求奇数项和*/
        }
    }
    printf("%d\n", sum);

    return 0;
}

问题:没想到怎么连续输出一系列数。

解决方法:熟悉掌握while语句以及条件判断真假。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!