当前位置:文档之家› C习题指针部分

C习题指针部分

C习题指针部分
C习题指针部分

指针

一、选择题

1.变量的指针,其含义是指该变量的____________。

A.值

B.地址

C.名

D.一个标志

2.已知int *p,a;则语句“p=&a;”中的运算符“&”的含义是____________。

A. 逻辑与运算

B.位与运算

C.取指针内容

D.取地址变量

3.对于类型相同的指针变量,不能进行()运算。

A.+

B.—

C. =

D.==

4.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是____________。

A.a,point,*&a

B.&*a,&a,*point

C.*&point,*point,&a

D.&a,&*point ,point

5.设指针x指向的整型变量值为28,则printf(“%d\n”,++*x);的输出是____________。

A.27

B.28

C. 29

D.30

6.若有说明:int *p,m=5,n;以下正确的程序段是____________。

A.p=&n; scanf(“%d”,&p);

B.p=&n; *p=m;

C.scanf(“%d”,&n); *p=n;

D.p=&n; scan(“%d”,*p);

7.若有以下定义和语句:则下列说法正确的是____________。

double r==99,,*p=&r

*p=r;

A.以上两处的*p含义相同,都说明给指针变量p赋值

B.在double r==99,*p=&r,把r的地址赋给了p所指的存储单元

C.语句“*p=r”,把变量r的值赋给指针变量p

D.语句“*p=r”,取变量r的值放回r中

8.执行下面程序段后,变量a的值为____________。

int *p,a,b=1;

p=&a;*p=l0;a=*p+b;

A.12

B.11

C.10

D.编译错误

9.若有说明:int i, j=7,*p=&i; 则i与j;等价的语句是____________。

A. i=*p ;

B. *p=*&j ;

C. i=&j ;

D.i=**p;

10.设p1和p2均为指向同一个int 型一维数组元素的指针变量,k为int型变量,下列不正确的语句是____________。

A. k=*p1+*p2;

B. k=*p1*(*p2);

C. p2=k;

D.p1=p2;

11.下面程序应能对两个整型变量的值进行交换。以下正确的说法是____________。

main()

{ int a=10,b=20;

printf(“(1)a=%d,b=%d\n”,a,b);

swap(&a,&b);

}

swap(int p,int q)

{ int t;

t=p;p=q;q=t;}

A.该程序完全正确

B.该程序有错,只要将语句swap(&a,&b);中的参数改为a,b即可

C.该程序有错,只要将语句swap()函数中的形参p和q以及t均定义为指针(执行语句不变)即可

D.以上说法都不正确

12.若有以下定义,则表达式*p++的值是____________。

int a[5]={10,20,30,40,50},*p=&a[1];

A.20

B. 30

C.21

D. 31

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

main()

{int a[]={9,8,7,6,5,4,3,2,l,0),*p=a+5;

printf(“%d”,*--p);

}

A.5

B.a[4]的地址

C.3

D.4

14. 设有以下语句,则____________不是对a数组的正确引用,其中0<=i<10。

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

A.a[p-a]

B. *(&a[i])

C. p[i]

D.*(*(a+1))

15.在二维数组a中,元素a[0][1]的地址可表示为____________。

A. *(*(a+0)+1)

B. *(a+1)

C. &a

D.*a+1

16.执行以下程序段,m的值为____________。

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

int m,*p;

p=&a[0][0];

m=(*p)*(*(p+2))*(*(p+4));

A.12

B.13

C.14

D.15

17.若有定义:int a[2][3],则对a数组的第i行j列元素地址的正确引用为____________。

A.*(a[i]+j)

B.(a+i)

C.*(a+j)

D.a[i]+j

18.若有定义:int a[2][3],则对a数组的第i行j列元素值的正确引用为____________。

A.*(*(a+i)+j)

B.(a+i)[j]

C.*(a+i+j)

D.*(a+i)+j

19.若有定义 int a[4][6];则能正确表示a数组中任一元素a[i][j](i,j均在有效范围内)地址的表达式是____________。

A.&a[0][0]+6*i+j

B. &a[0][0]+4*j+i

C. &a[0][0]+4*i+j

D. &a[0][0]+6*j+i

20.指针所指向的字符串的长度为____________。

char *s=”\t\’Name\\Address\n” ;

A. 19

B.18

C.15

D.17

21.已知:char b[5],*p=b;则正确的赋值语句是____________。

A. b=”abcde”

B. *b=”abcde”

C. p=”abcde”

D. *p=”abcde”

22.设有如下的程序段:

char str[]=”hello”;

char *ptr;

ptr=str;

执行完上面的程序段后,*(ptr+5)的值为____________。

A. ‘0’

B.’\0’

C. 不确定的值

D.’0’的地址

23.若有说明语句

char a[]="It is mine";

char *p="It is mine";

则以下不正确的叙述是_____________。

A.a+1表示的是字符t的地址

B.p指向另外的字符串时,字符串的长度不受限制

C.p变量中存放的地址值可以改变

D.a中只能存放10个字符

24.下列说明不正确的是____________。

A.char a[10]=“china”;

B.char a[10],*p=a;p=“china”;

C.char *a;a=“china”;

D.char a[10],*p;p=a=“china”;

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

#include

#include

main()

{char *s1="AbDeG";

char *s2="AbdEg";

s1+=2;s2+=2;

printf("%d\n",strcmp(s1,s2));

}

A.正数

B.负数

C.零

D.不确定的值

26.若有以下定义:

char *cc[2]={“1234”,“5678”}

则正确的叙述是____________。

https://www.doczj.com/doc/1b16789308.html,数组的两个元素中各自存放了字符串“1234”和“5678”的首地址

https://www.doczj.com/doc/1b16789308.html,数组的两个元索分别存放的是含含4个字符的一维字符数组的首地址

https://www.doczj.com/doc/1b16789308.html,是指针变量,它指向含有两个数组元素的字符型一维数组

https://www.doczj.com/doc/1b16789308.html,数组元素的值分别是“1234”和“5678”

27.设有定义:int(*ptr) [M];其中的标示符ptr是____________。

A.M个指向整型变量的指针

B. 指向M个整型变量的函数指针

C. 一个指向具有M个整型元素的一维数组的指针

D. 具有M个指针元素的一维指针数组,每个元素都是一个指向整数变量的指针

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

main()

{int char[2][5]={“4934”,“8254”},*p[2];

int i,j,s=0:

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

p[i]=ch[i];

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

for(j=0;p[i][j]>’\0’&&p[i][j]<=’9’;j==2)

s=l 0*s+p[i][j]-‘0’;

printf(“%d\n”,s);

}

A. 4385

B. 43825

C. 49825

D. 493825

29.若有以下说明语句,请选出哪个是对C数组元素的正确引用____________。

int c[4][5],(*p)[5];p=c;

A. p+1

B. *(p+3)

C. *(p+1)+3

D. *(*p+2)

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

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

p=a;

A. *(p+2)

B. p[2]

C. p[1]+1 (D)(p+1)+2

31.若有以下的说明和语句,则在执行for语句后,*(*(pt+1)+2)表示的数组元素是()

int t[3][3],*pt[3],k;

for(k=0;k<3;k++) pt[k]=t[k];

A. t[2][0]

B. t[2][2]

C. t[1][2]

D. t[2][1]

. 若有以下定义,则对a数组的非法引用时____________。

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

