收藏 分享(赏)

C程序设计习题部分new.doc

上传人:dreamzhangning 文档编号:2311823 上传时间:2018-09-10 格式:DOC 页数:30 大小:215.50KB
下载 相关 举报
C程序设计习题部分new.doc_第1页
第1页 / 共30页
C程序设计习题部分new.doc_第2页
第2页 / 共30页
C程序设计习题部分new.doc_第3页
第3页 / 共30页
C程序设计习题部分new.doc_第4页
第4页 / 共30页
C程序设计习题部分new.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、习题第 1 部分 表达式及三种基本结构1、单项选择题1)在语言中,int、char 和 float 三种类型数据所占用的内存 。A、均为 2 个字节 B、分别为 1、2、4 个字节C、分别为 2、1、4 个字节 D、由变量的大小决定2)在语言中,错误的 int 类型的常数是 。A、32768 B、 -32766 C、 037 D、 0xAF3)下列可以表示字符型常数的是 。A、 “a“ B、 t C、 “n“ D、 2974)下列错误的转义字符是 。A、 B、 “ C、 81 D、 05)已知 char a; int b; float c; double d; 执行语句 c=a+b+c+d;后

2、,变量 c 的数据类型是: 。A、 int B、 char C、 float D、 double 6)已知 int i=5; 执行语句 i+=+i; 后,i 的值是 。A、6 B、 10 C、 12 D、 117)若 w=1,x=2,y=3,z=4; 则条件表达式 wx?w:y0 B、 !a C、a=0 D、 a11)C 语言对嵌套 if 语句的规定是:else 总是和 配对。A、其之前最近的 if B、第一个 ifC、缩进位置相同的 if D、其前面最近的且尚未配对的 if12)为了判断两个字符串 s1 和 s2 是否相等,应当使用 。A、if(s1=s2) B、 if(s1=s2)C、if

3、(strcpy(s1,s2) D、if(strcmp(s1,s2)=0)13)已知 x,a,b 均为整型变量,则下列选项中错误的 if 语句是 。A、if(a=b) x+; B、if(a=b) m=a; B、if(a=b) m=b; C、if(a=b)=0) m=a; D、if(a=b;)=0) m=a;17)程序 main() int x=5; if(x+10) printf(“%d“,x);else printf(“%d“,x-);的输出是 。A、4 B、5 C、6 D、718)在下面的条件语句中(其中 s1 和 s2 表示是 C 语言的语句) ,只有一个在功能上与其它三条语句不等价,它是

4、 。A、if (a) s1; else s2; B、if (a=0) s2; else s1;C、if (a!=0) s1; else s2; D、if (a=0) s1; else s2;19)在循环语句的循环体中使用 break 和 continue 语句的作用分别是 。A、都是结束循环 B、结束本次循环和结束循环C、都是结束本次循环 D、结束循环和结束本次循环20)设 i,s 是整型变量,执行如下的语句:for (i=0,s=0;ivoid main()int i,j ,m ,n;i=8;j=10;m=+i;n=j+;printf (“%d,%d,%d,%d“,i,j ,m ,n);5)

5、strlen(“ab034x79“)的值是 。6)若 int x=600; 则执行下列程序后,变量 y 的值是 。if (x400)if (xb)if (ac) printf(“%d“,a); else printf(“%d“,b);printf(“end“); 9)完善程序:企业根据月销售额为销售人员发奖金。销售额小于 1 万元,奖金为销售额的 20%;销售额大于或等于 1 万元而小于 2 万元,低于 1 万元的部分按 20%,高于 1万元的部分按 15%发奖金;销售额大于 2 万元而小于 4 万元的,低于 2 万元的部分仍按上述方法发奖金,高于 2 万元的部分按 10%发奖金;销售额大于

6、4 万元而低于 6 万元时,高于 4 万元的部分按 6%发奖金;销售额大于 6 万元而低于 10 万元时,高于 6 万元的部分按 3%发奖金;当销售额大于 10 万元时,高于 10 万元的部分按 2%发奖金。#include void main() float sales;double price;int n;printf(“请输入月销售额:n“);scanf(“%f“ ,if (sales=100000)n=10;else;switch( n ) case 0: price= sales*0.2; break;case 1: price= 2000+(sales-10000)*0.15; b

