C语言第八章习题

合集下载

C语言第8章习题及答案

C语言第8章习题及答案

第八章用一个数组存放图书信息,每本书是一个结构,包括下列几项信息:书名、作者、出版年月、借出否,试写出描述这些信息的说明,并编写一个程序,读入若干本书的信息,然后打印出以上信息。

#include <>typedef struct{char Name[20];char Author[20];int Date_Year;int Date_Month;int loaned;?} BOOK;#define N 10void main(){BOOK books[N];int i;for (i=0;i<N;i++)】{printf("Input Book's Name:");gets(books[i].Name);printf("Input Book's Author:");gets(books[i].Author);printf("Input Book's Year of Publishing:");scanf("%d",&books[i].Date_Year);printf("Input Book's Month of Publishing:");scanf("%d",&books[i].Date_Month);printf("Input Book's Status, 1-Loaned, 2-Keepin:");"scanf("%d",&books[i].loaned);}for (i=0;i<N;i++){printf("Book: %s, Author: %s, Publishing:%d-%d, Status:%d\n", books[i].Name, books[i].Author, books[i].Date_Year, books[i].Date_Month, books[i].loaned);}}|编写一个函数,统计并打印所输入的正文中的各个英文单词出现的次数,并按次数的递减顺序输出。

c语言第8章 编译预处理及位运算习题答案

c语言第8章 编译预处理及位运算习题答案

编译预处理习题一.单项选择题1.在宏定义#define A 3.897678中,宏名A代替一个()。

A)单精度数 B)双精度数 C)常量 D)字符串2.以下叙述中正确的是A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间3.C语言的编译系统对宏命令的处理()。

A)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行的D)在对源程序中其它语句正式编译之前进行的4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式是()。

A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅在源程序所在目录搜索D)仅仅搜索当前目录5.以下说法中正确的是A)#define和printf都是C语句 B)#define是C语句,而printf不是C)printf是C语句,但#define不是D)#define和printf都不是C语句6.#define A 3.897678#include <stdio.h>main( ){ printf(“A=%f ”,A);}程序运行结果为()。

A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b#define LJ(a,b) (a)*(b)在后面的程序中有宏引用:x=LI(3+2,5+8);y=LJ(3+2,5+8);则x、y的值是()。

A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=218.有以下程序# define f(x) (x*x)main(){ int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;printf("%d, %d\n",i1,i2);}程序运行后的输出结果是A)64, 28 B)4, 4 C)4, 3D)64, 649.以下程序的输出结果是#define M(x,y,z) x*y+zmain(){ int a=1,b=2, c=3;printf(“%d\n”, M(a+b,b+c, c+a));}A) 19 B) 17 C) 15 D) 1210.有以下程序#define N 5#define M1 N*3#define M2 N*2main(){ int i;i=M1+M2; printf(“%d\n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011.有如下程序#define N 2#define M N+1#define NUM 2*M+1#main(){ int i;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A) 5 B) 6C) 7 D) 812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。

c语言第8章-编译预处理及位运算习题答案doc资料

c语言第8章-编译预处理及位运算习题答案doc资料

c语言第8章-编译预处理及位运算习题答案编译预处理习题一.单项选择题1.在宏定义#define A 3.897678中,宏名A代替一个()。

A)单精度数 B)双精度数 C)常量 D)字符串2.以下叙述中正确的是A)预处理命令行必须位于源文件的开头 B)在源文件的一行上可以有多条预处理命令C)宏名必须用大写字母表示D)宏替换不占用程序的运行时间3.C语言的编译系统对宏命令的处理()。

A)在程序运行时进行的B)在程序连接时进行的C)和C程序中的其它语句同时进行的D)在对源程序中其它语句正式编译之前进行的4.在文件包含预处理语句的中,被包含文件名用“< >”括起时,寻找被包含文件的方式是()。