A. *(a[0]+2)

B. *pa[2]

C. pa[0][0]

D. *(pa[1]+2)

32.若有以下定义:

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

int (*p)[3]=x

则能正确表示数组元素x[1][2]的表达式是____________。

A. *((*p+1)[2])

B. (*p+1)+2

C. *(*(p+5))

D. *(*(p+1)十2)

33.设有以下的程序段,则对数组的错误引用是____________。

int a[12]={0},*p[3],**pp,i;

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

p[i]=&a[i*4];

pp=p;

A. pp[0][1]

B. a[10]

C. p[3][1]

D. *(*(p+2)+2)

34.已有定义int(*p)();指针p可以____________。

A. 代表函数的返回值

B.指向函数的入口地址

C. 表示函数的类型

D. 表示函数返回值的类型

35.以下正确的叙述是____________。

A. C语言允许main函数带形参,且形参个数和形参名均可由用户指定

B. C语言允许main函数带形参,形参名只能是argc和argv

C. 当main函数带形参时,传给形参的值只能从命令行中得到

D. 若有说明:main(int argc,char *argv),则形参argc的值必须大于l

36.main函数的正确说明形式是。

A. main(int argc,char *argv)

B.main(int abc,char **abv)

37.语句int(*ptr)();的含义是。

A.ptr是指向函数的指针,该函数返回一个int型数据

B.ptr是指向int型数据的指针变量

C.ptr是指向一维数组的指针变量

D.ptr是一个函数名,该函数的返回值是指向int型数据的指针

38.若有函数max(a,b),并且已使函数指针变量p指向函数max,当调用该函数时,正确的调用方法是____________。

A. (*p)max(a,b);

B. *pmax(a,b);

C. (*p)(a,b);

D. *p(a,b);

39.已有函数max(a,b),为了让函数指针变量p指向函数max,正确的赋值方法是____________。

A. p=max

B. *p=max

C. p=max(a,b)

D. *p=max(a,b)

二、填空题

1.内存区的每一个字节有一个编号,这就是______________,一个变量的地址称为该变量的

______________。、地址指针

2.“*”称为( )运算符,“&”称为()运算符。指向,取地址

3.执行语句printf(“%d”,NULL);后的输出结果是_______________。空或null或‘0’或0

4.在C语言中,数组名是一个不可改变的__________________。地址常量

5.设int a[10],*p=a;则对a[2]的正确引用是p[ __________ ]和*p( ________)。2 +2

6.若有以下定义,则不移动指针p,且通过指针p引用值为97的数组元素的表达式是___________。*(p+5)int w[10]={23,54,10,33,47,97,72,70,61,102},*p=w;

7.设有char *a=”ABCD”;则printf(“%s”,a);的输出时_____________;而printf(“%c”,*a);的输出是_________________。ABCD A

8.无返回值函数fun用来求出两整数x,y之和,并通过形参z将结果传回,假定x,y,z均是整型,则函数应定义为_____________________________________。void add(int x, int y , int * z)

9.函数调用时,若形参是一个指针变量,而对应的实参是一个数组名,则函数参数的传递方式是_____________传递。地址

10.如果要定义一个返回指针值的函数,其一般定义形式为_________。类型名 *函数名(参数表)11.已知函数原型void fun(int *x,int *y);则指向fun的函数指针变量p的定义是___________________。void (*p)()或者 void (*p) (int *x,int *y)

12.若有以下说明和语句,表达式*(p+1)+2的含义是____________。 a[1][2]的地址

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

13.设有以下语句:

int s[2][3]={0},(*p)[3];

p=s;

则p+1表示数组____________。 s[1]

14.设有以下语句:

int s[2][3]={0},(*p)[3];

p=s;

则p+1表示数组____________。 s[1]

15.若有定义int a=10,*p1=&a,**p=&p1;则表达式**p2的值是______________。10

16.设有一个名为“myfile.c”的C程序,其主函数是main(int argc,char *argv[])。如果在执行时,输入的命令为myfile aa bb cc↙,则形式参数argc的值是_______________。4

17.若有定义int *p;请写出利用malloc函数使p指向一个双精度型的动态存储单元的完整语句为______________。p=(int *)malloc(sizeof(double))

18.调用库函数malloc,使字符指针st指向具有9个字节的动态存储空间的语句是_______________。st=(char *)malloc(9)或者st=(char *)malloc(9*sizeof(char))

19.指针p分配9个int型动态内存单元的语句为___________________。

p=(int *)malloc(sizeof(double)*9)

三、程序阅读

1. 分析下列程序,写出运行结果______________。0

#include “stdio.h”

void fun( int *n)

{while((*n)--);

printf(“%d”,++(*n));}

main()

{int a=100;

fun(&a);

}

2. 分析下列程序,写出运行结果______________。 3,6

#include “stdio.h”

void fun( int *a , int *b)

{int *k;

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

}

main()

{int a=3,b=6,*x=&a,*y=&b;

fun(x,y);

printf(“%d,%d”,a,b);

}

3. 分析下列程序,写出运行结果______________。 -5 ,-12 ,-7

#include

sub( int x ,int y, int *z)

{*z=y-x;

}

main()

{int a,b,c;

sub(10,5,&a);

sub(7,a,&b);

sub(a,b,&c);

printf(“%d,%d,%d\n”,a,b,c);

}

4.分析下列程序,写出运行结果______________。v1=5,v2=8,v3=3,v4=1 main()

{char *a=”12134211”;

int v1=0,v2=0.v3=0,v4=0,k;

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

switch(s[k])

{default :v4++;

case ‘1’:v1++;

case ‘3’:v3++;

case ‘2’ :v2++;}

5.分析下列程序写出运行结果______________。10

#include

void main()

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

p++;

printf(“%d\n”,*p+3);}

6. 分析下列程序,写出运行结果______________。 5 #include “stdio.h”

ss( char *s)

{int *p=s;

while(*p) p++;

return (p-s);

}

main()

{int *a=”abcde”;

int i;

i=ss(a);

printf(“%d\n”,i)

}

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

int b=2;

int func(int *a)

{b+=*a;return (b);}

main()

{int a=2,res=2;

res+=func(&a);

printf(“%d\n:,res);}

8.下面程序得运行结果是____________。C ga

main()

{char a[]=”C programming”,b[]=“C language”;

char *p1,*p2;

int i;

pl=a;p2=b;

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

if(*(p1+i)==*(p2+i))

prinf(“%c”,*(p1+i));

}

9.下面程序的运行结果是____________。7654321

#include

#include

fun(char *w,int n)

