C语言复习资料之15章.docx
- 文档编号:9051641
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:15
- 大小:36.48KB
C语言复习资料之15章.docx
《C语言复习资料之15章.docx》由会员分享,可在线阅读,更多相关《C语言复习资料之15章.docx(15页珍藏版)》请在冰豆网上搜索。
C语言复习资料之15章
C语言复习资料
一个学期就快结束了,我相信没人会希望自己在最后挂掉。
以下是我个人的一些见解,希望对大家有所帮助。
个人认为,选择和填空题主要考察的是一些基础的东西,例如进制的转换,命名规则,算法补充等,所以一些基础的东西最好多复习一下。
而后面的大题主要靠平时多看例子,多操作。
特别是选择排序,冒泡排序,查找,求最值等一些经典例子。
前面五章是小菜,后面才是重点。
特别是大神操笔的指针部分,传说是c语言的特色,需要特别“照顾”。
第二章
1.会看传统流程图、N-S图表示的算法。
掌握传统流程图的画法。
第三章
1.(P37)例3.1:
#include
intmain()
{floatf,c;//定义f,c为单精度浮点型变量
f=64.0;//指定f的值
c=(5.0/9)*(f-32);//计算公式
printf(“f=%f\nc=%f\n”,f,c);//输出f,c的值
return0;
}
注:
算式中有一个浮点型数据即可(黄色部分)
2.数据的表现形式:
整型常量:
1000,12345,0。
。
。
。
。
实型常量:
123.456,0.3512.34e3(12.34x10^3)。
。
。
。
。
。
普通字符:
用单撇号括起来(‘a’,’3’......)
常量字符常量:
转义字符:
见教材P40表3.1
字符串常量:
用双撇号括起来(“boy”,”123”......)
符号常量:
用#define指令指定一个符号名称代表一个常量(#defineP1=3.1416)//注意行末没有分号
变量:
必须先定义后使用
常变量:
constinta=3;//表示整型变量a的值为3,且不能改变
标识符:
只能有字母、数字和下划线这三种字符组成,且第一个字符必须为字母或下划线。
数据类型:
见P43图3.4
注:
在存放整数的存储单元中,最左面一位是用来表示符号的,0表示正,1表示负。
基本算术运算符:
P52表3.5
注意:
%的运算对象必须为整数,结果也是整数
3.运算符自增自减运算符(只适用于变量):
++i,--i(在使用i前,先使i加(减)1)i++,i--(在使用i之后,先使i加(减)1)
注:
各种运算符间的结合性见P378.
(double)a//将a转换成double类型
强制类型转换:
(int)(x+y)//将x+y的值转换成int型(类型名)(表达(float)(5%3)//将5%3的值转换成float型式)
4.数据的输入输出:
(P65)例3.5:
#include
#include
intmain()
{doublea,b,c,disc,x1,x2,p,q;//定义为双精度浮点型变量
scanf(“%lf%lf%lf”,&a,&b,&c);//输入a,b,c的值,注意不能漏掉&
disc=b*b-4*a*c;
p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf(“x1=%7.2f\nx2=%7.2f\n”,x1,x2);//输出
return0;
}
析:
黄色字体部分表示对输出格式的声明,7列,其中小数部分占2列。
另:
在7.2f前加负号,表示输出数据向左对齐。
常用的输入输出函数:
putchar(输出字符)、getchar(输入字符)、printf(格式输出)、scanf(格式输入)、puts(输入字符串)、gets(输出字符串)。
其中scanf不能输入空格符,get(gets)一次只能输入一个字符(字符串)。
printf常用的输出格式:
见P74.
用scanf输入时不要忘记地址符(&)。
第四章
1.选择结构
(P88)例4.3:
#include
#include
intmain()
{doublea,b,c,disc,x1,x2,p,q;//定义为双精度浮点型变量
scanf(“%lf%lf%lf”,&a,&b,&c);//double型变量必须用“%lf”格式声明
disc=b*b-4*a*c;
if(disc<0)//选择结构
printf(“thisequationhasn’trealroots\n”);
else
{p=-b/(2.0*a);
q=sqrt(disc)/(2.0*a);
x1=p+q;
x2=p-q;
printf(“x1=%7.2f\nx2=%7.2f\n”,x1,x2);//输出时用“%f”即可
}
return0;
}
注:
if...else...后都只能执行“一条”语句。
如果有多条语句需要执行,必须用{}括起来。
if后可以没有else,但else前必须要有if。
if语句的一般形式:
(1)if(表达式)语句1(没有else字句部分)
(2)if(表达式)(有else字句部分)
语句1
else
语句2
(3)if(表达式1)语句1(在else部分嵌套多层if语句)elseif(表达式2)语句2
elseif(表达式3)语句3
……
elseif(表达式m)语句m
else语句m+1
例4.3:
#include
intmain()
{floata,b,c,t;//定义为单精度浮点型变量
scanf(“%f,%f,%f”,&a,&b,&c);//输入数据时用逗号隔开
if(a>b)
{t=a;a=b;b=t;}
if(a>c)
{t=a;a=c;c=t;}
if(b>c)这是三个独立的选择语句
{t=b;b=c;c=t;}
printf(“%5.2f,%5.2f,%5.2f\n”,a,b,c);
return0;
}
嵌套:
if(number>500)
cost=0.15;
else
if(number>300)//在if语句的else部分内嵌了一个if语句
cost=0.10;
else
if(number>100)//在内嵌的if语句的else部分又内嵌了一个if语句
cost=0.075;
else
if(number>50)//在第2层内嵌的if语句的else部分又内嵌了一个if语句
cost=0.05;
else//第三层的if语句中的else子句
cost=0;
2.关系表达式:
(1)关系表达式中如:
“a>b”、“a
1表示真,0表示假。
(2)“&&”:
逻辑与(同时真才为真)
“||”:
逻辑或(同时假才为假)
“!
”:
逻辑非
如:
a=score>=60中,a的值只能是0或1。
(year%4==0&&year%100!
=0)||year%400==0。
3.条件运算符(惟一的三目运算符):
max=(a>b)?
a:
b;等价于if(a>b)max=a;
elsemax=b;
4.switch语句
(P102)例4.6:
#include
intmain()
{chargrade;
scanf(“%c”,&grade);
printf(“youscore:
”);
switch(grade)
{case’A’:
printf(“85~100\n”);break;//程序执行到break语句,将跳过整个switch
case’B’:
printf(“70~84\n”);break;语句
case’C’:
printf(“60~69\n”);break;
case’D’:
printf(“<60\n”);break;
default:
printf(“enterdataerror\n”);
}
return0;
}
注:
switch语句中,判断仅执行一次,如果没有break语句,程序将继续执行下面的语句而不进行判断。
可以多个case字句共用一组执行语句:
case’A’:
case’B’:
case’C’:
printf(“>60\n”);break;
(P105)例4.8:
#include
intmain()
{intyear,leap;
printf(“enteryear:
”);
scanf(“&d”,year);
if(year%4==0)
{if(year%100==0)
{if(year%400==0)
leap=1;
else
leap=0;
}这是程序的判断部分,嵌套部分已用颜色区分
else
leap=1;
}
else
leap=0;
if(leap)
printf(“%dis“,year);
else
printf(“%disnot“,year);
printf(“aleapyear\n”);
return0;
}
第五章
1.可以实现循环的语句:
(1)while(循环条件)
{循环体}
(2)do
{循环体)
while(循环条件);
(3)for(初始条件;循环条件;自增或自减)
{循环体}
(P115)例5.1:
#include
intmain()
{
inti=1,sum=0;//定义变量并赋初值
while(i<=100)//满足i<=100时执行循环体
{sum=sum+i;
i++;循环体,累加求和
}
printf(“sum=%d\n”,sum);
return0;
}
注:
不要忘记使i执行自增运算,否则造成死循环。
(P117)例5.2:
#include
intmain()
{
inti=1,sum=0;//定义变量并赋初值
do
{sum=sum+i;
i++;循环体
}while(i<=100);//满足i<=100时继续执行循环体,有;
printf(“sum=%d\n”,sum);
return0;
}
for语句;
#include
intmain()
{
inti=1,sum=0;//定义变量并赋初值
for(;i<=100;i++)
{sum=sum+i;//循环体
}
printf(“sum=%d\n”,sum);
return0;
}
注:
以上三个程序作用均相同。
其中while是先判断后执行,do...while...是先执行后判断。
for语句最灵活,使用更多。
for语句一般形式:
for(表达式1;表达式2;表达式3)
语句
表达式1是用来设置初始条件,只执行一次。
表达式2是循环条件表达式。
表达式3作为循环的调整,例如自增自减。
执行过程:
表达式1->表达式2->语句->表达式3
“表达式1”可以省略,但应在for语句前给变量赋初值。
i=1;
for(;i<=100;i++)
“表达式2”可以省略,循环不自动结束。
for(i=1;;i++)sum=sum+i;
相当于:
i=1;
while
(1)
{sum=sum+i;
i++;
}
“表达式3”可以省略,但应在语句中设法保证循环正常结束。
for(i=1;i<=100;)
{sum=sum+i;
i++;
}
“表达式1”,“表达式2”,“表达式3”可以同时省略。
i=1;
for(;;)
{sum=sum+i;
i++;
if(i>100)break;
}
显然并不实用。
表达式1和表达式3可以有一个以上的简单表达式,中间用逗号隔开。
for(i=0,j=100;i<=j;i++,j--)
sun=sum+i;
逗号表达式内按自左至右的顺序求解。
for(i=0;i<=100;i++,i++)
sun=sum+i;
等价于
for(i=0;i<=100;i=i+2)
sun=sum+i;
表达式2可以是关系表达式、逻辑表达式、数值表达式、字符表达式。
只要其值非0,就执行循环体。
(具体请参考P121-P124.)
2.循环的嵌套:
(1)while()
{...
while()
{...}内层循环
}
(2)do
{...
do
{...}内层循环
while();
}while();
(3)for(;;)
{
for(;;)
{...}内层循环
}
三种循环可以混合使用。
循环的嵌套建议使用for语句。
3.改变循环状态:
例5.4:
#include
#definesum100000//指定符号常量sum代表100000
intmain()
{
floatamount,aver,total;//定义浮点型变量
inti;
for(i=1,total=0;i<=1000;i++)//循环开始
{
printf(“pleaseenteramount:
”);
scanf(“%f”,&amount);
total=total+amount;//累加求和
if(total>=sum)break;//满足条件,提前终止整个循环
}
aver=total/i;
printf(“num=%d\naver=%10.2f\n”,i,aver);
return0;
}
注:
break语句的作用是提前终止循环。
例5.5:
#include
intmain()
{intn;
for(n=100;n<=200;n++)//循环开始
{if(n%3==0)continue;//满足条件,提前终止本次循环
printf(“%d”,n);
printf(“\n”);
return0;
}
注:
continue语句的作用是提前终止本次循环,而不是整个循环。
以下是经典实例:
(来自c语言经典实例100题)
(1)有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
程序分析:
可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
程序源代码:
#include
intmain()
{
inti,j,k;
printf("\n");
for(i=1;i<5;i++) /*以下为三重循环*/,第一重循环遍历百位
for(j=1;j<5;j++) //第二重循环遍历十位
for(k=1;k<5;k++)//第三重循环遍历个位
{
if(i!
=k&&i!
=j&&j!
=k) /*确保i、j、k三位互不相同*/
printf("%d,%d,%d\n",i,j,k);
}
return0;
}
(2)输入某年某月某日,判断这一天是这一年的第几天?
1.程序分析:
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
2.程序源代码:
#include
intmain()
{
intday,month,year,sum,leap;
printf("\npleaseinputyear,month,day\n");
scanf("%d,%d,%d",&year,&month,&day);
switch(month)/*先计算某月以前月份的总天数*/
{
case1:
sum=0;break;
case2:
sum=31;break;
case3:
sum=59;break;
case4:
sum=90;break;
case5:
sum=120;break;
case6:
sum=151;break;
case7:
sum=181;break;
case8:
sum=212;break;
case9:
sum=243;break;
case10:
sum=273;break;
case11:
sum=304;break;
case12:
sum=334;break;
default:
printf("dataerror");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!
=0))/*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2)/*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("Itisthe%dthday.",sum);
}
(3)输出9*9口诀。
程序分析:
分行与列考虑,共9行9列,i控制行,j控制列。
程序源代码:
#include
intmain()
{
inti,j,result;
printf("\n");
for(i=1;i<10;i++)
{for(j=1;j<10;j++)
{
result=i*j;
printf("%d*%d=%-3d",i,j,result);/*-3d表示左对齐,占3位*/
}
printf("\n");/*每一行后换行*/
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 复习资料 15