A)直接按系统设定的标准方式搜索目录B)先在源程序所在目录搜索,再按系统设定的标准方式搜索C)仅仅在源程序所在目录搜索D)仅仅搜索当前目录5.以下说法中正确的是A)#define和printf都是C语句 B)#define是C语句,而printf不是C)printf是C语句,但#define不是D)#define和printf都不是C 语句6.#define A 3.897678#include <stdio.h>main( ){ printf(“A=%f ”,A);}程序运行结果为()。

A) 3.897678=3.897678 B) 3.897678=A C) A=3.897678 D)无结果7.有宏定义:#define LI(a,b) a*b#define LJ(a,b) (a)*(b)在后面的程序中有宏引用:x=LI(3+2,5+8);y=LJ(3+2,5+8);则x、y的值是()。

A) x=65,y=65 B) x=21,y=65 C) x=65,y=21 D)x=21,y=218.有以下程序# define f(x) (x*x)main(){ int i1, i2;i1=f(8)/f(4) ; i2=f(4+4)/f(2+2) ;printf("%d, %d\n",i1,i2);}程序运行后的输出结果是A)64, 28 B)4, 4 C)4, 3D)64, 649.以下程序的输出结果是#define M(x,y,z) x*y+zmain(){ int a=1,b=2, c=3;printf(“%d\n”, M(a+b,b+c, c+a));}A) 19 B) 17 C) 15 D) 1210.有以下程序#define N 5#define M1 N*3#define M2 N*2main(){ int i;i=M1+M2; printf(“%d\n”,i);}程序编译后运行的输出结果是:A) 10 B) 20 C) 25 D) 3011.有如下程序#define N 2#define M N+1#define NUM 2*M+1#main(){ int i;for(i=1;i<=NUM;i++)printf(“%d\n”,i);}该程序中的for循环执行的次数是A) 5 B) 6C) 7 D) 812.位运算是对运算对象按二进制位进行操作的运算,运算的对象是____数据,以___的形式参与运算。

C语言程序设计-第8章 练习题

C语言程序设计-第8章  练习题

一、单项选择题题目1标准输出设备显示器的文件流标识符是()。

a. stdinb. stdoutc. stderrd. stdio题目2表示文件结束符的符号常量EOF的值为()。

a. 0b. -1c. 1d. 127题目3假定一个磁盘数据文件占用n个字节的存储空间,则按字节进行编址的范围是()。

a. 1˜(n-1)b. 0˜(n-1)c. 0˜nd. 1˜n题目4在C语言中,为只写操作打开一个文本文件的方式为()。

b. "w"c. "r"d. "a"题目5在C语言中,文本文件的打开方式共有()。

a. 6b. 9c. 12d. 3题目6在C语言中,为读和写操作打开一个二进制文件,若文件不存在则自动建立空文件的打开方式为()。

a. "ab+"b. "w+"c. "rb+"d. "wb+"题目7从一个文本文件中读取以换行符结束的一个字符串的系统函数为()。

a. fgets()b. fputc()d. fputs()题目8向一个文本文件中写入一个字符的系统函数为()。

a. fputs()b. fputc()c. fgetc()d. fgets()题目9向一个二进制文件中写入数据的系统函数为()。

a. fputc()b. fwrite()c. fread()d. fputs()题目10从一个二进制文件中读取数据的系统函数为fread(),它的参数有()。

a. 2个b. 4个c. 3个d. 5个二、判断题题目11一个磁盘数据文件的文件名由文件主名和扩展名所组成,其中间用圆点分开。

对错题目12当向字符文件输出一个换行符时,实际将输出的是回车符或换行符。

对错题目13C语言系统中提供一个用来描述文件属性的类型标识符为FILE。

对错题目14在数据文件打开方式字符串中,字符r、w和a具有确定的含义,分别代表读、写和追加方式。

第八章 C语言习题及答案(第八章)

第八章 C语言习题及答案(第八章)

8-1 编写程序,将10个数34,3,29,63,70,16,85,82,90,93存放于一组数组中,求出这十个数的和及平均值。