7、reak;case 2: case 3: price= 3500+(sales-20000)*0.1; break;case 4: case 5: price= 5500+(sales-40000)*0.06; break;case 6:case 7:case 8:case 9: price= 6700+(sales-60000)*0.03;break;case 10: price= 7900+(sales-100000)*0.02; break;printf(“奖金是:%fn“,price );10)执行下列程序段后,x 和 i 的值分别是 10 和 。int x,i;for(i=1,x=1

8、;i=10) break; if(x%2=1) x+=5;continue; x-=3;11)完善程序:程序用于求 100200 之间的全部素数。程序中 n 的作用是累计素数的个数,该程序要求控制每行输出 10 个数据。#include “math.h“ void main()int m,k,i,n=0 ;for (m= 101 ;m=k+1) printf(“%d “,m); n=n+1;12)完善程序:已知任意一个正整数的立方都可以写成一串连续奇数的和。例如:131313=2197=157+159+ +177+179+181,下列程序可以验证上述定理。void main() long in

9、t n,i,k,j,sum;printf(“Enter n=“);scanf(“%ld“,k=n*n*n;for(i=1;ivoid main() int k=1; char c=A;do switch(c+) case A: k+; break;case B: k-;case C: k+=2; break;case D: k=k%2; continue;case E: k=k*2; break;default: k=k/3;k+; while(cvoid main() int i=1;while (ivoid main() char s20,t20,min20;scanf(“%sn“,s);

10、scanf(“%sn“,t);if(strcmp(s,t)void main() int a44,i,j;for (i=1;ix) a =ai; ; /*将比 x 大的数往后移动一个位置*/a+i=x; /*插入 x 后元素总个数增加 */for(i=1;i0;i-) p=p*x;return p;A、8 B、9 C、27 D、817)以下是一个自定义函数的头部,其中正确的是 。A、int fun(int a,b) B、int fun(int a,int b) C、int fun(int a,int b); D、int fun(int a;int b)8)以下程序执行时输出结果是: 。int

11、f(int x,int y) return x/y+x%y; void main() float a=1.5,b=3.0,c=f(a,b);printf(“%.2f“,c);A、0.50 B、0.00 C、1.00 D、1.509)有如下程序int func(int a,int b) return(a+b); void main() int x=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%dn“,r);该程序的输出的结果是: 。A、12 B、13 C、14 D、1510)有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5);该函

12、数调用语句中,含有的实参个数是: 。A、3 B、4 C、 5 D、 有语法错11)提供的编译预处理功能包括: 。A、文件包含、宏定义和条件编译 B、构造工程文件C、语句注释 D、包含以上各功能12)以下叙述中正确的是 。A、全局变量的作用域一定比局部变量的作用域范围大B、静态(static)类别变量的生存期贯穿于整个程序的运行期间C、函数的形参都属于全局变量D、未在定义语句中赋初值的 auto 变量和 static 变量的初值都是随机值13)以下所列的各函数首部中,正确的是 。A、void play(int a,b); B、void play(int a,b)C、void play(int a

13、,int b) D、void play(int a;int b)14)在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是 。A、地址传递 B、单向值传递C、由实参传给形参,再由形参传回实参 D、传递方式由用户指定15)若有以下程序,则以下叙述中不正确的是 。#include void f(int n);void main() void f(int n);f(5);void f(int n) printf(“%dn“,n); A、若只在主函数中对函数 f 进行说明,则只能在主函数中正确调用函数 fB、若在主函数前对函数 f 进行说明,则在主函数和其后其它函数中都能调用函数 fC、

