C语言复习题整理

更新时间:2024-06-05 15:06:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第2部分 C语言程序设计习题与解答 题解1 绪 论 1.1 习题 一、选择题

1.一个完整的可运行的C源程序中(

B

)。

A.可以有一个或多个主函数 B.必须有且仅有一个主函数 C.可以没有主函数 D.必须有主函数和其他函数

2.构成C语言源程序的基本单位是(

D

)。

A.子程序 B.过程 C.文本 D.函数

3.某C程序由一个主函数main( )和一个自定义函数max( )组成,则该程序(

D

)。

A.总是从max( )函数开始执行 B.写在前面的函数先开始执行 C.写在后面的函数先开始执行 D.总是从main( )函数开始执行

4.C语言规定,一个C源程序的主函数名必须为(

C

)。

A.program B.include C.main D.function

5.下列说法正确的是(

C )。

A.在书写C语言源程序时,每个语句以逗号结束 B.注释时,'/'和'*'号间可以有空格

C.无论注释内容的多少,在对程序编译时都被忽略 D.C程序每行只能写一个语句

6.C语言源程序文件的后缀是(

C

),经过Compile后,生成文件的后缀是(

A

),经过Build后,生成文

件的后缀是(

B )。

A

D

C)。

A..obj B..exe C..c D..doc