{char t,*s1,*s2;

s1=w;s2=w+n-1;

while(s1

}

main()

{char *p;

p="1234567";

fun(p,strlen(p));

puts(p);

}

10.分析下列程序,写出运行结果______________。xyzcdBCD #include

main()

{char *p1,*p2,str[50]=”xyz”;

p1=”abcd”;

p2=”ABCD”;

strcpy(str+2,strcat(p1+2,p2+1));

printf(“%s”,str);

}

11.分析下列程序,写出运行结果______________。。krowteN #include

main()

{char str[]=”Network”,*p,*q,t;

p=q=str;

while(*q)q++;

q--;

for(;p

{t=*p;*p=*q;*q=t;}

printf(“%d\n”,*p+3);

puts(str);}

12.分析下列程序,写出运行结果。CDG

main()

{char a[]={“ABCDEFGH”,b[]=”abCDefgh”;

char *p1,*p2;

int k;

p1=a;p2=b;

for(k=0;k<=7;k++)

if(*(p1+k)==*(p2+k)) printf(“%c”,*(p1+k));

printf(“\n”);

}

13.分析下列程序,写出运行结果______________。123456789 main()

{char ch[3][4]={”123”,”456”,”78”},*p[3];

int i;

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

{p[i]=ch[i];

printf(“%s”,p[i]);}

14.分析下列程序,写出运行结果______________。6375

#include

void main(void)

{char ch[2][5]={“6937”,”7254”},*p[2];

int i,j,s=0;

for(i=0;i<2;i++) p[i]=ch[i];

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

for(j=0;p[i][j]>’\0’;j+=2)

s=10*s+p[i][j]-‘0’;

printf(“%d\n”,s);}

15.分析下列程序,写出运行结果______________。60

main()

{int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

int (*p)[4]=a,i,j,k=0;

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

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

k+=*(*(p+i)+j);

printf(“%d\n”,)k;}

16.设有以下定义和语句:

int **pp,*p,a=1 0,b=20;

pp=&p;

p=&a:

p=&b;

printf(“%d,%d\n”,*p,**pp);

则输出结果是____________。20,20

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

main()

{int a[5]={2,4,6,8,10},*p,**k;

p=a;k=&p;

printf(“%d”,*(p++));

printf(“%3\n”,**k);}

18.下面程序的运行结果是____________。9

main()

{int a[2][3]={1,3,5,7,9,11},*s[2],**pp,*p;

s[0]=a[0]; s[1]=a[1];

pp=s;

p=(int*)malloc(sizeof(int));

**pp=s[1][1];

p=*pp;

printf(“%d\n”,*p);

}

19.假定以下程序经编译和链接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入:PROG ABCDEFGH IJKL,则输出结果为________________________。 IJKLABCDEFGH

main(int argc,char *argv[])

{while(--arg>0) printf(“%s”,argv[argc]);

printf(“\n”);

}

四、程序填空

1.以下程序通过指针操作,找出输入的三个整数中最大的数并输出,请填空。a,b,c或者&x,&y,&z max=*b

或者max=y

#include

main()

{int x,y,z,max,*a=&x,*b=&y,*c=&z;

scanf(“%d,%d,%d”,____________________);

printf(“x=%d,y=%d,z=%d\n”,x,y,z);

max=*a;

if(max<*b) (_______________);

if(max<*c) (______________);

printf(“max=%d\n”,max);}

2.以下程序是用递归方法求数组中的最大值及其下标值。请填空。

#define M 10

void findmax(int *a,int n,int i,int *pk)

{if(i

{ if(a[i]>a[*pk]) ______________ ; a[*pk]=a[i]

findmax(______________ ); } a,n-1,i,pk

main()

{int a[M],i,n=0;

printf(”\nEnmr%d data:\n”,M);

for(i=0;i

findmax(a,M,0,&n);

printf(“The maximum is:%d\n”,a[n]);

printf(“it’S index is:%d\n”,n);

}

3.下面函数的功能是用递归方法求数组中的最大值及其下标。请填空。*p a,n,i+1,pk

void findmax(int *a,int n,int i,int *pk)

{if(i

{if(a[i]>a[*pk])__________________;

findmax(__________________);}

}

4.下面函数的功能是首先对a所指的N行N列矩阵,找出各行中的最大的数,再求这N个最大值中的最小的那个数作为函数值返回。请填空。a[row][col]>=max min>=max

#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

if( _______________ ) max=a[row][col];

if(row==0) min=max;

else if(_____________ )min=max;

}

return min;

}

5.下面程序的功能是通过函数ave()计算数组中各元素的平均值,请填空。

float ave(int *pa,int n)

{ int i;float avg=0.0;

for(i=0;i

avg=avg+______________ ;pa[i]

avg= ______________ ; avg/i

return avg;}

main()

{ int i,a[5]={2,4,6,8,1 0};

float mean;

mean=ave(a,5);

printf(“mean=%t\n”,mean);}

6.下面程序的功能是输出所给的一些字符串中最小的字符串,请填空。a[0] a[i] min min

#include

#include

void main()

{char *a[]={“bag”,”good”,”This”,”are”,”Zoo”,”park”},

char *min;

int i;

min=_____________;

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

if(strcmp____________<0) min=a[i];

priintf(“The min string is %s\n”,___________);

}

7.从键盘输入一串字符,以回车键结束。通过指针操作,统计其中数字字符的个数,请填空。*p *p p++ #include

main()

{int n=0;

char s[80],*p;

p=s;

printf(“输入一串字符,以回车键结束:\n’);

while((______________ =getchar())!=’\n’) p++;

p=s

while(______________ !=’\n’)

{if((*p>=’0’&&*p<=’9’) n++;

(______________);

}

printf(“数字字符的个数是:%d\n”,n);}

}

8.下面程序是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。请填空。

int ;

char s[80],*p;

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

{ s[i]=getchar();

if(s[i]==’\n’) break;

}

s[i]= ______________ ;

p= ______________ ;

while(*p) putchar(*p++);

9.函数fun的功能是:将字符串s中小标为奇数的字符复制两遍到新字符串t中,t中的字符按它原来在字符串s中出现的逆序排列(注意0为偶数),请填空。else 0 t[2*j+1]

#include “stdio.h”

#include ”string.h”

void fun(char *s, char *t)

{int i,j,slen;

slen=strlen(s);

if(slen%2) slen-=2; ______________ slen --;

for(i=slen,j___________;i>=0;i-=2)

{t[2*j]=s[i];

_________=s[i];

j++;}

t[2*j]=’\0’;}

main()

{ char a[70],b[70];

gets(a);

fun(a,b);

puts(b);

}

10.从键盘输入两个字符串,将第二个字符串连接到第一个字符串的后面,最后输出连接后第一个字符串的长度,请填空。++ =*q ++ ++

#include

main()

{char str1[70],str2[40],*p,*q;

int len=0;

printf(“输入第1个字符串:\n”);

gets(str1);

printf(“请输入第2个字符串:\n”);

gets(str2);

p=str1;

q=str2;

while(*p)

{len(______________;p++;}

while(*q)

{*p_____________;

p_____________;

q_____________;len++;}

11.以下程序通过指针操作,输入字符数组,并输出该数组中第n个字符之后的m个字符,请填空。p或者

str str+n p++

#include

#include

main()

{char str[20],*p;

int n,m,i;

p=str;

gets(______________);

do

{printf(“Input n,m(n+m<=strlen):”);

scanf(“%d%d ”,&n,&m)

}while(n<1||m<1||n+mstrlen(str));

p=( ______________);

for(i=0;i

{printf(“%c ”,*p); ;}

}

printf(“连接后字符串长度是:%d\n ”,len);}

12.下列程序的功能是:输入1~7的整数,输出对应的星期名,请填空: *name *(name+n) ps

#include

void main()

{char

*name[]={“Illegalday ”,”Monday ”,Tuesday”,”Wednesday ”,Thursday ”,Friday ”,”Saturday ”,

Sunday ”},*ps;

int n;

printf(”Input Day No:\n ”);

scanf(“%d ”,&n);

if(n<0) exit(1);

ps=(n<1||n>7)?_______________:______________;

printf(“Day No: 2d->%s\n ”,n_______________);

printf(“%d\n ”,*p+3);}

五、编程

1.请编写函数fun ,函数的功能是:计算n 门课程的平均分,计算结果作为函数值返回。

floatfun(float *a ,int n )

{int i ; float sum ;

for(I=0; i

return sun/n;

}

2.编写函数 void fun(float *sn, int n)来计算S,计算结果通过形参指针sn 传回;n 通过形参传入,n 的

值大于等于0。

1

n+21...+71-51+31-1=S void fun( float *sn, int n)

{ float s=0.0, w, f=-1.0;

int i=0;

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

{ f=–1* f;

w=f/(2*i+1);

s+=w;

}

*sn =s;

}

3.输入a,b两个整数,按先大后小的顺序输出a,b。

程序开头如下:

main ( )

{

int *p1,*p2,*p,a,b;

……2、main()

{ int *p1,*p2,*p,a,b;

p1=&a;p2=&b;

scanf("%d,%d",&a,&b);

if(a>b){p=p1;p1=p2;p2=p;}

printf("%3d%3d",*p1,*p2);}

4.有n个人围成一圈,顺序排号。从第1个人开始报数(从一到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

2.# include

void main( )

{ int i,k,m,n,num[50],*p;

printf(“Input number of person:n=”);

scanf(“%d”,&n);

p=num;

for(i=0;i

*(p+i)=i+1;

i=0;k=0;m=0;

while(m

{ if(*(p+i)!=0) k++;

if(k==3) { *(p+i)=0;k=0;m++;}

i++;

if(i==n) i=0;

}

while(*p==0) p++;

printf(“The last one is No.%d\n”,*p);}

5.通过指针数组p和一维数组a构成一个3×2的二维数组,并为a数组赋初值2、4、6、8、10、12。要求先按行的顺序输出此二维数组,然后再按列的顺序输出它。试编程。

2. # include

void main()

{ int i,j,a[6]={2,4,6,8,10,12},*p[3];

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

p[i]=&a[2*i];

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

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

printf(“%4d”,p[i][j]);

printf(“\n”);

}

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

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

printf(“%4d”,p[j][i]); )

printf(“\n”);

}

}

6.有一字符串,包含个字符。写一个函数。将此字符串中从第个字符开始的全部字符复制成为另一个字符

串。

main()

{int m;

char str1[20],str2[20];

gets(str1);

scanf(“%d”,&m);

if(strlen(str1)

else{copystr(str1,str2,m);

printf(“result:%s”,str2);}}

copystr(char*p1,char*p2,int m)

{int n;

n=0;

while(n

{n++;

p1++;}

while(*p1!=’\0’)

{*p2=*p1;

p1++;

p2++;}

*p2=’\0’;}

7.有一个数列,有10个数,设计一个函数,它能够从指定的位置开始的n个数按相反的顺序重新排列。例如数列为1,

2,3,4,5,6,7,8,9,10,假如从第三个位置开始,处理n=3个数,输出的数列为1,2,5,4,3,6,7,8,9,10,从第几个位置开始m从键盘输入,处理n个数也从键盘输入。

main()

{ int a[10]={2,4,6,8,10,12,14,16,18,20};

int m,n,i;

printf("Input begin number:m=");

scanf("%d",&m);

printf("Input next number:n=");

scanf("%d",&n);

inv(a,m,n);

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

printf("%3d",a[i]);}

inv(int a[10],int m,int n)

{ int *p,*q,temp;

p=a+m-1;q=a+m+n-1;

for(;p

{ temp=*p;*p=*q;*q=temp;}

}

8.从键盘输入一个字符串,然后按照下面要求输出一个新字符串。新串是在原串中每两个字符之间插入一个空格字符,如原串为abcd,则新串为a□b□c□d(□代表空格)。要求在函数insert(char *p)中完成新串的产生;并在函数中完成所有相应的输入和输出。

2. # include

void insert(char *p)

{ int i;

for(i=strlen(p);i>0;i--)

{ *(p+2*i)=*(p+i);

*(p+2*i-1)=’’;}

}

void main( )

{ char str[80];

int i;

gets(str);

insert(str);

printf(“Result is:%s\n”,str);

}

9. 有一个数列,有10个数,设计一个函数,它能够从指定的位置开始的n个数按相反的顺序重新排列。例如数列为1,2,3,4,5,6,7,8,9,10,假如从第三个位置开始,处理n=3个数,输出的数列为1,2,5,4,3,6,7,8,9,10,从第几个位置开始m从键盘输入,处理n个数也从键盘输入。

2.# include

void main() (1分)

{ int a[10]={2,4,6,8,10,12,14,16,18,20}; (1分)

int m,n,i;

printf("Input begin number:m=");

scanf("%d",&m);

printf("Input next number:n=");

scanf("%d",&n);

inv(a,m,n); (1分)

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

printf("%3d",a[i]);} (1分)

int inv (int a[10],int m,int n) (2分)

{ int *p,*q,temp; (1分)

p=a+m-1;q=a+m+n-1; (2分)

for(;p

{ temp=*p;*p=*q;*q=temp; } (3分)

}

10.在主函数中输入10个等长的字符串。用另一个函数对它们排序。然后在主函数输出这10个已经排好序的字符串。

2.#include

void sort(char *p)

{ int i,j;

char s[10],*smax,*smin;

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

{ smax=p+10*i;

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

{ smin=p+10*j;

if(strcmp(smax,smin)>0)

{ strcpy(s,smin);

strcpy(smin,smax);

strcpy(smax,s);

}

}

}

}

void main()

{ int i;

char *p,str[10][10];

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

scanf("%s",str[i]);

p=str;

sort(p);

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

printf("%s\n",str[i]); }

11.输入一个字符串,内有数字和非数字字符,如a123x456(空格)17960?302tab5876将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]…统计共有多少个整数,并输出这些数。

2.# include

void main( )

{ int findnum(char *pstr,int *pa); //函数声明

char str[50];

int i,n,a[10];

gets(str);

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

a[i]=0;

n=findnum(str,a); (2分)//n为数组a的实际长度,如只找到5个数,数组长度为5

if(n==0) printf("没找到任何数字!");

for(i=0;i

printf(“%d\n”,a[i]);

int findnum(char *pstr,int *pa)

{ int num,i=0; //i记录数组中共存放了几个数字

while(*pstr!='\0')

if((*pstr>='0')&&(*pstr<='9')) //如果*pstr是数字字符进入下面循环

while((*pstr>='0')&&(*pstr<='9')) (1分)

{ num=*pstr-'0'; //将*pstr(数字字符)转换为对应数字,赋给num

*pa=(*pa)*10+num; //将num不断加入pa所指向的数组a中的相应位置

pstr++; (2分) //pstr指向下一个字符

if((*pstr<='0')||(*pstr>='9')) { pa++;i++;}

/*如果下个字符不是数字字符,则表明在数组a中已存放完毕一个数字,现为

存放下一个数字做准备,将pa指向数组a的下一个单元,将数字计数i加1*/ }

else pstr++; //如果*pstr不是数字字符,则加1,看下一个

return(i); } //返回数组a存放的实际数字个数

c语言指针习题及答案69923

指针习题及答案 一.选择题 1.变量的指针,其含义是指该变量的 B 。 A)值B)地址C)名D)一个标志 2.已有定义int k=2;int *ptr1,*ptr2;且ptr1和ptr2均已指向变量k,下面不能正确执行的赋值语句是 B 。 A)k=*ptr1+*ptr2 B)ptr2=k C)ptr1=ptr2 D)k=*ptr1*(*ptr2) 3.若有说明:int *p,m=5,n;以下程序段正确的是 D 。 A)p=&n ; B)p = &n ; scanf(“%d”,&p); scanf(“%d”,*p); C)scanf(“%d”,&n); D)p = &n ; *p=n ; *p = m ; 4.已有变量定义和函数调用语句:int a=25;print_value(&a);下面函数的输出结果是 D 。 void print_value(int *x) { printf(“%d\n”,++*x); } A)23 B)24 C)25 D)26 5.若有说明:int *p1, *p2,m=5,n;以下均是正确赋值语句的选项是 C 。 A)p1=&m; p2=&p1 ; B)p1=&m; p2=&n; *p1=*p2 ; C)p1=&m; p2=p1 ; D)p1=&m; *p1=*p2 ; 6.若有语句:int *p,a=4;和p=&a;下面均代表地址的一组选项是 D 。 A)a,p,*&a B)&*a,&a,*p C)*&p,*p,&a D)&a,&*p,p 7.下面判断正确的是 C 。 A)char *a=”china”; 等价于char *a; *a=”china” ; B)char str[10]={“china”}; 等价于char str[10]; str[ ]={“china”;} C)char *s=”china”; 等价于char *s; s=”china” ; D)char c[4]=”abc”,d[4]=”abc”; 等价于char c[4]=d[4]=”abc” ; 8.下面程序段中,for循环的执行次数是 C 。 char *s=”\ta\018bc” ; for ( ; *s!=’\0’ ; s++) printf(“*”) ; A)9 B)7 C)6 D)5 9.下面能正确进行字符串赋值操作的是 C 。 A)char s[5]={“ABCDE”}; B)char s[5]={‘A’,’B’,’C’,’D’,’E’}; C)char *s ; s=”ABCDE” ; D)char *s; scanf(“%s”,s) ; 10.下面程序段的运行结果是 C 。 char *s=”abcde” ; s+=2 ; printf(“%d”,s); A)cde B)字符’c’C)字符’c’的地址D)不确定11.设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是 B 。 A)c=*p1+*p2 B)p2=c C)p1=p2 D)c=*p1*(*p2) 12.设有程序段:char s[ ]=”china”; char *p ; p=s ;则下面叙述正确的是 D 。A)s和p完全相同

