《上机指导与测试》习题1-习题7及参考答案 下载本文

习题1 C语言基础知识

一、选择题

1.一个C程序由若干个C函数组成,各个函数在文件中的位置为 。 A.任意

B.第一个函数必须是主函数,其他函数任意 C.必须完全按照顺序排列

D.其他函数必须在前,主函数必须在最后 2.下列4个叙述中,正确的是 。 A.C程序中的所有字母都必须小写

B.C程序中的关键字必须小写,其他标识符不区分大小写 C.C程序中的所有字母都不区分大小写 D.C语言中的所有关键字必须小写 3.下列4个叙述中,错误的是 。

A.一个C源程序必须有且只有一个主函数 B.一个C源程序可以含零个或多个子函数 C.在C源程序中注释说明必须位于语句之后 D.C源程序的基本结构是函数

4.下面属于C语言关键字的是 。 A.int B.typedef C.enum D.union 5.以下叙述不正确的是 。 A.分号是C语句的必要组成部分 B.C程序的注释可以写在语句的后面 C.函数是C程序的基本单位

D.主函数的名字不一定用main表示

6.C语言中允许的基本数据类型包括 。 A.整型、实型、逻辑型 B.整型、实型、字符型 C.整型、字符型、逻辑型

D.整型、实型、逻辑型、字符型

7.C语言中能用八进制表示的数据类型为 。 A.字符型、整型 B.整型、实型 C.字符型、实型、双精度型 D.字符型、整型、实型、双精度型 8.下列属于C语言合法字符常数的是 。 A.'\\97' B.\ C.'\\t' D.\9.在C语言中,5种基本数据类型的存储空间长度的排列顺序为 A.char

A.0L B.4962710 C.0412765 D.0xa34b7fe 11.若有以下定义语句char c1='b', c2='e'; printf(\则输出结果是 。

A.2,M B.3,E

C.2,E

D.输出项与相应的格式控制不一致,输出结果不确定 12.以下赋值语句合法的是 。

A.x=y=100 B.d??; C.x+y D.c=int(a+b) 13.设变量t为int型,下列选项中不正确的赋值语句是 。

A.++t; B.n1=(n2=(n3=0)); C.k=i==m; D.a=b+c=1; 14.在以下一组运算符中,优先级最高的是 。

A.≤ B.== C.% D.&& 15.下列能正确表示a≥10或a≤0的关系表达式是 。

A.a≥10 or a≤0 B.a≥10 | a≤0 C.a≥10 || a≤0 D.a≥10 && a≤0

16.下列只有当整数x为奇数时,才是逻辑“真”的表达式是 。

A.x%2==0 B.!(x%2==0) C.(x-x/2*2)==0 D.!(x%2) 17.设a为整型变量,不能正确表达数学关系10

A.1010 && a<15 D.!(a≤10)&&!(a≥15)

18.已知x=43,ch='A',y=0;则表达式(x≥y&&ch<'B'&&!y)的值是 。

A.0 B.语法错 C.1 D.假 19.表达式17%4/8的值为 。

A.0 B.1 C.2 D.3 20.语句printf(\?2));的输出结果是 。