解:#include "stdio.h"void main(){int a[10]={34,3,29,63,70,16,85.82,90,93};int i ,sum=0;float average ;for(i=0;i<10;i++){sum=sum+a[i] ;}average=sum/10.0;printf("sum=%d,average=%f\n",sum,average);}运行结果:sum=565,average=56.5000思考:数组有何特点?此问题如果不用数组进行处理将会怎样?8-2 编写程序,求存放于上题数组中10个数的最大值,最小值及所在的位置。

解:#include "stdio.h"void main(){int a[10]={34,3,29,63,70,16,85,82,90,93};int i,sum,max,min,d_max,d_min;max=min=a[0];d_max=d_min=0;for(i=1;i<10;i++){if(a[i]>max) {max=a[i];d_max=i;}if(a[i]<min) {min=a[i];d_min=i;}}printf("max=%d,a[%d]\n",max,d_max);printf("min=%d,a[%d]\n",min,d_min);}运行结果:max=93,a[9]Min=3,a[1]思考:数组a[i]中i的变化意味着什么?8-3 编写程序,从键盘读入50个数存放于一数组中,求出该数组中最大值、最小值及所在位置。

解:#include "stdio.h"void main(){float a[50],max,min;int i,d_max,d_min;for(i=0;i<50;i++)scanf("%f",&a[i]);max=min=a[0];d_max=d_min=0;for(i=1;i<50;i++){if(a[i]>max) {max=a[i];d_max=i;}if(a[i]<min) {min=a[i];d_min=i;}}printf("max=%d,a[%d]\n",max,d_max);printf("min=%d,a[%d]\n",min,d_min);}思考:此题中不用数组也可以处理吗?如果可以,区别之处在哪里?8-4将存放于上题数组中的50个数分别按升序,降序排序。

C语言第八章习题带答案-2012.11.6更新[优秀范文五篇]

C语言第八章习题带答案-2012.11.6更新[优秀范文五篇]

C语言第八章习题带答案-2012.11.6更新[优秀范文五篇]第一篇:C语言第八章习题带答案-2012.11.6更新练习8答案选择题1.在程序中要使用语句:printf(“%sn”, STRING);输出一个长度为5个字符的提示信息“OK!”,则应使用宏定义语句(D)。

A.#define STRING “OK!”B.#define STRING “"OK!”“C.#define STRING ”OK!“D.#define STRING ”“OK!”“2.以下正确的描述为(C)。

A.每个C语言程序必须在开头用预处理命令#includeB.预处理命令必须位于C源程序的首部C.在C语言中预处理命令都以”#“开头D.C语言的预处理命令只能实现宏定义和条件编译的功能3.C语言的编译系统中宏命令是(D)。

A.在程序运行时进行代换处理的B.在程序连接时进行处理的C.和源程序中其他C语句同时进行编译的D.在对源程序中其他成分正式编译之前进行处理的4.从下列选项中选择不会引起二义性的宏定义是(D)。

A.#define POWER(x)x*xB.#define POWER(x)(x)*(x)C.#define POWER(x)(x*x)D.#define POWER(x)((x)*(x))5.若有宏定义如下:#define X 5#define Y X+1#define Z Y*X/2则执行以下printf语句后,输出结果是(D)。

int a;a=Y;printf(”%d,“, Z);printf(”%dn“,--a);A.7,6B.12,6C.12,5D.7,56.若a、b、c、d、t均为int型变量,则执行以下程序段后结果为(C)。

#define MAX(A, B)(A)>(B)?(A):(B)#define PRINT(Y)printf(”Y=%dn", Y)……a=1;b=2;c=3;d=4;t=MAX(a+b, c+d);PRINT(t);A.Y=3B.存在语法错误 C.Y=7D.Y=0第二篇:第二章习题带答案一、单项选择题1、下列关于国内信用证的说法中,错误的是()。