C经典习题答案

1.在类作用域中能够通过直接使用该类的()成员名进行访问。 A. 私有 B. 公用 C. 保护 D. 任何 答案:D 2.小数类型和浮点类型都可以表示小数,正确说法:( ) A. 两者没有任何区别 B. 小数类型比浮点类型取值范围大 C.小数类型比浮点类型精度高 D. 小数类型比浮点类型精度低 答案:C 3.能作为C#程序的基本单位是( )。 A. 字符 B. 语句 C. 函数 D. 源程序文件 答案:B 4. 可用作C#程序用户标识符的一组标识符是( )。 A. void define +WORD B. a3_b3 _123 YN C. for -abc Case D. 2a DO sizeof 答案:B 5.引用类型主要有4种:类类型、数组类型、接口类型和()。 A.对象类型 B.字符串类型 C.委托类型 D.整数类型 答案:C 6.使用Dirctory类的下列方法,可以获取指定文件夹中的文件的是(). A.Exists() B.GetFiles() C.GetDirectories() D.CreateDirectory() 答案:B 7.加载窗体时触发的事件是( )。 A. Click B.Load C.GotFoucs D.DoubleClick

答案:B 8.改变窗体的标题,需修改的窗体属性是( )。 A. Text B. Name C.Title D. Index 答案:A 9.在接口的成员中,不能包含( ). A.属性 B.方法 C.事件 D.常量 答案:D 10.在C#中定义接口时,使用的关键字是( )。 A.interface B.: C.class D.overrides 答案:A 1.当在程序中执行到语句时,将结束所在循环语句中循环体的一次执行。 答案:continue 2.元素类型为double的2行5列的二维数组共占用字节的存储空间。 答案:80 3.C#数组类型是一种引用类型,所有的数组都是从System命名空间的类继承而来的引用对象。 答案:object 4.枚举是从System. 类继承而来的类型。 答案:Enum 5.一般将类的构造方法声明为访问权限。如果声明为private,就不能创建该类的对象。 答案:public或公有 6.类中声明的属性往往具有get()和两个函数。 答案:set() 7.对于方法,参数传递分为值传递和两种。