14、对于以上程序,编译时系统会提示出错信息:提示对 f 函数重复说明D、函数 f 无返回值,所以可用 void 将其类型定义为无值型16)C 语言中,函数值类型的定义可以缺省,此时函数值的隐含类型是 。A、void B、 int C、float D、double17)若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是 。A、函数调用可以作为独立的语句存在B、函数调用可以作为一个函数的实参C、函数调用可以出现在表达式中D、函数调用可以作为一个函数的形参18)有以下函数定义:void fun(int n, double x) 若以下选项中的变量都已正确定义并赋值,则对函数 fun 的正确调用

15、语句是 。A、fun(int y,double m); B、k=fun(10,12.5); C、fun(x,n); D、void fun(n,x);19)对于 C 程序的函数, 的叙述是正确的。A、函数不能嵌套定义,但可以嵌套调用 B、函数可以嵌套定义,但不能嵌套调用C、函数的定义和调用均不能嵌套 D、函数的定义和调用均可以嵌套20)以下叙述中不正确的是 。A、一个变量的作用域完全取决于变量说明语句的位置B、外部变量可以在函数以外的任何位置定义C、内部变量的生存期只限于本次函数调用,无法将内部变量的值保存至函数的下一次调用D、用 static 说明一个外部变量是为了限制其他编译单位的引用21)

16、若有以下变量和函数说明,以下合法的函数调用语句是 。int a=4,b=6,c,k;char ch=*;float x,y,z;sub(int x,int y,char ch,float *z)switch(ch)case +:*z=x+y;break;case -:*z=x-y;break;case *:*z=x*y;break;case /:*z=x/y;break;A、sub(10,20,ch,y); B、sub(1.2+3,2*2, +,C、sub(sub(1,2, +, D、sub(a,b,22)以下叙述中不正确的是: 。A、在函数中通过 return 语句传回函数值B、在函数中可以

17、有多条 return 语句C、主函数 main 后的一对圆括号中也可以带有形参D、调用函数必需在一条独立的语句中完成23)以下叙述中不正确的是 。A、在不同的函数中可以使用相同名字的变量B、函数中的形式参数是局部变量C、在一个函数内定义的变量只在本函数范围内有效D、在一个函数内的复合语句中定义的变量在本函数范围内有效24)以下对 C 语言函数的有关描述中,正确的是 。A、调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参B、C 函数既可以嵌套定义又可以递归调用C、函数必须有返回值,否则不能使用函数D、C 程序中有调用关系的所有函数必须放在同一个源程序文件中25)以下是一个自定义函数的

18、头部,其中正确的是 。A、int fun(int a,b) B、int fun(int a,int a)C、int fun(int a,int b) D、int fun(char a,int b)2、填空题1)static 型变量是在 时赋初值。2)假设有宏定义:#define MA(x) x*(x-2) ,则表达式 MA(2+3+1)的值为 。3)以下函数调用语句中,含有的实参个数是 。fun(a+b,(y=10,y),fun(n,k,d);4)C 语言中,形参与实参之间的数据传递方式是,可以按 传递也可以按 传递。5)在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内, 不

19、起作用。6)假设有宏定义,则表达式 Z(4)的值为 。#define X 5#define Y X+1#define Z(m) Y*X/m7)下面程序执行后,x、y、z 的结果分别是: 、 、 。void main() int x,y,z;x=50; y=500; z=0; xyz(x,y,z); printf(“x=%d,y=%d,z=%dn“,x,y,z);xyz(int x,int y,int z) int temp;temp=x; x=y; y=temp; x=x*x; y=y*y; z=x-y; 8)请在以下程序第一行的下划线处填写适当内容,使程序能正确运行。( double,dou

