2022年复习题_高级语言程序设计基础 .pdf

上传人:Che****ry 文档编号:30547729 上传时间:2022-08-06 格式:PDF 页数:15 大小:141.68KB
返回 下载 相关 举报
2022年复习题_高级语言程序设计基础 .pdf_第1页
第1页 / 共15页
2022年复习题_高级语言程序设计基础 .pdf_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《2022年复习题_高级语言程序设计基础 .pdf》由会员分享,可在线阅读,更多相关《2022年复习题_高级语言程序设计基础 .pdf(15页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、高级语言程序设计基础复习题1、c 语言程序的基本单位是什么?它的结构又如何? c 语言程序的总体结构是怎样的?主函数 main() 在程序中的地位如何? 【答案】函数是 c 语言程序的基本模块单元。任何函数 ( 包括主函数main() 都是由函数说明和函数体两部分组成。其一般结构如下: 函数类型 函数名 ( 函数参数表 ) 说明语句部分;执行语句部分; 一个完整的c 语言程序,是由一个、且只能由一个main() 函数 ( 又称主函数 ) 和若干个其他函数结合而成的,或仅由一个main( ) 函数构成。main()函数的作用相当于其他高级语言中的主程序;其他函数的作用相当于子程序。一个 c 语言

2、程序,总是从main()函数开始执行,而不论其在程序中的位置。当主函数执行完毕时,亦即程序执行完毕。习惯上,将主函数main()放在最前头。2、算法分析的目的是什么?【答案】算法分析是指对一个算法的运行时间和占用空间做定量的分析,一般计算出相应的数幂级,常用时间复杂度和空间复杂度表示。分析算法的目的就是要降低算法的时间复杂度和空间复杂度,提高算法的执行效率。3、分析下面程序的执行过程,并给出输出结果。main( ) int x=3 ,y=6,a=0;while(x+!=(y-=1) a+=1;if(yx)break ; primf(x= d,y=d,a=dn,x,y,a); 【答案】对于 x+

3、中 x 值的引用时, 应当是先引用后自加, 第一次 while 循环:条件为真,执行 a=a+l=l;此时, x 的值已为4,判断 yx 不成立,继续执行循环;第二次while 循环:条件为假,此时 x 的值已为 5,退出 while 循环,执行printf 输出结果为x=5,y=4,a=l。4、面程序并给出正确结果。main( ) int x=3 ;do printf( d,x-) ; while(!x) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 15 页 -

4、 - - - - - - - - 【答案】本题 x 赋初值为 3,当执行 printf(%d,x-) ;时,由于X- 的作用是先运算x,再将 x 的值减l,所以, printf 输出的 x 值为 3,等输出后, x 的值减 1 变为 2,继续执行,判断条件!x 为假,循环只被执行一次。5、分析下面程序的执行过程,给出输出结果。#include main( ) int i=0 , a=0;while(iy?x :y; int f2(int x , int y) return xy?y :x; main( ) int a=4 ,b=3,c=5,d,e,f; d=f1(a ,b);d=fl(d ,

5、c);e=f2(a, b);e=f2(e, C);f=a+b+c-d-e; printf( d, d, dn ,d,e,f); 【答案】函数 f1 是一个求两个整数中最大值的函数,函数f2 是一个求两个整数中最小值的函数。在main 函数中两次调用函数f1,求得变量a、b、 、c 中的最大值赋值给d;两次调用函数f2,求得变量a、b、 c 中的最小值赋值给e;表达式 a+b+c-d-e 得到中间值,输出5,3,4。9、分析下面程序的执行过程,给出输出结果。f(int b ,int m,int n) int i ,s=0;for(i=m ;in ;i=i+2) s=s+bi ;return s;

6、) main( ) int x ,a=1,2,3,4,5,6,7,8,9 ;x=f(a ,3,7);printf( dn,x);) 【答案】本题中,主函数调用f 函数,在 f 函数中执行了两次循环,第一次i=3,s=0+bi :4,然后 i的值被修改成5,仍然满足循环条件,进入第二轮循环,s=4+b5=4+6=10 ,随后, i 的值被修改成 7,不再满足循环条件,退出循环,返回s 的值。所以最后输出结果是10。10、以下函数的功能是计算s=1+12!+1 3!+ +l n!,根据题意,完善程序。double fun(int n) double s=0.0,fac=1.0;int i ;for