C语言经典例题和答案

一、求一个任意边长的矩形面积。 #include void main() {int w,h,sum; scanf("%d%d",&w,&h); sum=w*h; printf("area=%d\n",sum); } 二、求一个任意半径的圆的面积及周长。 #define PI 3.14159 #include void main() {float r,area,c; scanf("%f",&r); area=PI*r*r; c=2*PI*r; printf("area=%f\ncircle=%f\n",area,c); } 三、已知:w=5, y=4, z=2, 求表达式:w*y/z的值,并输出。 ##include void main() { int w,y,z,r; w=5; y=4; z=2; r=w*y/z; printf("%5d",r); } 一、从键盘上输入三个数,求出其中的最大值,并输出。 #include void main() {int a,b,c,max; scanf("%d%d%d",&a,&b,&c); max=a; if(max

#include #define PI 3.14159 #include void main() {float a,b,sum; a=30*PI/180; b=60*PI/180; sum=sin(a)+sin(b)+cos(a)+cos(60); printf("total=%f\n",sum); } 三、比较两个数的大小。如果x大于y,则输出:x>y,否则输出:x void main() {int x,y; scanf("%d,%d",&x,&y); if(x>y) printf("x>y\n"); else printf("x void main() {int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a>b) { t=b; b=a; a=t; } if(a>c) {t=a; a=c; c=t; } if(b>c) {t=b;b=c;c=t;} printf("%3d%3d%3d\n",a,b,c); }. 二、求自然数1~10之和。。 #include void main()

c和c++经典笔试题及答案

C++/C经典笔试题及答案 C++/C试题 本试题仅用于考查C++/C程序员的基本编程技能。内容限于C++/C常用语法,不涉及数据结构、算法以及深奥的语法。考试成绩能反映出考生的编程质量以及对C++/C的理解程度,但不能反映考生的智力和软件开发能力。 笔试时间90分钟。请考生认真答题,切勿轻视。 一、请填写BOOL , float, 指针变量与“零值”比较的 if 语句。(10分)提示:这里“零值”可以是0, 0.0 , FALSE或者“空指针”。例如 int 变量 n 与“零值”比较的 if 语句为: if ( n == 0 ) if ( n != 0 ) 请写出BOOL flag 与“零值”比较的if 语句: 请写出float x 与“零值”比较的if 语句: 请写出char *p 与“零值”比较的if 语句: char str[] = “Hello” ; char *p = str ; int n = 10; 请计算 sizeof (str ) = sizeof ( p ) = sizeof ( n ) =void Func ( char str[100]) { 请计算 sizeof( str ) = } void *p = malloc( 100 );请计算 sizeof ( p ) = 1、头文件中的 ifndef/define/endif 干什么用? 2、#include 和#include “filename.h” 有什么区别? 3、const 有什么用途?(请至少说明两种) 4、在C++ 程序中调用被 C编译器编译后的函数,为什么要加extern “C”声明? 5 // 第一个 for (i=0; i

