2011_C语言实验与习题l
更新时间:2024-07-08 02:16:01 阅读量: 综合文库 文档下载
- c语言实验心得推荐度:
- 相关推荐
目录
一、 二、 三、
前言 ................................................................................................................................... 2 福建省高等学校计算机应用水平等级考试考试大纲 ................................................... 3 理论习题 ........................................................................................................................... 6 1. 第一章 ................................................................................................................... 6 2. 第二章(略) ....................................................................................................... 7 3. 第三章 数据类型、运算符和表达式 ................................................................. 7 4. 第四章、第五章 程序控制结构(分支、循环语句) ................................... 13 5. 第六章 数组(数组概念、二维数组、字符数组) ......................................... 19 6. 第七章 函数 ....................................................................................................... 23 7. 第八章 善于利用指针 ....................................................................................... 24 8. 第九章 第十章(结构体、共用体、文件及其他) ....................................... 27 9. 宏、预处理命令、位运算及其他 ..................................................................... 30 章节编程训练 ................................................................................................................. 31 1. 数据类型、运算符与表达式 ............................................................................. 31 2. 分支语句编写程序,使其计算以下分段函数 ..................................................... 33 3. 循环 ..................................................................................................................... 34 4. 指针与数组 ......................................................................................................... 43 真题训练 ......................................................................................................................... 56 1. 编程题 ................................................................................................................. 57 2. 填空题: ............................................................................................................. 69 3. 改错题: ............................................................................................................. 80
四、
五、
1
一、 前言
C是最常见的一种高级程序设计语言,高等院校理工科专业都开设“C程序设计”课程作为程序设计入门语言。为此,福建省高校计算机水平考试委员会将其列入福建省高等院校计算机应用水平等级考试(二级C)考试科目,旨在让学生初步掌握程序设计的方法,为今后学习其他计算机课程打下基础,也为今后工作打下计算机应用基础。
目前,以Turbo C为平台介绍各种算法、试题解答的书还不多。笔者从2005年担任诚毅学院工科类专业的“C程序设计”课程教学,多年来注意搜集、整理、编写Turbo C有关的算法例题、试题解答,在课堂上进行融通讲解,系统地从数值处理、图形输出、数据处理、过程模拟、算式求值、文件(字符、)指针处理、数字组合、图形设计八个方面详细地介绍算法例题、试题解答程序,着重培养学生分析问题、解决问题、调试纠错的能力,让学生在扩大计算机知识面的同时,提高实际编程能力、操作能力。
本习题册专为非计算机专业学生编写,主要强调学生实际动手编程能力的培养。本学期要求学生达到以下水平:
1-9章要求学生掌握理论的基础上自己设计程序; 10章以后要求学生理解知识点,能够读懂程序。
编写仓促,错误之处难免,欢迎指正。
2
二、 福建省高等学校计算机应用水平等级考试考试大纲
二级(C语言)
I、考试目的
本考试考查考生以下知识与能力:
1.掌握C语言的基本概念和语法知识;
2.了解C语言程序与函数的结构特点,主函数及程序执行流程;
3.正确使用顺序、选择、循环三种结构,具有结构化程序设计的能力; 4.掌握常用算法,能运用算法描述工具——流程图;
5.能使用Turbo C集成开发环境,完成源程序的编写、编译,运行与调试程序;
6.具有综合运用以上知识编写程序,解决计算与数据处理类问题的初步能力。
II、考试内容
一.C语言基础
1.C语言特点(识记);
2.C语言程序基本组成(识记):
C语言程序的结构与主函数,程序的书写格式与规范; 3.基本数据类型:
标识符与基本数据类型(识记), 常量与变量(领会), 内存的概念(识记);
4.基本输入、输出函数(领会): 格式输入和格式输出函数, 非格式化输入、输出函数;
5.运算符与表达式(简单应用):
算术运算,增1与减1运算,关系运算,逻辑运算,条件运算, 位运算,赋值运算,类型转换,逗号运算,长度运算符, 运算符的优先级与结合性。 二.程序控制结构
1.C语言的语句(识记):
C语言语句的语法及书写规范; 2.顺序结构(领会):
程序设计的流程图,程序控制结构中的顺序结构,复合语句; 3.分支结构(简单应用):
if结构、if结构的多种形式,switch 结构与多分支结构;
3
4.循环结构(综合应用):
当型循环,直到型循环,break语句与continue语句。 三.构造型数据
1.数组(综合应用):
一维数组,字符数组,二维数组; 2.结构类型:
结构类型的概念,结构类型定义及结构变量说明,结构变量的使用(领会), 结构变量的初始化,结构数组的初始化(识记); 3.联合类型(识记):
联合类型的概念,联合类型定义和联合变量说明,联合类型的使用; 4.枚举型(识记):
枚举型的定义和使用枚举型变量; 5.typedef的用途(识记): 使用typedef定义新类型名。 四.指针
1.指针与指针变量(识记):
指针的基本概念,指针变量的定义,指针变量的赋值; 2.指针运算符(领会):
地址运算符与指针运算符、间接寻址; 3.指针与数组(简单应用):
指针与一维数组,移动指针及两指针相减运算,指针比较, 指针与字符串, 指针与二维数组;
4.指针数组与指向指针的指针(识记):
指针数组,定义指针数组,指针数组的应用,
指向指针的指针,定义指向指针的指针变量,指向指针的指针变量的应用; 5.指针与结构(领会):
指向结构变量的指针变量,指向结构数组的指针变量。 五.函数
1.常见的系统库函数(识记): 输入、输出函数(stdio.h): printf, scanf, getchar, putchar, puts,gets; 字符与字符串函数(string.h):strcpy, strcat, strcmp, strlen; 简单数学函数(math.h):sqrt, fabs, sin, cos, exp, log, log10, pow; 2.用户自定义函数(简单应用):
函数定义、调用和说明,函数返回值,函数参数; 3.函数之间的数据传递(领会):
函数数据按数值传递,函数数据按地址传递,
利用函数返回值和外部变量进行函数数据传递,结构变量作为函数参数传递;
4.函数的嵌套调用及递归调用(领会): 函数的嵌套调用、函数的递归调用; 5.局部变量与全局变量(识记):
4
局部变量与全局变量的定义、初始化及作用范围; 6.变量的存储类型与变量的初始化(领会): 局部变量与全局变量的生存期,
静态变量与动态变量的定义、初始化、作用范围及生存期; 7.编译预处理(领会): 文件包含,无参宏定义。 六.文件
1.文件的基本概念,C语言中的两种文件(识记);
2.文件的打开、关闭和文件结束测试,文件的读写,文件的定位(识记)。 七.算法与编程(综合应用)
1.用C表达式或函数计算相对应的数学表达式; 2.连加与连乘的计算,级数的计算; 3.冒泡法排序与选择法排序; 4.矩阵的简单运算与显示; 5.字符串操作; 6.文件编程应用。
八.使用Turbo C集成开发环境调试程序 1.源程序的编写、编辑与改错(领会); 2.集成环境下的求助Help(识记);
3.程序的编译与目标代码的生成(识记); 4.程序的调试(综合应用):
单步运行程序,运行到光标处,断点设置,变量内容的跟踪、显示与修改; 5.了解Turbo C程序的常见错误提示(识记)。
Ⅲ、考试说明
一.考试形式
采用无纸化上机考试;
考试环境: Windows XP 简体中文版,
Turbo C 2.0或以上集成环境(IDE); 考试时间: 90分钟。 二.试卷题型结构
1.选择题(20小题) 40%; 2.程序改错题(2小题) 20%; 3.程序填空题(2小题) 20%; 4.编程题(2小题) 20%。
5
58. 对应代数表达式3a÷(b+c),C语言的表达式是()
A) 3*a\\(b+c) B) 3a/(b+c)
C) 3*a/b+c D) 3*a/(b+c)
59. 若已经定义:double a,b,c;下列表达式中与(a-b)*c/2 计算结果不相符合的是()。
C) c/2*(a-b) A) (a-b)*c/2
D) (1/2)*(a-b)*c B) (a-b)*c*1/2 60. 若已经定义:int a=1,b=2,c=2;则表达式(a+b)/1.0/c的值是()
A) 0.0 B) 1.0 C) 1 61. 下面叙述正确的是( )。
A) 强制类型转换运算的优先级高于算术运算 B) 若a和b是整型变量,(a+b)++是合法的 C) 'A'*'B' 是不合法的 D) \是合法的
62. 若已定义:int x=2,y=4;则表达式(double)x/y+y%x的值是()
A) 2 B) 2.5 C) 0
63. 若已经定义:long int i; char c; double x;则表达式i*c+(int)x的结果的类型是() A) long int B) int C) double 64. 若已经定义:int n=2 ;double x=2.5;则下列表达式中不符合语法的是() A) (int)(x/n) C) (int)(x%n) B) (int)x%n D) (int)x/n
65. 若已经定义:int i=2,j=2;float x=2.5,y=3.5;则表达式(float)(i+j)/2+(int)x%(int)y的值为() A) 4.5 B) 4.0 C) 3.0 D) 3.5 66. 若有定义:float x=3.5,y=5.5;则表达式()的值为2. A) (int)x+y%7 B) (int)(x+y)%7 67. 若有定义:int x=2;则正确的赋值表达式是( )。
A) a-=(a*3) B) double(-a)
D) 1.5
D) 0.5
D) char
C) int(x+y)%7 D) (x+y)%7
C) a*3 D) a*4=3
68. 若已经定义:int b=7;float a=2.5,c=4.0;则表达式a+(b/2*(int)(a+c))%4的值是()
A) 4.5 B) 5.5 C) 2.5 69. getchar()函数的功能是获取终端输入的( A) 一个字符 B) 多个字符 70. 只能向终端输出一个字符的是().
A) printf()函数 B) getchar()函数
)
C) 一个整型变量表达式 D) 一个实型变量值
D) 3.5
C) scanf()函数 D) putchar()函数
71. 若有定义int a=8,b=5;要实现输出形式为:8*5=40,正确的printf()函数调用语句是()
A) printf(“%d*%d=%d\\n”,a,b,a*b); B) printf(“a*b=%d\\n”,a*b); C) printf(“%d*%d=a*b\\n”,a,b);
11
D) printf(“a*b=a*b\\n”);
72. 若有定义float x;要从键盘输入数据6.02赋给x,则应选用()语句。
A) scanf(“%8.2f”,&x); B) scanf(“%4.2f”,&x); C) scanf(“%f”,&x); D) scanf(“%1.2f”,&x);
73. 若已定义:float f; char s[20];下列正确的输入语句是()。 注:参考数组章节知识
A) scanf(“%s%f”,s,f); C) scanf(“%s%f”,s,&f); B) scanf(“%c%f”,s,&f); D) scanf(“%s%f”,&s,f);
74. 若有定义:int x=1234,y=123,z=12;则语句printf(\运行后的输出结果为( )。 A) 123412312 C) 1234+1234+1234 B) 12341234123412341231231231212 D) 1234+123+12 75. 若有语句int a;char c;scanf(“=%c”,&a,&c);为将整数135赋给a,字符‘6’赋给c,正确的数据输入方式是()。说明:
scanf(“%d,%d,%d”,&x1,&x2,&x3); A)1,2,3 B)1 2 3 C)1 2 3 D)123 78. 若已经定义:char c;则下列正确的输入语句是()
A) gets(c);
B) scanf(“%c”,c);
)
C) getchar(c);
D) scanf(“%s”,&c);
79. 若已经定义:int x=5,y=7;正确实现输出形式:5+7=12的语句是()
A) printf(“%d+%d=%d”,x,y,x+y); C) printf(“%d+%d=x+y”,x,y); B) printf(“x+y=x+y”); D) printf(“x+y=%d”,x+y); 80. 要使下列程序段输出的内容为123-123-45,正确的输入数据格式是() int i,j,k;
scanf(“%d%d%d”,&I,&j,&k); printf(“%d-%d-%d\\n”,i,j,k);
12
A) B) C) D) 12312345 123 123 45 123,123,45 123,12345
81. 若有定义:int x,a;则语句x=(a=3,a+1);运行后,x、a的值依次为( )。
A) 3,3 B) 4,4 C) 4,3 D) 3,4 82. 若已经定义:int x; 则逗号表达式x=5,3+x,x=x*2的值是()
A) 15 B) 5 C) 10 D) 16 83. 语句x=(a=3,b=++a);运行后,x、a、b的值依次为( )。
A) 3,3,4 B) 4,4,3 C) 4,4,4 D) 3,4,3 84. 若有定义:int x,y,z;语句x=(y=z=3,++y,z+=y);运行后,x的值为()
A) 7 B) 3 C) 8 D) 6
4. 第四章、第五章 程序控制结构(分支、循环语句)
1. 若有定义:int a;则表达式( )不能用来判断a值为奇数是“真”,偶数是“假”
A) a%2==1 B) !(a%2==0) C) a%2 D) !(a%2) 2. 若已经定义int x,y;则下列不能正确表示数学关系式|x-y|>5的表达式是( )
A) (x-y)>5 || (x-y)<-5 B) (x-y)<-5&&(x-y)>5 C) abs(x-y)>5 D) (x-y)*(x-y)>25 3. 判断char型变量C1是否为小写字母的正确表达式为( )
A) (‘a’>=c1)&&(‘z’<=C1) B) (c1>= ‘a’)&&( C1<= ‘z’) C) ‘a’<=c1<=’z’
13
D) (c1>= a)&&( C1<= z)
4. 若已定义:int a=0,b=1;则下列表达式值为真的是( )
A) a!=0||b!=1 B) a++&&b++ C) (a=0)&&(b=1) D) a==1||a!=1 5. 若已经定义: int x=2,y=3;则下列表达式值为假的是( )
A) x&&y B) x>y||x A) a= =0 B) a=0 C) !(a<0||a>0) D) a!=0 7. 若有定义:int a=1,b=2,c=3,d=4,t=2,k=2;语句(t=a A) a||b+c&&b-c B) a<=b C) !((a A) a*b>0 B) (a+b>0)&&(a+b<0) C) (a>0||b>0)&&(a<0||b<0) D) (a>0&&b>0)&&(a<0&&b<0) 10. 若已定义int x=5;则下列程序段的运行结果是( )。 if((x--)<5) printf(“%d\\n”,x); else printf(“%d\\n”,x++); A) 5 B) 4 C) 6 D) 3 11. 下列程序段的运行结果是( )。 int k=8; 14 。 ) switch(k%5) { default: printf(“DD”) ; case 1: printf(“AA”); break; case 2: printf(“BB”); case 0: printf(“CC”); } A) AA B) DD C) CC D) DDAA 12. 下列程序段运行后sum的值为( )。 int i=8,sum=0; while((i--)>=5) {sum+=2;} A) 10 B) 6 C) 8 D) 4 13. 若已定义int k=4,s=10;则下列程序段运行结果是( if (2*k>9) s=k+5; printf(\\); A) 13 B) 19 C) 10 D) 14 14. 下列程序段运行后m的值为( ) int i,j,m=0; for(i=1;i<=3;i++) for(j=2;j<=4;j++) m=m+i+j; A) 33 B) 30 C) 45 D) 27 15. 下列程序段运行后sum的值为( )。 int i=8,sum=0; 15 ) while((i--)>=5) {sum=sum+2; } A) 4 B) 6 C) 8 D) 10 16. 若已定义int k;下列( )语句与其他三条语句不等价。 A) if(k==0) printf(“Yes!\\n”); else printf(“No!\\n”); B) if(k==0) printf(“No!\\n”); else printf(“Yes!\\n”); C) if(k!=0) printf(“Yes!\\n”); else printf(“No!\\n”); D) if(k) printf(“Yes!\\n”); else printf(“No!\\n”); 17. 若已定义:int i=5,m=1;则( )语句不会产生无限循环。 A) while(i=1) m+=3; B) for( ; i>0; i--) m+=3; C) do{m+=3;}while(i==5); D) for( ;i<10; )m+=3; 18. 下列程序段运行时,语句k+=2;执行的次数是( )。 int i,k=0; for(i=7;i>3;i- -,i- -) k+=2; A) 1 B) 2 C) 3 D) 4 19. 叙述正确的是( )。 A) while循环体至少无条件执行一次,而do...while循环体可能都不执行 B) for循环中,不能用break语句跳出循环体 C) for循环中循环体可包含多条语句,但必须用{}括起来 D) while循环中,不能用break语句跳出循环体 20. 若已定义:int m=3,n=2,k;则下面正确的switch语句是( )。 A) switch(m+n) case 3: k=m+n; break; case 2: k=m-n; break; default: k=m*n; B) switch(m+n) {case is 3: k=m+n; break; 16 case is 5:k=m-n;break; default: k=m*n; } C) switch(m) {case m<0: k=m+n;break; case m==0: k=m-n;break; default: k=m*n; } D) switch(m+n) { case 3: k=m+n;break; case 2: k=m-n;break; default: k=m*n; } 21. 设有程序段 int h=8; while(h=0) h=h-2; 叙述正确的是(A) 循环语句执行1次 B) 循环语句执行3次 C) 循环体语句一次也不执行 D) 循环体语句执行4次 22. 以下程序段的运行结果是( )。 int a=-6,b; if(a>0) b=9; else if (a==0) b=0; else if(a<-5) b=-8; else b=-1; printf(\ A) -1 B) -8 C) 9 D) 0 23. 以下程序段运行后x的值为( )。 int i,x=1; for(i=3;i>0;i--) x=(x+1)*3; A) 54 B) 27 C) 66 D) 9 24. 以下程序段运行后m的值为( )。 int i,m=3; for(i=1;i<=3;i++) 。17 ) { m+=1; if(m%2!=0) break; m+=2; } A) 6 B) 7 C) 9 D) 8 25. 以下程序的运行结果是( )。 void main() { int s[5]={1},i; for(i=1;i<5;i++) s[i]=s[i-1]+i; for(i=0;i<5;i++) printf(\ } A) 1 2 4 6 8 B) 1 2 3 4 5 C) 1 2 4 7 11 D) 1 2 6 10 15 26. 以下程序的运行结果是( )。 void main() {int k=5; switch(k) { default: printf(\ case 1: printf(\ break; case 2: printf(\ case 3: printf(\} } A) 5 B) 15 C) 10 D) 55 27. 以下程序段运行后m的值为( )。int i,m=1; for(i=1;i<=4;i++) { m+=1; if(m%2==0) continue; m+=2; } 18 A) B) C) D) 6 5 12 9 5. 第六章 数组(数组概念、二维数组、字符数组) 1. 下列程序段的运行结果是( )。 int a[]={1,3,4,6,9},i,x=1; for(i=0;i<3;i++) x+=a[i+i]; printf(“%d\\n”,x); A) 15 B) 10 C) 9 D) 14 2. 下列程序段的运行结果是( )。 int a[]={8,7,6,5,4,3,2,1},i,sum=0; for(i=0;i<8;i++) if(i<=3) sum+=a[i]; else sum - = a[i]; printf(“%d\\n”,sum); A) 15 B) 16 C) 10 D) 0 3. 对二维数组arr初始化正确的是( )。A) int arr[2][3]={{1,2},{3,4},{0}}; B) int arr[2][3]={{1,2},{3,4}}; C) int arr[2][]={1,2,3,4,5}; D) int arr[][]={{1},{3,4,5}}; 4. 下列程序的运行结果是( )。 void main() { int a[5]={2,3,5,11,4},b[5]={12,1,6,9,8}; int *pa=a,*pb=b; int i; for(i=0;i<5;i++) if(*(pa+i)<*(pb+i)) printf(“%d ”,*(pa+i)); } A) 11 B) 5 C)2 D) 2 5 4 19 5. 下列程序段的运行结果是( )。 int a[]={0,1,2,3,4,5,6,7,8,9},i=0,t; while(i<=7) {t=a[i]; a[i]=a[i+2]; a[i+2]=t; i+=2; } for(i=0;i<10;i++) printf(“%d”,a[i]); A) 1357924680 B) 2468013579 C) 2143658709 D) 0123456789 6. 下列程序段的运行结果是( )。 int a[3][3]={1,2,3,4,5,6,7,8,9},i; for(i=0;i<3;i++) printf(“-”,10-a[2-i][i]); A) 9 5 1 B) 3 5 7 C) 7 5 3 D) 8 4 1 7. 若已定义char stra[50],strb[50];能正确从键盘读入字符串的是(A) scanf(“%s%s”,stra,strb); B) getch(str,strb); C) scanf(“%s%s”,stra[50],strb[50]); D) gets(strb,stra); 8. 下列程序定义的二维数组a的() #define M 3 #define N 4 void main() { int a[M][N]; ?? } A) 第一维和第二维都为3 B) 第一维为3,第二维为4 C) 第一维和第二维都为4 D) 第一维为4,第二维为3 9. 下列叙述正确的是()。 A) 数组中每一个原属都属于同一个数据类型; B) C语言中,数组长度在程序运行中可作动态调整; C) 可利用数组名引用数组的第一元素; 20 ) D) 定义数组时,若不加类型说明符则为整型; 10. 下列程序段的运行结果是( )。 char str[ ]={ ?Y?,?o?, ?u?, ?\\0?, ?a?, ?r?, ?e?, ?\\0?, ?w?, ?e?, ?l?, ?c?, ?o?, ?m?, ?e?}; puts(str); A) You are B) welcome C) You are welcome D) You 11. 若已定义:char str1[20]=”guangzhou”,str2[20]=”2010”;能形成字符串”GUANGZHOU 2O1O”的语句是()。 A) strcpy(str2,strupr(str1)); B) strcat(strupr(str1),str2); C) strcpy(strupr(str1),str2); D) strcat(str2,strupr(str1)); 12. 若已定义:char str[20]={“Good\\0morning”};则函数strlen(str)的值是() A) 12 B) 6 C) 4 D) 5 13. 下列程序段的运行结果是() char s1[7]=”abcdef”,s2[4]=”123”; strcpy(s1,s2); printf(”%s %c”,s1,s1[4]); A) 123 e B) abc 14. 下列程序段的运行结果是( )。 int a[]={1,3,4,6,9},i,x=1; for(i=0;i<3;i++) x+=a[i+1]; printf(“%d\\n”,x); A) 15 B) 14 C) abc e D) 123 C) 9 D) 10 15. 若已定义:int a[][4]={{1,2},{3,4},{5,6,7},{8,9,10,11}};则a[2][2]的值为( )。 A) 4 B) 6 C) 7 D) 10 16. 给数组a所有元素赋初值0的语句是( )。 A) int a[9]=9*0; B) int a[9]={0}; C) int a[9]={ }; D) int a[9]=0; 17. 正确定义二维数组arr的语句是( )。 A) float arr[4][3]; B) float arr(4,3); C) float arr[4][ ]; D) float arr[4,3]; 18. 下列关于字符数组描述正确的是( )。 A) 字符数组只能存放字符串,不能存放单个字符 21 B) 只能利用赋值语句实现字符数组的整体赋值 C) 只能用len函数计算字符数组中字符串的长度 D) 可使用printf函数实现字符数组中字符串的输出,遇'\\0'字符结束 19. 以下程序的执行功能是( )。 void main() { int a[5]={66,78,82,53,91},b[5]={70,58,81,65,90},i,n=0; for(i=0;i<5;i++) {if(a[i]>b[i]) n++; } printf(\} A) 统计数组a各元素值等于数组b对应元素值的个数 B) 统计数组a各元素值小于数组b对应元素值的个数 C) 统计数组a各元素值大于60的个数 D) 统计数组a各元素值大于数组b对应元素值的个数 20. 若已定义int a[3][4]; 无法正确引用数组a元素的是( )。 A) a[1][5-2] B) a[0][3/2] C) a[2+1][3] D) a[2][1] 21. 使字符数组str正确存放字符串\的语句是( )。 A) char str[4]={'a','b','c','0'}; B) char str[3]={'a','b','c'}; C) char str[4]={'a','b','c','\\0'}; D) char str[ ]={'a','b','c'}; 22. 以下程序的运行结果是( )。 void main() { int a[2][3]={{1,3,5},{2,4,6}}; int i,*p; p=a[0]; for(i=0;i<=5;i++) printf(\printf(\} A) 1 3 5 2 4 6 B) 1 3 5 1 3 5 C) 2 4 6 1 3 5 D) 2 4 6 2 4 6 23. 若已定义int a[][4]={1,2,3,4,5,6,7,8,9,10,11};则表达式sizeof(a)/(sizeof(int)*4)的值为 ( )。 A) 数组a的元素个数 22 B) 数组a第二维长度 C) 数组a第一维长度 D) 数组a占用的字节数 24. 函数调用中,若实参为数组名,则传递给对应形参的是( )。 A) 数组中每个元素的值 B) 数组的长度 C) 数组的首地址 D) 数组中每个元素的地址 25. ( )是int a[9]={3,5,6,8,9};功能的正确描述。 A) 将5个初值依次赋给a[0]至a[4] B) 将5个初值依次赋给a[1]至a[5] C) 将5个初值依次赋给a[5]至a[9] D) 将5个初值依次赋给a[4]至a[8] 26. 若已定义int arr[][3]={1,2,5,6,8,9,11};则数组a第一维长度是( )。 A) 4 B) 3 C) 2 D) 5 27. 若已定义 char b[20]=\ to meet you!\实现输出字符串\ you!\的语句是( )。 A) printf(\B) printf(\C) printf(\D) printf(\ 6. 第七章 函数 1. 对于无返回值的自定义函数,在定义时最好使用( )类型标识符 A) long B) float C) int 2. 下列叙述错误的是() A) 形参是变量名时,实参也只能是变量名,不可以是表达式 B) 定义函数的可以有参数,也可以没有参数 C) 函数的形参和对应的实参个数应相等,类型应相同或赋值兼容 D) 函数的形参在函数被调用前是没有确定值的 3. 下列叙述正确的是( )。 A) 函数的定义和调用都允许嵌套 B) 函数的定义和调用都不允许嵌套 C) 函数的定义不允许嵌套,但函数的调用允许嵌套 D) 函数的定义允许嵌套,但函数的调用不允许嵌套 4. 下列程序段中函数调用语句tnk((a,b),m+n);的实参值是( )。 int a=1,b=2,m=3,n=4; tnk((a,b),m+n); A) 2和3 B) 2和7 23 D) void C) 1和7 D) 3和7 5. 叙述错误的是( )。 A)全局变量的作用域是从其定义处起至本程序结束处 B)函数内复合语句中定义的变量在该函数内有效 C)函数内定义的变量其有效范围不超出该函数 D)所有形参都是局部变量 6. 以下程序的运行结果是( )。 int fun(int k) { switch(k) { case 2: return 0; case 3: case 4: return 1; default: return 5; } return -1; } void main() { printf(\} A) 0 B) 1 7. 第八章 善于利用指针 1. 变量的指针,其值是该变量的( )。A) 值 B) 内存单元地址 2. 下列程序的运行结果是( )。 void fn(int *p,int n) {int j; for(j=0;j void main() {int a[5]={1,2,3,4,5}; int i; fn(a,5); for(i=0;i<5;i++) printf(“%d ”,*(a+i)); } A) 2 3 4 15 B) 11 12 13 14 15 C) 2 3 4 5 D) 2 3 4 5 C) -1 C) 一个标志D) 标识符 24 D) 5 3. 若已定义:int a[5]={1,2,3,4,5},*p=a;且p值未发生变化,下列不能表示a[1]地址的是( )。 A) p+1 B) a+1 C) a++ D) ++p 4. 下列程序的运行结果是( )。 void main() {int a[5]={2,3,5,11,4},b[5]={12,1,6,9,8}; int *pa=a,*pb=b; int i; for(i=0;i<5;i++) if(*(pa+i)<*(pb+i)) printf(“%d ”,*(pa+i)); } A) 3 11 B) 5 C) 2 5 4 D) 2 5. 若已定义:int a,b=5,*p=&a;与语句a=b;等价的是( )。 A) a=*p B) a=**p; C) a=&b; 6. 下列程序的运行结果是()。 void main ( ) {char str[]=”abcd”,*p=str; int i; while(*p) printf(\”,*(p++)); } A) cd B) bcd D) *p=*&b; C) abcd D) abc 7. 若已定义:int a=5,*p1=&a; float f=6.5,*p2=&f;则下列正确的赋值语句是()。 A) p2=p1; B) p1=&f; C) p2=&a; D) f=*p1+*p2; 8. 若已定义:int a[5]={1,2,3,4,5},*pa=a;下列叙述错误的是()。 A) a[2]与pa[2]的值相等 B) *(pa+2)与a[2]的值相同 C) pa与a的值相等 D) a++与pa++的作用相同 9. 下列程序运行的结果是()。 void main() {int a[]={1,2,3,4,5,7},*p; p=a; *(p+3)+=2; printf(“%d,%d\\n”,*p,*(p+3)); } A) 1,3 B) 1, 6 25 C) 1, 5 D) 1, 4 10. 若已定义:int a,b=5,*p=&a;与语句a=b;等价的是()。 A) *p=*&b; C) a=*p; B) a=**p; D) a=&b; 11. 下列程序的运行结果是()。 void main() {int a[5]={2,3,5,11,4},b[5]={12,1,6,9,8}; int *pa=a,*pb=b; int i; for (i=0;i<5;i++) if(*(pa+i)<*(pb+i)) printf(“%d”,*(pa+i)); } A) 2 5 4 B) 3 11 C) 2 D) 5 12. 若已定义:int b=12,*p=&b;下列叙述错误的是( )。 A) *(&p)等价于b B) &(*p)等价于p C) *p等价于b D) b等价于*(&b) 13. 以下程序的运行结果是( )。 #include str=\ is a Book\ str=str+8; while(*str) { putchar(*str); str++; } } A) This is B) Book 14. 以下程序的运行结果是( )。 void main() { int a=5,b=6,c; int *p1,*p2; p1=&a; p2=&b; p1=p2; c=*p2+2*(*p1); printf(\ 26 C) a Book D) is a Book } A) 17 B) 18 C) 16 D) 15 15. 以下程序段的运行结果是( )。 char str[]=\printf(\ A) retupmoC B) Computer C) C D) r 16. 若已定义:int a=5;*p1=&a; float x=11.6,*p2=&x;下列能实现正确赋值的语句是( )。 A) x=*p1+*p2; C) p1=x; B) p2=a+x; D) x=p1+p2; 8. 第九章 第十章(结构体、共用体、文件及其他) 1. 若已定义: struct teacher { int num; char name[20]; }t1,*p=&t1; 下列对结构变量t1成员num合法的引用是() A. teacher.num B. p->num C. *p.num D. t1->num 2. 若已定义: struct student { int num; float score; }stu[2]={{101,85.5},{102,90.0}},*p=stu; 下列对结构体数组引用错误的是() A. p->num B. stu[0].num C. (*p).num D. p[1]->num 3. 下列枚举类型的定义正确的是() A. enum a{x=-2,y=1,z=3} B. enum a{?A?,?B?,?C?} C. enum a={A,B,C} D. enum a={?A?,?B?,?C?} 4. 以下程序运行后,文件file1.txt的内容是(): ??????? #include fp=fopen(“file1.txt”,”w”); if(fp==NULL) return 0; else { fputs(“one”,fp); 27 rewind(fp); return 1; } } A. one B. two C. twoone D. onetwo 5. 若已定义: struct student { int num; float score; }stu[4]; 以下错误的语句是() A. *(stu)=*(stu+1) B. stu[0]=stu[1] C. printf(“%d”,(*stu).num) D. stu[0]->num=101 6. 以下程序段输出结果是() int a[5]={1,3,5,7,9},*p; p=&a[2]; printf(“%d”,*(++p)); printf(“%d”,p-a); A. 7 3 B. 9 4 C. 5 3 D. 7 4 7. 若已定义FILE *fp,则能向fp所指向文件写入hello这5个字符的语句是() A. fputc(“hello”,fp) B. fwrite(“hello”,5,fp) C. fwrite(“hello”,fp) D. fputs(“hello”,fp) 8. 若已定义: struct student { int num; char name[20]; }stu1,stu2; 则下列语句不正确的是() A. stu1.name=”Li Min” B. stu1=stu2 C. strcpy(stu1.name,stu2.name) D. stu1.num=stu2.num 9. 若已定义() int a[5]={1,2,3,4,5}int *p=&a[3];则下列值为3的是( ) A. p-a[0] B. *p C. a+2 D. p-a 10. 以下程序段运行后,c的二进制值是() int a=2,b=3,c=10; c>>=a|b; A. 01010000 B. 00000001 C. 00000010 D. 00101000 11. 用fseek函数可以实现以下哪个功能() A. 移动文件的读写位置指针 B. 在制定的文件夹中查找文件 C. 得到文件位置指针的当前位置 D. 改变文件的读取顺序 28 12. 以下程序段的运行结果是() union data { int a; char b; }data1; data1.b=?A?; data1.a++; printf(“%c\\n”,data1.b); A. 65 B. A C. 66 D. B 13. 以下语句正确的是() A. typedef INTEGER: int; B. typedef INTEGER int; C. typedef INTEGER= int; D. typedef int INTEGER; 14. 下列对结构类型变量stu1的定义和初始化正确的是() A. struct student { int num; float score; }; struct student stu1={1001,85.0} B. struct student { int num; float score; }stu1; stu1={1001,85.0} C. struct student { int num; float score; }stu1={1001,85.0}; D. struct student { int num; float score; }; struct student stu1 stu1->num=1001; stu1->score=85.0; 15. 若已定义:int a[5],*p=a;则不能正确表示a[1]地址的是() A. ++a B. ++p C. p+1 D. a+1 16. 文件类型FILE是() A. 一种函数类型 B. 一种指针类型 C. 一种数组类型 D. 一种结构类型 17. 若已定义:int a[3]={3,6,9};则对数组元素a[1]错误引用的是() 29 A. p[1] B. *p+1 C. *(&a[1]) D. *(a+1) 9. 宏、预处理命令、位运算及其他 1. 下列程序的运行结果是( )。 #define K 5 void main() { int a=3,b=4; printf(“%d\\n”,K*(a+b)); } A. 5 B. 15 A. 0 B. 1 C. 20 C. 20 D. 35 D. 8 2. 若已定义:int x=7,y=5;则表达式(x^y)<<2的值为() 3. 下列叙述错误的是()。 A. C语言源程序中加入一些预处理命令是为了改进程序设计环境,提高编程效率 B. 宏定义可出现在源程序中任意合适的位置,且必须在行末加分号 C. #define PER 1.5的作用是用标识符PER代表1.5 D. 预处理命令行都必须以#号开始 4. 下列错误的是()。 A. 预处理命令行都必须以#号开始。 B. C语言程序中加入一些预处理命令是为了改进程序设计环境,提高编程效率 C. 宏定义可出现在源程序中任意合适的位置,且必须在行末加分号 D. #define PER 1.5的作用是用标识符PER代表1.5。 5. 下列叙述正确的是()。 A. 宏定义中的宏名必须用大写字母表示 B. 为提高程序运行速度可在源程序中加入一些宏定义 C. 宏定义不占用程序运行时间,但与程序中的语句一样需要编译 D. 一个C语言源程序只能有一条预处理命令 6. 下列程序的运行结果是( )。 #define M 5 #define N M+1 #define NN N*N-M void main() { printf(“%d\\n”,3*NN); } A. 16 B. 103 C. 21 D. 108 7. 叙述正确的是( )。 A) 宏定义命令可根据需要以\开头或省略\ B) 宏定义:#define CR 15的作用是定义一个与15等价的符号常量CR C) C源程序中加入一些宏定义是为了提高程序运行速度 30 D) 宏定义命令也是语句,必须以分号结束 8. 宏定义的#define PI 3.14中,用宏名PI 代表一个( )。 A) 单精度数 C) 字符变量 B) 双精度数 D) 符号常 四、 章节编程训练 1. 数据类型、运算符与表达式 1. 补充以下程序,实现从键盘输入一个整数,输出该数的平方。 #include int x; scanf(“%d”,&x); printf(“%d”,x*x); } 2. 补充以下程序, #include /**/ float f; /**/ 定义一个变量来存放表达式的值,注意应定义成浮点型,因为结果包含小数 printf(\ scanf(\ f = /**/ (fabs(x)-2)/(x*x+1) /**/ ; 表达式书写时注意分子分母用括号括起来 printf(\ getch(); } 3. 编写程序,使其计算表达式的值,运行并观察结果。 31 #include return (1+sin(x)+exp(x))/(1+x); /**/ } void main() { clrscr(); printf(\ printf(\ printf(\} 4. 编写程序,根据三角形的三条边长a,b,c用公式 #include /**/ double /**/ fun(float a,float b,float c)函数类型由返回值类型确定,因area是float型所以可设为double或float型 { float s,area ; s = /**/ (a+b+c)/2 /**/;根据题意可知 s = s*(s-a)*(s-b)*(s-c);计算面积 if( s < 0 ) 不能构成三角形的情况 area = -1; else area = sqrt(s); return area ; } main() { float a,b,c,area; printf(\ scanf(\输入三边长,注意scanf格式,本题输入时不能用逗号隔 开,应用空格或回车 area = fun(a,b,c);调用fun函数,传递三边长,计算面积,并接收fun函数返回的面积存 于area中 printf(\ getch(); } 32 2. 分支语句编写程序,使其计算以下分段函数 #include void main() { double x,y; scanf(\ if(x>2) y=fabs(1.23*x-9); else if(x = = 2) y=exp(x)+pow(x,3); else y=cos(x); printf(\} 1. 编写程序完成其中实现对输入的一个月工资数额,求应交税款,设应交税款的计算公式如下: 0 x≤1600 (x-1600)*5%-25 1600 f(x)= (x-1600)*10%-25 2100 (x-1600)*15%-125 x>3100 例如:输入:1825 输出: 输入:2700 输出: f?1825??11.25 f?2700??85.00 f?5655??483.25 输入:5655 输出:#include /**/if else 多层选择结构,本题题目出错,第2个表达式应该没有-25,考试时注意下,不要 -25 就跟答案一样了 double y; if(x<=1600) y=0; else if(x<=2100) y=(x-1600)*0.05; else if(x<=3100) y=(x-1600)*0.1-25; else y=(x-1600)*0.15-125; 33 return y; /**/} void main() { float x; double y; clrscr(); printf(\ scanf(\ y = f(x); printf(\ getch();} #include int fun(/**/ float a,float b,float c /**/)形式参数是用来接受被main函数调用时 传递给它的值的,故其类型跟传给它的值类型一致,观察main函数,传给它的值都是float型,故此处定义为float型,另注意定义形参时,每个变量前都应该加类型说明,即不能写为float a,b,c { float temp; int bTrue = 0;bTrue做为返回值,从下面程序分析可知0代表不能构成直角三角形,1代表 可构成,此处先假设不能构成 if(a if(a 以上两个if语句后使a存放的是三边中的最大边长 if( fabs(/**/ a*a /**/ - (b*b + c*c)) < 1.0e-15)若两边平方和与另一边平方和的 绝对值小于一个极小数,则构成直角三角形 bTrue = 1;能构成直角三角形 给bTrue赋值为1 return bTrue; } main() 34 { float a,b,c; printf(\ scanf(\,%f,%f\ if( fun(a,b,c) == 1) a,b,c的类型决定了fun函数内参数的类型 printf(\ else printf(\ getch(); } 3. 循环 1. 计算s=1+12+123+1234+12345 编写程序计算s=1+12+123+1234+12345。 #define N 5 #include int t=0,/**/ s=0 /**/,i; s记得赋初值 for(i=1;i<=N;i++) { t=/**/ t*10+i /**/; t存入累加项,观察给定表达式可知 其值为上一个 累加项*10+i s+=t; } clrscr(); printf(\ getch(); } 2. 补充程序Ccon 081.c,根据输入的整数m(m>=0)值,计算 ?i. i?1m#include unsigned sum(unsigned n) { unsigned i,/**/ sum=0; /**/ 累加和sum记得赋初值0 for(i=1;i<=n;i++) sum+=i; /**/ return sum; /**/ 返回结果 } void main() { int m; 35 clrscr(); printf(\ scanf(\ while(m<0){该循环确保用户输入的值大于0 可不用太关心 printf(\ scanf(\ } printf(\调用sum函数记得传参数m getch();} 3. #include long i, sign=1;因累加项有正负号的变换,用乘以sign来进行控制 for(i=1;i<=10001;i+=2) { pi+=1.0*sign/i; sign=/**/ -sign /**/;使sign在正负1之间间替变化 } pi*=/**/ 4 /**/;前面for循环算出的是1-1/3+1/5?再乘以4即得到pi printf(\} 4. #include double fun(/**/ int n /**/) 观察fun函数调用该函数传递的数值及题目可知此处应定义一个整型形参变量,变量名由函数体里未被定义的变量确定 { double y = 0.0; int i,j; for(i=1;i<=n;i++) {y = y +/**/ 1.0/(8+3*i) /**/; 注意计算结果有小数部分,此处分子要写成1.0 } return (/**/ y /**/); } void main() { 36 clrscr(); printf(\ getch(); } 5. #include /**/ int i,j=1; double sum=0; for(i=1;i<=n;i++)求累加和咯,j控制正负号变化 { sum+= 1.0/(i*(2*i+1))*j; 看到分数要注意到将分子或分母转化成浮点型,如1.0 j*=-1; } return sum; /**/ } void main() { int n; printf(\ scanf(\ printf(\ getch(); } 6. #include int hcf(int,int); 37 int a,b,k; printf(\ b: \ scanf(\注意scanf的格式,此处输入用空格或回车隔开 k=hcf(/**/ a,b /**/); printf(\ getch(); } 7. #include int m,n; for(m=1; /**/ m<=5; /**/ m++) 外循环控制输出5层*号,内循环控制每层如何输出*号 { printf(\ for(n=1;n<= /**/ 2*(m-1); /**/ n++) 输出*号前的空格 printf(/**/ “ ” /**/); for(n=9;n>=m*2-1;n--) 输出每层* 号 printf(\ } getch(); } 8. 补充程序ccon072.c,计算P?m!,其中m,n为整数且m>n>=0。 n!?m?n?!#include double fun(unsigned m,unsigned n) { unsigned i; double p=1.0; for(i=1;i<=m;i++) 本循环求出m! /**/ p*=i; /**/ for(i=1;i<=n;i++) 进入循环时 p初值为m!,本循环求出m!/n! /**/ p/=i; /**/ for(i=1;i<=m-n;i++) 进入循环时 p初值为m!/n!,本循环求出m!/(n!*(m-n)!) p=p/i; 38 return p;} void main() {clrscr(); printf(\ getch();} 9. #include int i,m; float x,s,tem; printf(\ scanf(\ /**/ s=1;tem=1; /**/ 分析下面的for循环可知,累加项是从x开始的,故1应在此赋值 给s,另外tem用来存放当前的累加项,而当前累加项通过上一累加项乘x/i得到,相当于一个累乘的过程,故初始值设为1 for(i=1;/**/ i<=m /**/;i++) for循环过程中第一项为x,最后一项为xm/m! 故总共有m项 { tem*=x/i; 得到当前的累加项 s+=tem; } printf(\ getch(); } 10. #include /**/ int /**/ a,b,temp; 由以下scanf语句,知此处应填int整型 39 scanf(\ if (a while /**/ (--a>b) /**/ 此处设置循环条件,a必须不断自减1来枚举区间(a,b)之间的数,同时当a==b时则不再进行判断 { if(a%3==0) 满足条件输出数值 printf(\ } printf(\ getch(); } 11. #include float i,j,k,s=0; for(i=0;i<=50;i++) for(j=0;j<=100;j++) for(k=0;k<=200;k++) if(i*2+j+k*0.5 = = 100) { s++; printf(“cock=%f hen=%f chick=%f”,i,j,k); } printf(“\\n the number of solutions is %f”,s); getch(); } 40
正在阅读:
2011_C语言实验与习题l07-08
创维通病及疑难故障解决方法05-16
中考100天誓师大会讲话08-07
语言学补充习题07-09
乐在工作—职业化素养与阳光心态测试题05-20
乡镇委员会年度工作回顾及未来五年工作计划06-05
【高层报告】2010中央经济工作会议解读:我国宏观经济形势和政策取向05-13
描写母爱的作文700字07-01
下沉社区疫情防控工作心得体会03-31
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 习题
- 语言
- 实验
- 2011
- 三角形、平行四边形、梯形的面积综合练习题
- 燃运运行题库
- 科技企业孵化器企业情况(2014年上半年)
- 2017年稻米油行业市场发展现状报告(目录) - 图文
- 中国移动宁波分公司期待“十分”满意
- 苏教版小学语文知识大全
- 2018届北师大版(文) 函数与导数综合测试(大小题) 检测卷
- 湖南省浏阳市大瑶镇大瑶初级中学九年级物理全册 15.2 电流和电路
- 数据库原理与应用 习题参考答案
- 用PLC和变频器实现电机的变频调速和远程控制
- 闪烁在公交战线上的璀璨之星
- 桥边河大桥1~5#墩柱施工方案
- 贵阳市2010年初中毕业生学业考试试题卷
- 探究连续刚构桥存在的问题及成因分析
- 青年文化艺术节活动方案
- 2010宁夏回族自治区会计基础一点通科目一
- 装配式建筑政策
- 11901采面回风巷-总回风巷贯通措施
- 南开大学军事理论笔记
- 信息论与编码试卷及答案(多篇)