7、(i=1 ; i=n;i+) fac=fac【1】;s=s+ 【2】; return 【 3】;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - 【答案】【1】 i 或*1 0i 或*1I 或*(1 0 i)或 (double)i; 【 2】fac; 【3】s /*分析:该程序实现的功能是求各个因式的和,观察表达式可以看出,只要将i 的值的倒数乘以 fac 就得到每个因式的值。*/ 11、wap 函数的功能是交换a 和 b 的值

8、, 该函数调用后能否实现交换【3】。根据题意,完善程序。void swap(int x, int y) int t; 【 1】;x=y; y=t; main() int a=3,b=4; 【2】; printf(%d %d,a,b); 【答案】【1】t=x ; 【2】swap(a,b); 【3】不能/* 评析: 用变量作为函数的实参时,属单向传递,即 值传送 方式, 此种函数参数的传递方式只能由实参传给形参,不能由形参传回来给实参。*/12、根据下面程序说明strcpy(strl ,s1)、strcat(str2,s1)的作用,给出程序的输出结果。#include main( ) char p

9、l7=abc,p2=ABC,str50= xyz;strcpy(str,strcat(pl ,p2);printf( s,str); 【答案】strcpy(strl ,s1)的作用是将字符串s1 拷贝到 strl 中去,并将结果放在strl1 中,函数调用后返回 strl 的地址。 strcat(str2,s2)的作用是将s2接到字符串str2 的后面, 并将结果放在str2中,函数调用后返回str2 的地址。本题定义了三个字符数组pl,p2,str,strcat(p1,p2)函数的作用是将字符串数组p2 接到字符串p1 的后面,结果放在字符数组p1,再通过 sffcpy()函数将该字符串拷贝

10、到str 数组中,原str数组中的字符串xyz 被覆盖,因此打印输出字符串str 即可得到 abcABC。13、以下面程序为例说明strlen(st) 和 sizeof(st) 的输出结果。main() char st20= hello0t; printf( ddn,strlen(st) ,sizeof(st) ;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 【答案】c 语言中字符串是以 0字符结束的, 且 strlen()

11、函数计算的是 0字符前的所有字符的个数。本题中 strlen(st)应为 5。数组定义以后系统就为其分配相应大小的内存空间,而不论其中有没有内容。Sizeof ()函数是计算变量或数组的所分配到的内存空间的大小。所以本题的sizeof(st)为 20。14、下面程序的功能是将矩阵a 中和值最大的那一行元素与首行元素对换。根据题意, 完善程序。main() int a1010,i,j,t,s,smax,imax; for(i=0;i10;i+) for(j=0;j10;j+) 【1】; smax=-32768; for(i=0;i10;i+) s=0; for(j=0;jsmax) smax=

12、s ; imax= i ; for(j=0;j10;j+) t=a0j; a0j=aimaxj; 【3】; for(i=0;i10;i+) printf(“n” );for(j=0;j10;j+) printf(“ %d ” ,aij); 【答案】【1】scanf(“ %d ” ,&aij); ;【 2】 s+=aij ;【 3】aimaxj=t ;/*分析:首先要输出数组元素的值,分别求每行的元素和,注意s=0 保持每行计算初始值清0,然后要对值最大的那一行元素与首行元素对换*/ 15、下面程序的功能是将两个有序的数组合并到另一个数组中,合并后仍有序。根据题意,完善程序。main() int

13、 i=0,m=5,a6=1,2,3,7,9,15; int j=0,n=6,b7=3,5,8,12,15,16,18,; int k=0,c13; while( i+jm+n ) if( 【1】 ) ck+=ai+; else if( 【2】 ) ck+=bj+; else if( 【3】 ) ck+=ai+; else ck+=bj+; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - for(i=0;i=n ; 【2】i=m

14、; 【3】aibj;16、分析下面程序段的结果是什么?main( ) int a=5,*b,*c ;c=&b ;b=&a ;printf( d,*c) ; 【答案】指针变量是用来存放地址的。*:指针运算符;&:取地址运算符;*c表示为指针变量*c所指向的存储单元,*c 表示为指针指针变量c 所指向的存储单元,本题中 c=&b 表示 c 为变量 b 的地址, b=&a 表示 b 为变量 a 的地址。表达式*c 的值就是变量a 中的值( 5) 。17、若有说明: int n=2 ,*p=&n ,*q=p ; ,则语句q=p*n ;是否合法?【答案】指针变量不同于整型变量和其它类型的变量,它是用来存

15、放地址(指针 )的,不能将一个整型量(或任何其它非地址类型的数据)赋给一个指针变量,这样的赋值是不合法的。18、 fun 函数的功能是求3 行 4 列二维数组每行元素中的最大值。根据题意,完善程序。void fun(int m,int n, int ar4,int *br) int i,j,x; for(i=0;im;i+) x=ari0; for(j=0;jn;j+) if(x 【 1】) x=arij; _【2】_=x; 【答案】【 1】arij ; 【 12】brI 或*(br+i) 19、以下程序中函数huiwen的功能是检查一个字符串是否是回文(回文即正向与反向的拼写都一样) ,当字

16、符串是回文时,函数返回字符串:yes! ,否则函数返回字符串:no! ,并在主函数中输出。根据题意,完善程序。#include char *huiwen(char *str) char *pl,*p2; int i,t=0; pl=str;p2=_ 【1】_; for(i=0;i=strlen(str)/2;i+) if(*pl +!=*p2-) t=l ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - break; if(

17、_ 【2】_) retum(yes!); else return(no!); main( ) char str50; printf(Input:); scanf(%s,str); printf(%sn,_ 【30】_ ); 【答案】【1】pl+(strlen(str)-1) 或 str+(strlen(str)-1) ; 【2】t=0 或!(tl=0) 或 t!=l 或 !t; 【3】huiwen(str) 20、分析下面程序段的执行过程,解释sizeof 函数的功能,并给出执行结果。(用 small 模式编译,指针变量占2 个字节 )。struct date long *cat ;struc

18、t date *next ;double dog;too ;printf( d,sizeof(too) ;【答案】sizeof 函数计算已知类型所占的字节数。结构体变量所占内存长度是各成员占的内存长度之和。指针变量占2个字节,所以cat 和*next 各占 2 个字节; double 型占 8 个字节,故too 共占 12 个字节。21、如何定义一个指向结构体变量的指针?【答案】一个结构体变量指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。例如: struct node in

19、t info ;struct node*link;22、 1、c 语言文件的打开和关闭函数的调用方式。【答案】C 语言中的文件分为:ASCII 文件与二进制文件。文件在使用前打开,使用后要关闭。打开文件的函数为:fopen(),调用形式为:fp=fopen( 文件名 , 使用文件方式);关闭文件的函数为:fclose(),调用形式为:fclose(fp) ;其中 fp 为文件指针。23、执行下述程序的输出结果为() 。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15

20、页 - - - - - - - - - #include main() int n=0; int sum=0; while (n+,n50) if(n= =(n/2)*2) continue; sum+=n; printf(%dn,sum); 【答案】625 24、下面程序将二维数组a 的行和列元素互换后存到另一个二维数组b 中。补全程序。main() int a23=1,2,3,4,5,6; int b32,I,j; printf( “ array a:n” ); for(i=0; i=1; i+) for (j=0; (1);j+) printf( “ %5d” ,aij); (2) pr

21、intf( “ n” ); printf( “ array b:n” ); for (i=0; (3); i+) for(j =0;j=1;j+) printf( “ %5d” ,bij); printf( “ n” ); 【答案】 1) j=2;2)bji=aij 3)iy 则将 x与 y 的值进行交换, 然后再用 x 与 z 进行比较,如果xz 则将 x 与 z 的值进行交换,这样能使 x 最小。main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页