C语言练习题(带答案)-绝对经典题目不看后悔

1单选题 1.(A)是构成C语言程序的基本单位。 A、函数 B、过程 C、子程序 D、子例程 2.C语言程序从C开始执行。 A) 程序中第一条可执行语句B) 程序中第一个函数 C) 程序中的main函数D) 包含文件中的第一个函数 3、以下说法中正确的是(C)。 A、C语言程序总是从第一个定义的函数开始执行 B、在C语言程序中,要调用的函数必须在main( )函数中定义 C、C语言程序总是从main( )函数开始执行 D、C语言程序中的main( )函数必须放在程序的开始部分 4.下列关于C语言的说法错误的是(B)。 A) C程序的工作过程是编辑、编译、连接、运行 B) C语言不区分大小写。 C) C程序的三种基本结构是顺序、选择、循环 D) C程序从main函数开始执行 5.下列正确的标识符是(C)。 A.-a1 B.a[i] C.a2_i D.int t 5~8题为相同类型题 考点:标识符的命名规则 (1)只能由字母、数字、下划线构成 (2)数字不能作为标识符的开头 (3)关键字不能作为标识符 选项A中的“-” ,选项B中“[”与“]”不满足(1);选项D中的int为关键字,不满足(3) 6.下列C语言用户标识符中合法的是(B)。 A)3ax B)x C)case D)-e2 E)union 选项A中的标识符以数字开头不满足(2);选项C,E均为为关键字,不满足(3);选项D中的“-”不满足(1); 7.下列四组选项中,正确的C语言标识符是(C)。 A)%x B)a+b C)a123 D)123 选项A中的“%” ,选项B中“+”不满足(1);选项D中的标识符以数字开头不满足(2) 8、下列四组字符串中都可以用作C语言程序中的标识符的是(A)。 A、print _3d db8 aBc B、I\am one_half start$it 3pai C、str_1 Cpp pow while D、Pxq My->book line# His.age 选项B中的“\”,”$” ,选项D中“>”,”#”,”.”,”-”不满足(1);选项C中的while为关键

最新版c语言经典习题100例(最全面)

C 语言习题100 例(最新整理版) 习题目录:(按住Ctrl 点击可以快速跳转到对应页面) 【程序1】 (5) 题目:有1、2、3、4 个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? (5) 【程序2】 (6) 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元 时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%; 40万到60万之间时高于40万元的部分,可提成3%; 60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? (6) 【程序3】 (7) 题目:一个整数,它加上100 后是一个完全平方数,再加上168 又是一个完全平方数,请问该数是多少? (7) 【程序4】 (7) 题目:输入某年某月某日,判断这一天是这一年的第几天? (7) 【程序5】 (8) 题目输入三个整数x,y,z请把这三个数由小到大输出。 (8) 【程序6】 (9) 题目用*号输出字母C的图案。 (9) 【程序7】 (9) 题目:输出特殊图案,请在C环境中运行,看一看,VeryBeautifuI! (9) 【程序8】 (9) 题目:输出9*9 口诀。 (9) 【程序9】 (10) 题目:要求输出国际象棋棋盘。 (10) 【程序10】 (10) 题目:打印楼梯,同时在楼梯上方打印两个笑脸。 (10) 【程序11】 (11) 题目:古典问题:有一对兔子,从出生后第3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? (11) 【程序12】 (11) 题目:判断101-200 之间有多少个素数,并输出所有素数。 (11) 【程序13】 (12) 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1 的三次方+5的三次方+3的三次方。 (12) 【程序14】 (12) 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5 。 (12) 【程序15】 (13) 题目利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用 C 表示。 (13) 【程序16】 (13) 题目:输入两个正整数m和n ,求其最大公约数和最小公倍数。 (13) 【程序17】 (14) 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。14【程序18】 (14)

数据结构(C语言)【经典题库】含参考答案

《数据结构与算法》复习题 选择题 1.在数据结构中,从逻辑上可以把数据结构分为 C 。 A.动态结构和静态结构 B.紧凑结构和非紧凑结构 C.线性结构和非线性结构 D.内部结构和外部结构 2.数据结构在计算机内存中的表示是指 A 。 A.数据的存储结构 B.数据结构 C 3 A 。 7.算法分析的目的是 C ,算法分析的两个主要方面是 A 。 (1)A.找出数据结构的合理性 B.研究算法中的输入和输出的关系 C.分析算法的效率以求改进 C.分析算法的易读性和文档性 (2)A.空间复杂度和时间复杂度 B.正确性和简明性 C.可读性和文档性 D.数据复杂性和程序复杂性 8.下面程序段的时间复杂度是 O(n2) 。 s =0;

for( I =0; inext ==NULL C.head->next ==head D head!=NULL

15.带头结点的单链表head为空的判定条件是 B 。 A.head == NULL B head->next ==NULL C.head->next ==head D head!=NULL 16.若某表最常用的操作是在最后一个结点之后插入一个结点或删除最后一个结点,则采用 D 存储方式最节省运算时间。 A.单链表 B.给出表头指针的单循环链表 C.双链表 D.带头结点的双循环链表17.需要分配较大空间,插入和删除不需要移动元素的线性表,其存储结构是 B 。 20 21 B 。 22 A.删除单链表中的第一个元素 B.删除单链表中的最后一个元素 C.在单链表第一个元素前插入一个新元素 D.在单链表最后一个元素后插入一个新元素 23.与单链表相比,双链表的优点之一是 D 。 A.插入、删除操作更简单

C语言指针习题__附答案[1]

一、选择题 1.变量的指针,其含义是指该变量的_________. a)值b)地址 c)名d)一个标志 2.若有语句int *point,a=4;和point=&a;下面均代表地址的一组选项是_____. a)a,point,*&a b)&*a,&a,*point c)*&point,*point,&a d)&a,&*point ,point 3.若有说明;int *p,m=5,n;以下正确的程序段的是________. a)p=&n; b)p=&n; scanf("%d",&p); scanf("%d",*p); c)scanf("%d",&n); d)p=&n; *p=n; *p=m; 4. 以下程序中调用scanf函数给变量a输入数值的方法是错误的,其错误原因是________. main() { int *p,*q,a,b; p=&a; printf(“input a:”); scanf(“%d”,*p); …… } a)*p表示的是指针变量p的地址 b)*p表示的是变量a的值,而不是变量a的地址 c)*p表示的是指针变量p的值 d)*p只能用来说明p是一个指针变量 5. 已有变量定义和函数调用语句:int a=25; print_value(&a); 下面函数的正确输出结果是________. void print_value(int *x) { printf(“%d\n”,++*x);} a)23 b)24 c)25 d)26 6.若有说明:long *p,a;则不能通过scanf语句正确给输入项读入数据的程序段是 A) *p=&a;scanf("%ld",p);

计算机二级c语言第九章 数组和指针习题与答案

