213程序设计语言复习.docx
- 文档编号:28658958
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:17
- 大小:39.21KB
213程序设计语言复习.docx
《213程序设计语言复习.docx》由会员分享,可在线阅读,更多相关《213程序设计语言复习.docx(17页珍藏版)》请在冰豆网上搜索。
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
((a a: c): ((b b: c);等价的if语句是: if(a if(a elsek=c; else if(b elsek=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;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;} } 例如: main() {char*str[]={"Pascal","Cpp","Basic","Fortran"}; char**p; for(p=str;p printf("%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;i printf("%d",a[i]); printf("\n"); } main() {inti,n,a[100]; scanf("%d",&n); for(i=0;i scanf("%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(); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 213 程序设计语言 复习