22、- - - - - - - - - int x,y,z,t; scanf(%d%d%d,&x,&y,&z); if (xy) t=x;x=y;y=t; /*交换 x,y 的值 */ if(xz) t=z;z=x;x=t;/*交换 x,z 的值 */ if(yz) t=y;y=z;z=t;/*交换 z,y 的值 */ printf(small to big: %d %d %dn,x,y,z); 26、由键盘输入10 个学生的学号、姓名和成绩,要求按成绩从高到低排序,分别输出排序前、后的学号、姓名和成绩。struct student int num; char name20; int score;

23、 main() struct student stu10,s; int i,j; /*for(i=0;i10;i+) scanf(%d%s%d,&stui.num,stui.name,&stui.score); */ for(i=0;i10;i+) /* for demo convienence values assigned here */ stui.num=i; strcpy(stui.name,sad); stui.score=10*i; printf(The input student are:n); for(i=0;i10;i+) printf(%-5d%-20s%-5dn,stui

24、.num,stui.name,stui.score); for(i=0;i9;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 15 页 - - - - - - - - - for(j=0;j9-i;j+) if(stuj.scorestuj+1.score) /* s.num=stuj.num; strcpy(s.name,stuj.name); s.score=stuj.score; stuj.num=stuj+1.num; strcpy(stuj.name,s

25、tuj+1.name); stuj.score=stuj+1.score; stuj+1.num=s.num; strcpy(stuj+1.name,s.name); stuj+1.score=s.score; */ /*These sentences equal to the following statements*/ s=stuj; stuj=stuj+1; stuj+1=s; printf(The sorted student are:n); for(i=0;i10;i+) printf(%-5d%-20s%-5dn,stui.num,stui.name,stui.score); 27

26、、输入一个字符串和一个字符,删除字符串中和输入字符相同的所有字符,输出处理后的字符串。#include main( ) char chNew; char strOld20; int i,j=0; printf( “ please input the original string:n ” ); gets(strOld); printf( “ nplease input the key letter:n ” ); chNew=getchar(): for(i=0;istrlen(strOld);i+) j=i; if(chNew=strOldi) while(strOldj!= 0 ) 名师资料

27、总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 15 页 - - - - - - - - - strOldj=strOldj+1; j+; printf( “ nthe output string is: ” ); for(i=0;istrlen(strOld);i+) printf( “ %c” ,strOldi); getchar(); 28、写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。【参考答案】 int ma

28、xyueshu(int m,int n) int m,n; int i=1,t; for(;i=m&i=n) j=m; else j=n; for(;!(j%m=0&j%n=0);j+); return j; main() int a,b,max,min; printf(enter two number is: ); scanf(%d,%d,&a,&b); max=maxyueshu(a,b); min=minbeishu(a,b); printf(max=%d,min=%dn,max,min); 29、求Sn=a+aa+aaa+ +aa aaa(有n 个a)之值,其中a 是一个数字。例如:2

29、+22+222+2222+22222(n=5) ,n 由键盘输入。【参考答案】 #includemath.h main() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 15 页 - - - - - - - - - int n,sum=0,i=1,s=2; scanf(%d,&n); while(i=n) sum=sum+s;s=s+2*pow(10,i);i+; printf(sum=%dn,sum); 30、将一个正整数分解质因数。例如:输入90, 打印出 90=

30、2*3*3*5 。【参考答案】/ 对 n 进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1) 如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2) 如果 nk,但 n 能被k 整除, 则应打印出k 的值, 并用 n 除以 k 的商 , 作为新的正整数你n, 重复执行第一步。(3)如果 n 不能被 k 整除,则用k+1 作为 k 的值 , 重复执行第一步。/ main() int n,i; printf(nplease input a number:n); scanf(%d,&n); printf(%d=,n); for(i=2;i=n;i+) while