第九章数组和指针 1、有以下程序 main() { int a[]={2,4,6,8,10}, y=0, x, *p; p=&a[1]; for(x= 1; x< 3; x++) y += p[x]; printf("%d\n",y); } 程序运行后的输出结果是 A)10 B)11 C)14 D)15 2、有以下程序 void sum(int a[]) { a[0] = a[-1]+a[1]; } main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; sum(&a[2]); printf("%d\n", a[2]); } 程序运行后的输出结果是 A)6 B)7 C)5 D)8 3、有以下程序 main() { int p[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++< 7) if(p[i]%2) j+=p[i]; printf("%d\n",j); } 程序运行后的输出结果是 A)42 B)45 C)56 D)60 4、设有定义语句 int x[6]={2,4,6,8,5,7},*p=x,i; 要求依次输出x数组6个元素中的值,不能完成此操作的语句是 A)for(i=0;i<6;i++) printf("%2d",*(p++)); B)for(i=0;i<6;i++) printf("%2d",*(p+i)); C)for(i=0;i<6;i++) printf("%2d",*p++); D)for(i=0;i<6;i++) printf("%2d",(*p)++); 5、有以下程序 #include < stdio.h > main() { int a[]={1,2,3,4,5,6,7,8,9,10,11,12,},*p=a+5,*q=NULL; *q=*(p+5); printf("%d %d\n",*p,*q); } 程序运行后的输出结果是 A)运行后报错 B)6 6 C)6 11 D)5 10

C语言经典例题目解析

1、猴子吃桃子:猴子摘下若干个桃子,第一天吃了桃子的一半多一个,以后每天吃了前一天剩下的一半多一个,到第十天吃以前发现只剩下一个桃子,问猴子第一天共摘了几个桃子 #include main() {int s=1,i; for(i=9;i>=1;i--) s=(s+1)*2; printf("s=%d\n",s); } 2、鸡兔同笼:有若干只鸡兔同在一个笼子里,从上面数,有35个头;从下面数,有94只脚。问笼中各有几只鸡和兔? #include main() {int a,b; for(a=1;a<=40;a++)/* 120只脚如果全是鸡的话60只,但是总头是40,所以循环到40 */ for (b=1;b<=30;b++) /* 同理如果全是兔的话最多120/4=30 所以循环到30 */ {if((a==40-b)&&(a==60-2*b)) /* 同时满足总头数40总脚数120 */ printf("There are %d chichens \nThere are %d rabbits",a,b);} } 3、百钱买百鸡:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何? #include main( ) {int cocks,hens,chicks; cocks=0; while(cocks<=19) {hens=0; while(hens<=33) {chicks=100-cocks-hens; if(5*cocks+3*hens+chicks/3==100&&chicks%3==0) printf("%d,%d,%d\n",cocks,hens,chicks); hens=hens+1;} cocks=cocks+1;}} #include main() {int x,y,z; for(x=0;x<=20;x++) for(y=0;y<=33;y++) {z=100-x-y; if(15*x+9*y+z==300) printf("x=%d y=%d z=%d\n",x,y,z); } }

C经典例题

东风冷雪提供 /* 1.0用函数模板实现任何两个简单类型数据交换,并给出实例加以验证!(请先预习教材函数模板相关知识) */ #include using namespace std; template void change(T*x,T*y) { T temp; temp=*x; *x=*y; *y=temp; } int main() { int a,b; float c,d; cout<<"输入二个整数a,b :"; cin>>a>>b; change(&a,&b); cout<<"二个整数交换结果为:"<>c>>d; change(&c,&d); cout<<"二个小数交换结果:"< using namespace std; inline void p(char a) { if('0'>s;

p(s); return 0; } /*3.0 编写三个名为add的重载函数,分别实现两个整数、 两个实数和两个复数相加。*/ #include using namespace std; struct complex { int r_real; int r_imagine; }; typedef struct complex comp; comp e,f; int add(int x,int y) { return x+y; } double add(double x,double y) { return x+y; } void add(comp e,comp f) { int z1,z2; z1=e.r_real+f.r_real; z2=e.r_imagine+f.r_imagine; cout<<"二个复数相加的结果为"<>a>>b; cout<<"a+b="<>c>>d; cout<<"a+b="<>e.r_real>>e.r_imagine; cout<<"输入第二个复数的实部与虚部 "; cin>>f.r_real>>f.r_imagine; add(e,f);

c语言指针部分题答案

#include int substring(char *s,char *t); int main() { char s[50]; char t[20]; int num; scanf("%s%s",s,t); num=substring(s,t); printf("%d\n",num); return 0; } int substring(char *s,char *t) { char *st=s; char *tt=t; int num=0; int offset=0; for(;*st!='\0';) { offset=0; for(;*tt!='\0';) { if(*st==*tt) { st++,tt++,offset++; } else break; } if(*tt=='\0') num++; else { st=st-offset+1; } tt=t; } return num; } #include void change(char *s); void insert(char *s);

int main() { char s[100]; scanf("%s",s); change(s); insert(s); printf("%s\n",s); return 0; } void change(char *s) { for(;*s!='\0';s++) { if(((*s)>'A'&&(*s)<='V')||((*s)>='a'&&(*s)<'v')) *s=(*s)+4; if(((*s)>='W'&&(*s)<='Z')||((*s)>='w'&&(*s)<='z')) *s=(*s)-22; } } void insert(char *s) { char temp[100]; int size=0,i; for(i=0;s[i]!='\0';i++) { temp[size]=s[i]; size++; temp[size]=' ',size++; } temp[size]='\0'; for(i=0;temp[i]!='\0';i++) s[i]=temp[i]; s[i]='\0'; } #include int replace(char *s); int main() { char s[50]; int num; scanf("%s",s);

最新版c语言经典习题100例(最全面)

C语言习题100例(最新整理版) 习题目录:(按住Ctrl点击可以快速跳转到对应页面) 【程序1】 (5) 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? (5) 【程序2】 (6) 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成 1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? (6) 【程序3】 (7) 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? (7) 【程序4】 (7) 题目:输入某年某月某日,判断这一天是这一年的第几天? (7) 【程序5】 (8) 题目:输入三个整数x,y,z,请把这三个数由小到大输出。 (8) 【程序6】 (9) 题目:用*号输出字母C的图案。 (9) 【程序7】 (9) 题目:输出特殊图案,请在c环境中运行,看一看,VeryBeautiful! (9) 【程序8】 (9) 题目:输出9*9口诀。 (9) 【程序9】 (10) 题目:要求输出国际象棋棋盘。 (10) 【程序10】 (10) 题目:打印楼梯,同时在楼梯上方打印两个笑脸。 (10) 【程序11】 (11) 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? (11) 【程序12】 (11) 题目:判断101-200之间有多少个素数,并输出所有素数。 (11) 【程序13】 (12) 题目:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。 (12) 【程序14】 (12) 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 (12) 【程序15】 (13) 题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。 (13) 【程序16】 (13) 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。 (13) 【程序17】 (14) 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。 (14) 【程序18】 (14)

C经典编程练习题

C++经典编程例题(1) 1、(已验证!)计算铁路运费。已知从甲地到乙地,每张票托运行李不超过50公斤时,按每公斤0.13元,超过50公斤,超过部分按每公斤0.2元计算。输入行李重量w,计算运费y. #include using namespace std; void main() { float money=0,weight; cout<<"请输入货物重量(单位:千克):"; cin>>weight; if (weight<0) cout<<”数据错误!”< 50) money = 50 * 0.13 + (weight - 50) * 0.2; cout<<"\n总费用是:"< #include using namespace std; void main() { double a,b,c,p,x1,x2,D; cout<<"请输入3个数:"<

