一.思维导图
二.语法认识
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; }