20、ble);void main() double x,y;scanf(“%lf%lf“,printf(“%lfn“,max(x,y);double max(double a,double b) return(ab ? a:b); 9)以下程序的输出结果是: 。unsigned fun(unsigned num) unsigned k=1;dok*=num%10;num/=10;while(num);return(k);void main() unsigned n=26;printf(“%dn“,fun(n);10)以下程序的输出结果是: 。char cchar(char ch) if(ch=Av

21、oid main() long n,c=0;printf(“input a number: “);scanf(“%ld“,while( ) printf(“input a number: “);scanf(“%ld“,n=n+ ; /*将十进制正整数 n 与其反序数相加*/c+; /*c 统计相加次数 */while( ) n=n+invert(n); c+; printf(“%ld,count=%ld“,n,c);long invert(long x) /*生成并返回 x 的反序数 */ long s;for(s=0;x0; )s=s*10+x%10;return s;13)用 6100 间

22、的偶数验证哥德巴赫猜想:比 6 大的偶数均可表示为两个素数之和。void main()int m,k;for(m=6; ;m=m+2)for(k=3;kfloat g(float x,float eps);void main() float x,eps;scanf(“%f%f“,printf(“n%f,%f“,x,g(x,eps);float g(float x,float eps) int n=1;float s,t;s=1;t=1;do t=t* ;s=s+(n*n+1)*t; while( );return s;15)编程计算(n+1)!+(n+2)! + +(n+m)!的值,程序运行后

23、,从键盘输入整数 m 和 n。16)函数 void yhui (int yN,int xN,int n)生成 n 行杨辉三角形数据构成的矩阵,并将其存放到 y 指向的二维数组中,再将 y 数组中的矩阵顺时针旋转 90 度后存储到 x 指向的二维数组中。主函数中分别输出 n 行杨辉三角形及顺时针旋转 90 度后的 n 行杨辉三角形。测试数据与运行结果如下,n=4 时应输出:11 11 2 11 3 3 11 1 1 13 2 13 11第 4 部分 指针1、单项选择题1)设 char a10; int k;,以下正确的表达式是 。A、k+2 B、 *(a+k) C、(等价于 。A、y=*px;+

24、px; B、y=(*px)+; C、y=px;px+; D、y=*(+px);3)设 char a10,*p=a;,以下不正确的表达式是 。A、p=a+5; B、a=p+a; C、a4=p2; D、*p=a0;4)设有 char *p,*q;选择正确的语句 。A、p*=3; B、p= C、p+=3; D、p+=q;5)设有语句:int a5=0,1,2,3,4,*p=a;,以下对 a 数组元素的错误引用是 。A、ap-a B、*要实现 x 的内容加 5,则下面的语句 是错的。A、*p=*,以下正确的表达式是 。A、*st=good B、 st=good C、*st=“good“ D、 st=“

25、good“8)以下程序的运行结果为 。void main()int a10,i,*ap,*aq; float b10,*bp,*bq; for(i=0;ib) return(a);else return(b);void main() int x=3, y=8, z=6, r;r=fun(fun(x,y), 2*z);printf(“%dn“, r);A、3 B、6 C、8 D、1220)以下程序运行后的输出结果是 。int a=5;fun(int b) static int a=10;a+=b+;printf(“%d “,a);void main() int c=20;fun(c);a+=c+

26、;printf(“%dn“,a);A、30 25 B、31 30 C、25 31 D、26 2521)以下程序的输出结果是 。void main()int p(int);printf(“%d “,p(3);printf(“%d “,p(3);printf(“%d “,p(3);p(int x)int y=1; static int z=2;y+; z+;return x+y+z;A、7 7 7 B、9 10 11 C、8 8 8 D、8 9 102、填空题1)定义 int a=0,1,2,3,4,*p=a;表达式(*+p)+ 的值是 。2)swap(int *pt1,int *pt2)int

27、temp;temp=*pt1; *pt1=*pt2; *pt2=temp;exchange(int *q1,int *q2,int *q3)if (*q1*(p+j) t=*(p+i);*(p+i)=*(p+j);*(p+j)=t;for (k=0;k#include void main()static char a50=“test“;char b40,*p;p=a; *(p+3)+=1;strcpy(b,“abcdefg“); strcat(a,“string“); strcpy(b,a,5);printf(“n1=%c,n2=%cn“,*p,*(p+3);printf(“a=%s,b=%s

28、n“,a,b); 以上程序的输出结果是? 7)下面的函数 index()用于确定字符串是否为的子串,如果不是的子串,函数返回,否则返回字符串在中第一次出现时的序号(序号从开始计) 。例如:s=“abcdefbcd“;t=“bc“;则调用函数 index(t,s)返回值为;若 t=“ab“;则调用函数 index(t,s)返回值为;若 t=“aaa“;则调用函数 index(t,s)返回值为。阅读完善下列程序。index(char t,char s) int i=0,j=0;while(ti!= 0 i=0; if (ti=0) return ;return 0;8)设有以下定义:int a43

29、=0,2,7,8,5,6,7,8,9,10,11,12;int (*prt)3=a,*p=a0;*(p+3) 的值是_,*(*prt+2)的值是_。9)设有以下定义的语句: int a32=10,20,30,40,50,60, (*p)2; p=a; 则*(*(p+2)+1)值为_。10)用指针编程将键盘上输入的八进制转换为十进制后输出。11)用指针编程从键盘上输入主字符串和子串,计算主字符串中子串出现的次数。第 5 部分 结构体、共用体和文件1、单项选择题1)以下程序的输出是 。#include “stdio.h“void main()printf(“%d“,NULL);A、 0 B、 1

