C语言课后习题
更新时间:2023-12-30 03:56:01 阅读量: 教育文库 文档下载
习题5
一、选择题
1. 以下定义数组的语句中正确的是( )。 A)int a(10);
B)char str[];
D) #define SIZE 10; char str 1[SIZE],str[SIZE +2];
C)int n=5; int a[4][n];
2. 对两个数组a和b进行如下初始化: static char a[]=\static char b[]={'a','b','c','d'}; 则下列叙述正确的是( )。 A)a与b数组完全相同 C. a与b中都存放字符串
B)a数组比b数组长度长 D. a与b长度相同
3. 下列语句中,不正确的是( )。 A. static int a[2][3]={1,2,3,4,5,6}; C. static int a[][3]={{1},{4}};
B. static int a[2][3]={{1},{4,5}}; D. static int a[][]={{1,2,3},{4,5,6}};
4. 设有如下形式的字符数组定义: static char str[]=\
则执行下列语句后的输出结果为( )。 printf(“%d”, strlen(strcpy(str,\ A. 7
B) 5
C) 8
D) 9
5. 在下面给出的语句中,( )是对一维数组正确赋初值的语句。 A) int a[10]=\ C) int a[3]={1,2,3,4,5,10};
B) char a[ ]=\D) char a[3]=\
6. 已知对一维数组ns有如下说明: int ns[10];
要求使ns的所有元素都取值0。下面不正确的程序段是( )。 A) for(j=0;j<10;j++) ns[j]=0; B) ns[0]=0;
for(j=1;j<10;j++) ns[j]=n[j-1]; C) for(j=1;j<=10;j++) ns[j]=0;
D) ns[0]=ns[1]=ns[2]=ns[3]=ns[4]=ns[5]=ns[6]=ns[7]=ns[8]=ns[9]=0;
7. 有说明语句:int a[ ][4]={1,5,8,7,12,22,9,41,55,27};则数组a第1维的长度应该是( C A) 2
B) 3
C) 4
D) 5
8、下面程序运行后,其输出是()
#include
void main()
,static char s*30+=”abcdefg”; static char t[+=”abcd”; int i,j; i=0;
while(s*i+!=’\\0’) i++; j=0;
while(t*j+!=’\\0’) {s[i+j]=t[j]; j++;} s*i+j+=’\\0’; printf(“%s\\n”,s); }
A.abcdabcdefg B.abcdefg C.abcd D.abcdefgabcd
)。 9、下面程序运行后,其输出是()
#include
void main() { int a[4][4],i,j,k; for(i=0;i<4;i++) for(j=0;j<4;j++) a[i][j]=i+j; for(i=1;i<4;i++) for(j=i+1;j<4;j++) { k=a[i][j]; a[i][j]=a[j][i]; a[j][i]=k; }
for(i=0;i<4;i++) ,printf(“\\n”); for(j=0;j<4;j++) printf(“%d ”,a*i+*j+);- }
A. 0 1 2 3 B.0 1 2 3 C. 0 1 2 3 D.3 2 1 0 1 2 3 4 1 2 5 4 1 2 4 2 4 3 2 1 2 3 4 5 2 3 4 5 2 3 5 3 5 4 3 2 3 4 5 6 3 4 5 6 3 4 6 4 6 5 4 3
二、填空题
1. 任何一个数组的数组元素都具有相同的数绷名和___________。 2. 同一数组中,数组元素之间是通过___________来加以区分的。
3. 已知数组e定义为int e[ ][4]={{1,2,3,4},{5,6,7,8}};则e是一个_________行
_________列的二维数组,总共有___________个元素,最大行下标是___________,最大列下标是___________,其首行的各元素的值分别是___________。
4. 要使aa成为具有如下初始值的二维int型数组,则最简单的定义aa的语句是________。
10000 12000 12300 12340 12345
5. 执行下列语句序列后,数组str2中的字符串是___________。
char str1[ ]=\for(i=0;str2[i]=str1[i];i++);
6. 有说明语句:
int x[ ][4]={{1},{2},{3}};
那么元素x[1][1]的取值是___________。
7. 下面的语句显示输出3行3列数组a的主对角线上的所有元素,请补充完整。
for(i=________;i<______;________) ____________ printf(___________);
8. 下面的语句按行显式输出5行3列数组aa的所有元素,请补充完整。
for(i=_____;i<_____;_____) { for(j=_____;j<_____;______)
printf(__________); printf(__________); }
三、程序阅读 1. 写出下列程序的运行结果。
#include
int i,a[3][3]={1,2,3,4,5,6,7,8,9}; for (i=0;i<3;i++)
printf(\}
2. 阅读程序,说明其功能及输出的结果。
#include
char x,a[10]={'a','b','c','d','e','f','g','h','i','j'}; for(k=0;k<5;k++) { }
for(k=0;k<10;k++)
printf(\”,a[k]); x=a[k]; a[k]=a[9-k]; a[9-k]=x;
printf(\”);
printf(\}
程序运行结果: 3.#include
{ for (i=0; i { int a[MAX], i ,max ; max=5; for (i=0; i for (i=0; i { sub1( ); sub3(a); sub2( ); sub3(a);} 程序运行结果: 4.#include } int fun(int u,int v){ } 程序运行结果: 5.#include #define MG(m) (m)*G #define PR(x) printf(\main(){ int a=1,b=2; PR(MG(a+b)); } 程序运行结果:9000 6.#include #include void fun(char str[] , char ch); char s[20]= \fun(s,ch); puts(s); } int w; while(v) {w=u%v;u=v;v=w;} return u; void fun(char str[] , char ch) { int i=0,j; while(str[i]!='\\0'){ if(str[i]==ch){ for(j=i+1;j } } 程序运行结果: 三、编程题 1.定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。 2.编写一函数,用递归方法求:1+1/2+1/3+1/4+1/5+1/6+1/7....+1/n。n的值从键盘输入。 3.编写函数fun(char a[] ),实现:将字符串a中的元素按照从小到大排序后输出。 4.已知函数fun(n),n为三位自然数,判断n是否为水仙花数,是返回1,否返回0。在main函数中,输入一个数num,调用fun(num)函数,并输出判断结果。水仙花数是指一个 n 位数 ( n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身。 5.编写函数,功能是删除整型数组a(数组中的元素按值非递减有序排列)中的值为x的所有元素,n为数组a的元素个数,函数返回删除后的数组a元素个数,在main函数中调用此函数,并输出执行删除操作后的数组a中的元素。 6.编写函数,将字符串str1中的小写字母全部拷贝到字符串str2中,并返回被拷贝的字符的个数。 str[j-1]=str[j]; str[j-1]='\\0'; } else i++; 习题7 一、选择题 1. 若int x ,*px;,则正确的赋值表达式是。 A. px=&x B. px=x;C. *px=&x; D. *px=*x 2. 有如下程序段 int *p ,a=2,b=5; p=&a ; a=*p+b ; 执行该程序段后,a 的值为。 A. 8 B. 7 C. 6D. 编译出错 3.要求函数的功能是交换x和y中的值,且通过正确调用返回交换结果。能正确执行此功能的函数是。 A. void funtiona (int *x,int *y) { int *p; *p=*x; *x=*y;*y=*p; } B. void funtionb(int x,int y){ int t; t=x;x=y;y=t; } C. void funtionc (int *x,int *y) { *x=*y;*y=*x;} D. void funtiond (int *x,int *y) { *x=*x+*y;*y=*x+*y;*x=*x-*y; } 4. 若有说明:long *pa,a;则能通过scanf 语句正确给输入项读入数据的程序段 是。 A. *pa=&a; scanf(\,&pa); B. pa=(long *)malloc(8); scanf(\,&pa); C. scanf(\,pa=&a); D. scanf(\,a); 5.若有以下定义和语句: int a[10]={2,4,6,8,10,12,14,16,18,20} ,*p=a ; 则不能表示a 数组元素的表达式是。 A. *p B. a[10] C. *a D. a[p-a] 6.若有以下定义和语句: int a[2][3] ,(*pa)[3] ; pa=a; 则对a数组元素非法引用是。 A. *(a[0]+2) B. *(pa+1)[2] C. pa[0][0] D. *(pa[1]+2) 7.设有如下的程序段: char str[ ]=\; char *ptr ; ptr=str ; 执行上面的程序段后,*(ptr+5)的值为。 A. 'o' B. '\\0' C. 不确定的值D. 'o'的地址 8.下面各语句行中,能正确进行字符串赋值操作的语句是。 A. char ST[5]={\; B. char S[5]={'A','B','C','D','E'}; C. char *S; S=\; D. char *S; scanf(\,S); 9.下列函数的功能是。 int fun1(char * x) { char *y=x; while(*y++); return(y-x-1); } A. 求字符串的长度 B. 比较两个字符串的大小 C. 将字符串X复制到字符串Y D. 将字符串X 连接到字符串Y 后面 10.若有说明:int i, j=5,*p=&i;,则能完成i=j 赋值功能的语句是。 习题8 一、选择题 1. 对于以下的变量定义,表达式是正确的。 struct node { char s[5]; int k; } p[4]; A.p->k=2 B.p[0].s=“abc” C.p[0]->k=2 D.p->s=2. 设有如下定义: structnode { int a; float b; }data; int *p; 若要使p指向data 中的a 域,正确的赋值语句是。 A. p=&a; B. p=data.a; C. p=&data.a; D. *p=data.a; 3. 设有如下说明 typedef struct { int n; char c; double x; }STD; 则以下选项中,能正确定义结构体数组并赋初值的语句是 。’a’ A. STD s[2]={{1,'A',62},{2, 'B',75}};B. STD s[2]={1,\C. struct s[2]={{1,'A'},{2, 'B'}};D. struct s[2]={{1,\\ 4. 当说明一个共用体变量时系统分配给它的内存是。 A.各成员所需要内存量的总和 B.共用体中第一个成员所需内存量 C.成员中占内存量最大者所需的容量 D.共用体中最后一个成员所需内存量 5. C 语言共用体类型变量在程序运行期间。 A.所有成员一直驻留在内存中 B.只有一个成员驻留在内存中 C.部分成员驻留在在内存中 D.没有成员驻留在内存中 6. 以下对枚举类型名的定义中正确的是。 A. enum NUM={one ,two ,three} ; B. enum NUM {one=9 ,two=-1 ,three} ; C. enum NUM ={\,\,\; D. enum NUM {\,\,\; 7. 设有如下枚举类型定义: enum LANGUAGE { Basic=3 ,Assembly ,Ada=99,COBOL ,Fortran} ; 枚举量Fortran 的值为。 A.4B.7 C.101D. 2 8. 下面叙述中不正确的是。 A.用typedef 可以定义各种类型名,但不能用来定义变量 B.用typedef 可以增加新类型 C.用typedef 只是将已存在的类型用一个新的标识符来代表 D.使用typedef 有利于程序的通用和移植 9. 以下各选项企图说明一种新的类型名,其中正确的是。 A. typedef tp1 int; B. typedef tp2=int; C. typedefint tp3; D. typedef tp4: int; 10. 设有以下说明语句 typedef struct { int age; char name[8]; }PERSON; 则下面叙述中正确的是。 A. PERSON是结构体变量名B. PERSON是结构体类型名 C. typedef struct 是结构体类型D. struct 是结构体类型名 二、填空题 1. 编写一个程序,首先定义一个复数数据类型,即结构类型。然后按照复数的运算规则进行计算,并按照复数表示的格式进行输出。 #include int real; int imag; }c1,c2,s,d; void main() { scanf(\ scanf(\ s.real= ; s.imag= ; if(s.imag >=0) printf(\ else printf(\ d.real=; d.imag=; if(d.imag >=0) printf(\ else } printf(\ 2. 有五名学生,每个学生包括学号、姓名、成绩,要求找出成绩最高者的学号、姓名和成绩(使用指向一维数组的指针)。 #include int num; char name[10]; float score; }; void main() { struct student stu[5]; struct student *p; int i,temp=0; float; for( p=stu;p scanf(\ } for(i=0 ;i<4;i++) if(>amax) { ; printf(\} } amax=stu[i].score;temp=i; 三、程序阅读题 1. #include { int x, y, z; } u; int m; } Un; void main() { Un.u.x=1; Un.u.y=2; Un.u.z=3; Un.m=8; printf(\} 2. #include char num[8]; float score[3]; }; void main() gets(fname); if ((fp= ① )==NULL) { printf(\ printf(\ while ((ch=getchar()!='#') fputc( ② ,fp); fclose(fp); } 8. 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件中,形成文本文件,最后将字符的个数写到文件的尾部。请填空。 #include char ch, fname[32]; int count=0; printf(\ scanf(\ if ((fp=fopen(①, \ { printf(\ printf(\ while ((ch=getchar()!='#') { fputc(ch,fp); count++; } fprintf(②,\ fclose(fp) } 9.. 假定下面命令行参数程序,经过编译连接,最后生成了一个名为EXAM1.EXE的可执行文件。如果在命令状态下,我们输入命令行为:EXAM1 horse house monkey donkey friends。则该程序的输出将会是: void main(int argc,char *argv[]) { while(--argc>=0) puts(argv[argc]); } 三、阅读程序写出执行结果 1.下列程序的运行结果为_____________. 若文件test1.txt中的内容是:hello world! #include if((fp=fopen(\{ printf(\ exit(0); } while((ch=fgetc(fp))!=EOF) count++; printf(\fclose(fp); } 2.下列程序的运行结果为_____________ #include int p=0,n=0,z=0,temp; if((fp=fopen(\ { printf(\ exit(0); } while(!feof(fp)); fscanf(fp,\ printf(\ if(temp>0) p++; else if(temp<0) n++; else z++; } fclose(fp); printf(\} 3.下列程序的运行结果为_____________ #include if((fp=fopen(\ { printf(\ exit(0); } while(!feof(fp)); fread (ch,sizeof(char),10,fp); ch[10]=\puts(ch); fclose(fp); } 四、编程题 1. 编制程序建立一个文本文件wb.txt,将下列字符串写入该文件:London,Paris,Bon,Rome,Tokyo,Detroit,Moscow,Jerusalim,Bomgey,Beijing,Washington,要求每个字符串占11个字节。然后,读取该文件的各个字符串,并在屏幕上显示出来。 2. 编制程序建立一个学生四、六级英语考试成绩的二进制文件score.dat(未参加考试的成绩标记0)。每个学生记录含准考证号、姓名、四六级英语成绩和考试时间共4个字段,学生数30人(数据从键盘输入),然后读取文件,将数据记录显示在屏幕上。 3. 编写程序,其功能是建立一个二进制随机文件bin.dat,将键盘输入的5个浮点数分别写入第1、3、5、7、9条记录中,然后再从文件中读出这5条记录,在屏幕上输出。 4.编程实现文件复制。源文件和目标文件名分别从键盘输入,若打开不成功则退出。 5.把字符串\存于磁盘C的二级子目录\下的名为\的文件中,并用DOS的显示文件内容的命令查看文件\中的内#是否正确。
正在阅读:
C语言课后习题12-30
神华集团近几年报表分析 - 图文04-15
最新大班优质美术教案《绘画美丽的生态园》05-30
EIAW10说明书 - 图文09-13
2017高考新课标历史二轮专题复习板块综合提升三 中外现代文明含解析 - 图文11-18
防溺水致家长一封信5篇02-09
多才多艺好少年事迹材料最新8篇03-22
(2018年)成都西川中学小升初招生真卷精编(一)11-12
金属材料成分与代号05-03
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 课后
- 习题
- 语言
- (四川)四川省德阳市2015届高三理综(物理部分)三诊试题新人教版
- 非谓语动词专项练习180道(附解答)
- 区教育局接受区人大常委会评议的工作报告
- 管理沟通结课作业
- 2013高考物理鲁科版一轮复习单元测试-能的转化与守恒
- 中央电大机械设计制造及其自动化专业(专升本)毕业设计(论文)大纲
- 公告书之湖南公务员考试公告
- 2019最新版医务科个人年度工作总结1
- 基础会计 期末考试试卷B卷(包括答案)
- 全国各地高考作文题汇总 - 图文
- 螺阳镇卫生院管理制度汇编(2012.8.11)
- 高中数学竞赛专题讲座解析几何
- 安全生产责任制(HSE)考核办法
- 研讨会交流材料
- 必修五第五单元单词
- 大学拔河比赛策划书
- 《数据结构》期末考试复习题 第7章 图
- 骨科出科试题2(带答案)精编版
- 揭阳市云路中学2013届高三数学(文科)第二轮测试试题
- 土钉墙支护计算计算书