A.无输出 B.结果不确定 C.?1 D.1 二、填空题 1.若有以下定义语句:int u=010,v=0x10,w=10; printf(\则输出结果是 。

2.下面程序的输出结果是 。

main()

{unsigned a=32768; printf(\

3.下面程序的输出结果是 。

main()

{int k=11;

printf(\

4.若有以下定义语句:int a=5; printf(\则输出结果是 。

5.设x为int型变量,执行以下语句:x=10; x+=x?=x?x;,则x的值为 。 6.若定义x和y为double型变量,则表达式x=1, y=x+3/2的值是 。 7.若t为double型变量,表达式t=1, t+5, t++的值是 。 8.表达式10!=9的值是 。

9.设x,y,z和t均为int型变量,执行以下语句:x=y=z=1; t=++x||++y&&++z; 后t的值为 。

10.若a=1,b=2,c=3,d=4,则表达式a

int a=2,b=3;

printf(a>b? \***a=%d\:\###b=%d\,a,b);

12.假定w,x,y,z和m均为int型变量,下面程序执行后m的值为 。

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

m=(m

13.语句printf(\?hi\\?y\\\\\\bou\\n\的输出结果是 。 14.以下程序的输出结果是 。

main()

{unsigned short a=65536; int b;

printf(\

15.若有定义int a=10,b=9,c=8; 接着顺序执行下列语句后,变量b的值为 。

c=(a-=b-5);

c=(a)+(b=3);

16.设x和y均为int型变量,且x=1,y=2,则表达式1.0+x/y的值为 。 17.语句x++;、++x;、x=x+1;和x=1+x;执行后都使变量x的值增1,请写出一条同一功能的赋值语句(不得与列举相同) 。

18.表示“整数x的绝对值大于5”时值为“真”的C语言表达式是 。 19.设y是int型变量,请写出判断y为奇数的关系表达式 。 20.若定义int a=25,b=14,c=19;以下语句的执行结果是 。

a++<=25&&b

--<=2&&c++<=18?printf(\%d,b=%d,c=%d\\n\

21.设有以下定义,并赋予了确定的值:char w; int x; float y; double z;则表达式w*x+z?y所求得值的数据类型为 。

22.设有int =11;表达式x++*1/3的值为 。

23.设定义int x=1,y=1; 则表达式(!x||y??)的值是 。

24.若有以下程序段,int c1=1,c2=2,c3; c3=1.0/c2*c1; 执行后,变量c3的值为 。 25.下列程序的输出结果是16.00,请将程序填写完整。

main()

{int a=9,b=2;

float x= ,y=1.1,z; z=a/2+b*x/y+1/2;

printf(\

26.设x和y均为int型变量,且x=10和y=3,则以下语句的输出结果是 。

printf(\

27.下列程序的输出结果是 。

main()

{int a=-1,b=4;

k=(++a<0)&&!(b--<-0);

printf(\

28.下列程序的输出结果是 。

main()

{double d=3.2;int x,y; x=1.2;y=(x+3.8)/5.0; printf(\

29.下列程序的输出结果是 。

main()

{double d;float f;long l;int j; j=f=l=d=20/3;

printf(\

30.下列程序的输出结果是 。

main()

{int a=1,b=2;

a+=b;b=a-b;a-=b;

printf(\

习题2 顺序结构

一、选择题

1.下面程序的输出结果是 。

main() {

int k=11;

printf(\}

A.k=11,k=12,k=13 C.k=11,k=013,k=oXb 2.以下合法的C语言赋值语句是 。 A.a=b=58 B.k=int(a+b); 3.以下程序的输出结果是 。

main() {

int x=10,y=3;

printf(\}

B.k=11,k=13,k=13 D.k=11,k=13,k=b C.a=58,b=58

D.?i;

A.0 B.1 C.3 D.不确定

4.若变量已正确说明为int类型,要给a、b、c输入数据,以下正确的输入语句是 。

A.read (a,b,c); B.scanf(\C.scanf(\ D.scanf(\5.执行下面程序段后,c3中的值是 。

int c1=1,c2=2,c3; c3=c1/c2;

A.0 B.1/2 C.0.5 6.若执行以下程序段,其输出结果是 。

int a=0,b=0,c=0;

c=(a-=a-5),(a=b,b+3);

printf(\

D.1

A.3,0,?10 B.0,0,5 7.以下程序段的输出结果是 。

float a=57.666;

printf(\

C.?10,3,?10 D.3,0,3

A.*0000057.66* C.*0000057.67* 8.若有以下说明和语句:

int a=5 a++;

B.* 57.66* D.* 57.67*

此处表达式a++的值是 。 A.7 B.6 9.若有以下语句:

C.5 D.4

char c1='b',c2='e';

printf(\

则输出结果是 。 A.2,M

B.3,E

C.2,e 10.以下程序的输出结果是 。

main() {

int x=10,y=10;

printf(\}

D.输出结果不确定

A.10 10 B.9 9 C.9 10 D.10 9 11.在C语言中,如果下面的变量都是int类型,则输出结果是 。

sum=pad=5;

pAd=sum++,pAd++,++pAd; printf(\

A.7 B.6 12.以下程序的输出结果是 。

#include main() {

int i=010,j=10;

printf(\}

C.5 D.4

A.11,10 B.9,10 13.以下程序的输出结果是 。

int i=65536

printf(\

C.010,9 D.10,9

A.65535 B.0 C.有语法错误,无输出结果 D.1

14.已知字符A的ASCII码为十进制的65,下面程序的输出结果是 。

main() {

char ch1,ch2; ch1='A'+'5'-'3'; ch2='A'+'6'-'3';

printf(\}

A.67,D B.B,C 15.若有以下语句: 则输出结果是 。

A.abcd B.a

1 2 A B C

C.C,D D.不确定的值

char s[10]; s=\;

C.adcb D.编译不能通过

16.若有定义:int x,y; char a,b,c; 并输入以下数据(此处代表换行)。

则能给X赋整数值1,给Y赋数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是 。

A.scanf(\

B.scanf(\C.scanf(\

D.scanf(\

17.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是 。

main() {

int x;

scanf(\

if(x++>5) printf(\else printf(\}

A.7和5 B.6和3 C.7和4 D.6和4 18.若执行下面的程序,从键盘输入3和4,则输出结果是 。

main()

{ int a,b,s;

scanf(\s=a;

if (a

s=s*s;

printf(\}

A.14 B.16 C.18 D.20 19.设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:

scanf(\

为了将100和765.12分别赋给i和f,则正确的输入为 。 A.100<空格>765.12<回车> C.100<回车>765.12<回车> 20.以下程序的输出结果是 。

#include main() {

printf(\}

B.i=100,f=765.12<回车>

D.x=100<回车>,y=765.12<回车>

A.不确定 B.0 C.–1 D.1 二、填空题

1.复合语句在语法上被认为是 ,空语句的形式是 。

2.\表示如果串长 m,则在m列范围内,字符串向 靠, 补空格。 3.如果想输出字符“%”,则应该在“格式控制”字符串中用 表示。 4.printf函数的“格式控制”包括两部分,分别是 和 。 5.符号“&”是 运算符,&a是指 。 6.putchar函数的作用是 。

7.复合语句是由一对 括起来的若干语句组成的。 8.goto语句的主要用途是 和 。 9.getchar 函数的作用是 。

10.将for(表达式1;表达式2;表达式3); 改写为等价的while语句为 。

11.语句标号由标识符表示,由 、 和 组成。第一个字符必须是字母或下划线。

12.函数中的“格式控制”后面应当是 ,而不是 。 13.while语句的特点是 ,do?while语句的特点是 。 14.分析下面的程序:

main()

{ int x,y;

x=16;y=(x++)+x; printf(\x=15;printf(\x=20;y=x--+x;printf(\x=13;printf(\}

程序的输出结果是 。

15.下列程序的输出结果是 。

#include \main()

{ char b[]=\ char *chp=&b[7]; while(--chp>&b[0]) putchar(*chp); putchar('\\n'); }

三、编程题

1.编写程序,输入两个整数:1 500和350,输出它们的商和余数。

2.编写程序,读入3个整数赋给a、b、c,然后交换它们中的数,将a中原来的值赋给b,b中原来的值赋给c,c中原来的值赋给a,且输出改变的a、b、c的值。

3.输入两个整型变量a、b的值,输出a+b、a-b、a*b、a/b、(float)a/b、a%b的结果,要求连同算式一起输出,每个算式占一行。

例如,a等于10,b等于5,则a+b的结果输出为: 10+5=15

4.输入一个非负数,计算以这个数为半径的圆周长和面积。

5.输入任意一个3位数,将其各位数字反序输出(例如,输入123,输出321)。 6.输入任意大小的3个整数,判断其中是否有两个奇数一个偶数。若是,则输出“YES”,不是,则输出“NOT”(要求用条件表达式进行判断,不使用if语句)

7.求前驱字符和后继字符。输入一个字符,找出它的前驱字符和后继字符,并按ASCII码值,从大到小的顺序输出这3个字符及其对应的ASCII码值。

习题3 选择结构和循环结构

一、选择题

1.有以下程序:

main() {

int i;

for(i=0;i<3;i++) switch(i)

{

case 1:printf(\case 2:printf(\default:printf(\} }

执行后输出的结果是 。 A.011122 B.012 2.有以下程序:

C.012020 D.120

main() {

int i=1,j=1,k=2;

if((j++||k++)&&i++)

printf(\}

执行后输出的结果是 。

A.1,1,2 3.有以下程序:

B.2,2,1 C.2,2,2 D.2,2,3

main()

{ int a=5,b=4,c=3,d=2; if(a>b>c)

printf(\else if((c-1>=d)==1) printf(\else

printf(\}

执行后,输出结果是 。

A.2 C.4 4.有以下程序:

main()

{ int i=0,s=0; do {

if(i%2)

{ i++;continue;} i++; s+=i;

} while(i<7); printf(\}

B.3

D.编译时有错,无结果

执行后的输出结果是 。

A.16 B.12 5.以下程序的输出结果是 。

C.28 D.21

main()

{ int a=5,b=4,c=6,d;

printf(\}

A.5 B.4 C.6 6.以下程序中,while循环的循环次数是 。

main()

{ int i=0; while(i<10)

{ if(i<1) continue; if(i==5) break; i++; } }

D.不确定

A.1 C.6 7.以下程序的输出结果是 。

main()

{ int a=0,i;

for(i=1;i<5;i++) { switch(i) { case 0:

case 3:a+=2; case 1:

case 2:a+=3; default:a+=5;

B.10

D.死循环,不能确定次数

} }

printf(\}

A.31 B.13 8.以下程序的输出结果是 。

main()

{ int a=4,b=5,c=0,d; d=!a&&!b||!c;

printf(\}

C.10 D.20

A.1 B.0 9.以下程序的输出结果是 。

#include main()

{ int i=0,a=0; while(i<20) { for( ; ; )

{ if((i)==0) break; else i--; }

i+=11;a+=i; }

printh(\}

C.非0的数 D.?1

A.21 B.32 10.阅读以下程序: 。

main() { int x;

scanf(\

if(x--<5) printf(\else printf(\}

C.33 D.11

程序运行后,如果从键盘上输入5,则输出结果是 。

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

w=1;x=2;y=3;z=4;

m=(w

D.6

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

A.4 B.3 12.以下程序的输出结果是 。

main()

{ int a,b;

for(a=1,b=1; a<=100;a++)

{ if(b>=10) break; if(b%3==1)

{ b+=3;continue;} }

printf(\}

C.2 D.1

A.101 B.6 C.5 D.4 13.若执行以下程序时,从键盘上输入9,则输出的结果是 。

main() { int n;

scanf (\ if(n++<10)

printf(\ else

printf(\}

A.11 B.10 14.有以下程序段:

int k=0 while(k=1) k++;

C.9 D.8

while 循环执行的次数是 。

A.无限次 B.有语法错误,不能执行 C.一次也不执行 D.执行1次 15.以下程序执行后,sum的值是 。

main()

{ int i,sum;

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

A.15 B.14 16.有以下程序段:

int x=3 do

{ printf(\while(!(--x));

C.不确定 D.0

其输出结果是 。

A.1 B.3 0 C.1 ?2 D.死循环 17.若变量c为char类型,能正确判断出c为小写字母的表达式是 。

A.'a'<=c<= 'z'

B.(c>= 'a')||(c<= 'z') C.('a'<=C)and ('z'>=c) D.(c>= 'a')&&(c<= 'z')

18.以下程序的输出结果是 。

main()

{ int x=0.5;char z='a';

printf(\

A.0 B.1 19.以下程序的输出结果是 。

main()

{ int x=10,y=10,i;

for(i=0;x>8;y=i )

printf(\}

C.2 D.3

A.10 1 9 2 B.9 8 7 6 20.以下程序的输出结果是 。

main() { int i;

for(i=1;i<=6;i++) {if(i%2)

{printf(\ printf(\

C.10 9 9 0 D.10 10 9 0

}

printf(\}

A.#*#*#* B.##### 21.以下程序的输出结果是 。

C.***** D.*#*#*

main() { int i;

for(i='A';i<='I';i++)printf(\ printf(\}

A.编译不通过,无输出 C.acegi 22.以下程序输出结果是 。

main () { int m=5;

if (m>5 print(\else printf(\”,m--); }

B.aceg

D.abcdefghi

A.7 B.6 C.5 D.4

23.运行以下程序后,如果从键盘上输入china#后回车,则输出结果为 。

#include main()

{ int v1=0,v2=0; char ch;

while ((ch=getchar())!='#') switch (ch) {case 'a': case 'h':

default:v1++; case '0':v2++; }

printf(\}

A.2,0 B.5,0 24.设有如下定义:

int a=1,b=2,c=3,d=4,m=2,n=2;

C.5,5 D.2,5

则执行表达式(m=a>b)&&(n=c>d)后,n的值为 。

A.1 B.2 C.3 25.以下程序的输出结果是 。

main()

{ int i,j,x=0;

for(i=0;i<2;i++) {x++;

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

{ if(j%2) continue; x++;} x++; }

printf(\

D.0

A.x=4 B.x=8 C.x=6 D.x=12 26.设x和y均为int型变量,则执行下的循环后,y值为 。

for(y=1,x=1;y<=50;y++) {if(x==10)}break; if(x%2==1)

{x+=5;continue;}

x-=3; }

A.2 B.4 C.6 D.8 27.假定a和b为int型变量,则执行以下语句后b的值为 。

a=1;b=10; do

{b-=a;a++;} while(b--<0);

A.9 B.?2 C.?1 D.8 28.设j为int型变量,则下面for循环语句的执行结果是 。

For (j=10;j>3;j--) { if(j%3) j--; --j;--j;

printf(\,j); }

A.6 3 B.7 4 29.以下程序的输出结果是 。

C.6 2 D.7 3

main()

{ int x,i;

for(i=1;i<=50;i++) {x=i;

if(x%2==0)

{ x++;if(x%3==0) { x++;if(x%7==0)

{ x++;printf(\ } }

A.28 B.27 C.42 D.26 30.假定所有变量均已正确说明,下列程序段运行后x的值是 。

a=b=c=0;x=35; if(!a)x--;

else if(b);if(c)x=3; else x=4;

A.34 二、填空题

1.若有以下程序:

B.4 C.35 D.3

main()

{ int p,a=5; if(p=a!=0)

printf(\else

printf(\}

执行后,输出结果是 。 2.若有以下程序:

main()

{ int a=4,b=3,c=5,t=0; if(a

printf(\}

执行后,输出结果是 。

3.以下程序运行后的输出结果是 。

main()

{ int a=1,b=3,c=5;

if(c=a+b) printf(\ else printf(\}

4.以下程序运行后的输出结果是 。

main( )

{ int i,m=0,n=0,k=0; for(i=9;i<=11;i++) switch(i/10)

{ case 0: m++;n++;break; case 10:n++;break; default:k++;n++; }

printf(\ }

5.执行以下程序后,输出'#'号的个数是 。

#include main() { int i,j;

for(i=1;i<5;i++)

for(j=2;j<=i;j++) putchar('#'); }

6.若从键盘输入58,则以下程序输出的结果是 。

main() { int a;

scanf(\

if(a>50) printf(\ if(a>40) printf(\ if(a>30) printf(\}

7.以下程序输出的结果是 。

main()

{ int a=5,b=4,c=3,d; d=(a>b>c);

printf(\}

8.以下程序的输出结果是 。

main() { int s,i;

for(s=0,i=1;i<3;i++,s+=i); printf(\}

9.以下程序运行后的输出结果是 。

main()

{ int i=10,j=0; do

{ j=j+i;i--; }while(i>2);

printf(\}

10.设有以下程序:

main()

{ int n1,n2;

scanf(\

while(n2!=0) { n1=n2; n2=n2/10;

printf(\} }

程序运行后,如果从键盘上输入1298,则输出结果为 。 11.下列程序段的输出结果是 。

int n='c'; switch(n++)

{ default:printf(\

case 'a':case 'A':case 'b': case 'B':printf(\case 'c':case 'C':printf(\case 'd':case 'D':printf(\}

12.下面程序输出结果是 。

main()

{ int x=1,y=0,a=0,b=0; switch(x) {case 1: switch(y)

{case 0:a++;break; case 1:b++;break; }

case 2:

a++;b++;break; }

printf(\}

13.程序执行后的输出结果是 。

main( )

{ int x=0,y=5,z=3; while(z-->0&&++x<5)

y=y-1;

printf(\}

14.若有int i=5, j=10;则执行完以下语句后,j的值为 。

switch (i){ case 4:j++; case 5:j--; case 6:j++; case 7:j-=2; default: ; }

15.有以下程序:

main()

{ int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3;

printf (\}

执行后的输出结果是 。

16.执行以下程序后的输出结果是 。

main()

{ int a=5,b=4,c=3,d=2;

if(a>b>c)

printf(\ else if((c-1>=d)==1)

printf(\ else

printf(\ }

17.当a=1,b=3,c=5,d=4时,执行完下面的一段程序后x的值是 。

if(a

if(c

if(a

if(b

18.下列程序段的输出结果是 。

int k,s;

for(k=0,s=0;k<10;k++) if (s>k) break; else s+=k;

printf(\

19.输入c2470f ?<回车>后,下列程序的输出结果是 。

#include main()

{ char ch;long number=0;

while((ch=getchar())<'0'||ch>'6'); while(ch!='?'&&ch>='0'&&ch<='6') {

number=number*7+ch-'0'; printf(\ ch=getchar(); } }

20.输入4<回车>后,下列程序的输出结果是 。

#include main()

{ int j,k,n; float f,s;

scanf(\%d”,&n); s=0; f=1;

for(k=1;k<=n;k++) {

for(j=1;j

printf(\%.0f#”,s); } }

21.下面程序的功能是:输出100以内能被3整除且个位数为6的所有整数,请填空。

#include main()

{ int i,j;

for(i=0; ;i++) { j=i*10+6;

if( ) continue; printf(\

} }

22.下面程序的功能是求1!+2!+3!+4!+5!,请填空。

main( )

{ int i,j,f,sum=0; for(i=1;i<=5;i++) { f=1;

for(j=1; ;j++) ; sum=sum+f; }

printf(\}

23.以下程序可判断输入的一个整数是否能被3或7整除,若能整除,输出“yes”,否则输出“no”,请填空。

#include main() { int k;

printf(\ scanf(\ if printf(\ else

printf(\}

24.以下程序将从读入的整数数据中,统计大于零的整数个数和小于零的整数个数。用输入零来结束输入,程序中用i统计大于零的个数,用变量j统计小于零的整数,请填空。

main()

{ int n,i,j;

printf(\ i=j=0;

scanf (\ while { if (n>0) i++; if (n<0) j++;

;

}

printf(\}

25.如果一个数各位数的立方和等于它本身,则这样的数称为水仙花数,求100~999中所有的水仙花数,请填空。

main()

{ int i,a,b,c;

for(i=100;i<=999;i++) { a=i/100; b= ; c=i; if( )

printf(\

}

}

26.输入一个正整数n,计算并输出s前n项的和,请填空。 S=1-1/2+1/3-1/4+1/5-1/6+…

#include main()

{ int k,flag,n;float s; flag=1;s=0;

scanf(\

for (k=1;k<=n;k++){ s=s+ ; ; }

printf(\ }

27.输出下列图形,请填空。

1 2 3 4 5 6 7 8 9 2 3 4 5 6 7 8 9 3 4 5 6 7 8 9 4 5 6 7 8 9

5 6 7 8 9 6 7 8 9 7 8 9 8 9 9

main() int i,j;

for(i=1;i<= ;i++)

{for(j= ;j<=9;j++)printf(\

printf(\

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

main()

{ float x,amax,amin; scanf(\ amax=x; amin=x;

while( ) { if(x>amax) amax=x; if(x

printf(\ }

29.下面程序的功能是计算1~10之间的奇数之和与偶数之和,请填空。

main( )

int a,b,c,i; a=c=0;

for( i=0;i<=10;i+=2) { a+=2;

;

c+=b; }

printf(\偶数之和:%d\\n\

printf(\奇数之和:%d\\n\

30.以下程序用“辗转相除法”求出两个正整数的最大公约数,请填空。若两个数分别放在m和n中,求最大公约数的算法如下:

(1)将两数中最大的放在m中,小的放在n中。 (2)求出m被n除后的余数r。

(3)若余数为0则执行步骤(7);否则执行步骤(4)。 (4)将除数作为新的被除数;将余数作为新的除数。

(5)求出新的余数r。 (6)重复步骤(3)~(5)。 (7)输出n,n即为最大公约数。

main()

{ int r,m,n,t;

printf(\ scanf(\

printf(\ if(m

{t=m;m=n;n=t;} r= ; while ( ) {m=n;n=r;r= ;} printf(\}

三、编程题

1.求出100~300内所有百位和个位相加能被3整除的数。 2.编程求S=1/1!+1/2!+1/3!+... +1/n!直到1/n!≤ 1e?6

3.编写程序实现用一元人民币换成一分、两分、五分的硬币共50枚。

4.编写程序,输出从公元1000年~2000年所有闰年的年号。判断闰年的条件是: (1)公元年数如能被4整除,而不能被100整除,则是闰年。 (2)公元年数能被400整除也是闰年。 5.输入一个4位数,求各位数字的平方和。 例如:输入1234,输出30。

6.写出满足不等式1+1/2+1/3+1/4+...+1/N>15最小的N值,并输出各项之和s的值。 7.铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤0.15元计费;如超过50公斤,超过部分每公斤加收0.10元。编写程序完成自动计费工作。

8.相邻两个奇数都为素数的一对数叫双胞胎素数,输出100~200之间的所有双胞胎素数。

9.输入一串字符以“#”结束,如果它是大写字母转换为小写字母输出,如果是小写字母转换为大写字母输出。如果不是字母,则照原样输出。

10.输入一个4位数,要求将它的千位、百位、十位、个位上的数字按由小到大排列,输出一个新数。

例如,输入4287 则输出为 2478。

11.输入两门课的成绩,如果两门成绩都在60分以上。则输出“it is pass.”,只要有一门低于60分就输出“it is not pass.”如果输入的任何一门成绩不在0~100范围内则输出“it is error.”(要求用switch语句来编程)。

12.求任一数字所有因子的组合(仅限两个因子),且不可重复输出。 例如,15=1*15,15=3*5,而15=5*3,15=15*1就不用输出。

13.从键盘输入几个数,以0作为结束标志,判断其正负,并求其平方和。

14.编写一个译码程序,将一个英语句子译成数字代码。译码规则是以数字1代替字母a,数字2代替字母b,??,26代替字母z,以数字27代替字母A,数字28代替字母B,??,42代替字母Z,如遇空格则打印一个星号“*”,英文句子以“.”结束。

15.求所有个位、十位、百位数字能组成一个三角形3边的3位数(注意:三角形任意两边之和大于第三边)。

习题4 函 数

一、选择题

1.建立函数的目的之一是 。 A.提高程序的执行效率 B.提高程序的可读性 C.减少程序的篇幅 D.减少程序文件所占内存 2.以下正确的说法是 。

A.用户若需调用标准函数,调用前必须重新定义

B.用户可以重新定义标准库函数,若如此,该函数将失去原有含义 C.系统根本不允许用户重新定义标准函数

D.用户若需要调用标准库函数,调用前不必使用预编译命令将该函数所在文件包

括到用户源文件中,系统自动去调用

3.在C语言中,以下说法正确的是 。

A.普通实参和与其对应的形参各占用独立的存储单元 B.实参和与其对应的形参共占用一个存储单元

C.只有当实参和与其对应的形参同名时才共占用存储单元 D.形参是虚拟的,不占用存储单元

4.若调用一个函数,且此函数中没有return语句,则关于该函数正确的说法是 。 A.没有返回值

B.返回若干个系统默认值

C.能返回一个用户所希望的函数值 D.返回一个不确定的值

5.在C语言中以下不正确的说法是 。 A.实参可以是常量、变量、或表达式 B.形参可以是常量、变量或表达式 C.实参可以为任意类型

D.形参应与其对应的实参类型一致

6.以下程序有语法性错误,有关错误原因的正确说法是 。

main()

{ int G=5,k;

void prt_char(); …

k=prt_char(G); … }

A.语句void prt_char();有错,它是函数调用语句,不能用void说明 B.变量名不能使用大写字母

C.函数说明和函数调用语句之间有矛盾 D.函数名不能使用下划线

7.有关函数调用,以下错误的描述是 。 A.出现在执行语句中 B.出现在一个表达式中 C.作为一个函数的实参 D.作为一个函数的形参 8.以下正确的说法是 。

A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可嵌套

C.函数的定义和调用均不可以嵌套 D.函数的定义和调用均可以嵌套

9.若使用一维数组名作函数实参,则以下正确的说法是 。 A.必须在主调函数中说明此数组的大小 B.实参数组类型与形参数组类型可以不匹配 C.在被调用函数中,不需要考虑形参数组的大小 D.实参数组名与形参数组名必须一致

10.如果在一个函数中的复合语句中定义了一个变量,则有关该变量说法正确的是 。

A.只在该复合语句中有效 B.在该函数中有效

C.在本程序范围中均有效 D.为非法变量 二、填空题

1.折半查找法的思路是:先确定待查元素的范围,将其分成两半,然后测试位于中间点元素的值,如果该待查元素的值大于中间点元素,就缩小待查范围,只测试中点之后的元素;反之,测试中点之前的元素,测试方法同前。函数binary的作用是应用折半查找法从存有10个整数的a数组中对关键字m进行查找,若找到,返回其下标值;反之,返回-1。请填空。

binary(int a[10],int m) { int low=0,high=9,mid; while(low<=high)

{ mid=(low+high)/2;

if(m

else if(m

return(-1); }

2.以下程序的运行结果是 。

#define MAX 10 int a[MAX],i; main()

{ printf(\ sub2()

{int a[MAX],i,max; max=5;

for(i=0;i

sub1()

{ for(i=0;i

sub3(int a[ ]) {int i;

for(i=0;i

3.下面程序的运行结果是 。

void num()

{ extern int x,y; int a=15,b=10; x=a-b; y=a+b;

}

int x,y; main()

{int a=7,b=5; x=a+b; y=a-b; num();

printf(\}

4.以下程序的运行结果是 。

main()

{ int a=2,i;

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

f(int a)

{ int b=0;static int c=3; b++;c++;

return(a+b+c) ; }

5.如果输入的值是-125,以下程序的运行结果是 。

#include main()

{ int n;

scanf(\ printf(\

if(n<0) printf(\-\; n=fabs(n); fun(n); }

fun(int n) { int k,r;

for(k=2;k<=sqrt(n);k++) {r=n%k;

while(r==0)

{printf(\ n=n/k;

if(n>1) printf(\ r=n%k; } }

if(n!=1) printf(\}

6.以下程序的运行结果是 。

main()

{increment(); increment(); increment(); }

increment() { int x=0; x+=1;

printf(\ }

7.以下check函数功能是对value中的值进行四舍五入计算,若计算后的值与ponse值相等,则显示“well done”,否则显示计算后的值。已有函数调用语句check(ponse,value);请填空。

void check(int ponse,float value) { int val;

val= ;

printf(\计算后的值:%d\

if( ) printf(\

else printf(\}

8.若输入一个整数10,以下程序的运行结果为 。

main()

{int a,e[10],c,i=0; scanf(\ while(a!=0) {c=sub(a); a=a/2; e[i]=c; i++; }

for(;i>0;i--) printf(\}

sub(int a) { int c; c=a%2;

return c; }

9.已有函数pow,现要求取消变量i后pow函数的功能不变,请填空。 修改前的pow函数:

pow(int x, int y) {int i,j=1;

for(i=1;i<=y;++i) j=j*x; return(j); }

修改后的pow函数:

pow(int x, int y) { int j;

for( ; ; ) j=j*x; return(j);}

10.以下程序的功能是求3个数的最小公倍数,请填空。

max(int x, int y, int z) {if (x>y &&x.>z) return(x); else if( ) return(y); else return(z); }

main()

{ int x1,x2,x3,i=1,j,x0;

printf(\ scanf(\ x0=max(x1,x2,x3); while(1) {j=x0*i;

if( ) break; i=i+1; }

printf(\ }

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

main()

{int x=2,y=3,z=0;

printf(\ add(x,y,z);

printf(\ }

add(int x,int y,int z) {z=x+y; x=x*x; y=y*y;

printf(\ }

12.下面函数pi的功能是:根据以下公式,返回满足精度(0.0005)要求的π值,请填空。

π/2=1+1/3+1/3*2/5+1/3*2/5*3/7+1/3*2/5*3/7*4/9+…

double pi(double eps) { double s,t; int n;

for( ;t>eps;n++) {s+=t;

t=n*t/(2*n+1); }

return( );} main()

{ double x;

scanf(\

printf(\\neps=%lf, π=%lf\

13.下面程序运行结果是 。

long fib( int g) { switch(g)

{case 0: return 0;

case 1:case 2: return 1;} return(fib(g-1)+fib(g-2)); }

main() {long k; k=fib(7);

printf(\

14.以下程序的运行结果 。

f(int a[ ]) { int i=0;

while(a[i]<=10)

{printf(\ i++;} }

main()

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

15.以下程序的运行结果为 。

main()

{ int a[3][3]={1,3,5,7,9,11,13,15,17},sum; sum=func(a);

printf(\

}

func(int a[][3]) {int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<3;j++) {a[i][j]=i+j;

if(i= =j) sum=sum+a[i][j]; }

return(sum); }

16.已定义一个含有30个元素的数组,函数fav1的功能是按顺序分别赋予各元素从2开始的偶数,函数fav2按顺序每5个元素求一个平均值,并将该值存放在数组w中,请填空。

#define SIZE 30 fav1(float s[ ]) { int k,i;

for(k=2,i=0;i

fav2(float s[ ],float w[ ]) {float sum;int k,i; sum=0.0;

for(k=0,i=0;i

if((i+1)%5==0) { w[k]=sum/5; ; k++; } } }

main()

{float s[SIZE],w[SIZE/5],sum; int i,k; fav1(s); fav2(s,w); }

17.函数del的作用是删除有序数组a中的指定元素x,已有调用语句n=del(a,n,x);其中实参n为删除前数组元素的个数,请填空。

del(int a[ ],int n,int x) {int p,i; p=0;

while(x>=a[p]&&p

return n; }

18.函数swap(int x, int y)可完成对x和y值的交换。在运行调用函数中的如下语句后,a[0]和a[1]的值分别为 ,原因是 。

a[0]=1;a[1]=2; swap(a[0],a[1]);

19.以下程序的运行结果为 。

main()

{int a=1,b=2,c=3; ++a; c+=++b;

{int b=4,c; c=b*3; a+=c;

printf(\ a+=c;

printf(\ }

printf(\ }

20.以下程序的运行结果为 。

int k=1; main()

{ int i=4; fun(i);

printf(\ }

fun(int m) { m+=k;k+=m;

{char k=’B’;

printf(\’A’); }

printf(\}

21.以下程序的运行结果是 。

int x1=30,x2=40; main()

{ int x3=10,x4=20; sub(x3,x4); sub(x2,x1);

printf(\}

sub(int x,int y) {x1=x;x=y;y=x1;}

22.以下程序运的行结果是 。

int a=5;int b=7; main()

{ int a=4,b=5,c; c=plus(a,b);

printf(\}

plus(int x,int y) { int z; z=x+y;

return(z);}

23.以下程序的运行结果是 。

int a=3,b=5; max(a,b) {int c;

c=a>b?a:b;

return(c); }

main()

{ int a=8;

printf(\

24.以下程序的运行结果是 。

int n=1; main()

{ static int x=5; int y; y=n;

printf(\ func();

printf(\ func(); }

func( )

{ static int x=4; int y=10; x=x+2; n=n+10; y=y+n;

printf(\}

25.以下程序的运行结果是 。

main()

{increment(); increment(); increment(); }

increment()

{ static int x=0; x+=1;

printf(\}

26.以下程序的运行结果是 。

main( ) { incx( ); incy( ); incx( ); incy( ); incx( ); incy( ); }

incx( )

{ int x=0;

printf(\incy( )

{ static int y=0;

printf(\}

27.编写程序输出下列图形:

* ***

***** ******* ***** *** *

请完成填空。

void a(int i) {int j,k;

for(j=0;j<=7-i;j++) printf(\;

for(k=0;k< ;k++) printf(\ printf(\}

main() {int j;

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

for(j=3;j>=0;j--) ; }

三、编程题

1.已有变量定义和函数调用语句:int x=57; isprime(x);函数isprime用来判断一个整型数是否为素数,若是素数,函数返回1,否则返回0。试编写isprime函数。

2.编写程序,将字符串中的第m个字符开始的全部字符复制成另一个字符串。要求在主函数中输入字符串及m的值并输出复制结果,在被调用函数中完成复制。

3.从键盘输入一个字符串,然后按要求输出一个新字符串,新串是在原串中,每两个字符之间插入一个空格,如原串为abcd,则新串为abcd。要求在函数insert中完成新串的产生,并在函数中完成所有相应的输入和输出。

4.设有一数列,包含10个数,已按升序排好。现要求编一程序,它能够把从指定位置开始的n个数按降序重新排列并输出新的完整数列。进行降序处理时要求使用函数。

5.编写程序,统计从键盘输入的命令行中第二个函数所包含的英文字符个数。

6.编写程序,将字符串computer赋给一个字符数组,然后从第一个字母开始间隔地输出该串。

7.有10个字符串,在每个字符串中,找出最大字符按一一对应的顺序放入一维数组a中,即第i个字符串中的最大字符放入a[i]中,输出每个字符串中的最大字符,要求用函数实现。

8.把两个已按升序排列的数组合并成一个升序数组,要求用函数实现。

9.下列程序功能是应用下面的近似公式计算e的n次方。函数f1用来计算每项分子的值,函数f2用来计算每项分母的值,试编写两个函数。

ex =1+x+x 2/2!+x 3/3!+?(前两项的和)

float f2(int n) { }

float f1(int x, int n) { } main( )

{float exp=1.0; int n,x;

scanf(\ printf(\ exp=exp+x;

for(n=2;n<=19;n++) exp=exp+f1(x,n)/f2(n);

printf(\}

10.设计一个程序,在主函数中实现从键盘输入一个大写英文字母。在自定义函数中要求顺序打印出3个相邻的字母,指定的字母在中间。如指定的字母为Z,则打印YZA;若为A,则打印ZAB。

11.有一数列,该数列的第1、2项分别为0和1,以后每个奇数编号的项是前两项和的绝对值,偶数编号的项是前两项的差的绝对值。生成的20个数存在一维数组x中,并按每行4项的形式输出。试编程。

12.从键盘输入若干整数,其值在0~4的范围内,用-1作为输入结束的标志,统计整数的个数。通过函数实现。

13.从键盘输入两个字符串a和b,要求不用strcat把b中的前5个字符连接到a中,如果b的长度小于5,则把b的所有元素都连接到a中。试编程。

习题5 编译预处理

一、选择题

1.宏定义#define PI 31.14159中,宏名PI代替 。 A.单精度 B.双精度 C.常量 2.设有以下宏定义:

#define N 3

#define Y(n) ((N+1)*n)

D.字符串

执行语句z=2*(N+Y(5+1));后,z的值为 。 A.出错 B.42 C.48 3.以下说法正确的是 。 A.#define和printf都是C语句

B.#define 是C语句,而printf不是 C.printf是C语句,但#define不是 D.#define 和printf都不是C语句

4.宏定义的宏展开是在 阶段完成的。 A.第一遍编译 B.第二遍编译 C.程序执行 D.预编译 5.编译预处理命令以 结尾。 A.; B.. C.\\ 二、填空题

1.程序中有定义:

#define S(r) r/r int a=4,b=3,area;

D.54

D.回车

则表达式area=S(a+b)的值为 。 2.若有以下宏定义:

#define STR \#define A 97

已知字符a的ASCII码值为97,则语句printf(STR,A,A+2);的输出结果为 。 3.以下程序的输出结果是 。

#define M(x,y,z) x*y+z main()

{int a=1,b=2,c=3;

printf(\

4.下列程序执行后的输出结果是 。

#define MA(x) x*(x-1) main()

{ int a=1,b=2;

pirntf(\

5.C语言中,宏定义的有效范围从定义处开始,到本源程序结束处中止。但可以用 来提前解除宏定义的作用。

习题6 数 组

一、选择题

1.若有以下语句:

int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; char c='a',d,g;

则数值为4的表达式是 。 A.a[g-c] B.a[4] C.a[?d?-?c?] 2.假设int型变量占两个字节的存储单元,若有定义:

int x[10]={0,2,4};

D.a[?d?-c]

则数组x在内存中所占字节数为 。 A.3 B.6 3.下列合法的数组定义是 。 A.int a[]=\ C.char a=\ 4.若给出以下语句:

C.10 D.20

B.int a[5]={0,1,2,3,4,5}; D.char a[]={0,1,2,3,4,5};

char x[]=\

char y[]={'a','b','c','d','e','f','g'};

则正确的叙述为 。 A.数组x和数组y等价 C.数组x的长度大于数组y的长度 5.若定义如下变量和数组 。

int j;

int x[3][3]={1,2,3,4,5,6,7,8,9};

B.数组x和数组y的长度相同

D.数组y的长度大于数组x的长度

则下面语句的输出结果是 。

For (j=0;j<3;j++)

printf(\

A.1 5 9 B.1 4 7 6.下列程序运行后的输出结果是 。

main()

{int n[3],t,j,k; for(t=0;t<3;t++) n[t]=0; k=2;

for(t=0;t

printf(\

C.3 5 7 D.3 6 9

A.2 7.有以下程序:

main()

B.1 C.0 D.3

{ int p[7]={11,13,14,15,16,17,18}, i=0,k=0; while(i<7 && p[i]%2) { k =k+ p[i]; i++; } printf(\}

执行后的输出结果是 。 A.58 B.56 C.45 D.24 8.以下能正确定义数组并正确赋初值的语句是 。 A.int N=5,b[N][N]; B.int a[1][2]={{1},{3}}; C.int c[2][]= {{1,2},{3,4}}; D.int d[3][2]={{1,2},{34}}; 9.有以下程序:

main()

{int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2;

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

{printf(\}

执行后的输出结果是 。 A.4 5 6 B.2 5 8 C.3 6 9 D.7 8 9 10.以下能正确定义一维数组的选项是 。

A.int num[]; B.#define N 100

int num[N];

C.int num[0..100]; D.int N=100;

int num[N];

11.下列选项中正确的语句是 。

A.char s[8]; s={\ B.char *s; s={\C.char s[8]; s=\ D.char *s; s=\12.有以下程序 。

int a[10]={1,2,3,4,5,6,7,8,9,10},*p=&a[3],b; b=p[5];

b中的值是 。

A.5 B.6 13.有以下程序:

C.8 D.9

main( )

{char a[]=\printf(\}

执行后的输出结果是 。

A.7 7 B.8 8 14.有以下程序:

C.8 10 D.10 10

void swap1(int c[]) { int t;

t=c[0];c[0]=c[1];c[1]=t; }

void swap2(int c0,int c1) { int t;

t=c0;c0=c1;c1=t;} main( )

{ int a[2]={3,5},b[2]={3,5}; swap1(a); swap2(b[0],b[1]);

printf(\}

其输出结果是 。

A.5 3 5 3 B.5 3 3 5 15.有以下程序:

C.3 5 3 5 D.3 5 5 3

int f(int b[][4]) { int i,j,s=0;

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

if(i>2) i=3-j; s+=b[i][j]; }

return s; }

main( )

{ int a[4][4]={{1,2,3,4},{0,2,4,5},{3,6,9,12},{3,2,1,0}}; printf(\}

执行后的输出结果是 。

A.12 B.11 16.有以下程序:

C.18 D.16

void sort(int a[],int n) { int i,j,t;

for(i=0;i

if(a[i]

main()

{ int aa[10]={1,2,3,4,5,6,7,8,9,10},i; sort(aa,10);

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

其输出结果是 。

A.1,2,3,4,5,6,7,8,9,10 C.9,2,7,4,5,6,3,8,1,10 17.有以下程序:

B.10,9,8,7,6,5,4,3,2,1 D.1,10,3,8,5,6,7,4,9,2

void f(int a[],int i,int j) { int t; if(i

{t=a[i];a[i]=a[j];a[j]=t; f(a,i+1,j-1); } }

main( )

{ int i,aa[5]={1,2,3,4,5}; f(aa,0,4);

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

执行后的输出结果是 。

A.5,4,3,2,1, B.5,2,3,4,1, 18.以下程序的输出结果是 。

C.1,2,3,4,5, D.1,2,3,4,5,

main()

{ char ch[3][5]={\ printf(\

}

A.\ B.\ 19.以下程序的输出结果是 。

C.\ D.\

main()

{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=1; for(i=0;i<3;i++)

for(j=i;j<=i;j++) t=t+b[i][b[j][j]]; printf(\}

A.3 20.有以下程序:

B.4 C.1 D.9

main()

{int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1]; printf(\}

程序运行后的输出结果是 。

A.11 B.19 21.有以下语句:

C.13 D.20

char s[10],s=\

则运行结果是 。

A.abcd B.a C.ab cd 22.不能把字符串“Hello!”赋给数组b的语句是 。 A.char b[10]={'H','e','l','l','o','!'}; C.char b[10]; strcpy(b,\ 23.若有以下程序:

char str[]=\printf(\

D.编译不通过

B.char b[10];b=\D.char b[10]=\

该程序段的输出结果是 。

A.3 B.4 C.6 24.函数调用strcat(strcpy(str1,str2),str3)的功能是 。

A.将串str1复制到串str2中后在连接到串str3之后 B.将串str1连接到串str2之后再复制到串str3之后

C.将串str2复制到串str1中后再将串str3连接到串str1之后 D.将串str2连接到串str1中后再将串str1复制到串str3中 25.下列程序的输出结果是 。

main()

{ char ch[7]={ \ int j,s=0;

for(j=0;ch[j]>= '0'&&ch[j]<= '9';j+=2) s=10*s+ch[j]- '0'; printf(\ }

D.12

A.12ba56 B.66521 C.6 D.62

26.设已定义char s[]=\则字符串s所占的字节数是 。

A.19 B.18 C.15 D.14

27.设已定义char c[8]=\和int j则下面的输出函数调用中错误的是 。

A.printf(\ B.for(j=0;j<8;j++) printf(\C.puts(c); D.for(j=0;j<8;j++) puts(c[j]);

28.设已定义char a[10]和 int j,则下面输入函数调用中错误的是 。

A.scanf(\ B.for(j=0;j<9;j++) scanf(\C.gets(a); D.for(j=0;j<9;j++) scanf(\29.设已定义char x[8]和int j,为了给该数组赋值,下面语句中正确的是 。

A.x[8]=\ B.x=\C.x[]=\ D.for(j=0;j<7;j++) x[i]=getchar(); 30.有如下程序:

main()

{int n[5]={0,0,0},j,k=2;

for(j=0;j

该程序的输出结果是 。

A.不确定的值 C.1 二、填空题

1.若有以下程序:

B.2 D.0

main()

{ int a[4][4]={{1,2,-3,-4},{0,-12,-13,14},{-21,23,0,-24},{-31,32,-33,0}}; int i, j, s=0;

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

{ if (a[i][j] < 0) continue; if (a[i][j] == 0) break; s += a[i][j];} }

printf(\}

执行后输出结果是 。

2.以下程序运行后的输出结果是 。

main()

{ int i,n[]={0,0,0,0,0}; for(i=1;i<=4;i++) { n[i]=n[i-1]*2+1; printf(\ } }

3.以下程序运行后的输出结果是 。

main()

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

for(j=i+1;j<3;j++) a[j][i]=0; for(i=0;i<3;i++)

{ for(j=0;j<3;j++) printf(\printf(\} }

4.下面rotate函数的功能是将n行n列的矩阵A转置为A’,例如: 当A?1 2 3 4 则A’?1 5 9 13 5 6 7 8 2 6 10 14 9 10 11 12 3 7 11 15 13 14 15 16 4 8 12 16

请填空。

#define N 4

void rotate(int a[][N]) { int i,j,t;

for(i=0;i

for(____________;j

_______________; a[j][i]=t; } }

5.以下程序的输出结果是 。

main()

{ char s[]=\ s[3]= '\\0';

printf(\}

6.以下程序的输出结果是 。

main()

{ int i, a[10];

for(i=9;i>=0;i--) a[i]=10-i;

printf(\}

7.以下程序的输出结果是 。

main()

{ int a[4][4]={{1,3,5},{2,4,6},{3,5,7}};

printf(\)

8.以下程序的输出结果是 。

main()

{ char st[20]= \

printf(%d %d \\n\}

9.若有定义语句:char s[100],d[100]; int j=0, i=0;,且s中已赋字符串,请填空以实现字符串拷贝(注:不得使用逗号表达式)。

while([i]){ d[j]= ;j++;} d[j]=0;

10.以下程序的输出结果是 。

f(int b[],int m,int n) { int i,s=0;

for(i=m;i<=n;i++) s=s+b[i]; return s; )

main()

{ int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7);

printf(\}

11.以下程序的输出结果是 。

main()

{ char w[][10]={ \ for(k=1;k<3;k++) printf(\

12.下列程序的输出结果是 。

#include main()

{ char arr[2][4];

strcpy(arr, \ arr[0][3]= '&';

printf(\

13.若想通过以下输入语句使a中存放字符串“1234”,b中存放字符“5”,则输入数据的形式应该是 。

char a[10],b;

scanf(\

14.下列程序段的输出结果是 。

main()

{ char b[]=\ b[5]=0;

printf(\

15.以下程序的输出结果是 。

main()

{ int j,k,a[10],p[3]; k=5;

for(j=0;j<10;j++) a[j]=j;

for(j=0;j<3;j++) p[j]=a[j*(j+1)]; for(j=0;j<3;j++) k+=p[j]*2; printf(\}

16.以下程序运行后,输出结果是 。

main()

{ int y=18,t=0,j,a[8]; do

{ a[t]=y%2;t++; y=y/2;

}while(y>=1);

for(j=t-1;j>=0;j--) printf(\ printf(\}

三、编程题

1.求出某数组a[5][5]每行元素的平均值。

main()

{ int a[5][5],j,t; float s=0.0,adv[5]; for(j=0;j<5;j++) for(t=0;t<5;t++)

scanf(\ for(j=0;j<5;j++)

{for(t=0;t<5;t++) s=s+a[j][t]; adv[j]=s/4.0;}

for(j=0;j<5;j++)

printf(\}

2.将二维数组c[3][4]转换成以为数组[12]。

main()

{ int c[3][4],b[12],j,t,k=0; for(j=0;j<3;j++) for(t=0;t<4;t++)

scanf(\ for(j=0;j<3;j++)

for(t=0;t<4;t++) b[k++]=c[j][t];

for(j=0;j<12;j++) printf(\

3.计算一个3×3矩阵的主对角线的元素之和sum。

main()

{ int i,sum=0;

int a[3][3]={{-1,2,3},{6,7,-8}, {9,11,20}}; for (i=0; i<=2; i++) sum=sum+a[i][i]; printf(\}

4.将两个字符串连接起来(不用strcat)。

main()

{ char s1[20], s2[20]; int i=0, j; gets(s1); gets(s2);

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

for(j=0;str[j]!= '\\0';j++) { s1[i]=s2[j]; i++;} s1[i]= '\\0';

puts(s1); puts(s2);

}

习题7 指 针

一、选择题

1.有以下程序:

void fun(char *a, char *b) { a=b; (*a)++; } main()

{ char c1='A',c2='a',*p1,*p2; p1=&c1; p2=&c2; fun(p1,p2); printf(\}

程序运行后的输出结果是 。 A.Ab B.aa 2.有以下程序:

#include main()

{ printf(\

C.Aa D.Bb

程序运行后的输出结果是 。 A.0 C.?1 3.已定义以下函数:

fun(int *p) { return *p; }

B.1

D.NULL没定义,出错

该函数的返回值是 。

A.不确定的值

B.形参p中存放的值

C.形参p所指存储单元中的值 D.形参p的地址值 4.若有定义:int *p[3];,则以下叙述中正确的是 。

A.定义了一个基类型为int的指针变量p,该变量具有3个指针

B.定义了一个指针数组p,该数组含有3个元素,每个元素都是基类型为int的指针

C.定义了一个名为*p的整型数组,该数组含有3个int类型元素

D.定义了一个可指向一维数组的指针变量p,所指一维数组应具有3个int类型元素 5.以下程序中函数scmp的功能是:返回形参指针s1和s2所指字符串中较小字符串的首地址。

#include #include

char *scmp(char *s1, char *s2) { if(strcmp(s1,s2)<0) return(s1);

else return(s2); }

main()

{ int i; char string[20], str[3][20]; for(i=0;i<3;i++) gets(str[i]);

strcpy(string,scmp(str[0],str[1])); /*库函数strcpy对字符串进行复制*/ strcpy(string,scmp(string,str[2])); printf(\}

若运行时依次输入:abcd、abba和abc三个字符串,则输出结果为 。 A.abcd B.abba C.abc D.abca 6.有以下程序段:

main()

{ int a=5, *b, **c; c=&b; b=&a; … }

程序在执行了c=&b;b=&a;语句后,表达式**c的值是 。 A.变量a的地址 B.变量b中的值 C.变量a中的值 D.变量b的地址 7.有以下程序:

#include main()

{ char str[ ][20]={\printf(\}

程序运行后的输出结果是 。 A.0 B.5 8.已定义以下函数:

C.7 D.20

fun(char *p2, char *p1)

{ while((*p2=*p1)!='\\0'){ p1++;p2++; } }

函数的功能是 。

A.将p1所指字符串复制到p2所指内存空间 B.将p1所指字符串的地址赋给指针p2

C.对p1和p2两个指针所指字符串进行比较

D.检查p1和p2两个指针所指字符串中是否有'\\0'

9.有以下程序:

main()

{ int a[3][3],*p,i; p=&a[0][0];

for(i=0;i<9;i++) p[i]=i+1; printf(\}

程序运行后的输出结果是 。

A.3 B.6 10.有以下程序:

C.9 D.2

main()

{ int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7&&*(p+i)%2) {k=k+*(p+i); i++;} printf(\}

执行后的输出结果是 。

A.58 B.56 11.有以下程序:

C.45 D.24

main()

{ char a,b,c,*d; a='\\'; b='\\xbc';

c='\\0xab'; d=\

printf(\}

编译时会出现的错误是 。

A.程序中只有a='\\';语句不正确 B.b='\\xbc';语句不正确 C.d=\语句不正确 D.a='\\';和 c='\\0xab';语句都不正确 12.若有以下定义,则对a数组元素的正确引用是 。

A.*&a[5] B.a+2 C.*(p+5) D.*(a+2) 13.有以下程序:

int *f(int *x,int *y) { if(*x<*y) return x; else

return y; }

main()

{ int a=7,b=8,*p,*q,*r; p=&a; q=&b; r=f(p,q);

printf(\}

执行后的输出结果是 。 A.7,8,8 B.7,8,7 14.有以下程序:

C.8,7,7 D.8,7,8

main()

{ char *s[]={\p=s[1];

printf(\}

执行后的输出结果是 。

A.n,two

B.t,one

C.w,one 15.有以下程序:

D.o,two

main()

{ int x[8]={8,7,6,5,0,0}, *s; s=x+3;

printf(\}

执行后的输出结果是 。

A.随机值 B.0 C.5 D.6 16.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。

#define N 10

void arrin(int x[N]) { int i=0; while(i

scanf(\}

在横线处应填入的是 。

A.x+i B.&x[i+1] 17.有以下程序:

C.x+(i++. D.&x[++i]

main()

{ char *s=\

printf(\}

执行后的输出结果是 。

A.赋初值的字符串有错 C.5,2 18.阅读以下函数:

B.6,7 D.6,2

fun(char *sl,char *s2) { int i=0;

while(sl[i]==s2[i]&&s2[i]!='\\0') i++; return(sl[i]=='\\0'&&s2[i]=='\\0'); }

此函数的功能是 。

A.将s2所指字符串赋给s1

B.比较s1和s2所指字符串的大小,若s1比s2的大,函数值为1,否则函数值为0

C.比较s1和s2所指字符串是否相等,若相等,函数值为1,否则函数值为0 D.比较s1和s2所指字符串的长度,若s1比s2的长,函数值为1,否则函数值为

0

19.有以下程序:

main()

{ char str[ ]=\while(*ps) ps++;

for(ps--;ps-str>=0;ps--) puts(ps);}

执行后的输出结果是 。

A.yz<回车>xyz C.z<回车>yz<回车>xyz 20.有以下程序:

B.z<回车>yz

D.x<回车>xy<回车>xyz

main()

{ int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;

pa=a;

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

if(i<2) pa[1][i]=pa[1][i]-1; else pa[1][i]=1;

printf(\}

执行后的输出结果是 。

A.7 B.6 C.8 21.有以下程序:

void fun(int *a,int i,int j) { int t; if (i

{ t=a[i];a[i]=a[j];a[j]=t;

fun(a,++i,--j); } }

main()

{ int a[]={1,2,3,4,5,6},i; fun(a,0,5);

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

执行后的输出结果是 。

A.6 5 4 3 2 1 B.4 3 2 1 5 6 C.4 5 6 1 2 3 22.有以下程序:

main(int argc,char *argv[]) { int n,i=0;

while(argv[1][i]!='\\0') { n=fun(); i++;}

printf(\

}

int fun()

{ static int s=0; s+=1;

return s; }

假设程序编译、连接后生成可执行文件exam.exe,若键入以下命令exam 123〈回车〉

则运行结果为 。

A.6 B.8 C.3 23.下列程序的输出结果是 。

main()

{ char a[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5; printf(\}

A.非法 B.a[4]的地址 C.5 24.下列程序的运行结果是 。

void fun(int *a, int *b) { int *k;

k=a; a=b; b=k; }

main()

{ int a=3, b=6, *x=&a, *y=&b; D.无确定值

D.1 2 3 4 5 6

D.4

D.3

fun(x,y);

printf(\}

A.6 3 B.3 6 25.下面程序的输出结果是 。

C.编译出错 D.0 0

main()

{ int a[ ]={1,2,3,4,5,6,7,8,9,0},*p; p=a;

printf(\}

A.0 B.1 26.以下程序的输出结果是 。

C.10 D.9

main()

{ int i, x[3][3]={1,2,3,4,5,6,7,8,9};

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

A.1,5,9 B.1,4,7 27.以下程序的输出结果是 。

C.3,5,7 D.3,6,9

main()

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

for(j=0;j<=i;j++)s+=a[i][j]; printf(\}

A.18 B.19 C.20 D.21 28.若有语句:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是 。

A.i=*p; B.*p=*&j; C.i=&j; D.i=**p; 29.以下定义语句中,错误的是 。

A.int a[]={1,2}; B.char *a[3]; C.char s[10]=\ D.int n=5,a[n]; 30.以下程序的输出结果是 。

char cchar(char ch) {

if(ch>='A'&&ch<='Z') ch=ch-'A'+'a'; return ch; }

main()

{ char s[]=\while(*p)

{ *p=cchar(*p); p++; }

printf(\}

A.abc+ABC=DEFdef C.abcaABCDEFdef 31.以下程序的输出结果是 。

char s[]=\printf (\

B.abc+abc=defdef D.abcabcdefdef

A.9 B.12 C.13 32.以下程序调用findmax函数返回数组中的最大值。

findmax(int *a,int n)

D.14

{ int *p,*s;

for(p=a,s=a; p-a

main()

{ int x[5]={12,21,13,6,18}; printf(\}

在横线处应填入的是 。

A.p>s B.*p>*s 33.以下程序的输出结果是 。

C.a[p]>a[s] D.p-a>p-s

main()

{ char cf[3][5]={\printf(\}

A.\ B.\ C.\ D.\34.以下不能正确进行字符串赋初值的语句是 。

A.char str[5]=\ B.char str[]=\C.char *str=\ D.char str[5]={'g','o','o','d'}; 35.以下程序的输出结果是 。

f(int *b , int m, int n) { int i,s=0;

for(i=m;i

main()

{ int x,a[]={1,2,3,4,5,6,7,8,9}; x=f(a,3,7);

printf(\}

A.10 B.18 36.若有以下定义和语句:

int s[4][5],(*ps)[5]; ps=s;

C.8 D.15

则对s数组元素的正确引用形式是 。

A.ps+1 B.*(ps+3) C.ps[0][2] 37.以下程序的输出结果是 。

#include #include main()

{ char b1[8]=\while (--pb>=b1) strcpy(b2,pb); printf(\}

D.*(ps+1)+3

A.8 B.3 C.1 D.7 38.若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是 。

A.p=q; B.*p=*q; C.n=*q; D.p=n; 39.有以下程序:

void fun(char *c,int d) { *c=*c+1;d=d+1;

printf(\}

main()

{ char a='A',b='a';

fun(&b,a); printf(\}

程序运行后的输出结果是 。

A.B,a,B,a C.A,b,A,b 40.有以下程序:

B.a,B,a,B D.b,B,A,b

main()

{ char a[]={'a','b','c','d','e','f','g','h','\\0'}; int i,j; i=sizeof(a); j=strlen(a); printf(\}

程序运行后的输出结果是 。

A.9,9 B.8,9 C.1,8 D.9,8 41.以下程序中的reverse函数的功能是将a所指数组中的内容进行逆置。

void reverse(int a[],int n) { int i,t;

for(i=0;i

{t=a[i];a[i]=a[n-1-i];a[n-1-i]=t;} }

main()

{ int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; reverse(b,8);

for(i=6;i<10;i++) s+=b[i]; printf(\}

程序运行后的输出结果是 。

A.22 B.10 42.有以下程序:

C.34 D.30

main()

{ int aa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}}; int i,s=0;

for(i=0;i<4;i++) s+=aa[i][1]; printf(\}

程序运行后的输出结果是 。

A.11 B.19 43.有以下程序:

#include main()

{ char *p=\printf(\}

C.13 D.20

程序运行后的输出结果是 。

A.12 B.15 44.有以下程序:

C.6 D.5

#include

main(int argc,char *argv[]) { int i,len=0;

for(i=1;i

程序编译连接后生成的可执行文件是ex1.exe。

若运行时输入带参数的命令行是:

ex1 abcd efg 10<回车>

则运行的结果是 。

A.22 B.17 45.有以下程序:

C.12 D.9

int fa(int x) { return x*x; } int fb(int x)

{ return x*x*x; }

int f(int (*f1)(),int (*f2)(),int x) { return f2(x)-f1(x); } main() { int i;

i=f(fa,fb,2); printf(\}

程序运行后的输出结果是 。

A.-4 B.1 46.有以下程序:

C.4 D.8

void ss(char *s,char t) { while(*s)

{ if(*s==t) *s=t-'a'+'A'; s++; } }

main()

{ char str1[100]=\ss(str1,c); printf(\}

程序运行后的输出结果是 。

A.ABCDDEFEDBD C.abcAAfefAbA 47.有以下程序:

B.abcDDfefDbD D.Abcddfefdbd

#include

main()

{ char *p,*q;

p=(char *)malloc(sizeof(char)*20); q=p; scanf(\}

若从键盘输入:abc def<回车>,则输出结果是 。

A.def def B.abc def C.abc d D.d d 48.以下程序中函数f的功能是将n个字符串,按由大到小的顺序进行排序。

#include

void f(char (*p) [10], int n) { char t[20]; int i,j; for(i=0;i

if(strcmp(p[i],p[j])<0)

{ strcpy(t,p[i]);strcpy(p[i],p[j]);strcpy(p[j],t);} }

main()

{ char p[][10]={\f(p,5);

printf(\}

程序运行后的输出结果是 。

A.6 B.4 C.5 二、填空题

1.以下程序运行后的输出结果是 。

D.3

main()

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

for(j=i+1;j<3;j++) *(*(a+j)+i)=0;

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

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

}

}

2.以下程序运行后输入:3,abcde<回车>,则输出结果是 。

#include move(char *str, int n) { char temp; int i; temp=str[n-1];

for(i=n-1;i>0;i--) str[i]=str[i-1]; str[0]=temp; }

main()

{ char s[50]; int n, i, z; scanf(\z=strlen(s);

for(i=1; i<=n; i++) move(s, z); printf(\}

3.有以下程序,若输入的字符串是:abc123edf456gh,则执行程序后输出 。

#include #include main()

{ char s[80], d[80]; int i,j; gets(s);

for(i=j=0;*(s+i)!='\\0';i++)

if(*(s+i)>='0' && *(s+i)<='9' ) { *(d+j)= *(s+i); j++; } *(d+j)='\\0'; puts(d); }

4.若有以下程序:

main() { int a[4][4]={{1,2,-3,-4},{0,-12,-13,14} ,{-21,23,0,-24},{-31,32,-33,0}}; int i,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++)

{ if(*(*(a+i)+j)<0) continue; if(*(*(a+i)+j ==0) break; s+=*(*(a+i)+j; printf(\} } }

执行后的输出结果是 。

5.以下函数的功能是删除字符串s中的所有数字字符,请填空。

viod dele(char *s) { int n=0,i;

for(i=0;s[i];i++)

if( ) s[n++]=s[i]; s[n]= ; }

6.设函数findbig已定义为求3个数中的最大值。以下程序将利用函数指针调用findbig函数,请填空。

main()

{ int findbig(int,int,int); int (*f)(),x,y,z,big; f= ;

scanf(\big=(*f)(x,y,z);

printf(\}

7.以下程序通过函数指针p调用函数fun,请在填空栏内,写出定义变量p的语句。

void fun(int *x,int y) { … } main()

{ int a=10,b=20;

; /定义变p */ p=fun; p(&a,&b); … }

8.下列程序的输出结果是 。

void fun(int *n) { while( (*n)--);

printf(\}

main()

{ int a=100; fun(&a); }

9.以下程序的输出结果是 。

main()

{ int arr[ ]={30,25,20,15,10,5}, *p=arr; p++;

printf(\}

10.以下程序中,主函数调用了LineMax函数,实现在N行M列的二维数组中,找出每一行上的最大值,请填空。

#define N 3 #define M 4

void LineMax(int (*x)[M]) { int i,j,p;

for(i=0; i

for(j=1; j

if(x[i][p]

printf(\} }

main()

{ int x[N][M]={1,5,7,4,2,6,4,3,8,2,3,1}; }

11.设有以下程序:

main()

{ int a, b, k=4, m=6, *p1=&k, *p2=&m; a=pl==&m;

b=(*p1)/(*p2)+7; printf(\printf(\}

执行该程序后,a的值为 ,b的值为 。

12.若已定义int a[10], i;,以下fun函数的功能是:在第一个循环中给前10个数组元素依次赋1、2、3、4、5、6、7、8、9、10;在第二个循环中使a数组前10个元素中的值对称折叠,变成1、2、3、4、5、5、4、3、2、1,请填空。

fun( int a[ ]) { int i;

for(i=1; i<=10; i++) *(a+i-1) = ; for(i=0; i<5; i++) =*(a+i); }

13.以下程序运行后的输出结果是 。

main()

{ char s[ ]=\

for ( p=s ; p

14.以下程序的输出结果是 。

main()

{ int b[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0; for(i=0;i<3;i++)

for(j=0;j<=i;j++) t=t+* (* (b+i)+ b[j][j]) }; printf(\}

15.以下程序的输出结果是 。

main()

{ char *p=\long *q; q=(long*)p; q++;

r=(char*)q;

printf(\}

16.以下程序的输出结果是 。

main()

{ char s[]=\s[3]='\\0';

printf(\}

17.以下程序的输出结果是 。。

main()

{ int x=0;

sub(&x,8,1);

printf(\}

sub(int *a,int n,int k) { if(k<=n) sub(a,n/2,2*k); *a+=k; }

18.以下程序中,select函数的功能是:在N行M列的二维数组中,选出一个最大值作为函数值返回,并通过形参传回此最大值所在的行下标,请填空。

#define N 3 #define M 3

select(int a[N][M],int *n) { int i,j,row=1,colum=1; for(i=0;i

if(a[i][j]>a[row][colum]){row=i;colum=j;} *n= ;

return ; }

main()

{ int a[N][M]={9,11,23,6,1,15,9,17,20},max, n; max=select(a,&n);

printf(\}

19.mystrlen函数的功能是计算str所指字符串的长度,并作为函数值返回,请填空。

int mystrlen(char *str) { int i;

for(i=0; *(str+i)!= ;i++); return( ); }

20.下面程序的运行结果是 。

void swap(int *a,int *B) { int *t;

t=a;a=b;b=t; }

main()

{ int x=3,y=5,*p=&x,*q=&y; swap(p,q);

printf(\}

21.设有定义int n,*k=&n;以下语句将利用指针变量k读写变量n中的内容,请将语句补充完整。

scanf(\printf(\

22.fun函数的功能是:首先对a所指的N行N列的矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回,请填空。

#include #define N 100

int fun(int(*a)[N])

{ int row,col,max,min; for(row=0;row

{for(max=a[row][0],col=1;col

else if( ) min=max; }

return min; }

23.函数sstrcmp()的功能是对两个字符串进行比较。当s所指字符串和t所指字符相等时,返回值为0;当s所指字符串大于t所指字符串时,返回值大于0;当s所指字符串小于t所指字符串时,返回值小于0(功能等同于库函数strcmp),请填空。

#include

int sstrcmp(char *s,char *t) { while(*s&&*t&&*s== ) {s++;t++; }

return ; }

24.下面程序的运行结果是 。

char a[]=”123456789”,*p; int i=0; p=a;

while(*p)

{ if(i%2==0) * p='#'; p++; i++; } }

puts(a);

25.下面程序的运行结果是 。

char a[]=\int s=0;

for(p=a;*p!= '\\0';p++) s=10*s+*p-'0'; printf(\

26.若有定义int a[3][5],i,j;(且0<=i<3,0<=j<5),则a[i][j]的地址可用以下几种形式表示: (1)&a[i][j] (2)a[i]+j

(3) +j (4)&a[0][0]+ (5)a[0]+

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

28.若有定义int (*p)[4],则p是一个指向 的指针。

29.若有定义char *string=\,则*(string+2)的值为 。 30.下面程序段中,for循环的执行次数为 。

char *s=\for(;*s!= '\\0';s++) printf(\

31.下面程序段的运行结果是 。

char str[]=\printf(\

32.若有语句:int a[4]={0,1,2,3},*p; p=&a[1];则++(*p)的值是 。 33.若有定义int a[2][3]={2,4,6,8,10,12};则*(a[1]+2)的值是 ,*(&a[0][0]+5)的值是 。

34.下面程序的运行结果是 。

#include \fun(char *s) { char *p=s;

while(*p) p++; return(p-s);} main()

{char *a=\int i; i=fun(a);

printf(\}

35.下面程序的功能是比较两个字符串是否相等,若相等则返回1,否则返回0,请填空。

#include \fun(char *s,char *t)

{ int i=0;

while( && ) i++;

if (s[i]== '\\0'&&t[i]== '\\0') return 1; else return 0; }

main()

{ char a[20], b[20]; int i;

gets(a); gets(b); i=fun(a,b); printf(\}

三、编程题(用指针实现)

1.编写程序,输入3个字符串,按从小到大的顺序排列并输出。

2.编写程序,输入一行文字,找出其中大写字母、小写字母、空格、数字以及其他字符的个数。

3.编写程序,将任意一个字符串从第一个字符开始间隔地输出该串。例如,字符串是abcdef,那么输出ace。

4.编写一个函数,求一个字符串的长度(不能调用strlen函数)。

5.编写程序,将一个长度不超过4个的数字字符串转换成一个整数。如字符串是 “3248”,则转换的整数是3248。