初学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中的常量表达式还可以是字符。