213程序设计语言复习.docx
《213程序设计语言复习.docx》由会员分享,可在线阅读,更多相关《213程序设计语言复习.docx(17页珍藏版)》请在冰豆网上搜索。
![213程序设计语言复习.docx](https://file1.bdocx.com/fileroot1/2023-7/12/e57ce258-1bec-489f-99ac-cf92589abd24/e57ce258-1bec-489f-99ac-cf92589abd241.gif)
213程序设计语言复习
程序设计语言复习
第一章
数制转换;例如:
(1028.75)10=()8=()16
(A3BD.8)16=()10=()2
整数的原码、反码、补码的概念。
第二章
关键词;标识符的命名规定;数据类型;常量、变量;运算符;表达式;
数据的输入与输出。
八进制、十六进制整数的写法;运算符的优先级问题;整数的取值范围问题;不同数据类型混合运算时类型转换规则(课本P15)。
练习题P27第14题(运算符&&、||短路运算特点)
main()
{intx,y,z;
x=y=z=-1;
++x&&++y||++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);/*0–10*/
x=y=z=-1;
++x||++y&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);/*00-1*/
x=y=z=-1;
++x&&++y&&++z;
printf("x=%d\ty=%d\tz=%d\n",x,y,z);/*0–1-1*/
}
例如:
程序段
intm=10,n=20;
inta=1,b=3,c=5,d=7;
if((m=a>b)&&(n=c>d))
printf("Hello!
\n");
执行后m、n的值是:
0、20
例如:
表示a是正偶数的关系表达式为:
(a>0&&a%2==0)
数学命题“10≤a≤20”的C语言表达式为:
(a>=10&&a<=20)
判断字符变量c是英文字母的表达式为:
c>=’a’&&c<=’z’||c>=’A’&&c<=’Z’。
若a=3,b=2,c=1,表达式f=a>b>c的值是:
(0)
代数式
的C语言表达式是:
(-b+sqrt(b*b-4*a*c))/(2*a)
逗号表达式(b=2,a=b++,a++,a+b)的值是:
(6)
设a=2,b=5,x=2.5,y=4.5算术表达式(float)a+b%2+(int)x/(int)y的值是:
(3.0)
第四章分支结构
程序设计的三种基本流程控制结构是:
顺序结构、选择结构、循环结构;
if语句、switch语句的语法;if与else的配对规则(else总是与上面最近未配对的if配对);分支结构的嵌套。
例如:
下列的语句中哪个正确,哪个错误?
if(x>0)printf(“%f”,x)elseprintf(“%f”,-x);/*F*/
if(x>0){x=x+y;printf(“%f”,x);}elseprintf(“%f”,-x);/*T*/
if(x>0){x=x+y;printf(“%f”,x);};elseprintf(“%f”,-x);/*F*/
if(x>0){x=x+y;printf(“%f”,x)}elseprintf(“%f”,-x);/*F*/
例如:
if(表达式)语句
其中:
“表达式”可以是任意合法的表达式
例如:
main()
{intx=0,a=0,b=0;
switch(x){
case0:
++b;
case1:
++a;
case2:
++a||++b;
}
printf(“a=%d,b=%d\n”,a,b);
}
程序输出结果为:
(a=2,b=1)
表达式max=a>b?
a:
b改用if语句表示为:
if(a>b)max=a;elsemax=b;
语句:
k=(a
((aa:
c):
((bb:
c);等价的if语句是:
if(a
if(aelsek=c;
else
if(belsek=c;
练习题P70、71的第4题、第6题。
第4题:
编程实现求分段函数y=f(x)的值,x由键盘输入。
其中
main()
{
floatx,y;
printf("inputx:
");
scanf("%f",&x);
if(x<1.0)y=x*x-1;
elseif(x>1.0)y=x*x+1;
elsey=x*x;
printf("f(%f)=%f\n",x,y);
}
第五章循环结构
while、do-while、for语句的语法、流程控制功能及其它们的等价写法;break、continue语句的功能;循环的嵌套。
阅读理解以下程序的功能:
main()
{inti,j,n;
longs,sum;
scanf("%d",&n);
for(i=1,sum=0;i<=n;i++)
{for(j=1,s=0;j<=i;j++)
s+=j;
sum+=s;
}
printf("sum=%ld\n",sum);
}
或
main()
{inti,n;
longs,sum;
scanf("%d",&n);
for(i=1,s=0,sum=0;i<=n;i++)
{s+=i;
sum+=s;
}
printf("sum=%ld\n",sum);
}
编程打印由“*”组成的上三角形图形:
编程打印由“*”组成的下三角形图形:
例如:
与程序段:
i=1;sum=0;while(i<=10){sum+=i;i++;}等价的语句有:
A、B、C
A)for(i=1,sum=0;i<=10;i++)sum=sum+i;
B)i=0,sum=0;do{i++;sum+=i;}while(i<10);
C)for(i=1,sum=0;i<=10;sum+=i,i++);
D)i=0;sum=0;while(i++<=10)sum+=i;
例如:
下面程序的输出结果是什么?
#include
voidmain()
{ inti;
intj;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
{
printf("%d*%d=%d\t",i,j,i*j);
}
printf("\n");
}
}
输出结果:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
…………
9*1=9 9*2=18 9*3=27 9*4=36 9*5+45 9*6=54 9*7=63 9*8=72 9*9=81
例:
以下程序实现什么功能?
main()
{
intn,t,number=100;
floata=2,b=1,s=0;
for(n=1;n<=number;n++)
{s=s+a/b;
t=a;a=a+b;b=t;
}
printf("sumis%f\n",s);
}
例:
计算数列n-n/2+n/3-n/4+……-n/100。
main()
{
inti;
floatn,sum,temp;
printf("Inputn:
");scanf("%f",&n);
sum=0;
for(i=1;i<=100;i++)
{temp=n/i;
sum+=temp;
n=-n;
}
printf("n-n/2+n/3-....-n/100=%f\n",sum);
}
第六章函数、存储类别
函数的定义方法;参数的传递机制;嵌套调用和递归调用;变量的作用域和生命期;预处理命令(重点是宏替换)。
问题:
原来直接在main()函数实现的功能,如何把它写成子函数,注意参数该如何设计。
例如:
函数的返回值类型由什么决定?
(由函数类型决定)
以下正确的函数定义形式是:
(A)
A)intfun(intx,inty)
B)doublef1(intx,y)
C)doublefun(intx,inty);
D)intf1(intxinty)
函数中未指定存储类别的局部变量,其隐含的存储类别为:
(auto)
练习题P122第8题
#include
voidfun()
{charc;
if((c=getchar())!
='\n')
fun();
putchar(c);
}
main()
{fun();}
当从键盘输入:
uvwxyz后按回车键,则输出结果为:
zyxwvu
例如:
#definePT3
#defineS(X)PT*X*X
main()
{inta=1,b=2;
printf("%d\n",S(a+b));
}
运行结果不是27,而是7
#defineZero(X)X-X
intmain()
{
printf("%d\n",2*Zero(4-3));
}
运行结果不是0,而是-2
#defineX10
#defineAprintf("%d,",X)
main()
{A;
getch();
}
运行结果:
10
第七章数组
数组概念;一维、二维数组的定义和初始化;数组的应用;几个经典算法(冒泡法排序、查找、查找最值);字符串与字符数组的关系与区别。
例如:
main()
{
inti,x[3][3]={10,20,30,40,50,60,70,80,90};
for(i=0;i<3;i++)
printf("%4d",x[2-i][i]);
}
运行结果:
705030
例如:
以下对二维数组a的说明中正确的是:
(B)
A)inta[3][];B)doublea[2][4];
C)floata(3,4);D)floata(3)(4);
练习题P154第14题
#include
#include
main()
{
chara[20]="cehjknptw";
chars[]="fdla";
inti,j,k;
for(k=0;s[k]!
='\0';k++)
{j=0;
while(s[k]>=a[j]&&a[j]!
='\0')
j++;
for(i=strlen(a);i>=j;i--)
a[i+1]=a[i];
a[j]=s[k];
}
printf("%s\n",a);
}
例如:
下面程序的输出结果为?
#include
main()
{
charstr1[30]="student\'\n\101";
charstr2[]="student\0abcd";
printf("lengthofstr1:
%sis%d,sizeofstr1is%d\n",str1,strlen(str1),sizeof(str1));
printf("lengthofstr2:
%sis%d,sizeofstr2is%d\n",str2,strlen(str2),sizeof(str2));
}
/*注:
strlen()函数是求实参字符串的长度,sizeof是一个单目运算符,功能是求一个变量或一种数据类型所占用的存储空间的长度。
*/
第八章指针
指针的概念;指针作函数参数的特点;数组与指针的关系;数组名作为函数参数;指针的运算;字符串与指针;指针数组和指向指针的指针;函数指针;malloc函数的用法。
注意:
对二维数组a[][],a[i][j]等价于*(*(a+i)+j)也等价于*(a[i]+j)并且等价于
(*(a+i))[j],去掉外层的“*”则变成列地址。
例如:
下列语句中不正确的是:
(A)
A)charstr[20];str=”IloveChina!
”;B)charstr[20]=”IloveChina!
”;
C)char*str;str=”IloveChina!
”;D)char*str=”IloveChina!
”;
例如:
main()
{
charw[][5]={"ABCD","EFGH","IJKL","MNOP"};
intk;
for(k=1;k<3;k++)
printf("%s",w[k]+k);
}
运行结果:
FGHKL
注意下面三个函数功能的不同(哪个函数能实现交换实参?
):
swap1(intx,inty)
{inttemp;
temp=x;x=y;y=temp;
}
swap2(int*p1,int*p2)
{inttemp;
temp=*p1;*p1=*p2;*p2=temp;
}
swap3(int*p1,int*p2)
{int*p;
p=p1;p1=p2;p2=p;
}
例如:
voidf(char*s,char*t)
{
while(*s++=*t++);
}
这个函数的功能是实现字符串拷贝。
voidsort1(int*a,intn)/*冒泡法排序函数*/
{inti,j,temp;
for(i=0;ifor(j=n-1;j>i;j--)
if(a[j-1]>a[j])
{temp=a[j-1];a[j-1]=a[j];a[j]=temp;}
}
例如:
main()
{char*str[]={"Pascal","Cpp","Basic","Fortran"};
char**p;
for(p=str;pprintf("%s\n",*p);
}
这个程序的功能是输出4个字符串。
若输出修改为printf(“%s\n”,*p+2);结果为?
若输出修改为printf(“%c\n”,*(*p+2)+1);结果为?
例如:
main()
{intx[5]={2,4,6,8,10},*p,**pp;
p=x+2;pp=&p;
printf(“%d”,*(p++));
printf(“%3d\n”,**pp);
}
输出结果为:
68
注意:
int(*p)();int*p[4];int(*p)[4];int*p();定义的p分别是什么?
使用子函数用冒泡排序法对数组进行排序(思考如何编写向有序数组中插入一个元素?
如何编写从有序数组中删除一个指定的元素?
)
#include
voidsort(inta[],intn)
{inti,j,temp;
for(i=0;i{for(j=n-1;j>i;j--)
if(a[j-1]>a[j])
{temp=a[j-1];
a[j-1]=a[j];
a[j]=temp;
}
}/*for*/
}
voidprint(inta[],intn)
{inti;
for(i=0;iprintf("%d",a[i]);
printf("\n");
}
main()
{inti,n,a[100];
scanf("%d",&n);
for(i=0;iscanf("%d",&a[i]);
sort(a,n);
print(a,n);}
例:
理解int*p=(int*)malloc(sizeof(int));scanf("%d",p);的含义。
第九章库函数
了解常用库函数的功能及其函数原型。
第十章结构,杂类
结构类型的定义;结构类型变量和指针;结构类型中成员的访问方法;枚举类型。
例如:
structstudent
{intage;
intnum;
}std,&p;
p=&std;
对结构体变量std中成员age的引用方式正确的写法有:
std.age或p->age或(*p).age
例如:
若有定义:
structaa{intm,n;}s[2]={{1,2},{3,4}},*p=s;则表达式++p->m的值是:
2;(++p)->n的值是:
4
第11章文件
文件的概念与分类;缓冲文件系统的打开、读写和关闭;文件指针;读写位置指针;相关的函数(原型及各参数的意义)。
例如:
当调用函数fopen()发生错误时,函数的返回值是:
NULL(即是0)
例如:
设有以下结构体类型:
structst
{charname[8];
intnum;
floats[4];
}student[50];
并且结构体数组student中的元素都已有值,若要将这些元素写到磁盘文件指针fp所指向的二进制文件中,使用语句:
fwrite(student,50*sizeof(structst),1,fp);或
fwrite(student,sizeof(structst),50,fp);或
fwrite(student,sizeof(student),1,fp);
某班有N个学生,有M门课的成绩。
从键盘输入每个学生的学号、姓名和各门课成绩,计算每个学生M门课的平均成绩。
并将所有这些数据存放在磁盘文件”chengji.txt”中。
(N取30,M取5)
#defineN30
#defineM5
#include
main()
{
structstudent
{charnum[9];
charname[12];
intscore[M];
floatave;};
structstudentstu[N];
FILE*fp;
intk,i;
if((fp=fopen("chengji.txt","w"))==NULL)
{printf("Cannotcreatfile!
\n");exit(0);}
printf("Input%dstudentdata:
\n",N);
for(k=0;k{printf("InputNo:
%dstudentdata:
\n",k+1);
printf("Inputnum:
");scanf("%s",stu[k].num);
printf("Inputname:
");scanf("%s",stu[k].name);
printf("Input%dscore:
",M);
stu[k].ave=0;
for(i=0;i{scanf("%d",&stu[k].score[i]);
stu[k].ave=stu[k].ave+stu[k].score[i];}
stu[k].ave=stu[k].ave/M;
fprintf(fp,"%9s%12s%4d%4d%4d%4d%4d%8.2f\n",stu[k].num,stu[k].name,
stu[k].score[0],stu[k].score[1],stu[k].score[2],stu[k].score[3],stu[k].score[4],stu[k].ave);
}
getch();
}