D=b*b-4*a*c; if (D<0) cout<<"方程无解!"<0) { p=-b/(2*a); x1=p+sqrt(D)/(2*a); x2=p-sqrt(D)/(2*a); cout<<"方程有两个不同的实根。"<>n; for (i=1;i<=n;i++) s=i*s; cout<

C语言复习题及答案

一.单项选择题 1.下列选项中,不是转义字符集中的符号是( C )。 A \\ B \’ C 074 D \0 2. 下列给出的符号串中,不属于C语言保留字的是( B )。 A switch B cher C case D else 3. 下列给出的符号串中,不能作为C语言标识符的是( C )。 A a_2 B _2a C a.3 D a_3 4. 下列属于C语言字符常量的是( C )。 A ‘abc’ B “\n” C ‘a’ D ‘a\0’ 5. 字符串”ABC”再内存占用的字节数为( B )。 A 3 B 4 C 6 D 8 6. 设有宏定义“#define R 2+3”,则R*R的宏替换结果正确的是( B )。 A (2+3)*(2+3) B 2+3*2+3 C 5*5 D 5.0*5.0 7. 设整形变量I的值为3,则表达式i---i的值为( A )。 A 0 B 1 C 2 D 3 8. 表达式“10!=9”的值为( D )。 A true B 非零值 C 0 D 1 9. 设有语句int a=3;则执行了语句a+=a-=a*a;后,变量a的值为( D )。 A 3 B 0 C 9 D -12 10. 下列选项中,正确的赋值表达式为( C )。 A a=7+b+c=a+7 B a=7+b++=a+7 C a=(7+b,b++,a+7) D a=7+b,c=a+7 11. 若有以下定义语句:char a;float c; double d; 则表达式a*b+d-c值的类 型为( D )。 A float B int

C char D double 12. 用十进制数表示表达式“12||012”的运算结果是( A )。 A 1 B 0 C 14 D 12 13. 下列一组运算符中,优先级别最高的运算符是( C )。 A <= B = C % D && 14. 设定“ char a=3,b=6,c;”,计算表达式c=(a^b)<<2后c的二进制值是 ( D )。 A 00011100 B 00000111 C 00000001 D 00010100 15. 设x,y,z,t 均为int类型,则执行下列语句串后,变量t的值为(C )。 X=y=z=0; If(x=y) t=z; Else t=!z; A 不定值 B 2 C 1 D 0 16. 设整形变量m1值为3,m2值为2,m3值为1,执行下列语句后,整形变量 m4值为( D )。 Switch(m1=m2==m3+1) { case1:m4=1;break; case2:m4=3;break; case3:m4=2;break; default:m4=4; } A 1 B 2 C 3 D 4 17. 设有数据定义语句“int a[200];”,下列数组元素引用中下标不越界的是 ( A )。 A a[-1] B a[0] C a[201] D a[200] 18. 若有以下数据定义语句,则数值为4的表达式是( A )。 int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}; A a[‘g’-‘c’] B a[4]

100个经典c语言例题(带答案)

100个经典c语言例题(带答案) 经典C源程序100例- -1 经典C源程序100例【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 2.程序源代码:m... C语言经典程序100例 2009-02-26 19:44 | (分类:默认分类) 经典C源程序100例- - 1 经典C源程序100例 【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 2.程序源代码: main() { int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) for (k=1;k<5;k++) { if (i!=k&&i!=j&&j!=k) /*确保i、j、k三位互不相同*/ printf("%d,%d,%d\n",i,j,k); } } ============================================================== 【程序2】 题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提 成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于 40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数? 1.程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长整型。

C语言指针习题及答案

指针主要内容的习题及答案 ?选择题 1. 变量的指针,其含义是指该变量的 __B ____________ 。 A )值 B )地址 C )名 D )一个标志 2. 已有定义int k=2;int *ptr1,*ptr2; 且ptrl 和ptr2均已指向变量k ,下面不 能正确执行的赋值语句是 B 。 4.已有变量定义和函数调用语句:int a=25;print_value (&a ); 下面函数的输出 结果是 D __________________ void prin t_value(i nt *x) { printf( “ %d\n” ,++*x); } A) 23 B ) 24 C ) 25 D ) 26 5.若有说明:int *p1, *p2,m=5,n; 以下均是正确赋值语句的选项是 ____ C ____________ 。 A) p 仁&m; p2=&p1 ; B ) p 仁&m; p2=&n; *p1 =*p2 ; C ) p 仁&m; p2=p1 ; D ) p 仁&m; *p 仁*p2 ; 6. 若有语句:int *p,a=4;和p=&a ;下面均代表地址的一组选项是 ____________ D _________ 。 A) a,p,*&a B )&*a,&a,*p C ) *&p,*p ,&a D )&a,&*p,p 7. 下面判断正确的是__C _________________ 。 A) char *a= ” china ” ; 等价于 char *a; *a= ” china ” ; B) char str[1O]={“ china ” };等价于 char str[1O]; str[ ]={ “ china ” ;} C) char *s= ” china ” ; 等价于 char *s; s= ” china ” ; A) k=*ptr1+*ptr2 B ) ptr2=k C ) ptr1=ptr2 3.若有说明:int *p,m=5,n; A ) p=&n ; seanf( “ %d ,&p); C ) scanf( “ %d ,&n); *p=n ; 以下程序段正确的是 B scanf ( D *p = m ; D ) k=*ptr1*(*pt ⑵ D 。 )p = &n ; “%d ,*p); )p = &n ;

C语言经典例题和答案

一、求一个任意边长得矩形面积。 #include <stdio。h〉 void main() {int w,h,sum; scanf("%d%d",&w,&h); sum=w*h; printf(”area=%d\n”,sum); } 二、求一个任意半径得圆得面积及周长、 #definePI 3、14159 #include <stdio。h> void main() {floatr,area,c; scanf(”%f",&r); area=PI*r*r; c=2*PI*r; printf("area=%f\ncircle=%f\n”,area,c); } 三、已知:w=5, y=4, z=2, 求表达式:w*y/z得值,并输出、 ##include〈stdio.h> void main() { int w,y,z,r; w=5; y=4; z=2; r=w*y/z; printf(”%5d”,r); } 一、从键盘上输入三个数,求出其中得最大值,并输出。 #include 〈stdio、h> void main() {int a,b,c,max; scanf("%d%d%d”,&a,&b,&c); max=a; if(max

#define PI 3.14159 #include <math。h> void main() {float a,b,sum; a=30*PI/180; b=60*PI/180; sum=sin(a)+sin(b)+cos(a)+cos(60); printf("total=%f\n”,sum); } 三、比较两个数得大小。如果x大于y,则输出:x>y,否则输出:x〈y。#include<stdio。h> void main() {int x,y; scanf(”%d,%d”,&x,&y); if(x〉y) printf("x〉y\n”); else printf(”x〈y\n”); } 一、输入a、b、c三个值,按从小到大排序输出。 #include 〈stdio。h〉 void main() {int a,b,c,t; scanf("%d%d%d",&a,&b,&c); if(a〉b) { t=b; b=a; a=t; } if(a〉c) {t=a; a=c; c=t; } if(b>c) {t=b;b=c;c=t;} printf("%3d%3d%3d\n",a,b,c); }、 二、求自然数1~10之与。。 #include 〈stdio.h> void main() {int i,sum;

相关主题
文本预览
相关文档 最新文档