《C-语言期末复习题(共4页).docx》由会员分享,可在线阅读,更多相关《C-语言期末复习题(共4页).docx(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上一、简答题1、请问指针有哪些类型?指针的类型,跟他所指向的数据结构有关,基本类型的指针指向基本类型的数据结构。2、函数式宏定义和函数调有什么不同? (1)函数式宏定义的参数没有类型,预处理器只负责做形式上的替换,而不做参数类型检查,所以传参时要格外小心。(2)调用真正函数的代码和调用函数式宏定义的代码编译生成的指令不同。 (3)函数式宏定义要注意格式,尤其是括号。 (4)若函数参数为表达式,则普通函数的调用与函数式宏定义的替换过程是不一样的。 (5)函数式宏定义往往会导致较低的代码执行效率。3、请问指针编程有哪些优点? (1)提高传输速度,又节省大量内存。 (2)可以
2、用来做数据类型转换,比较常用于通讯缓冲区的填充。 (3)可以用在大量分支处理的实例当中。 (4)在数据结构中,链表、树、图等大量的应用都离不开指针。4、C语言中,变量为什么要先定义后使用? (1)对于编译器处理更方便。 (2)不容易出错。 (3)程序更清晰。5、二维数组的初始化定义的正确形式有哪些?请举例说明 (1)分行赋初值例如:inta23=1,3,4,2,3,1,7,9,0;(2)按顺序初始化例如:inta23=1,3,4,2,3,1,7,9,0; (3)省略一维长度的赋值例如:inta3=1,3,4,2,3,1,7,9,0; (4)对数组的前几行元素初始化,其他元素自动初始化为0例如:
3、inta23=1,2,3;6、while与dowhile相同点与不同点是什么? (1)while语句是先测试条件再执行语句,条件不符后终止;dowhile语句是先执行语句再测试条件,条件不符后终止,所以dowhile循环至少执行一次7、请写出一个C程序的构成 (1)C程序是由若干个函数构成的 (2)每个函数(包括主函数)的定义分为两个部分:函数说明部分和函数体。 (3)C程序中的语句最后总要有一个“分号(;)”,作为每个语句的结束。 (4)可以用“”括住任意字符,称为“注释”。 (5)C程序的书写格式很灵活,在一行上可以书写多个语句,一个语句也可以写在多行上。 (6)C程序的执行总是从主函数开
4、始,并在主函数中结束。 (7)主函数可以调用任何非主函数;任何非主函数都可以相互调用,但是不能调用主函数8、C语言的语句有哪几种? (1)表达式语句(2)函数调用语句(3)控制语句(4)复合语句(5)空语句9、运行C程序的步骤编辑(预处理)编译链接运行10、算法的特征 (1)有穷性(2)确切性(3)输入(4)输出(5)可行性11、C语言变量的储存类别分为哪四种? (1)auto(自动)(2)extern(外部)(3)static(静态)(4)register(寄存器)12、函数的嵌套调用和递归调用有什么区别? 递归调用是自己调用自己,函数嵌套可以是调 用其他函数。13、请描述一个算法,求1+4
5、+7+100的和#includevoidmain()inti;intsum=0;for(i=1;i=100;i+=3)sum+=i;printf(%dn,sum);return;14、循环结构中break语句和continue语句的作用是什么?二者有何区别 (1)作用:break语句通常用在循环语句和开关语句中。continue语句的作用是跳过循环体中剩余的语句而强行执行下一次循环。 (2)区别:continue语句只结束本次循环,而不是终止整个循环的执行。break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。15、指针与地址有什么联系?在使用指针的过程中应注意哪些细节? (1)
6、联系:指针和地址最大的区别就是指针是有类型的,地址是没有类型的。指针是由地址和类型两部分构成的。 (2)注意细节:指针变量和普通变量概念使用方式相混淆指针变量的赋值(初始化,传递地址)方式有误指针变量的类型与所指元素的类型不一致指针移动不恰当指针在使用过程中发生了不必要的导致错误的改变多重的指针指向指针,导致形成难以理清的逻辑关系.16、C语言中参数传递有什么特点?我们应当注意些什么? (1)数值传递:被调用函数中对形参的操作不影响主调用函数中的实参值。 (2)地址传递:可以通过被调用函数中对形参的操作来修改主调用函数中的实参值。 注意事项:用malloc或new申请内存之后,应该立即检查指针
7、值是否为NULL。防止使用指针值为NULL的内存。17、C语言中进行函数声明的作用是什么? (1)把函数的名字,函数类型以及形参的类型、个数和顺序通知编译系统,以便在调用该函数时进行对照检查,它不包括函数体。18、字符常量与字符串常量有什么区别? (1)形式上:字符常量是单引号引起的一个字符;字符串常量是双引号引起的若干个字符; (2)含义上:字符常量相当于一个整型值,可以参加表达式的运算;字符串常量代表一个地址值(该字符串在内存中存放的位置); (3)占内存大小:字符常量只占一个字节;字符串常量占若干个字节,(至少一个字符结束标志)19、C语言中如何表示“真”与“假” (1)定义假为0,真为
8、1。(2)建立自己的枚举类型20、字符数组与字符串是否相同?若不相同,有何区别? 不相同。(1)字符指针中存的是字符串第一个字符的首地址。而字符数组中存的整个字符串 (2)字符数组只能在定义是进行初始化;chara=abc;不可以chara10;a10=abc而字符指针可以。21、关键字与一般标识符有什么不同? (1)关键字是标识符的一种。标识符是指:可以当作变量名,函数名等的。 (2)标识符是非常多的(但C语言支持最长的标识符是32个)而关键字只有32个。22、使用swicth的注意事项。 (1)switch语句后面的小括号只能写整数类型的表达式,否则会报错。 (2)switch小括号后面不
9、要加分号,可以加分号加在大括号后面。23、请用两种方式写出如何判断某一年为闰年的C语句。 (1)#includemain()intn;printf(“请输入年份:n);scanf(“%d,&n);if(n%100=0)if(n%400=0)printf(“是闰年);elseprintf(“不是闰年);elseif(n%4=8)printf(“是闰年);elseprintf(“不是闰年) (2)#includeintmain()inta;scanf(%d,&a);if(a%400=0|a%4=0&a%100)printf(yes);elseprintf(no);return0;24、if语句中条
10、件表达式可以是任意合法的表达式吗?switch语句中break的作用是什么? (1)if语句中的表达式不限于逻辑表达式,可以是任意的数值类型。 (2)当break用于开关语句switch中时,可使程序跳出switch而执行switch以后的语句;如果没有break语句,则会从满足条件的地方开始执行,直到switch结构结束。25、C语言循环结构主要有哪几种?每种循环结构的一般形式分别是什么样的? (1)dowhile:先循环,在判断 (2) while:先判断后循环 (3)for:一般可以代替上面两个26、预处理命令主要有哪几种?每种预处理命令的一般形式是什么样的? (1)宏定义命令:#def
11、ine、#undef,用来定义和解除宏。 (2)文件包含命令:#include文件名或者#include。 (3)条件编译:#ifdef、#else、#endif、#elif等。27、请写出C语言标识符的命名规则(1)必须用字母或下划线开头。(2)只能是字母、下划线、数字的组合,不能出现其他符号。例如¥_st,就是个错误的标识符,它出现了“¥”符号。(3)大小写的含义是不同的,例如标识符 和是不同的。(4)标识符的名称不能是C语言中的关键字,关键字是具有特定含义的标识符,用户只能根据系统的规定使用它们。 28、请简述while型循环和until型循环的区别WHILE型和UNTIL型语句本质上是
12、等价的,当型循环有时称为前测试型循环,直到型循环有时称为后测试型循环.29、C语言中的语句有哪几类?(1)表达式语句(2)函数调用语(3)控制语句(4)复合语句(5)空语句30、局部变量和全局变量有何区别?全局变量就是整个源程序都有效的变量;而局部变量会在其所属.二、编程题1、以下4种水果,1苹果2梨3桔子4芒果,单价分别是2.0元/公斤,2.5元/公斤,3.0元/公斤,4.5元/公斤,请输入水果编号,重量,计算应付款。解答:#include#includeintmain() doubleweight,pay,price;intnum;printf(请输入水果编号、重量:);scanf(%d%
13、lf,&num,&weight);switch(num)case1:price=2;break;case2:price=2.5;break;case3:price=3;break;case4:price=4.5;break;default:printf(你输入的编号有误!n);exit(0);pay=weight*price;printf(应付款:%.2lfn,pay);return0;2、输入某学生成绩(成绩分为100分制,可以为89.5,如果输入的成绩不在0-100之间,请给出错误提示)经处理后给出学生的等级,等级分类如下:90分以下(包括90分):A80至90分(包括80分):B70至8
14、0分(包括70分):C60至70分(包括60分):D60分以下:E#includestdio.hvoidmain()doublekey;printf(请输入学生成绩n);scanf(%lf,&kay);if(key=0&key=60&key=70&key=80&key=90&key=100)printf(分数等级:An);elseprintf(输入有误请重新输入:);scanf(%If,&key);3、编程实现求1-10之间的所有数的乘积并输出。#includevoidmain()inti;longsum=1;for(i=1;i=10;i=i+1)sum=sum*i;printf(“thesu
15、mofoddis:%ld”,sum);4、从键盘输入两个数,求出其最大值(要求使用函数完成求最大值,并在主函数中调用该函数)。#includeintmax(intx,inty)return(xy)?x:y;intmain()inta,b;printf(输入两个整数(空格隔开):);scanf(%d%d,&a,&b);printf(最大数:%dn,max(a,b);return0;5、已知函数y=f(x),编程实现输入一个x值,输出y值。 2x+1 (x0)#includevoid main() float x;scanf(“%f”,x);if(x0)printf(“y=%f”,2*x+1);e
16、lse if(x=0)printf(“y=%f”,x);elseprintf(“y=%f”,2*x-1);6、输出100-200之间既不能被3整除也不能被7整除并统计这些整数的个数,要求每行输出8个数。#include#includevoid main()clrscr();int n;n=0;for(int i=100;i=200;i+)if(i3!=0&i7!=0)n+;printf(ad=dt,n,i);7、小明妈妈给他买了若干块巧克力,小明第一天吃了一半,还不过瘾,又多吃了一块,第二天又将剩下的巧克力吃掉一半,又多吃一块,以后每天都吃了前一天剩下的一半零一块。到第10天再想吃时,只剩下一
17、块了。编程计算小明妈妈总共给小明买了多少块巧克力?#includeintcho(int);voidmain()printf(%dn,cho(1);intcho(inty)/*返回第y天吃之前的数量*/if(10=y)return1;return(cho(y+1)+1)*2;8、写程序,其中自定义一函数,用来判断一个整数是否为素数。主函数输入一个数,输出是否为素数?#includevoidsushu(intn);intmain()intn;scanf(%d,&n);sushu(n);voidsushu(intn)inti,m=1;for(i=2;in/2;i+)if(n%i=0)m=0;brea
18、k;if(m=1)printf(sushu);elseprintf(fsushu);9、一个百万富翁遇到一个陌生人,陌生人找他谈一个换钱的计划,该计划如下:我每天给你十万元,而你第一天只需给我一分钱,第二天我仍给你十万元,你给我二分钱,第三天我仍给你十万元,你给我四分钱,,你每天给我的钱是前一天的两倍,直到满一月(30天),百万富翁很高兴,欣然接受了这个契约。请编写一个程序计算这一个月中陌生人给了百万富翁多少钱?百万富翁给陌生人多少钱?#includeintmain()unsignedlongsum1,sum2;intb=2;for(inti=0;i30;i+)sum1+=b;b*=2;sum
19、1=100;sum2=*30;printf(富翁共收到%ld。n富翁共给出%ld。n,sum2,sum1);return0;10、从键盘输入两个正整数x,y,求它们的最大公约数。#includeintgcd(intx,inty);voidmain()intx,y,z;scanf(%d%d,&x,&y);z=gcd(x,y);printf(%dn,z);intgcd(intx,inty)if(xy)returngcd(y,x);if(x%y=0)returny;returngcd(y,x%y);11、编写函数判断某数是否为素数,如果是素数,则返回1,否则返回0。在main函数中调用该函数,根据返回值判断是否为素数?#includeintfun(intn) inti;for(i=2;in;i+)if(n%i=0)return0;return1;intmain()intn;scanf(%d,&n);if(fun(n) printf(%d是素数n,n);elseprintf(%d不是素数n,n);return0;专心-专注-专业
限制150内