C语言课后习题答案第八章

C语言课后习题答案第八章

作业八:函数程序设计答案〔一〕选择题〔30分〕1.以下正确的函数定义形式是A__。

A)double fun(int x,int y)B)double fun(int x;int y)C)double fun(int x,int y);D)double fun(int x,y);2.以下正确的函数形式是D__。

A)double fun(int x,int y){ z=x+y; return z; }B)fun(int x,y){ int z; return z; }C)fun(x,y){ int x,y; double z; z=x+y; return z; }D)double fun(int x,int y){ double z; z=x+y; return z; }〔重要〕3.以下正确的说法是A__。

在C语言中A〕实参和及其对应的形参各占用独立的存储单元B〕实参和及其对应的形参共占用一个存储单元C〕只有当实参和及其对应的形参同名时才共占用存储单元D〕形参是虚拟的,不占用存储单元4.假设调用一个函数,且此函数中没有return语句,那么正确的说法是D__。

该函数A〕没有返回值B〕返回假设干个系统默认值C〕能返回一个用户所希望的函数值D〕返回一个不确定的值〔重要〕5.以下不正确的说法是B__。

C语言规定A〕实参可以是常量、变量或表达式B〕形参可以是常量、变量或表达式C〕实参可以为任意类型D〕形参应及其对应的实参类型一致6.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是B__。

A)地址传递B)单向值传递C)由实参传给形参,再由形参传回给实参D)由用户指定传递方式7.以下程序有语法性错误,有关错误原因的正确说法是C__。

main()int G=5,k;void Prt_char();k=Prt_char(G);A)语句void prt_char();有错,它是函数调用语句,不能用void说明B)变量名不能使用大写字母C)函数说明和函数调用语句之间有矛盾D)函数名不能使用下划线8.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是B__。

C语言程序设计 – 第 08 章课后习题

C语言程序设计 – 第 08 章课后习题

C语言程序设计– 第八章课后习题一、选择题1. 以下程序中for循环执行的次数是(C)# include <stdio.h># define N 2# define M N+1# define NUM (M+1)*M/2main(){int i;for (i = 1; i <= NUM; i++)printf("%d", i);}A. 5B. 6C. 8D. 9(解释:#define 定义的宏名在预处理时将进行简单的替换,因此NUM = (M+1) * M / 2 = (N+1+1) * N + 1 / 2 = (2+1+1) * 2 + 1 / 2,转成整型就是8。

特别注意:它不会自动添加括号!)2. 以下程序的输出结果是(A)# include <stdio.h># define MIN(x, y) (x) < (y) ? (x) : (y)main(){int i, j, k;i = 10; j = 15; k = 10 * MIN(i, j);printf("%d\n", k);}A. 15B. 100C. 10D. 150(解释:#define 定义的宏名在预处理时将进行简单的替换,因此k = 10 * (10) < (15) ? (10) : (15);即k = 100 < 15? 10 : 15 = 15。

特别注意:它不会自动添加括号!)3. 以下程序的输出结果是(B)# include <stdio.h># define FUDGF(y) 2.84 + y# define PR(a) printf("%d", (int)(a));# define PRINT1(a) PR(a); putchar('\n');main(){int x = 2;PRINT1(FUDGF(5) * x);/**手动替换宏:* PRINT1(FUDGF(5) * x);* >PR(FUDGF(5) * x); putchar('\n');* >>PR(2.84 + 5 * x); putchar('\n');* >>>printf("%d", (int)(2.84 + 5 * x));; putchar('\n');*/}A. 11B. 12C. 13D. 15(解释:参见注释。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第八章习题
一、选择题
1. C语言源程序的基本单位是()。

A、过程
B、函数
C、子程序
D、标识符
2.C语言中子程序的作用是由()来完成的。