30、C、 0 D、 无定义2)在说明一个结构体变量时系统分配给它的存储空间是 。A、该结构体中第一个成员所需存储空间B、该结构体中最后一个成员所需存储空间C、该结构体中占用最大存储空间的成员所需存储空间D、该结构体中所有成员所需存储空间的总和3)使用共用体的目的是 。A、将一组数据作为一个整体,以便于其中的成员共享同一存储空间B、将一组具有相同数据类型的数据作为一个整体,以便其中的成员共享同一存储空间C、将一组相关数据作为一个整体,以便在程序中使用D、将一组具有相同数据类型的数据作为一个整体,以便在程序中使用4)若有以下程序说明和语句,则以下引用方式不正确的是 。struct studentint

31、 no;char name10;stu,*p=stu;A、stu.no B、 stu-no C、p-no D、(*p).no5)以下程序执行后的正确结果是 。struct nodeint a; char *s; x; son(struct node x) x.a=0; x.s=“cgy“;void main()x.a=1; x.s=“czgxy“;son(x); printf(“%d,%sn“,x.a,x.s); A、 0,czgxy B、 0,cgy C、 1,cgy D、 1,czgxy6)有如下定义:struct dateint year,month,day; ;structchar n

32、ame10;struct date birthday;stu;对结构体变量 stu 的出生年份进行赋值时,下面正确的赋值语句是 。A、year=1984 B、birthday.year=1984 C、stu.year=1984 D、stu.birthday.year=19847)在如下结构体中,不正确的是 。A、struct student B、struct stu5 C、struct student D、struct char name10; char name10; char name10; char name10;float score; float score; float score

33、; float score; ; ; stu5; stu5;8)以下程序的输出结果是 。void main()unionint x;char a2;u;u.x=0x1357;printf(“%x,%xn“,u.a0,u.a1);A、 13,00 B、 57,00 C、 13,57 D、 57,139)设有以下语句,则值为 6 的表达式是 。struct st int n; struct st *next; ;static struct st a3=5, p= A、 +p-n B、 p-n+ C、 (*p).n+ D、 p+-n10)设有说明,则变量 s 在内存中所占字节数为 。union da

34、taint x;structint a; char by ;float z;s;A、 1 B、 2 C、 3 D、 411)文件指针实际上是 。A、文件缓冲区的内存空间的首地址 B、文件缓冲区的内存空间的末地址C、磁盘文件的首地址 D、磁盘文件的末地址12)在一个程序中,要打开 n 个文件,应设 个文件指针。A、 1 B、 n C、 n-1 D、n+113)若执行 fopen 函数时发生错误,则函数的返回值是 。A、 1 B、 0 C、 地址值 D、 EOF14)若要用 fopen 函数打开一个新的二进制文件,该文件既能读也能写,则文件方式字符串应是 。A、 “ab+” B、 “rb+” C、

