初学c语言

一.思维导图

二.自己对语法的认识

1.if-else

 

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

 

  注意点:else后没有条件,else和if中间不可以加入其他的东西。

2.switch 

switch(表达式){
    case 常量表达式1: 语句段1; break;
    case 常量表达式2: 语句段2; break;
    .......
    case 常量表达式n: 语句段n; break;
    default: 语句段n-1; break;
}

  注意点:常量表达式不可重复;如果句末没有break会顺序向下执行。

3.for

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

  注意点:三个表达式需要用“;”隔离开,且没有表达式时也不可省略分号;执行时先计算表达式1,在判断表达式2,若为“真”则执行循环语句,接着计算表达式3。

  遇到过的问题:表达式3没有和表达式2呼应,造成死循环。

4.while

while(表达式){
    循环语句;
}

  注意点:当表达式为“真”时,循环执行,直到表达式为“假”。

5.do-while

do{
    循环语句;
}while(表达式)

  注意点:先执行循环语句再判断循环条件,无论条件值如何,至少会执行一次循环体。

6.break以及continue

  (1)break可用在循环结构中,以在某种情况下提前结束循环,例如:

for(表达式1;表达式2;表达式3){
    if(表达式4)
        break;
}

  一旦当表达式4为“真”时就会结束循环体。

  也可用在switch语句中来跳出switch结构,例如:

switch(表达式){
    case 常量表达式1:语句段1;break;
    case 常量表达式2:语句段2;break;
}

  如果执行语句段1,在执行完语句段1后,有break,则会跳出switch结构,而如果没有break,则会接着执行语句段2。

 

三.代码分析

1.

 

 

/*基本思路:
    1.题目中有算阶乘,所以需要一个用来算某一个数阶乘的函数
    2.算序列前N项和,所以需要一个循环体来实现前N项的目的
    3.循环体中某一个变量从1加到N,并每次调用阶乘函数,来达到阶乘序列的目的
    4.定义一个变量来储存每一项阶乘
*/
#include<stdio.h>

int fact(int amount);//阶乘函数声明

int main() {
    int N;
    scanf("%d", &N); //输入N
    int sum = 0; //定义变量来求和
    for (int x = 1; x <= N;x++) { //循环体实现一次次的函数调用,x每次都加1
        sum += fact(x); //调用函数求阶乘,并加入到sum中
    }
    printf("%d", sum); //输出sum
    return 0;
}
int fact(int n) { //此函数实现对形参求阶乘
    int product = 1;
    while (n > 0) {
        product *= n;
        n--;
    }
    return product; //返回阶乘值
}

注:解题思路在注释中表明。

总结:完成该题后我学会了利用循环结构可以反复的调用函数,对循环的条件的掌握更加的熟练了。

2.

 

/*基本思路:
    1.大小比较核心为if-else结构
    2.本题为从小到大排列,不妨定义为num1,num2,num3三个数,可以先让num1和num2进行比较,
      如果num1大于num2,则让它两交换位置,如果num1小于num2,则不用交换,然后依次两两
      比较并交换,最后只要按顺序输出交换完毕的num1,num2,num3。
*/
#include<stdio.h>
int main(void) {
    int num1, num2, num3, x;
    scanf("%d %d %d", &num1, &num2, &num3); //输入三个数
    if (num2 < num1) {  //利用三个if语句来实现比较和交换的目的
        x = num1;       //注意:这里需要另外一个数作为中间数,来实现两个数的交换
        num1 = num2;    //num1=num2;<-
        num2 = x;       //num2=num1;<-这样写是错误的
    }
    if (num3 < num1) {
        x = num1;
        num1 = num3;
        num3 = x;
    }
    if (num3 < num2) {
        x = num3;
        num3 = num2;
        num2 = x;
    }
    printf("%d->%d->%d", num1, num2, num3); //按顺序输出交换完毕的num1,num2,num3
    return 0;
}

注:解题思路在注释中表明。

总结:完成该题后我学会了两个数的交换需要一个媒介,例如这题,需要x作为中间值来实现交换。

3.

 

/*基本思路:
    本题我们可以以输入的符号作为突破点,
    利用switch结构,实现对不同符号进行不
    同运算的目的,除了题目要求的五种运
    算符之外,只要输入其他的运算符,都
    进入default输出ERROR
*/
#include<stdio.h>
int main(void) {
    int num1, num2;
    char symbol;    //运算符为字符型,需要用char来定义,用%c来输入
    scanf("%d %c %d", &num1, &symbol, &num2);
    switch (symbol) {    //每项的语句段后加break,用以执行完我们需要的语句段后跳出switch
        case '+':printf("%d", num1 + num2); break;
        case '-':printf("%d", num1 - num2); break;
        case '*':printf("%d", num1 * num2); break;
        case '/':printf("%d", num1 / num2); break;
        case '%':printf("%d", num1 % num2); break;
        default:printf("ERROR"); break;    //只要不是上面五种运算符,就输出ERROR
    }
    return 0;
}

注:解题思路在注释中表明。

总结:完成该题后我学会了switch中的常量表达式还可以是字符。

 

  

  

posted @ 2019-10-13 14:02  明旭·  阅读(158)  评论(0编辑  收藏  举报