A、过程
B、函数
C、子程序
D、标识符
3.在以下对C语言的描述中,正确的是()
A、在C语言中调用函数时,只能将实参的值传递给形参,形参的值不能传递给实参
B、函数必须有返回值,否则不能使用函数
C、C语言程序中有调用关系的所有函数都必须放在同一源程序文件中
D、C语言函数既可以嵌套定义又可以递归调用
4.以下叙述中错误的是()
A、在C语言中,函数中的自动变量可以赋初值,每调用一次赋一次初值
B、在C语言中,外部变量的隐含类别是自动存储类别
C、在C语言中,函数形参的存储类型是自动(auto)类型的变量
D、在C语言中,在调用函数时,实参和对应形参在类型上只需赋值兼容
5. 在一个C程序中()。

A、main函数必须出现在所有函数之前
B、main函数可以在任何地方出现
C、main函数必须出现在所有函数之后
D、main函数必须出现在固定位置
6.数组名作为实参数传递给函数时,数组名被处理为()。

A、该数组的长度
B、该数组的元素个数
C、该数组的首地址
D、该数组中各元素的值
7. 以下有关"递归函数"的说法中正确的是( )。

A、既允许直接递归调用,也允许间接递归调用
B、只允许直接递归调用
C、只允许间接递归调用
D、既不允许直接递归调用,也不允许间接递归调用
8. 在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( )。

A、地址传递
B、单向值传递
C、由实参传给形参,再由形参返回实参
D、传递方式由用户指定
9. 在调用函数时,如果实参是数组名,它与对应形参之间的数据传递方式是( )。

A、地址传递
B、单向值传递
C、由实参传给形参,再由形参返回实参
D、传递方式由用户指定
10.在宏定义#define MAX 30中,用宏名代替一个()。

A、常量
B、字符串
C、整数
D、长整数
二、程序填空题
1.在如下程序的空白处填入适当语句:
#include <stdio.h>
void main()
{ ;
int a,b,c;
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“max is %d”,c);
}
int max(int x,int y)
{ int z ;
z=x>y ?x :y ;
return( );
}
2.在如下程序的空白处填入适当语句:#include <stdio.h>
void main()
{ ;
int a,b,c,s;
scanf(“%d,%d,%d”,&a,&b,&c);
s=sum(a,b,c);
printf(“s is %d”,s);
}
int sum(int x,int y,int z)
{ int t ;
t=x+y+z ;
return( );
}
3. 在如下程序的空白处填入适当语句:#include <stdio.h>
void main()
{ ;
int a,b,c,m;
scanf(“%d,%d,%d”,&a,&b,&c);
m=mulp(a,b,c);
printf(“m is %d”,m);
}
int mulp(int x,int y,int z)
{ int t ;
t=x*y*z ;
return( );
}
4. #include <stdio.h>
void main()
{ void printstar( ) ;
void print_message( ) ;
printstar( ) ;


}
void printstar( )
{ printf(“**********\n“);}
void print_message( )
{ printf(“hello!\n“);}
若程序的运行结果是:**********
Hello!
**********
则题中空白处应填入的语句是什么?
5. 在如下程序的空白处填入适当语句:
#include <stdio.h>
void main()
{ ;
printf(“ %d\n”,age(5)) ;}
{ int c;
if (n==1) c=10;
else c=age(n-1)+2;
return( );
}
三、看程序写结果
1. #include <stdio.h>
void main()
{ int max(int x,int y);
int a,b,c;
scanf(“%d,%d”,&a,&b);
c=max(a,b);
printf(“max is %d”,c);
}
int max(int x,int y)
{ int z ;
z=x>y ?x :y ;
return( z );
}
若输入数据为:7,8↙
则输出结果为:。

2.有以下程序
void f(int v , int w)
{ int t;
t=v;v=w;w=t;
}
main( )
{ int x=1,y=3,z=2;
if(x>y) f(x,y);
else if(y>z) f(y,z);
else f(x,z);
printf(“%d,%d,%d\n”,x,y,z);
}
执行后输出结果是。

相关文档
最新文档