C语言作业1
一.思维导图
二.语法认识
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 分)
#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 分)
#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 分)
#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语句以及条件判断真假。