31、(n!=i) if(n%i=0) printf(%d*,i); n=n/i; Else break; printf(%d,n); 31、用 do-while循环结构来计算1+3+5+99 的值。【参考答案】 main ( ) int i=1,sum=0; do sum=sun+i; i=i+2;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - while (i=100); printf (1+3+5+99=%dn,sum) ;

32、 32、求一个5*5 矩阵主对角线元素之和。【参考答案】 #define M 5 #define N 5 main() int i=0,j=0,aMN,SUM=0; for(i=0;iM;i+) for(j=0;jN;j+) scanf(%d,&aij); if( i=j )sum=sum+ aij ; printf(s1=%d,s2=%dn,s1,s2); 33、用选择法对10 个整数排序。【参考答案】main( ) int i,j ,min,temp,a11 ;printf(Enter data:n) ;for (i1; i 10;i ) printf(a%d,i) ; scanf(%d,

33、&ai);/* 输入 10 个数 */ printf(n);for (i1; i 10;i ) printf(%5d,ai);/* 输出这 10 个数 */ printf(n);for (i1; i 9;i ) /* 以下 8 行是对 10 个数排序 */ mini ; for (ji 1;jaj) minj ; tempai; /* 以下 3 行将 ai 1 至 a10 中最小者与ai对换 */ aiamin ; amintemp; printf(nThe sorted numbers: ) ;for (i1; i 10;i ) printf(%5d,ai);/* 输出已排好序的10 个数

34、*/ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 15 页 - - - - - - - - - 34、编一个程序,将两个字符串连接s1 和 s2 进行比较,如果s1s2,输出一个正数;s1s2,输出 0;s1s2,输出一个负数。 不要用 strcmp 函数。 两个字符串用gets 函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相应字符的ASCII码的差值。例如, A与 C相比, 由于 A C,应输出负数,由于A与 C的 ASCII 码的差值为 2, 因此应