35、 “ab” D、 “wb+”15)fgetc 函数的作用是从指定文件读入一个字符,该文件的打开方式必须是 。A、 只写 B、 追加 C、 读或读写 D、追加或只读16)若调用 fputc 函数输出字符成功,则其返回值是 。A、 EOF B、 1 C、 0 D、输出的字符17)若有以下定义,则值为s的表达式是 。struct aaint a; char b5;x2=100,“Jack“,200,“Rose“;A、x.b2 B、x1.b C、x1.b2 D、 x1.b318)已知:struct skint a; float b;data, *p;若有 p=float score;typedef S

36、TUDENT;A、struct st B、struct C、st D、 st struct20)以下有关枚举类型叙述 是正确的。A、枚举元素是变量,可以赋值 B、枚举元素是常量,他们是有值的C、一个整数能直接赋给一个枚举变量 D、枚举元素不能赋给一个枚举变量2、填空题1)下面程序的输出结果为 。union abc char c2;int a;un;void main( ) un.a=16961;printf(“%d,%c,%d,%c n“,un.c0,un.c0 ,un.c1,un.c1);2)设有以下结构类型说明和变量定义,变量 a 在内存所占字节数是 24。struct stud char

37、 num ;int s4;double ave;a,*p;3)现有如下说明和定义,若需建立如图 9-1 所示的数据结构,填写所需语句。图 9-1struct wwint data;struct ww *next;*p,a,b;p=;4)变量 root 有如图 9-2 所示有存储结构 ,其中 sp 是指向字符串的指针域 ,next 是指向该结构的指针域,data 用以存放整型数,请填空完成此结构的类型说明和变量 root 的定义。struct list char *sp;int data;root;5)以下程序的输出结果是 。enum weekSUN=7,MON=1,WED,TUS,THS,FR

38、I,SAT ;void main( ) printf(“%d“,hour(FRI,SUN);hour(int x, int y) if(yx) return 24*(y-x);else return -1;6) struct nodeint x,*y; *p;int s=10,20,30,40;struct node a=1,void main()p=a;printf(“%d,“,p-x);printf(“%d,“,(+p)-x);printf(“%d,“,*(+p)-y);printf(“%dn“,+(*(+p)-y);以上程序的输出结果是? 。7) void main()union int

39、 count2; char ch4; un;int i;char letter=6;for(i=0;ivoid main(int argc, char *argv)FILE *fp;void sub( );int i=1;while (-argc0)if(fp=fopen(argvi+,“r“)=NULL) printf(“cannot open file !n“);exit(1);elsesub(fp);fclose(fp);void sub(FILE *fp)char c;while (c=getc(fp)!= ! )putchar(c+1);若在 DOS 提示符下键入: ex12 f1.

40、txt f2.txt f3.txt,则程序的运行结果是 。15)现 有 如 下 定 义 , 则 : 表 达 式 +p-x 和 表 达 式 (+p)-x 的 结 果 分 别 是 和 ;structint x,y;a2=1,5,6,8,*p=a;16)“-”称为 运算符。17)有两个磁盘文件 a.txe 和 b.txt,各存放一行字母,编程把这两个文件中的信息合并,且按字母顺序排列,然后输出到一个新文件 c.txt 中。18)编程在给定范围内查找并输出所有由两个不同数字组成的六位回文数。一个整数如果有与其反序相等,则称该整数为回文数。例如,112211 是回文数并且 112211 是由两个不同的数

41、字 1 和 2 组成的,因此 112211 是符合上述条件的数。编写函数 int palin(long m1,long m2,long x),在 m1m2 范围内查找所有由两个不同数组组成的回文数并依次保存到 x 指向的数组中。函数返回 x 数组中回文数的个数。编写 main 函数,调用 palin 函数查找 100000120000 范围内所有由两个不同数字组成的六位回文数并将这些数保存到一维数组中,将该一维数组的数据输出到屏幕并保存到文件 myf2.out 中。最后将本人的学号字符串保存到文件 myf2.out 中。输出结果:100001 101101 11011 112211 113311 114411 115511 116611 117711 118811 119911My student number is:08021608

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报