7.Visual C++ 6.0 IDE的编辑窗口的主要功能是( ),输出窗口的主要功能是( ),调试器(Debug)的主要功能是(

A.建立并修改程序 B.将C源程序编译成目标程序 C.跟踪分析程序的执行 D.显示编译结果信息(如语法错误等)

8.在Visual C++ 6.0开发环境下,C程序按工程(project)进行组织,每个工程可包括(

函数。

A.1个 B.2个

D )C/CPP源文件,但只能有( A )main

C.3个 D.1个以上(含1个)

9.调试程序时,如果某个语句后少了一个分号,调试时会提示错误,这种情况一般称之为(

A

)。而某个“计算2的平方”的程序

在调试时没有提示出错,而且成功执行并计算出了结果,只是结果等于5,这种情况一般称之为(

A.语法错误 B.正常情况

D )。

C.编译器出错 D.逻辑设计错误 二、简答题

1.如何使用注释语句?使用注释有何好处?

符号名包括模块名、常量名、标号名、子程序名等。

这些名字应该能反映它所代表的实际东西,具有一定的意义,使其能够见名知义,有助于对程序功能的理解

3.简述C程序上机调试的一般步骤?编辑,编译,连接,运行

2.C程序对书写格式有何要求?规定书写格式有何好处?4.简述C程序从.c源文件到.exe可执行文件的生成过程?

第一步是预处理,包括语法检查等工作。 gcc -P abc.c

第二步由源程序生产汇编语言代码。 gcc -S abc.c

会生成abc.s文件,这个文件里就是汇编代码。

第三步编译器生成目标代码,一个源文件生成一个目标代码。 gcc -c abc.c 会生成abc.o

第四步连接器从目标代码生成可执行文件。 gcc abc.o

题解2 基本数据类型与运算符

2.1 习题 一、选择题

1.C语言中最基本的非空数据类型包括( D )。

A.整型、浮点型、无值型 B.整型、字符型、无值型 C.整型、浮点型、字符型 D.整型、浮点型、双精度型、字符型 2.C语言中运算对象必须是整型的运算符是( A )。

A.% B./ C.= D.〈= 3.若已定义x和y为int类型,则执行了语句x=1;y=x+3/2;后y的值是( B )。

A.1 B.2 C.2.0 D.2.5 4.若有以下程序段:

int a=1,b=2,c; c=1.0/b*a;

则执行后,c中的值是( A )。

A.0 B.0.5 C.1 D.2 5.能正确表示逻辑关系:\≥10或a≤0\的C语言表达式是( D )。

A.a>=10 or a<=0 B.a>=0|a<=10 C.a>=10 && a<=0 D.a>=10‖a<=0 6.下列字符序列中,不可用作C语言标识符的是( B )。

A.xds426 B.No.1 C._ok D.zwd 7.在printf( )函数中,反斜杠字符'\\'表示为( D )。

A.\\' B.\\0 C.\\n D.\\\\ 8.设先有定义:

int a=10;

则表达式a+=a *=a的值为( D )。

A.10 B.100 C.1000 D.200 9.设先有定义: int a=10;

则表达式(++a)+(a --)的值为( C )。

A.20 B.21 C.22 D.19 10.有如下程序: #include main( ) {

int y=3,x=3,z=1;

printf(\ %d\\n\}

运行该程序的输出结果是( D )。

A.3 4 B.4 2 C.4 3 11.假定x、y、z、m均为int型变量,有如下程序段:

x=2; y=3; z=1; m=(y

则该程序运行后,m的值是( C )。

A.4 B.3 C.2 12.以下选项中合法的字符常量是( B )。

A.\ B.'\\010' C.68 13.设x=3,y=4,z=5,则表达式((x+y)>z)&&(y==z)&&x||y+z&&y+z的值为( B )

A.0 B.1 C.2 ((x+y)>z)&&(y==z)&&x||(y+z)&&(y+z)=1&&0&&3||9&&9=0||1=1

14.如果a=1,b=2,c=3,d=4,则条件表达式a

A.1 B.2 C.3 15.设int m=1,n=2; 则m++==n的结果是( A )。

A.0 B.1 C.2 二、填空题

1.表达式10/3的结果是 3 ;10%3的结果是 1 。 2.执行语句:int a=12;a+=a-=a*a;后的值是 -264 。 3.以下语句的输出结果是 -1 。

short b=65535; printf(\

4.以下程序的执行结果是 X=3,a=2,b=2 。

D.3 3

D.1

D.D

D.3

D.4

D.3

#include main( ) {

int a,b,x; x=(a=3,b=a--);

printf(\}

5.以下程序的执行结果是 0 。

#include main( ) {

float f1,f2,f3,f4; int m1,m2; f1=f2=f3=f4=2; m1=m2=1;

printf(\}

6.以下程序的执行结果是 n=1 。

#include main( ) {

float f=13.8; int n; n=(int)f%3;

printf(\}

三、简答题

2.简述转义字符的用途并举实例加以说明。

题解3 控制结构

3.1 习题 一、选择题

1.结构化程序模块不具有的特征是( B )。

A.只有一个入口和一个出口 B.要尽量多使用goto语句

C.一般有顺序、选择和循环3种基本结构 D.程序中不能有死循环

2.C语言中,逻辑“真”等价于( C )。

A.整数1 B.整数0 C.非0数 3.以下4条语句中,有语法错误的是( D )。

A.if (a>b) m=a; B.if D.TRUE m=b;

(a=0) m=a; D.if ((a=b;)>=0) m=a; 4.若i,j均为整型变量,则以下循环*( C )。

for (i=0,j=2; j=1; i++,j--)

printf(\

A.循环体只执行一次 B.循环体执行二次 C.是无限循环 D.循环条件不合法 5.以下程序段,执行结果为( A )。 a=1; do {a=a*a; } while(!a);

A.循环体只执行一次 C.是无限循环 6.C语言中while与do-while语句的主要区别是( A A.do-while的循环体至少无条件执行一次 B.do-while允许从外部跳到循环体内 C.while的循环体至少无条件执行一次 D.while的循环控制条件比do-while的严格 7.语句while (!a);中条件等价于( D )。

A.a!=0 B.~a 8.以下程序的运行结果为( D )。

#include main( ) {

int i=1,sum=0; while(i<=100) sum+=i; i++;

printf(\}

A.5050 B.1 9.以下程序的运行结果为( A )。

#include main( ) {

int sum,pad; sum=pad=5;

B.循环体执行二次 D.循环条件不合法 )。

C.a==1 C.0 D.a==0 D.程序陷入死循环

pad=sum++; pad++; ++pad;

printf(\}

A.7 B.6 C.5 D.4 10.以下程序的运行结果为( D )。

#include main( ) {

int a=2,b=10;

printf(\}

A.a=%2,b= B.a=2,b=10 C.a=%%d,b=%%d D.a=%d,b=%d

11.为了避免嵌套的if-else语句的二义性,C语言规定else总是( C )。

A.与缩排位置相同的if组成配对关系 B.与在其之前未配对的if组成配对关系 C.与在其之前未配对的最近的if组成配对关系 D.与同一行上的if组成配对关系

12.对于for (表达式1; ;表达式3)可理解为( B )。

A.for (表达式1; 0 ;表达式3) B.for (表达式1; 1 ;表达式3) C.for (表达式1;表达式1;表达式3) D.for (表达式1;表达式3;表达式3)

二、程序填空

1.下面程序的功能是计算n!。

#include main ( ) {

int i, n; long p;

printf ( \ scanf (\ p= 1 ; for (i=2; i<=n; i++)

p*=i或p=p*i ; printf(\}

2.下面程序的功能是:从键盘上输入若干学生的成绩,统计并输出最高和最低成绩,当输入负数时结束输入。

#include main ( ) {

float score, max, min;

printf ( \ scanf (\ max=min=score;

while ( score>=0 ) {

if (score>max) max=score;

if ( score

printf(\}

3.下面程序的功能是:计算y=

#include #include main ( ) {

float x , y=0, fz=-1, fm=-1, temp=1; printf ( \ scanf (\

while ( abs(temp)>0.00001 ) {

fz= 【6】-fz*x ; fm=fm+2; temp=fz/fm; y+=temp; }

printf(\}

的值。要求从键盘上输入x的值,精度控制在0.00001内。

4.下面的程序完成两个数的四则运算。用户输入一个实现两个数的四则运算的表达式,程序采用switch语句对其运算进行判定后执行相应

的运算并给出结果。

#include main( ) {

float x,y; char op;

printf(\ scanf(\ 【7】switch (op) {

case '+':

printf(\ 【8】x,op,y,x+y ); 【9】break ; case '-':

printf(\ break; case '*':

printf(\ break; case '/':

if ( 【10】(y>=-1e-6)&&(y<=1e-6) ) printf(\ else

printf(\ break;

default:printf(\ } }

题解4 函 数

4.1 习题 一、选择题

1.C语言中函数形参的缺省存储类型是( B )。

A.静态(static) B.自动(auto) C.寄存器(register) D.外部(extern) 2.函数调用语句function((exp1,exp2), 18)中含有的实参个数为( C )。

A.0 B.1 C.2 3.下面函数返回值的类型是( D )。 square(float x) {

return x*x; }

A.与参数x的类型相同 B.是void型 C.无法确定 D.是int型 4.C语言规定,程序中各函数之间( D )。

A.不允许直接递归调用,也不允许间接递归调用 B.允许直接递归调用,但不允许间接递归调用

D.3 C.不允许直接递归调用,但允许间接递归调用 D.既允许直接递归调用,也允许间接递归调用 5.一个函数返回值的类型取决于( C )。

A.return语句中表达式的类型 B.调用函数时临时指定 C.定义函数时指定或缺省的函数类型 D.调用该函数的主调函数的类型 6.下面叙述中,错误的是( C )。

A.函数的定义不能嵌套,但函数调用可以嵌套 B.为了提高可读性,编写程序时应该适当使用注释

C.变量定义时若省去了存储类型,系统将默认其为静态型变量 D.函数中定义的局部变量的作用域在函数内部

7.在一个源程序文件中定义的全局变量的有效范围为( C )。

A.一个C程序的所有源程序文件 B.该源程序文件的全部范围 C.从定义处开始到该源程序文件结束 D.函数内全部范围

8.某函数在定义时未指明函数返回值类型,且函数中没有return语句,现若调用该函数,则正确的说法是( D )。

A.没有返回值 B.返回一个用户所希望的值 C.返回一个系统默认值 D.返回一个不确定的值

9.函数swap(int x, int y)可实现对x和y值的交换。在执行如下定义及调用语句后,a和b的值分别为( B )。

int a=10, b=20; swap (a,b );

A.10和10 B.10和20 C.20和10 D.20和20 10.下面错误的叙述是( D )。

A.在某源程序不同函数中可以使用相同名字的变量 B.函数中的形式参数是局部变量

C.在函数内定义的变量只在本函数范围内有效

D.在函数内的复合语句中定义的变量在本函数范围内有效

二、程序填空

1.求s=1!+2!+3!+…+10!之和。 程序如下:

#include long int factorial(int n) {

int k=1; long int p=1; for(k=1; k<=n; k++)

【1】p=p*k; ; return p; } main( ) {

int n; float sum=0;

for(n=1;n<=10;n++)

【2】sum=sum+factorial(n); ; printf(\}

2.以下函数用以求x的y次方。

double fun (double x, int y) {

int i; double m=1;

for ( i=1; i 【3】<=y或

三、阅读程序并写出运行结果

1.下面程序运行的结果是_____2,4,,6,8________: #include #define MAX_COUNT 4 void fun( ); main( ) {

int n;

for(n=1; n<=MAX_COUNT; n++) fun( ); }

void fun( ) {

static int k; k=k+2;

printf (\}

4.下面程序运行的结果是___8,17______:

#include int fun(int x, int y) {

static int m=0, n=2; n+=m+1; m=n+x+y; return m; }

main( ) {

int j=4, m=1, k; k=fun(j, m); printf (\ k=fun(j,m); printf(\}

题解5 数 组

5.1 习题 一、选择题

1.在下列数组定义、初始化或赋值语句中,正确的是( C )。

A.int a[8]; a[8]=100; B.int x[5]={1,2,3,4,5,6}; C.int x[ ]={1,2,3,4,5,6}; D.int n=8; int score[n]; 2.若已有定义:int i, a[100]; 则下列语句中不正确的是( C )。

A.for ( i=0; i<100; i++ ) a[i]=i;

B.for ( i=0; i<100; i++ ) scanf ( \C.scanf (\

D.for ( i=0; i<100; i++ ) scanf ( \3.与定义char c[ ]={\不等价的是( C )。

A.char c[ ]={ 'G', 'O', 'O', 'D', '\\0'}; B.char c[ ]=\

C.char c[4]={\ D.char c[5]={ 'G', 'O', 'O', 'D', '\\0'}; 4.若已有定义:char c[8]={\则下列语句中不正确的是( D )。

A.puts (c); B.for ( i =0; c[i]!= '\\0'; i ++ ) printf (\c[i]); C.printf (\ D.for ( i =0; c[i]!= '\\0'; i ++ ) putchar ( c ); 5.若定义a[ ][3]={0,1,2,3,4,5,6,7}; ,则a数组中行的大小是( B )。

A.2 B.3 C.4 D.无确定值 6.以下程序的运行结果是( B )。

#include void f ( int b[ ] ) {

int i=0;

while(b[i]<=10) { b[i]+=2; i++; } } main( ) {

int i, a[ ]={ 1, 5,10, 9,13, 7}; f (a+1);

for(i=0; i<6; i++) printf(\}

A.2 7 12 11 13 9 B.1 7 12 11 13 7 C.1 7 12 11 13 9 D.1 7 12 9 13 7 7.若执行以下程序段,其运行结果是( D )。

char c[ ]={'a', 'b', '\\0', 'c', '\\0'}; printf ( \

A.ab c B.'a''b' C.abc D.ab 8.数组名作为参数传递给函数,作为实际参数的数组名被处理为( D )。

A.该数组长度 B.该数组元素个数

C.该函数中各元素的值 D.该数组的首地址 9.执行下面的程序段后,变量k中的值为( D )。

int k=3, s[2]={1}; s[0]=k; k=s[1]*10;

A.不定值 B.33 C.30 10.在定义 int a[5][4];

之后;对a的引用正确的是( C )。

A.a[2][4] B.a[5][0] C.a[0][0] D.a[0,0]

11.当接受用户输入的含空格的字符串时,应使用函数( B )。

A.scanf( ) B.gets( ) C.getchar( ) D.getc( )

二、程序填空

1.以下程序用来检查二维数组是否对称(即对所有i,j都有a[i][j]=a[j][i])。

#include main ( ) {

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

for (i=0; i<4; i++ )

if ( 【1】【1】a[i][j]!=a[j][i] ) {

found= 【2】1 ; break; }

if (found) break; }

if (found) printf (\不对称\\n\ else printf(\对称\\n\

D.0 }

2.以下程序是用来输入5个整数,并存放在数组中,找出最大数与最小数所在的下标位置,并把两者对调,然后输出调整后的5个数。

#include main ( ) {

int a[5], t, i, maxi, mini; for ( i=0; i<5; i++ )

scanf ( \ mini=maxi= 【3】0; for ( i=1; i<5; i++ ) {

if( 【4】a[mini]>a[i] ) mini=i;

if ( a[i]>a[maxi] ) 【5】 maxi=i ; }

printf ( \最小数的位置是:=\\n\ printf ( \最大数的位置是:=\\n\ t=a[maxi];

【6】a[maxi]=a[mini] ; a[mini]=t;

printf ( \调整后的数为: \ for ( i=0; i<5; i++ )

printf ( \ printf (\}

3.给定一3 x 4的矩阵,求出其中的最大元素值,及其所在的行列号: main( ) {

int i,j,row=0,colum=0,max;

static int a[3][4]={{1,2,3,4},{9,8,7,6},{10,-10,-4,4}}; 【7】max=a[0][0] ; for(i=0;i<=2;i++)

for(j=0;j<=3;j++) {

【8】if (a[i][j]>max) ; 【9】{max=a[i][j]; row=i;colum=j;} ; }

printf(\}

4.下述函数用于确定给定字符串的长度,请完成程序。

strlen ( char s[ ] ) {

int i=0;

while ( 【10】s[i]!= '\\0' return ( 【11】i ); }

5.以下程序的功能是从键盘上输入若干个字符(以回车键作为结束)组成一个字符数组,然后输出该字符数组中的字符串,请填空。

#include main ( ) {

char str[81]; int i;

for ( i=0; i<80; i++ ) {

str[i]=getchar( );

if (str[i]== '\\n') break; }

str[i]= '\\0';

【12】i=0 ;

while ( str[i]!= '\\0' ) putchar( 【13】str[i++] ); }

三、阅读程序并写出运行结果 1.写出下列程序的运行结果并分析。

#include main( ) {

static int a[4][5]={{1,2,3,4,0},{2,2,0,0,0},{3,4,5,0,0},{6,0,0,0,0}}; int j,k;

for (j=0;j<4;j++) {

for(k=0;k<5;k++) {

if (a[j][k]==0) break; printf(\ } }

printf(\}

2.写出下列程序的运行结果并分析。

#include main ( ) {

int a[6][6],i,j; for (i=1 ;i<6 ; i++) for ( j=1;j<6;j++) a[i][j]= i*j; for (i=1 ;i<6 ; i++) {

for ( j=1;j<6;j++)

printf( \ printf(\ } }

3.写出下列程序的运行结果并分析。

#include main ( ) {

int a[ ]={1,2,3,4},i,j,s=0; j=1;

for ( i=3;i<=0;i-- ) {

s=s+a[i]*j; j=j*10; }

printf(\}

4.写出下列程序的运行结果并分析。

#include main( ) {

int a[]={0,2,5,8,12,15,23,35,60,65}; int x=15,i,n=10,m; i=n/2+1; m=n/2; while(m!=0) {

if(x

{

i=i-m/2-1; m=m/2; } else

if(x>a[i]) {

i=i+m/2+1; m=m/2; } else

break; }

printf(\}

5.写出下列程序的运行结果并分析。

#include main( ) {

int a[]={1,2,3,4},i,j,s=0; j=1;

for(i=3;i>=0;i--) {

s=s+a[i]*j; j=j*10; }

printf(\}

6.写出下列程序的运行结果并分析。

#include main( ) {

char str[]={\ int i;

for(i=0;str[i]!='\\0';i++)

if(str[i]>='0'&&str[i]<='9') printf(\ printf(\}

四、编程题

1.编一程序,用简单选择排序方法对10个整数排序(从大到小)。排序思路为:首先从n个整数中选出值最大的整数,将它交换到第一

个元素位置,再从剩余的n-1个整数中选出值次大的整数,将它交换到第二个元素位置,重复上述操作n次后,排序结束。

2.编写一程序,实现两个字符串的连接(不用strcat( )函数)。 5.2 习题解答

三、阅读程序并写出运行结果

1.答案是:1 2 3 4 2 2 3 4 5 6 2.答案是:

1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 3.答案是:s=0 4.答案是:place=6 5.答案是:s=1234 6.答案是:123 四、编程题

1.编一程序,用简单选择排序方法对10个整数排序(从大到小)。排序思路为:首先从n个整数中选出值最大的整数,将它交换到第一个

元素位置,再从剩余的n-1个整数中选出值次大的整数,将它交换到第二个元素位置,重复上述操作n次后,排序结束。

/*xt5_1.c*/ #include #define N 10

void smp_selesort(int r[ ],int n)/*简单选择排序*/ { int i,j,k; int temp; for(i=0;i

for(j=i+1;j

temp =r[i]; r[i]=r[j]; r[j]= temp; } } } main( ) {

int i,a[N];

printf(\请输入%d个整数:\\n\ for(i=0;i

scanf(\

smp_selesort(a,N); /*调用排序函数*/ printf(\排序后的输出为:\\n\ for(i=0;i

printf(\}

2.编写一程序,实现两个字符串的连接(不用strcat( )函数)。

/*xt5_2.c*/ #include main( ) {

char str1[50],str2[50]; int i=0,j=0;

printf(\请输入字符串1:\ scanf(\

printf(\请输入字符串2:\ scanf(\

while(str1[i]!='\\0') i++;

while((str1[i++]=str2[j++])!='\\0'); printf(\连接后的字符串为:%s\} }

题解6 指 针

6.1 习题 一、选择题

1.若已定义int a=8, *p=&a; ,则下列说法中不正确的是( D )。

A.*p=a=8 B.p=&a C.*&a=*p D.*&a=&*a

2.若已定义short a[2]={8,10},*p=&a[0];,假设a[0]的地址为2000,则执行p++后,指针p的值为( C )。

A.2000 B.2001 C.2002 D.2003 3.若已定义int a[8]={0,2,3,4,5,6,7,8 };*p=a;,则数组第2个元素“2”不可表示为( C )。

A.a[1] B.p[1] C.*p+1 D.*(p+1) 4.若已定义int a,*p=&a,**q=&p;,则不能表示变量a的是( C )。

A.*&a B.*p C.*q D.**q 5.设已定义语句\ *p[10], (*q)[10];\,其中的p和q分别是( D )。

① 10个指向整型变量的指针 ② 指向具有10个整型变量的函数指针 ③ 一个指向具有10个元素的一维数组的指针 ④ 具有10个指针元素的一维数组

A.②、① B.①、② C.③、④ D.④、③

6.若已定义int a[2][4]={ { 80, 81, 82, 83 }, { 84, 85, 86, 87 } }, (*p)[4]=a;则执行p++;后,**p代表的元素是(A.80 B.81 C.84 D.85 7.执行语句\;*p=a;后,(p+4)的值是( B )。

C )。

A.\ B.'\\0' C.'d' D.不能确定 8.设已定义int a[3][2]={10,20,30,40,50,60};和语句(*p)[2]=a;,则*(*(p+2)+1)的值为( A )。

A.60 B.30 C.50 D.不能确定 9.以下程序的运行结果是( C )。

#include main( ) {

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

printf(\}

A.4, 4, 9, 8 B.程序出错 C.4, 2,12,11 10.以下各语句或语句组中,正确的操作是( C )。

A.char s[4]=\ B.char *s; gets(s);

C.char *s; s=\ D.char s[5]; scanf(\

11.以下程序的运行结果是( A )。

#include main ( ) {

char *s=\ int a, b, c, d; a=b=c=d=0;

for ( ; *s ; s++ ) switch ( *s ) {

case 'c': c++; case 'b': b++;

default : d++; break; case 'a': a++; }

printf(\}

(a='a'的个数、b='b','c'的个数、c='c'的个数、d=非'a'的个数)

A.a=1,b=5,c=3,d=8 B.a=1,b=2,c=3,d=3 C.a=9,b=5,c=3,d=8 D.a=0,b=2,c=3,d=3

12.若有以下程序:

#include

D.1, 1, 7, 5 main ( int argc, char *argv[ ] ) {

while ( --argc )

printf ( \ printf ( \}

该程序经编译和连接后生成可执行文件S.EXE。现在如果在DOS提示符下键入S AA BB CC后回车,则输出结果是( C )。

A.AABBCC B.AABBCCS C.CCBBAA D.CCBBAAS

13.若有定义char *language[ ]={\ 则language[2]的值是:

A.一个字符 B.一个地址 C.一个字符串 D.不定值

14.若有以下定义和语句,则对a数组元素地址的正确引用是( C )。

int a[2][3], (*p)[3]; p=a;

A.*(p+2) B.p[2] C.p[1]+1 D.(p+1)+2

15.若有int max( ), (*p)( );,为使函数指针变量p指向函数max,正确的赋值语句是( A )。

A.p=max; B.*p=max; C.p=max(a, b); D.*p=max(a, b);

16.若有定义int a[3][5], i, j; (且0≤i<3, 0≤j<5),则a[i][j]不正确的地址表示是( D )。

A.&a[i][j] B.a[i]+j C.*(a+i)+j D.*(*(a+i)+j)

17.设先有定义:

char s]10]; char *p=s;

则下面不正确的表达式是( B )。

A.p=s+5 B.s=p+s C.s[2]=p[4] D.*p=s[0]

18.设先有定义: char **s;

则下面正确的表达式是( B )。

A.s=\ B.*s=\C.**s=\ D.*s='c'

二、程序填空

1.定义compare ( char *s1, char *s2 )函数,实现比较两个字符串大小的功能。以下程序运行结果为-32,请用正确答案填空。

#include main ( ) {

printf ( \}

compare ( char *s1, char *s2 ) {

while ( *s1 && *s2 && 【1】*s1==*s2 )

int strcompare(char *str1,char *str2) /*字符串比较函数*/ {

while(*str1==*str2 && *str1!=0 && *str2!=0) {

str1++; str2++; }

return *str1-*str2; } main( ) {

char password[20]=\

char input_pass[20]; /*定义字符数组input_pass*/ int i=0; /*检验密码*/ while(1) {

printf(\请输入密码\\n\

gets(input_pass); /*输入密码*/ if(strcompare(input_pass,password)!=0) printf(\口令错误,按任意键继续\ else {

printf(\口令正确!\ break;

} /*输入正确的密码,中止循环*/ getch( ); i++;

if(i==3) exit(0); /*输入3次错误的密码,退出程序*/ } /*输入正确密码所进入的程序段*/ }

题解7 结构与共用

7.1 习题 一、选择题

1.下面正确的叙述的是( D )。

A.结构一经定义,系统就给它分配了所需的内存单元

B.结构体变量和共用体变量所占内存长度是各成员所占内存长度之和 C.可以对结构类型和结构类型变量赋值、存取和运算

D.定义共用体变量后,不能引用共用体变量,只能引用共用体变量中的成员 2.结构体类型变量在程序执行期间( A )。

A.所有成员驻留在内存中 B.只有一个成员驻留在内存中 C.部分成员驻留在内存中 D.没有成员驻留在内存中 3.设有以下定义

struct date {

int cat; char c; int a[4]; long m; }mydate;

则在Turbo C中执行语句:printf(\的结果是( B )。

A.25 B.15 C.18 D.8 4.在说明一个共用体变量时系统分配给它的存储空间是( C )。

A.该共用体中第一个成员所需的存储空间 B.该共用体中最后一个成员所需的存储空间

C.该共用体中占用最大存储空间的成员所需的存储空间 D.该共用体中所有成员所需存储空间的总和

5.共用体类型变量在程序执行期间的某一时刻( B )。

A.所有成员驻留在内存中 B.只有一个成员驻留在内存中 C.部分成员驻留在内存中 D.没有成员驻留在内存中 6.对于下面有关结构体的定义或引用,正确的是( D )。

struct student {

int no; int score; }student1;

A.student.score=99; B.student LiMing; LiMing.score=99; C.stuct LiMing; LiMing.score=99; D.stuct student LiMing; LiMing.score=99; 7.以下说法错误的是( A )。

A.结构体变量的名称为该结构体变量的存储首地址

B.Turbo C中,结构体变量占用空间的大小为各成员项占用空间大小之和,而共用体占用空间大小为 其成员项中占用空间最大的

成员项所需存储空间大小

C.结构体定义时不分配存储空间,只有在结构体变量说明时,系统才分配存储空间 D.结构体数组中不同元素的同名成员项具有相同的数据类型 8.若有以下说明和语句:

struct teacher {

int no; char *name; }xiang, *p=&xiang;

则以下引用方式不正确的是( D )。

A.xiang.no B.(*p).no C.p->no D.xiang->no

二、程序填空

1.以下程序段的作用是统计链表中结点的个数,其中first为指向第1个结点的指针。

struct node {

char data;

struct node *next; } *p, *first; ... int c=0; p=first;

while( 【1】p!=NULL ) {

【2】c++ ; p= 【3】p->next ; }

2.以下程序中使用一个结构体变量表示一个复数,然后进行复数加法和乘法运算。

#include struct complex_number {

float real, virtual; }; main ( ) {

struct complex_number a,b,sum,mul;

printf(\输入a.real、a.virtual、b.real和b.virtual:\ scanf(\ sum.real= 【4】a.real+b.real ;

sum.virtual= 【5】a.virtual+b.virtual ;

mul.real= 【6】a.real*b.real-a.virtual*b.virtual ; mul.virtual= 【7】a.virtual*b.real+a.real*b.virtual ; printf(\ printf(\}

3.以下程序用于在结构体数组中查找分数最高和最低的同学姓名和成绩。请在程序中的空白处填入一条语句或一个表达式。

#include main ( ) {

int max,min,i,j; static struct

{

char name[10]; int score;

}stud[6]={\李明\张三\吴大\钟六\向杰\齐伟\ max=min=1; for (i=0;i<6;i++)

if(stud[i].score>stud[max].score) 【8】max=i ; else

if(stud[i].score

printf(\最高分获得者为:%s,分数为:%d\ 【10】stud[max].name, stud[max].score ); printf(\最低分获得者为:%s,分数为:%d\ 【11】stud[min].name, stud[min].score ); }

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

Top