35、输出 2。 同理:And 和Aid 比较, 根据第 2 个字符比较结果, n比 i 大 5,因应输出5。【参考答案】#include main( ) int i,resu ; char s1100, s2100 ; printf(n input string1:) ; gets(s1);/* 输入串 s1*/ printf(n Input string2:) ; gets(s2);/* 输入串 s2*/ i0; while(s1i s2i)&(s1i! 0 ) i;/* 如对应位置字符不相等或s1 串结束则停止*/ if(s1i 0 &s2i 0 ) resu0; else resu s1is

36、2i; printf(n result:%dn,resu) ; 35、自定义函数求3*3 矩阵的转置矩阵。/ 程序分析这题的关键在于进行行列下标转换的算法,由矩阵的对称性我们不难看出在进行行列互换时aj在好是与aji互换,因而只要我位让程序走完矩阵的左上角即可(用for(i=0;i2;i+)再套 for(j=i+1;j3;j+)来完成左上角的走动。*/ 【参考答案】#include int fun(int array33) int i,j,t; for(i=0;i2;i+) for(j=i+1;j3;j+) t=arrayij;arrayij=arrayji;arrayji=t; main()

37、 int i,j; int array33=100,200,300,400,500,600,700,800,900; clrscr(); for(i=0;i3;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 15 页 - - - - - - - - - for(j=0;j3;j+) printf(%7d,arrayij); printf(n); fun(array); printf(转置矩阵是 :n); for(i=0;i3;i+) for(j=0;j3;j+) printf(%7d,arrayij); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 15 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com