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 void main ( ) {

int i,a[3][3]={1,2,3,4,5,6,7,8,9}; for (i=0;i<3;i++)

printf(\}

2. 阅读程序,说明其功能及输出的结果。

#include void main() { int k;

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 # define MAX 10 int a[MAX], i ; sub1 ( )

{ 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 ,int ); main(){ int a=36,b=4,c; c=fun(b,a); printf(\

}

int fun(int u,int v){ }

程序运行结果: 5.#include #define G 3

#define MG(m) (m)*G

#define PR(x) printf(\main(){ int a=1,b=2; PR(MG(a+b)); }

程序运行结果:9000 6.#include

#include main(){

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 struct complex {

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 struct student {

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 union newun { struct

{ 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 struct STUDENT {

char num[8]; float score[3]; };

void main()

gets(fname);

if ((fp= ① )==NULL)

{ printf(\ printf(\ while ((ch=getchar()!='#') fputc( ② ,fp); fclose(fp); }

8. 以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件中,形成文本文件,最后将字符的个数写到文件的尾部。请填空。 #include void main() {FILE *fp;

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 #include void main() { FILE *fp; int count=0; char ch;

if((fp=fopen(\{

printf(\ exit(0); }

while((ch=fgetc(fp))!=EOF)

count++;

printf(\fclose(fp); }

2.下列程序的运行结果为_____________ #include #include void main() { FILE *fp;

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 #include void main() { FILE *fp; char ch[80];

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的显示文件内容的命令查看文件\中的内#是否正确。

本文来源:https://www.bwwdw.com/article/sm4x.html

Top