文档库 最新最全的文档下载
当前位置:文档库 › C语言6指针

C语言6指针

C语言6指针
C语言6指针

1、假设指针p1已经指向了某个整型变量,要使指针p2也指向同一个变量,则下面各项中正确的是:A.p2=**p1 B.p2=*&p1 C.p2=*p1 D.p2=&*p1

确定[D] 教师批改:

2、若有以下定义和语句:

char *s1="12345",*s2="1234";

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

则输出结果是_____。A.4 B.5

C.9

D.10

确定[B] 教师批改:

3、下列程序段的输出结果是_____。

void fun(int *x, int *y)

{ printf("%d %d", *x, *y); *x=3; *y=4;} main()

{ int x=1,y=2;

fun(&y,&x);

printf("%d %d",x, y);

} A.2 1 4 3 B.1 2 1 2

C.1 2 3 4

D.2 1 1 2

确定[A] 教师批改:

4、以下程序的输出结果是

fut( int **s,int p[2][3])

{ **s=p[1][1];}

main( )

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

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

fut(&p,a);

print("% ",*p);

}

A.1

B.7

C.9

D.11

确定[C] 教师批改:

5、假设指针p已经指向某个整型变量x,则*p相当于: A.&x B.&p

C.x

D.*x

确定[C] 教师批改:

6、若有定义:int a[3][4];不能表示数组元素a[1][1]的是_____。 A.*(a[1]+1)

B.*(&a[1][1])

C.(*(a+1))[1]

D.*(a+5)

确定[A] 教师批改:

7、若有定义和语句:

int **pp,*p,a=10,b=20; pp=&p;p=&a;p=&b;

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

则输出结果是() A.10,10 B.10,20

C.20,10

D.20,20

确定[D] 教师批改:

8、若有以下的定义:int a[]={1,2,3,D,5,6,7,8,9,10},*p=a 则值为3的表达式是A.p+=2,*(p++) B.p+=2,*++p C.p+=3,*p++ D.p+=2,++*p

确定[B] 教师批改:

9、若有以下定义和语句:

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

则不能表示a数组元素的表达式是 A.*p

B.a[10]

C.*a

D.a[p-a]

确定[B] 教师批改:

10、若有以下定义和语句:

int w[2][3],(*pw)[3];pw=w;

则对w数组元素的非法引用是_____。

A.*(w[0]+2)

B.*(pw+1)[2]

C.pw[0][0]

D.*(pw[1]+2)

确定[D] 教师批改:

11、设有定义:

struct sk{

int a;

float b;

}data,*p;

若有p=&data;,则对data中的a域的正确引用是____。A.(*p).data.a B.(*p).a

C.p->data.a

D.p.data.a

确定[D] 教师批改:

12、设有如下定义:char *aa[2]={"abcd","ABCD"}; 则以下说法中正确的是 A.aa数组元素的值分别是"abcd"和"ABCD" B.aa是指针变量,它指向含有两个数组元素的字符型一维数组

C.aa数组的两个元素分别存放的是含有D 个字符的一维字符数组的首地址

D.aa数组的两个元素中各自存放了字符'a'和'A'的地址

确定[B] 教师批改:

13、以下c语言函数声明中,不正确的是:

A.void fun (int x, int y);

B.fun (int x, int y);

C.int fun (int x,y);

D.char *fun (char *s);

确定[C] 教师批改:

14、以下程序输出的值为?

main()

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

p=a;

printf("%d\n",*p+9);

} A.1 B.9

C.10

D.0

确定[C] 教师批改:

15、有以下程序

main()

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

printf("%d\n", *p + *q);

}

程序运行后的输出结果是_____。A)16 B)10

C)8 D)6

确定[B] 教师批改:

16、若有语句:char *line[5];,以下叙述中正确的是( ) A)定义line是一个数组,每个数组元素是一个基类型为char的指针变量B)定义line是一个指针变量,该变量可以指向一个长度为5的字符型数组

C)定义line是一个指针数组,语句中的*号称为间址运算符D)定义line是一个指向字符型函数的指针

确定[D] 教师批改:

17、有以下程序

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

确定[C] 教师批改:

18、有以下程序

prt(int *m,int n)

{

int i;

for(i=0;i

m[i]++;

}

main()

{

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

prt(a,5);

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

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

}

程序运行后的输出结果是_____。A)1,2,3,4,5,B)2,3,4,5,6,

C)3,4,5,6,7,D)2,3,4,5,1,确定[B] 教师批改:

19、有以下程序

#include

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] 教师批改:

20、已有定义:int i,a[10],*p;,则合法的赋值语句是_____。A)p=100; B)p=a[5]; C)p=a[2]+2; D)p=a+2;

确定[D] 教师批改:

21、有以下程序段

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 C)8 D)9

确定[D] 教师批改:

22、有以下程序

void sum(int *a)

{ a[0]=a[1];}

main()

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

for(i=2;i>=0;i--)&nb

sp; sum(&aa[i]);

printf(“%d\n”,aa[0]);

}

执行后的输出结果是_____。A) 4 B)3

C)2 D)1

确定[A] 教师批改:

23、有以下程序

main()

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

s=x+3

printf("%d\n",s[2]);

}

执行后输出结果是_____。A)随机值B)0

C)5 D)6

确定[B] 教师批改:

24、以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。

#define N 10

void arrin(int x[N])

{ int i=0;

while(i

scanf("%d", );

}

在下划线处应填入的是_____。A)x+i B)&x[i+1]

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

确定[D] 教师批改:

25、以下程序调用findmax函数返回数组中的最大值

findmax(int *a,int n)

{ int *p,*s;

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

if ()s=p;

return(*s);

}

main()

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

printf("%d\n",findmax(x,5));

}

在下划线处应填入的是_____。A)p>s B)*p>*s

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

确定[B] 教师批改:26、若有定义:int aa[8];。则以下表达式中不能代表数组元aa[1]的地址的是_____。A)&aa[0]+1 B)&aa[1]

C)&aa[0]++ D)aa+1

确定[A] 教师批改:

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

main()

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

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

} A)非法B)a[4]的地址

C)5 D)3

确定[C] 教师批改:

28、下面程序的输出结果是_____。

main()

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

p=a;

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

} A)0 B)1

C)10 D)9

确定[C] 教师批改:

29、以下程序的输出结果是_____。

main()

{ int i, k, a[10], p[3];

k=5;

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

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

for (i=0;i<3;i++)k+=p[i] *2;

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

} A)20 B)21

C)22 D)23

确定[B] 教师批改:

30、以下函数返回a所指数组中最小的值所在的下标值

fun(int *a, int n)

{ int i,j=0,p;

p=j;

for(i=j;i

if(a[i]

return(p);

}

在下划线处应填入的是_____。A)i=p B)a[p]=a[i]

C)p=j D)p=i

确定[B] 教师批改:

31、若已定义:

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

其中0≤i≤9, 则对a数组元素不正确的引用上_____。A)a[p-a] B)*(&a[i])C)p[i] D)a[10]

确定[D] 教师批改:

32、下列程序执行后的输出结果是_____。

void func(int *a,int b[])

{ b[0]=*a+6; }

main()

{ int a,b[5];

a=0; b[0]=3;

func(&a,b); printf("%d \n,b[0]);

} A)6 B)7

C)8 D)9

确定[D] 教师批改:

33、若有以下调用语句,则不正确的fun函数的首部是_____。

main()

{ …

int a[50],n;

fun(n, &a[9]);

} A)void fun(int m, int x[])B)void fun(int s, int h[41])

C)void fun(int p, int *s)D)void fun (int n, int a)

确定[D] 教师批改:

34、以下程序的输出结果是_____。

main()

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

int i;

i=8;

p=a+i;

printf("%s\n",p-3);

} A)6 B)6789

C)‘6‘D)789

确定[A] 教师批改:35、下面程序把数组元素中的最大值放入a[0]中。则在if 语句中的条件表达式应该是_____。

main()

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

for(i=o;i<10;i++,p++)

if(________)*a=*p;

printf("%d",*a);

} A)p>a B)*p>a[0]

C)*p>*a[0] D)*p[0]> *a[0]

确定[B] 教师批改:

36、设有如下定义:

int arr[]={6,7,8,9,10};

int * ptr;

则下列程序段的输出结果为_____。

ptr=arr;

* (ptr+2)+=2;

printf ("%d,%d\n",*ptr,*(ptr+2)); A)8,10 B)6,8

C)7,9 D)6,10

确定[D] 教师批改:

37、若有以下定义和语句:

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

则不能表示a数组元素的表达式是_____。A)*p B)a[10]

C)*a D)a[p-a]

确定[B] 教师批改:

38、若有以下的定义:

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

则值为3的表式是_____。A)p+=2, *(p++)B)p+=2,*++p

C)p+=3, *kp++ D)p+=2,++*p

确定[A] 教师批改:

39、若有以下说明:

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

则数值为6的表达式是_____。A)*p+6 B)*(p+6)

C)*p+=5 D)p+5

确定[C] 教师批改:

40、下列程序的输出结果是_____。

main()

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

p=a; k=&p;

printf("%d",*(p++)); printf ("%d\n",* *k); } A)4 4 B)2 2 C)2 4 D)4 6

确定[A] 教师批改

41、执行以下程序后,y的值是_____。

main ()

{ int a[]={2,4,6,8,10};

int y=1,x,*p;

p=&a[1];

for(x=0;x<3;x++)y + = * (p + x);

printf("%d\n",y); } A)17 B)18

C)19 D)20

确定[C] 教师批改:

42、下面程序的输出是_____。

main()

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

printf("%d\n",*(p+2));} A)3 B)4

C)1 D)2

确定[A] 教师批改:

43、以下程序调用findmax函数求数组中值最大的元素在数组中的下标,请选择填空。

# include

findmax (s , t , k )

int *s , t , *k;

{ int p; for(p=0,*k=p;p

if (s[p] > s[*k] )______; }

main()

{ int a[10] , i , k ;

for (i=0 ; i<10 ; i + + )scanf ("%d",&a[i]);

findmax (a,10,&k );

printf ("%d,%d\n" , k , a[k] ); } A)k=p B)*k=p-s

C)k=p-s D)*k=p

确定[B] 教师批改:

44、若有以下说明和语句,int c[4][5],(*p)[5];p=c;能正确引用c数组元素的是A)p+1 B)*(p+3)

C)*(p+1)+3 D)*(p[0]+2))

确定[A] 教师批改:45、若有定义:int *p[3];, 则以下叙述中正确的是_____。A)定义了一个基类型为int 的指针变量p,该变量具有三个指针B)定义了一个指针数组p,该数组含有三个元素,每个元素都是基类型为int的指针

C)定义了一个名为*p的整型数组,该数组含有三个int类型元素D)定义了一个可指向一维数组的指针变量p,所指一维数组应具有三个int类型元素

确定[B] 教师批改:

46、有以下程序

main()

{ int a[3][3], *p, i;

p=&a [0][0] ;

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

printf("%d\n",a[1][2]);

}

程序运行后的输出结果是A)3 B)6

C)9 D)2

确定[B] 教师批改:

47、若有以下定义和语句:

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

ps=s;

则对s数组元素的正确引用形式是A)ps+1 B)*(ps+3)

C)ps[0][2] D)*(ps+1)+3

确定[B] 教师批改:

48、若有以下定义:

char s[20]="programming",*ps=s;

则不能代表字符o的表达式是A)ps+2 B)s[2]

C)ps[2] D)ps+=2,*ps

确定[A] 教师批改:

49、若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是A)&t[3][2] B)t[3]

C)t[1] D)t[2]

确定[B] 教师批改:

50、下列程序执行后的输出结果是

main()

{ int a[3][3], *p,i;

p=&a[0][0];

for(i=p; i<9; i++)p[i]=i+1;

printf("%d \n",a[1][2]);

} A)3 B)6

C)9 D)随机数

确定[B] 教师批改:

51、以下程序的输出结果是

main()

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

for(i=0;i<4;i+=2)printf ("%d ",p[i]);

} A)5 2 B)5 1

C)5 3 D)9 7

确定[C] 教师批改:

52、执行以下程序段后,m的值为

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

int m,*p;

p=&a[0][0];

m=(*p)*(*(p+2))*(*(p+4)); A)15 B)14

C)13 D)12

确定[A] 教师批改:

53、若有以下说明:

int w[3][4]={{0,1},{2,4},{5,8}};

int(*p)[4]=w;

则数值为4的表达式是_____。A)*w[1]+1 B)p++,*(p+1)

C)w[2][2] D)p[1][1]

确定[D] 教师批改:

54、若有以下的说明和语句:

main()

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

fpr(k=o; k<3;k++)pt[k]=t[k];

}

则以一选项中能正确表示t数组元素地址的表达式是A)&t[3][2] B)*pt[0]

C)*(pt+1)D)&pt[2]

确定[D] 教师批改:

55、设有以下定义:

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

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

则下列能够正确表示数组元素a[1][2]的表达式是A)*((*prt+1)[2]) B)*(*(p+5))

C)(*prt+1)+2 D)*(*(a+1)+2) 确定[B] 教师批改

56、下面程序的输出是

int aa[3][3]={{2},{4},{6}};

main()

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

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

{ if(i==0)

aa[i][i+1]=*p+1;

else

++p;

printf("%d",*p);}

} A)23 B)26

C)33 D)36

确定[] 教师批改:

57、若有以下说明和语句,请选出哪个是对c数组元素的正确引用

int c[4][5], (*cp)[5];

cp=c; A)cp+1 B)*(cp+3)

C)*(cp+1)+3 D)*(*cp+2)

确定[] 教师批改:

58、设有说明int(*ptr)[m];其中的标识符ptr是。A)M个指向整型变量的指针B)指向M个整型变量的函数指针

C)一个指向具有M个整型元素的一维数组的指针D)具有M个指针元素的一维指针数组,每个元素都只能指向整型量

确定[] 教师批改:

59、有以下程序,其中函数f的功能是将多个字符串按字典顺序排序

#include

void f(char *p[], int n)

{ char *t; int i,j;

for(i=0; i

for(j=i+1; j

if(strcmp(p[i],p[j])>0){ t=p[i]; p[i]=p[j]; p[j]=t; }

}

main()

{ char *p[5]={"abc","aabdfg","abbd","dcdbe","cd"};

f(p, 5);

printf("%d\n", strlen(p[1]));

}

程序运行后的输出结果是( ) A)2 B)

3

C)6 D)4

确定[] 教师批改:

60、有以下程序

main()

{

char s[]="159",*p;

p=s;

printf("%c",*p++);

printf("%c",*p++);

}

程序运行后的输出结果是( ) A)15 B)16

C)12 D)59

确定[] 教师批改:

61、有以下函数

fun(char *a,char *b)

{

while((*a!=‘\0‘)&&(*b!=‘\0‘)&&(*a==*b))

{ a++; b++;}

return (*a-*b);

}

该函数的功能是A)计算a和b所指字符串的长度之差B)将b所指字符串复制到a所指字符串中

C)将b所指字符串连接到a所指字符串后面D)比较a和b所指字符串的大小

确定[] 教师批改:

62、有以下程序

point(char *p)

{

p+=3;

}

main()

{ char b[4]={…a…,…b…,…c…,…d…},*p=b;

point(p); printf("%c\n",*p);

}

程序运行后的输出结果是A)a B)b C)c D)d

确定[] 教师批改:

63、有以下程序

main()

{char str[][10]={"China","Beijing"},*p=str;

printf("%s\n",p+10);

}

程序运行后的输出结果是A)China B)Bejing

C)ng D)ing

确定[] 教师批改:

64、有以下程序

main()

{char s[]="ABCD",*p;

for(p=s+1;p

}

程序运行后的输出结果是_____。A)ABCD

BCD

CD

D B)A

B

C

D

C)B

C

D D)BCD

CD

D

确定[] 教师批改:

65、有以下程序

main()

{ char *p[10]={“abc”,”aabdfg”,”dcdbe”,”abbd”,”cd”};

printf(“%d\n”,strlen(p[4]));

}

执行后输出结果是A)2 B)3 C)4 D)5

确定[] 教师批改:

66、已定义以下函数

fun(char *p2, char *p1)

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

函数的功能是A)将p1所指字符串复制到p2所指内存空间B)将p1 所指字符串的地址赋给指针p2

C)对p1和p2两个指针所指字符串进行比较D)检查p1和p2两个指针所指字符串中是否有‘\0’

确定[] 教师批改:

67、有以下程序

#include

main()

{ char *p=“abcde\Ofghjik\0”;

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

}

程序运行后的输出结果是A)12 B)15

C)6 D)5

确定[] 教师批改:

68、以下程序的输出结果是

#include

#include

main()

{ char b1[8]="abcdefg",b2[8],*pb=b1+3;

while (--pb>=b1)strcpy(b2,pb);

printf("%d\n",strlen(b2));

} A)8 B)3

C)1 D)7

确定[] 教师批改:

69、以下程序的输出结果是

main()

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

int i;

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

for(i=0;i<3;i++)printf("%s",p[i]);

} A)123456780 B)123 456 780

C)12345678 D)147

确定[] 教师批改:

70、以下程序的输出结果是

main()

{ char *s="12134211";int v[4]={0,0,0,0},k,i;

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

{ switch(s[k])

{ case ‘1‘:i=0;

case ‘2‘:i=1;

case ‘3‘:i=2;

case ‘4‘:i=3;

}

v[i]++;

}

for(k=0;k<4;k++)printf("%d ",v[k]);

} A)4 2 1 1 B)0 0 0 8

C)4 6 7 8 D)8 8 8 8

确定[] 教师批改:

71、以下程序运行后,输出结果是

main()

{ char ch[2][5]={…693","825"},*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=10*s+p[i][j]-…0…;

printf("%d\n",s);

} A)6385 B)22

C)33 D)693825

确定[] 教师批改:

72、以下程序运行后,输出结果是

#inchude

#inchude

fun(char *w, int n)

{ char t, *s1,*s2;

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

while(s1

{ t=*s1++;

*s1=*s2--;

*s2=t;

}

}

main()

{ char *p;

p="1234567";

fun(p,strlen(p));

puts(p);

} A)1234567 B)7654321

C)1711717 D)7177171

确定[] 教师批改:

73、有以下程序

main()

{ char a[]="programming", b[]="language";

char *p1,*p2;

int i;

p1=a; p2=b;

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

if(*(p1+i)==*(p2+i))printf("%c",*(p1+i));

}

输出结果是A)gm B)rg C)or D)ga

确定[] 教师批改:

74、若有以下定义和语句:

char *s1="12345",*s2="1234";

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

则输出结果是_____ A)4 B)5

C)9 D)10

确定[] 教师批改:

75、下面程序的输出是

#include

main()

{ char*a="abcdefgh";

fun(a);puts(a); }

fun (char * s)

{ int x=0,y;char c;

for(y=strlen(s)-1;x

C)dcbahgfe D)hgfedcba

确定[] 教师批改:

76、设有如下函数定义:

int f(char *s)

{ char *p=s;

while(*p!=‘\0‘)p++;

return(p-s); }

如果在主程序中用下面的语句调用上述函数,则输出结果为

printf("%d\n",f("goodbey!")); A)3 B)6

C)8 D)0 确定[] 教师批改:

77、下面函数的功能是

int funl(char * x)

{ char * y=x;

while(*y++);

return(y-x-1);} A)求字符串的长度B)比较两个字符串的大小

C)将字符串x复制到字符串y D)将字符串x连接到字符串y后面

确定[] 教师批改:

78、请读程序片段:

char str[]="ABCD", *p=str;

printf("%d\n",*(p+4));

上面程序的输出结果是A)68 B)0 C)字符"D"的地址D)不确定的值

确定[] 教师批改:

79、设有如下的程序段:

char str[ ]="Hello";

char *ptr;

ptr=str;

执行上面的程序段后,*(ptr+5)的值为A)‘o‘B)‘\0‘

C)不确定的值D)‘o‘的地址

确定[] 教师批改:

80、设有以下语句:

char

str[4][12]={"aaa","bbbb","ccccc","dddddd"},* strp[4];

int i;

for(i=0;i<4;i + + )strp[i]=str[i];

( )不是对字符串的正确引用,其中0≤k<4。A)strp B)str[k]

C)strp[k] D)*strp

确定[] 教师批改:

81、若有定义: int x,*pb;则以下正确的赋值表达式是_____。A.pb=&x B.pb=x

C.*pb=&x

D.*pb=*x

确定[A] 教师批改:

82、以下程序的输出结果是_____。

void 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);} A.5,2,3 B.-5,-12,-7

C.-5,-12,-17

D.5,-2,-7

确定[] 教师批改:

83、下程序的输出是_____。

void sub(float x,float *y,float *z){ *y=*y-1.0; *z=*z+x;}

main( )

{ float a=2.5, b=9.0 *pa, *pb;

pa=&a; pb=&b;

sub(b-a,pa,pb);

printf(“%f\n”,a);} A. 9.000000 B.

1.500000

C. 8.000000

D. 10.500000

确定[] 教师批改:

84、若有以下定义和语句,则使指针p指向值为36的数组元素的表达式是【】。

int a[10]={19,23,44,17,37,28,49,36},*p;

p=a;

确定教师批改:

85、以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。素数是只能被1和本身整除且大于1的自然数。

#include

main()

{ int i,a[10],*p=a,sum=0;

printf("Enter 10 num:\n");

for(i=0;i<10;i + + )scanf ("%d",&a[i]);

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

if(isprime(*(p+ 【1】))= = 1){ printf("%d",*(a+i)); sum+=*(a+i); } printf("\nThe sum=%d\n",sum); }

isprime(x)

int x;

{ int i; for(i=2;i<=x/2;i + + )

if(x%i = = 0)return (0); 【2】; } 确定教师批改:

86、以下程序中,fun函数的功能是求3行4列二维数组每行元素中的最大值.请填空.

void fun(int, int, int (*)[4],int *)

main()

{

int

a[3][4]={{12,41,36,28},{19,33,15,27},{3,27,1 9,1}},b[3],i;

fun(3,4,a,b);

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

printf("%4d",b[i]);

printf("\n");

}

void fun(int m,int n,int ar[][4],int *br)

{

int i,j,x;

for(i=0;i

{ x=ar[i][0];

for(j=0;j

if(x

【】=x;

}

确定教师批改:

87、以下程序中,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

for(j=0;j

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

*n= 【1】;

return 【2】;

}

main()

{int

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

max=select(a,&n);

printf("max=%d,line=%d\n",max,n);

}

确定教师批改:

88、设有以下定义的语句:

int a[3][2]={10,20,30,40,50,60}, (*p)[2];

p=a;

则*(*(p+2)+1)值为【】。确定教师批改:

89、以下程序运行后的输出结果是【】。

#include

char *ss(char *s)

{ char *p, t;

p=s+1; t=*s;

while(*p){ *(p-1)= *p; p++;}

*(p-1)=t;

return s;

}

main()

{ char *p, str[10]="abcdefgh";

p = ss(str);

printf("%s\n",p);

}

确定教师批改:

90、以下程序运行后的输出结果是【】

#include "string.h"

void fun(char *s,int p,int k)

{ int i;

for(i=p;i

s[i]=s[i+2];

}

main()

{ char s[]="abcdefg";

fun(s,3,strlen(s));

puts(s);

}

确定教师批改:

91、以下程序中函数huiwen的功能是检查一个字符串是否是回文,当字符串是回文时,函数返回字符串:yes

yes!,否则函数返回字符串:no!,并在主函数中输出.所谓回文即正向与反向的拼写都一样,例如:adgda.请填空.

#include "string.h"

char *huiwen(char *str)

{

char *p1,*p2; int i,t=0;

p1=str; p2= 【1】

for(i=0;i<=strlen(str)/2;i++)

if(*p1++!=*p2--)

{ t=1; break; }

if(【2】)return ("yes!");

else return ("no!");

}

main()

{

char str[50];

printf("Input:"); scanf("%s",str);

printf("%s\n", 【3】);

}

确定教师批改:

92、以下程序运行后的输出结果是【】。

main ()

{ char a[]="Language",b[]="Programe";

char *p1,*p2; int k;

p1=a; p2=b;

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

if(*p1+k)==*(p2+k)} printf ("%c",*(p1+k))_;

]

确定教师批改:

93、以下程序运行后的输出结果是【】。

main()

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

p=a;

while(*p)

{ if(i%2==0)*p=‘*‘;

p++;i++;

}

puts(a);

}

确定教师批改:

94、以下sstrcpy()函数实现字符串复制,即将t所指字符串复制到s所指向内存空间中,形成一个新的字符串s。请填空。

void sstrcpy(char *s,char *t)

{ while(*s++=【】);}

main()

{ char str1[100],str2[]=”abcdefgh”;

sstrcpy(str1,str2);

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

}

确定教师批改:

95、下列程序的运行结果是:【】

#include

char *ss(char *s)

{ return s+strlen(s)/2;}

main()

{ char *p,*str=”abcdefgh”;

p=ss(str); printf(“%s\n”,p);

}

确定教师批改:

96、以下程序运行后输入: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("%d,%s",&n, s);

z=strlen(s);

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

printf("%s\n",s);

}

确定教师批改:

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

void dele(char *s)

{ int n=0,i;

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

if(【1】)

s[n++]=s[i];

s[n]=【2】;

}

确定教师批改:

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

#include

int sstrcmp(char *s,char *t)

{ while(*s&&*t&& *s== 【1】)

{ s++;t++;}

return 【2】;

}

确定教师批改:

99、以下程序的输出结果是【】。

main()

{ char *p="abcdefgh",*r;

long *q;

q=(long*)p;

q++;

r=(char*)q;

printf("%s\n",r);

}

确定教师批改:

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

int mystrlen(char *str)

{ int i;

for(i=0; 【1】!=‘\0‘;i++);

return(【2】);

}

确定教师批改:

101、以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。

Strcen(char a[], char b[])

{ int num=0,n=0;

while(*(a+num)!= 【1】)num++;

while(b[n]){*(a+num)=b[n]; num++; 【2】;}

return(num);

}

确定教师批改:

102、以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。

#include

main()

{ char *p, s[6];

int n;

p=s;

gets(p);

n=*p-…0…;

while(【】!=‘\0‘)n=n*8+*p-‘0‘;

printf("%d \n",n);

}

确定教师批改:

103、下列程序的输出结果是【】。

#include

main()

{ char b[30],*chp;

strcpy(&b[0],"CH");

strcpy(&b[1],"DEF");

strcpy(&b[2],"ABC");

printf("%s \n",b);

}

确定教师批改:

104、下面程序的输出结果是【】

char b[]="ABCD";

main()

{ char *chp;

for(chp=b; *chp: chp+=2)printf("%s",chp);

printf("\n");

确定教师批改:

105、以下程序输出的是【】

main()

{ int i=3, j=2;

char *a="DCBA";

printf("%c%c\n",a[i],a[j]);

}

确定教师批改:

106、函数mycmp (char*s,chat *t)的功能是比较字符串s和t的大小,当s等于t 时返回0,否则返回s和t的第一个不同字符的ASCOII码的差值,即当s>t时返回正值,当s等于t 时返回0,否则返回s和t的第一个不同字符的ASCOII码的差值,即当s>t时返回正值, 当s

mycmp(char *s,char *t)

{ while(*s==*t)

{if(*s==‘\0‘)return 0;

++s; ++t;}

return (【】); }

确定教师批改:

107、下列程序的输出结果是【】

main()

{ char b[]="ABCDEFG";

char *chp=&b[7]; while (--chp>&b[0])putchar(*chp);

putchar(‘\n‘);

}

确定教师批改:

108、阅读程序:

#include "string.h"

#include "stdio.h"

strle(char a[],char b[])

{ int num=0,n=0;

while(*(a+num)!=‘\0‘),num++;

while(b[n]){ *(a+num)=b[n];num++;n++;}

return (num);

}

main()

{ char str1[81],str2[81],*p1=str1,*p2=str2;

gets(p1); gets(p2);

printf("%d\n",strle(p1,p2));

}

运行上面程序,如果从键盘上输入字符串qwerty和字符串abcd则程序的输出结果是【】。

确定教师批改:

109、阅读程序:

main()

{ char str1[]="how do you do" ,str2[10];

char *p1=str1,*p2=str2;

scanf("%s",p2); printf("%s",p2); printf("%s\n",p1);

}

运行上面的程序,输入字符串HOW DO YOU DO 则程序的输出结果是【】。

确定教师批改:

110、下面程序的输出结果是【】。

#include

main()

{ static char b[]="Goodbye";

char *chp=&b[7];

while(--chp >=&b[0])putchar (*chp);

putchar(‘\n‘);

}

确定教师批改:

111、下面程序的输出结果是【】。

#include

void fun(char *a1, char *a2, int n)

{ int k;

for(k=0; k

a2[k]=(a1[k]-‘A‘-3+26)%26+‘A‘;

a2[n]=…\0…;

}

main()

{ char s1[5]="ABCD", s2[5];

fun(s1, s2, 4);

puts(s2);

}

112、下面程序的输出结果是【】。

#include

main()

{ char *p[]={ "BOOL", "OPK", "H", "SP"};

int i;

for(i=3; i>=0; i--,i--)printf("%c", *p[i]);

printf("\n");

}

确定教师批改:

113、以下程序输出的是【】

main()

{ int a[10]={19,23,44,17,37,28,49,36}, *p;

p=a;

printf("%d\n",(p+=3)[3]);

}

确定教师批改:

114、以下fun函数的功能是:累加数组元数中的值.n为数组中元素的个数, 累加的和值放入x所指的存储单元中,请填空.

fun(int b[ ],int n, int *x)

{ int k, r=0;

for(k=0;k

【2】=r;

确定教师批改:115、下面程序通过函数average计算数组中各元素的平均值,请填空.

float average(int * pa,int n)

{ int i;

float avg=0.0;

for(i=0;i

avg=【2】;

return avg; }

main()

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

float mean;

mean=average(a,5); printf ("mean=%f\n",mean);}

确定教师批改:

116、下面程序的输出是【】。

main()

{ int a[]={ 2,4,6}, *prt=&a[0], x=8,y,z;

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

z=(*(prt+y)

printf("%d\n", z);}

确定教师批改:

117、以下程序中,函数sumColumM的功能是:求出M行N列二维数组每列元素中的最小值,并计算它们的和值。和值通过形参传回主函数输出。请填空。

#define M 2

#define N 4

void SumColumMin(int a[M][N],int *sum)

{ int i,j,k,s=0;

for(i=0;i

{ k=0;

for(j=1;j

if(a[k][i]>a[j][i])k=j;

s+= 【1】;

}

【2】=s;

}

main()

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

SumColumMin(【3】);

printf("%d\n",s);

}

确定教师批改:

118、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

if(【1】)max=a[row][col];

if(row==0)min=max;

else if(【2】)min=max;

}

return min;

}

确定教师批改:

119、以下函数sstrcat()的功能是实现字符串的连接,即将t所指字符串复制到s所指字符串的尾部。例如:s所指字符串为abcd,t所指字符串为efgh,函数调用后s 所指字符串为abcdefgh。请填空。

# include

void sstrcat(char *s, char *t)

{ int n;

n= strlen(s);

while (*(s+n)= 【】){s++; t++;}

}

120、输入3个整数,按由小到大的顺序输出。确定

121、输入3个字符串,按由小到大的顺序输出。确定

122、输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。

123、有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面m个数,见图10.3。写一函数实现以上功能,在主函数中输入n个整数.并输出调整后的n 个数。

C语言实验报告《指针》.doc

C语言实验报告《指针》 学号:__________ 姓名:__________ 班级:__________ 日期:__________ 指导教师:__________ 成绩:__________ 实验五指针 一、实验目的 1、掌握指针的概念、会定义和使用指针变量 2、掌握指向数组的指针变量 3、掌握字符串指针的使用 二、实验内容2、写一函数,求一个字符串的长度。在main函数中输入字符串,并输出其长度。(习题10.6)#include #include long fun(char *p) { 填写程序 } void main() { char s[6]; long n; printf( enter a string:n gets(s); n=fun(s); printf( %ldn ,n); }

一、三、实验步骤与过程 四、程序调试记录 C语言实验报告《综合实验》 学号:__________ 姓名:__________ 班级:__________ 日期:__________ 指导教师:__________ 成绩:__________ 实验六综合实验 一、实验目的 1、掌握C语言中的变量、数组、函数、指针、结构体等主要知识点。 2、掌握C程序的结构化程序设计方法,能使用C语言开发简单的应用程序。 3、掌握C程序的运行、调试方法等。 二、实验内容 编写一个学生信息排序程序。要求:

1、程序运行时可输入n个学生的信息和成绩(n预先定义)。 2、学生信息包括:学号、英文姓名、年龄;学生成绩包括:语文、数学、计算机。 3、给出一个排序选择列表,能够按照上述所列信息(学号、姓名、年龄、语文、数学、计算机)中的至少一个字段进行排序,并显示其结果。 1、使用函数方法定义各个模块。 三、实验步骤与过程 物理实验报告·化学实验报告·生物实验报告·实验报告格式·实验报告模板 四、程序调试记录

c语言实验报告6 指针

实验6 指针1.实验目的和要求 (1)掌握指针的概念、指针变量定义格式和引用。 (2)掌握指针的运算方法。 (3)掌握数组的指针和指向数组的指针变量。 (4)掌握指针与函数的关系。 (5)能正确使用字符串的指针和指向字符串的指针变量。(6)了解指向函数的指针。 (7)了解指向指针变量的指针。 2.实验内容:实验指导书中的实验九。 3.实验步骤 9.1 调试程序,找出程序的错误。 改正后的程序代码(贴图): 运行结果(帖图): 9.2 运行程序:

运行结果:; 9.3 修改程序错误,并运行。 改正后程序代码: 运行结果(帖图): 9.4. 程序填空:

运行结果(请帖图):9.5. 程序填空:

程序填空: #include main() { int a[5][5]={0},*p[5],i,j; for(i=0; i<5; i++) p[i]= &a[i][0] ; for(i=0; i<5; i++) { *(p[i]+ i )=1; *(p[i]+5- (i+1) )=1; } for(i=0; i<5; i++) { for(j=0; j<5; j++) printf("%2d", p[i][j]); Printf("\n") ; } } 运行结果(请帖图):

9.6 编程(选作) #include main() { int *p,a[20],i,k,m,n; p=a; printf("请输入人数n:"); scanf("%d",&n); for(i=0;i

如何透彻理解C语言中指针的概念

如何透彻理解C语言中指针的概念 强大的指针功能是C语言区别于众多高级语言的一个重要特征。C语言指针的功能强大,使用灵活多变,可以有效地表示复杂的数据结构、动态分配内存、高效地使用数组和字符串、使得调用函数时得到多个返回值。而它的应用远不限于此。初学者对于指针的概念总是感到无所适从,有时觉得“自己懂了,为什么编译器就是不懂呢”,常有茫然和无助的感觉。 学好指针的关键在于深入了解内存地址的空间可以理解为一个一维线性空间,内存的编址和寻址方法,以及指针在使用上的一些规定。事实上,指针就是方便我们对内存地址直接进行操作的,是为程序员服务的,我们只要抓住指针想要帮助我们解决什么问题这个核心,就可以轻松地理解它的工作原理。 什么是指针,指针有什么作用 指针就是指向一个特定内存地址的一个变量。简化了的内存空间模型是按照从0到某一个数(比如1048575=1M-1)的一维线性空间,其中的每一个数对应一个存储单元,即1个字节。指针有两个属性:指向性和偏移性。指向性指的是指针一定要有一个确定的指向,偏移性则是体现指针重要应用的方面,即指针可以按程序员的要求向前或向后偏移。 指针的应用往往与数组联系在一起,为了方便说明问题,不妨从数组开始解释指针的偏移。数组就是许多的变量,它的一个重要特征就是在内存空间中连续地存放,而且是按下标顺序存放。比如我们定义一个有100个变量的一维整型数组,它一定从内存的某一个存储单元开始按数组下标顺序存放,连续占用100*4=400字节。当我们定义一个数组时,系统就会自动为它分配一个指针,这个指针指向数组的首地址。(在本文剩余部分的论述中,不加区分地使用“指向数组的首地址”与“指向数组的第一个元素”这两种说法,事实上这两种说法也是一致的。) 为了让系统了解每一次指针偏移的单位,也为了方便程序员进行指针偏移(让程序员记住一个整形变量占用4字节,一个字符型变量占用1字节……等等是很麻烦的),不用每次去计算要偏移多少个字节,C语言引入了指针的基类型的概念。基类型的作用就是让系统了解某个指针每次偏移的字节数。比如,对于一个字符型指针,它每次偏移(比如ptr=ptr+1)所起到的作用就是让指针偏移1字节;而对于一个整型指针,它每次偏移就应该是4字节。这样操作数组时就带来了方便。比如对于一个指向某个整型数组起始存储单元(称为首地址)的指针ptr,ptr=ptr+1就表示将该指针指向这个数组的下一个元素的存储单元,即向后移动4字节,而不仅仅是移动一个存储单元(即移动1字节)。 &()、*()、和[ ]运算符的意义 在本文中,将&()、*()和[ ]都看成是运算符。这样可以方便理解这三个概念。简单地说,&()将某个标识符(比如变量)转化为其在内存空间中的地址,而*()是产生一个对应于某个地址的标识符,[ ]就更复杂一点,ptr[i]表示

C语言入门学习-C上机实验九要求

上机实验九函数综合练习一 【实验八参考答案见后】 目的和要求: (1)熟练掌握参数传递的要领; (2)掌握全局变量的使用要领; (3)了解静态局部变量的特点。 实验内容: 一、完善程序题 1.求10! 【提示:本程序利用静态局部变量保留每次调用函数的结果。】 #include #define N 10 ________________________________; main() {int i; long f; for(i=1;i<=N;i++) f=____________________________; printf("%d!=%ld\n",N,f); } long JC(int n) {______________________________; jc=jc*n; return jc; } 2.以下程序中的trap函数是一个用梯形法求定积分的通用函数,梯形法求定积分s的公式为: ∑-=+ + + = 1 n 1 i h * h)) *i f(a f(b))/2 ((f(a) s, n b a h - = 其中n为积分小区间数,以下程序调用trap函数求定积分,被积函数是:f(x)=x*x+3*x+2,且n=1000,a=0,b=4。(程序运行结果参考:53.333344)#include #include double mypoly(double x) {return(x*x+3.0*x+2.0); } double trap(double a,double b) {double t,h; int i,n=1000; t=0.5*(mypoly(a)+mypoly(b)); h=______________/(double)(n);

C语言指针实验报告

C语言程序设计实验报告 1实验目的 (1)掌握指针的概念,会定义和使用指针变量; (2)能正确使用变量的指针和指向变量的指针变量; (3)能正确使用数组的指针和指向数组的指针变量; (4)能正确使用字符串的指针和指向字符串的指针变量; 2实验内容 将一个任意整数插入到已排序的整形数组中,插入后,数组中的数仍然保持有序;要求: (1)整形数组直接由赋值的方式初始化,要插入的整数有scanf()函数数入;(2)算法实现过程采用指针进行处理; (3)输入原始数据以及插入整数后的数据,并加以说明;

3算法描述流程图

4源程序 #include main() { int a[100],m,i,*p,n,w; printf("请输入要输入的数组的元素个数:\n"); scanf("%d",&n); printf("请输入已排好序的数组:\n"); for(i=0;i=w;i--) { a[i+1]=a[i]; } a[i+1]=m; for(i=0;i<=n;i++) { printf("%-4d",a[i]); } printf("\n"); } 5测试数据 “1,3,5,7,9,11,13,15,17,19······10” 6运行结果 7出现问题及解决方法 在编写过程中,

for(i=n-1;a[i]>=w;i--) { a[i+1]=a[i]; } a[i+1]=m; 这一步没有注意a[i++]=m和a[i+1]=m中i++和i+1不同,a[i++]=m是先将的值赋给a[i],然后在执行自增;而在实验过程中忽略了这一点,造成了不必要的麻烦; 8实验心得 通过这次指针实验掌握了指针的概念,会定义和使用指针变量,并且能利用指针来简单化一些问题,给以后的编程带来了很大的便利;

C语言实验

C语言上机指导指导教师:李辉李晓丽 东北电力大学 电气工程学院 2006年3月

实验2数据类型、运算符和表达式 1.实验目的 掌握C语言数据类型,熟悉如何定义一个整形、字符型和实型的变量,以及对他们赋值的方法。 掌握不同的类型数据之间赋值的规律。 学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。 进一步熟悉C程序的编辑、编译、连接和运行的过程。 2.实验内容和步骤 (2).在此基础上增加一个语句: printf(“%d%d\n”,c1,c2); 再运行,并分析结果。 (3).再将第2行改为: int c1,c2; 再使之运行,并观察结果。 (4).再将第3、4行改为: c1 = a; /* 不用单撇号*/ c2 = b; 再使之运行,分析其运行结果。

(5).再将第3、4行改为: c1 = ”a”; /* 用双撇号*/ c2 = ”b”; 再使之运行,分析其运行结果。 (6).再将第3、4行改为: c1 = 300; /* 用大于255的整数*/ c2 = 400; 再使之运行,分析其运行结果。 输入并运行教材第3章习题3.6给出的程序 (1).将一个负整数赋给一个无符号的变量,会得到什麽结果。画出它们在内存中的表示形式。 (2).将一个大于32765的长整数赋给整形变量,会得到什麽结果。画出它们在内存中的表示形式。 (3).将一个长整数赋给无符号的变量,会得到什麽结果(分别考虑该长整数的值大于或等于65535 以及小于65535 的情况)。画出它们在内存中的表示形式。 同学们可以改变程序中各变量的值,以便比较。例如:a = 65580, b = -40000, e = 65535, f = 65580。 输入习题3.10

C语言基础知识(详细版)

C语言程序的结构认识 用一个简单的c 程序例子,介绍c 语言的基本构成、格式、以及良好的书写风格,使小伙伴对 c 语言有个 初步认识。 例1:计算两个整数之和的c 程序: #include main() { int a,b,sum; /* 定义变量a,b ,sum 为整型变量*/ a=20; /* 把整数20 赋值给整型变量a*/ b=15; /* 把整数15 赋值给整型变量b*/ sum=a+b; /* 把两个数之和赋值给整型变量sum*/ printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); /* 把计算结果输出到显示屏上*/ } 重点说明: 1、任何一个c 语言程序都必须包括以下格式: main() { } 这是c 语言的基本结构,任何一个程序都必须包含这个结构。括号内可以不写任何内容,那么该程序将不执行任何结果。 2、main() - 在c 语言中称之为“主函数” ,一个c 程序有且仅有一个main 函数,任何一个c 程序总是从 main 函数开始执行,main 函数后面的一对圆括号不能省略。 3、被大括号{ }括起来的内容称为main 函数的函数体,这部分内容就是计算机要执行的内容。 4、在{ }里面每一句话后面都有一个分号(; ),在c 语言中,我们把以一个分号结尾的一句话叫做一个 c 语 言的语句,分号是语句结束的标志。 5、printf( “ a=%d,b=%d,sum=%d\n” ,a,b,sum); 通过执行这条c 语言系统提供给我们直接使用的屏幕输出 函数,用户即可看到运行结果,本程序运行后,将在显示器上显示如下结果: a=20,b=15,sum=35 6、#include 注意:(1)以#号开头 (2)不以分号结尾这一行没有分号,所以不是语句,在c 语言中称之为命令行,或者叫做“预编译处理命令” 。 7、程序中以/* 开头并且以*/ 结尾的部分表示程序的注释部分,注释可以添加在程序的任何位置,为了提高程序的可读性而添加,但计算机在执行主函数内容时完全忽略注释部分,换而言之就是计算机当做注释部分不存在于主函数中。 C程序的生成过程 C程序是先由源文件经编译生成目标文件,然后经过连接生成可执行文件。 源程序的扩展名为.c ,目标程序的扩展名为.obj , 可执行程序的扩展名为.exe 。

c语言实验六

常熟理工学院 《C语言程序设计》实验指导与报告书 ______学年第____ 学期 专业: ___________________________________________ 学号: ___________________________________________ 姓名: ___________________________________________ 实验地点:___________________________________________ 指导教师:___________________________________________ 计算机科学与工程学院 2014

实验7 数组程序设计(1) 7.1 实验目的 1.掌握一维数组的定义及初始化方法。 2.掌握用循环语句对一维数组进行处理的方法。 3.熟悉对数组元素进行处理的常规算法(如排序、插入、删除及查找等)。 7.2 示例程序 【实验7.1】本程序的功能是:取出一个十进制正整数中的所有偶数数字,用这些数字构成一个最大数。 程序代码: #include #define N 10 int main() { int i,j,k=0,t,d,a[N]; long n,m=0; printf("Please enter a long integer."); scanf("%ld",&n); while(n>0) /* 依次取出每位数,并将偶数存入数组*/ { t=n%10; /* 取出一位数*/ if(t%2==0) /* 判断是否偶数*/ a[k++]=t; /* 将偶数存入数组*/ n/=10; /* 为取下一位数做准备*/ } for(i=0;ia[d]) /* 后续元素依次与起始元素进行比较*/ d=j; /* 记录比起始元素大的元素的下标*/ if(d!=i) /* 一轮比较后判断记录的下标是否发生了变化*/ { t=a[d];a[d]=a[i];a[i]=t;} /* 若发生了变化,则交换元素值*/ } for(i=0;i

C语言指针实验报告

C语言程序设计实验报告 1实验目得 (1)掌握指针得概念,会定义与使用指针变量; (2)能正确使用变量得指针与指向变量得指针变量; (3)能正确使用数组得指针与指向数组得指针变量; (4)能正确使用字符串得指针与指向字符串得指针变量; 2实验内容 将一个任意整数插入到已排序得整形数组中,插入后,数组中得数仍然保持有序; 要求: (1)整形数组直接由赋值得方式初始化,要插入得整数有scanf()函数数入; (2)算法实现过程采用指针进行处理; (3)输入原始数据以及插入整数后得数据,并加以说明;

3算法描述流程图

4源程序 #include main() { int a[100],m,i,*p,n,w; printf("请输入要输入得数组得元素个数:\n"); scanf("%d",&n); printf("请输入已排好序得数组:\n"); for(i=0;i=w;i--) { a[i+1]=a[i]; } a[i+1]=m; for(i=0;i<=n;i++) { printf("%-4d",a[i]); } printf("\n"); } 5测试数据 “1,3,5,7,9,11,13,15,17,19······10” 6运行结果 7出现问题及解决方法 在编写过程中,

for(i=n-1;a[i]>=w;i--) { a[i+1]=a[i]; } a[i+1]=m; 这一步没有注意a[i++]=m与a[i+1]=m中i++与i+1不同,a[i++]=m就是先将得值赋给a[i],然后在执行自增;而在实验过程中忽略了这一点,造成了不必要得麻烦; 8实验心得 通过这次指针实验掌握了指针得概念,会定义与使用指针变量,并且能利用指针来简单化一些问题,给以后得编程带来了很大得便利;

C语言中一个关于指针传递的问题

C语言中一个关于指针传递的问题 李云 UTStarcom通讯有限公司 E-Box Team 2005-06-22 摘要 指针在C语言中扮演着极为重要的角色,它的存在为C语言提供了极大的灵活性,当然,不少问题也是由指针所引起的(双刃剑)。本文通过分析一个由指针传递所引起的错误,从而使得我们更加重视指针在编程中的传递问题。 关键词 C语言指针传递 缩略语 Significant Byte 最低有效字节 Least LSB MCI Management & Control Interface 管理控制接口 Byte 最高有效字节 MSB Most Significant 1 问题的提出 指针因为灵活使得我们在编程时有意识的利用这一特性,从而使得我们的设计也更加的灵活,如函数指针等等。在很多情况下,我们需要从被调用函数返回结果。这可以通过两种方法来实现,一是通过函数的返回值,二是通过将指针作为参数传递给被调用函数。 图 1.1就是一个例子。 00001:S32 mci_module_id_from_name(S8* name, U16* module_id) 00002:{ 00003:mci_module_t *module; 00004:U16 index = 0; 00005: 00006:if(name == NULL || module_id == NULL) 00007:return ERR_MCI_INV_PRARAM; 00008: 00009:for(;index <= g_mci_last_module_id; index ++) 00010:{ 00011:module = g_mci_module_array[index]; 00012: 00013:if(module == NULL) 00014:continue; 00015: 00016:if(strcmp(module->name, name) == 0) 00017:{ 00018:*module_id = index;

C语言实验报告

实验一进制转换一、实验要求 采用模块化程序设计完成进制转换。由键盘输入一个十进制正整数,然后将该数转换成指定的进制数(二、八、十六) 形式输出。指定的进制由用户输入。 二、实验目的 1、熟悉C 环境的安装、使用。 2、承上启下,复习《C 程序设计》等基础课程的知识。 3、掌握C 语言编程的方法。 三、预备知识 1、VC6.0的安装与使用。 2、C 程序设计基础知识。 四、实验内容 采用模块化程序设计完成进制转换。

五、程序框图 六、程序清单 1. 编写主函数:输入需转换的数与转换的进制 2. 编写子函数 (1)函数转换为除16进制以外的进制转换算数编程,使用while 循环实现计算进制 的转换,并输出转换后的数字; (2)函数转换为16进制,用while 函数实现16进制转换的计算并输出16进制转换后的数据; 3. 编写数组,关于16进制的一系列字符 4. 编写主函数加入do while 使函数可以循环。

七、实验步骤 #include char num[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; void fun(int n, int m) { int i=-1, a[100]; if(m!=16) { while(n) { a[i++]=n%m; n=n/m; } while(i!=-1) printf("%d",a[--i]); printf("\n");

} else { while(n) { a[++i]=num[n%16]; n/=16; } while(i!=-1) printf("%c",a[i--]); printf("\n"); } } int main() { int a, c;

C语言实验6(附参考答案)

实验6:运算符与表达式(5)实验目的: 1、熟悉字符的输入输出和格式化的输出,了解基本规则。 2、进一步熟悉C语言程序的编辑、编译、连接和运行的方法。 实验内容: 1、 getchar函数的作用是从终端输入____1______个字符。 2、如果从键盘输入字符’a’并按回车键,请写出以下程序运 行效果_____a_____。 main() { putchar(getchar()); } 3、以下程序的输出结果为 main() { char c=‘x’; printf(“c:dec=%d,oct=%o,ASCII=%c\n”,c,c,c); } 4、以下程序的输出结果为。 main() { int x=1,y=2;

printf(“x=%d y=%d *sum*=%d\n”,x,y,x+y); printf(“10 Squared is:%d\n”,10*10); } 5、以下程序的输出结果为____________________。 #include main() { float a=123.456; double b=8765.4567; printf(“(1) %f\n”,a); printf(“(2) %14.3f\n”,a); printf(“(3) %6.4f\n”,a); printf(“(4) %lf\n”,b); printf(“(5) %14.3lf\n”,b); printf(“(6) %8.4lf\n”,b); printf(“(7) %.4f\n”,b); } 二、程序设计题

1、若a=3,b=4,c=5,x=1.2,y=2.4,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下的输出格式和结果,请写出程序(包括定义变量类型和设计输出)。 要求输出的结果如下:□表示空格 a=□3□□b=□4□□c=□5 x=1.200000,y=2.400000,z=-3.600000 x+y=□3.60□□y+z=-1.20□□z+x=-2.40 u=□51274□□n=□□□128765 c1=’a’□or□97(ASCII) c2=’B’□or□98(ASCII) 2、假定有:int a=1,b=2,设计一个程序,将变量a和b的值互换并且输出来。 3、已知变量a=23. 4、b=54.33、c=434.33,求它们的平均值。并按如下形式输出: average of **、** and ** is **.** 。

C语言指针教学中的知识点分析与总结-最新教育文档

C语言指针教学中的知识点分析与总结 C语言是一门重要的计算机基础课程,指针是C语言的精华。 而指针应用范围广、使用灵活等特点时常让初学者感到困惑。 用指针可以访问各种类型的数据,能够实现动态存储分配,提高编程效率,加深对数据存储方式的理解。本文从指针的基本概念,指针在数组、函数、字符串、动态存储分配等方面的应用入手,剖析指针与各部分基础知识相结合时的教学重点和难点。利用对比的方法指出初学者在学习指针过程中易混的概念及注意事项,有利于初学者对指针的理解和掌握。 1指针基本概念的理解 指针学习首先应掌握其基本概念。指针即地址、地址即指针。 程序运行过程中,变量、数组、函数等都存放在内存的存储单元中,每个存储单元都有地址。使用变量、数组、函数既可以直接访问,又可以利用其存储单元地址进行间接访问,这种间接访问便是借助指针来完成的。 1.1对指针类型的理解 理解指针概念要从指针类型入手,教师在教学中应着重讲述 指针类型的含义,以及与普通变量类型的区别。指针定义时的类型称为指针的基础类型,理解上应区别于普通变量的类型。如定义: 由上表可以看出,普通变量的数据类型决定了其占用内存单 元的字节数以及存放数值的范围。而指针变量不论其基础类型为何种类型,均占用4 个字节的存储空间。并且指针变量与普通变量最大的区别在于,指针变量存地址值,而普通变量存数值。 1.2指针运算符的理解 1.2.1对取地址符“ &”的理解 指针变量定义后应为其赋一个有效地址值,让它指向有效的存储空间。未赋值的指针变量称为“悬空”指针,使用悬空指针非常危险,可能会导致系统崩溃。为指针变量赋值时常要用到取地址运算符“ &”。令

C语言程序设计—指针—实验报告

实验报告 专业软件工程班级X 班学号_ _ 姓名 实验日期:201X年X月X日报告退发(订正、重做) 课程C程序设计实验实验名称指针 一、实验目的 二、实验环境(描述实验的软件、硬件环境) ①软件环境:windows xp/win7等操作系统,Microsoft Visual C++ 6.0编译器; ②硬件环境:PC机一台 三、实验内容、步骤和结果分析 题目一:输入3个整数,按由小到大的顺序输出 要求: 使用指针方法实现; #include void function(int *a, int *b) { int temp; if (*a<*b) { temp = *a; *a = *b; *b = temp; } } int main() { int a, b, c; int *p1, *p2, *p3; p1 = &a; p2 = &b; p3 = &c; scanf("%d%d%d", &a, &b, &c); function(p1, p2); function(p1, p3); function(p2, p3); printf("%d %d %d\n", *p3, *p2, *p1); return 0;

题目二:将长度为10的整型数组arr中的元素按照从小到大排列并输出 要求: 使用指针方法实现; #include int main() { struct METRIC { float m; float cm; } m1, m2; struct BRITISH{ float foot; float inches; } b1, b2; printf("Enter the info of m1(米,厘米):"); scanf("%f%f", &m1.m, &m1.cm); printf("Enter the info of m2(米,厘米):"); scanf("%f%f", &m2.m, &m2.cm); printf("\nEnter the info of m2(英尺,英寸):"); scanf("%f%f", &b1.foot, &b1.inches); printf("Enter the info of m2(英尺,英寸):"); scanf("%f%f", &b2.foot, &b2.inches); printf("\nSum of m1 and m2 is:%.2f(厘米)\n", (m1.m + m2.m) * 100 + m1.cm + m2.cm); printf("Sum of b1 and b2 is:%.2f(厘米)\n\n", (b1.inches + b2.inches)*30.48 + (b1.foot + b2.foot)*2.54); return 0;

C语言实验报告 C

实验编号:05四川师大实验报告2016年月日 计算机科学学院级06班实验名称:函数_ 姓名:仁青拉初_______学号:2014110637指导老师:_刘洪_实验成绩:_____ 实验五函数实验 (验证性综合性实验4学时) 1、目的要求: (1)学习函数的编程思想,编写一个包括3~4个函数的程序。 (2)掌握函数中参数传递的两种方式和函数的相互调用。 (3)编写实验报告。 2、实验内容(参考实验指导书): (1)写一个函数int digit(int n,int k),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3。 (2)写一个函数int isprime(int n),当n是质数时,函数返回非零值;当n是合数时,函数返回零值。 (3)写一个函数reverse(char s[]),将字符串s[]中的字符串倒序输出。试分别用递归和非递归两种形式编写。 (4)写一个主函数输入测试数据(自己指定),并调用上述函数,检查函数功能的正确性。(5)一个数如果从左到右和从右到左读,数字是相同的,则称这个数字为回文数,比如898、1221、15651都是回文数。求:既是回文数又是质数的5位十进制数有多少个?要求:回文判断和质数判断都需要通过子函数实现,输出的时候要求5个数字一行。 (5)在n个已排好序(设为从小到大)的数据(数或字符串)中查找某一个数据,如果找到了,就指出其在n个数中的位置;否则给出无该数据的信息。请用递归的方法实现二分查找来实现这一查找过程。 提示:采用二分法求解本问题的基本思路是:设数列为a1,a2,…,a n,被查找的数为x,则查找首先对a m(m=(n+1)/2)进行,于是得到三种情形。 若x>a m,则x只可能在区间[a m+1,a n] 若x

c语言指针例子

深入理解c语言指针的奥秘 指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int**ptr; (4)int(*ptr)[3]; (5)int*(*ptr)[4]; 如果看不懂后几个例子的话,请参阅我前段时间贴出的文章<<如何理解c和c ++的复杂类型声明>>。 指针的类型 从语法的角度看,你只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型。这是指针本身所具有的类型。让我们看看例一中各个指针的类型: (1)int*ptr;//指针的类型是int* (2)char*ptr;//指针的类型是char* (3)int**ptr;//指针的类型是int** (4)int(*ptr)[3];//指针的类型是int(*)[3] (5)int*(*ptr)[4];//指针的类型是int*(*)[4] 怎么样?找出指针的类型的方法是不是很简单? 指针所指向的类型

当你通过指针来访问指针所指向的内存区时,指针所指向的类型决定了编译器将把那片内存区里的内容当做什么来看待。 从语法上看,你只须把指针声明语句中的指针名字和名字左边的指针声明符*去掉,剩下的就是指针所指向的类型。例如: (1)int*ptr;//指针所指向的类型是int (2)char*ptr;//指针所指向的的类型是char (3)int**ptr;//指针所指向的的类型是int* (4)int(*ptr)[3];//指针所指向的的类型是int()[3] (5)int*(*ptr)[4];//指针所指向的的类型是int*()[4] 在指针的算术运算中,指针所指向的类型有很大的作用。 指针的类型(即指针本身的类型)和指针所指向的类型是两个概念。当你对C越来越熟悉时,你会发现,把与指针搅和在一起的"类型"这个概念分成"指针的类型"和"指针所指向的类型"两个概念,是精通指针的关键点之一。我看了不少书,发现有些写得差的书中,就把指针的这两个概念搅在一起了,所以看起书来前后矛盾,越看越糊涂。 指针的值,或者叫指针所指向的内存区或地址 指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为si zeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首地址的一片内存区域;我们说一个指针指向了某块内存区域,就相当于说该指针的值是这块内存区域的首地址。 指针所指向的内存区和指针所指向的类型是两个完全不同的概念。在例一中,指针所指向的类型已经有了,但由于指针还未初始化,所以它所指向的内存区是不存在的,或者说是无意义的。 以后,每遇到一个指针,都应该问问:这个指针的类型是什么?指针指的类型是什么?该指针指向了哪里? 指针本身所占据的内存区 指针本身占了多大的内存?你只要用函数sizeof(指针的类型)测一下就知道了。在32位平台里,指针本身占据了4个字节的长度。 指针本身占据的内存这个概念在判断一个指针表达式是否是左值时很有用。

C语言基础测试题

C语言基础测试题 一选择题(每题2分) 1. C语言程序的基本单位是( A )。 A. 函数 B. 过程 C. 语句 D. 子程序 2. 对于whil e语句,错误的说法是( C )。 A.用条件控制循环体的执行次数 B.循环体至少要执行一次 C.循环体有可能一次也不执行 D.循环体中可以包含若干条语句 3. 定义语句int a=3;则执行语句a+=a-=a*a后,变量a的值是(C)。 A.3 B.0 C.9 D.-12 4. 关于局部变量和全局变量的叙述中,错误的是(A)。 A.全局变量的重复赋值不会影响局部变量的使用。 B.主函数中定义的变量在整个程序中都是有效的 C.形式参数也是局部变量。 D.不论是局部变量还是全局变量,都以最近的一次赋值为准。 5. 已知:int a=13;那么:printf("%02d",a)结果是(A)。 A.13 B.013 C.01 D.03 6. 在main函数中调用scanf给变量a赋值的方法是错误的,原因是()。 int *p,a; p=&a; printf("input a:"); scanf("%d",*p); A. *p表示的是指针变量p的地址 B. *p表示的是变量a 的值,而不是变量a的地址 C. *p表示的是指针变量p的值 D. *p只能用来说明p是一个指针变量 7.若有以下定义,则对a数组元素地址的正确引用是()。 A.a+5 B.*a+1 C.&a+1 D.&a[0] 8. 若int k=4,a=3,b=2,c=1;则kb); A. 1,3 B. 1,4 C. 2,3 D. 2,4 二.填空题。(每空3分) 1.写一个宏MIN,这个宏输入两个参数并返回较小的一个_________。2.main函数中:for(int i=0; i<3; i++){printf("%d",i);}输出结果是_________。3.设int a=9,b=20;则printf("%d,%d",a--,--b);的输出结果是_________。

c语言指针实验报告

C语言实习报告 题目:指针及其应用 系别: 专业: 姓名: 学号: 日期:

一实验名称:指针及其应用 二实验目的: (1)掌握变量的指针及其基本用法。 (2)掌握一维数组的指针及其基本用法。 (3)掌握指针变量作为函数的参数时,参数的传递过程及其用法。 三实验内容: (1)运行以下程序,并从中了解变量的指针和指针变量的概念。 (2)运行以下程序,观察&a[0]、&a[i]和p的变化,然后回答以下问题: 1.程序的功能是什么? 2.在开始进入循环体之前,p指向谁? 3.循环每增加一次,p的值(地址)增加多少?它指向谁? 4.退出循环后,p指向谁? 5.你是否初步掌握了通过指针变量引用数组元素的方法? (3)先分析以下程序的运行结果,然后上机验证,并通过此例掌握通过指针变量引用数组元素的各种方法。

(4)编写函数,将n个数按原来的顺序的逆序排列(要求用指针实现),然后编写主函数完成: ①输入10个数; ②调用此函数进行重排; ③输出重排后的结果。 四分析与讨论: (1)指针的定义方法,指针和变量的关系。 定义方法: 数据类型 *指针变量名; 如定义一个指向int型变量的指针—— int *p;

则我们可以继续写如下代码—— int a = 4; p = &a; printf("%d", *p); 在这里,我们定义了一个变量a,我们把它理解为内存空间连续的4个字节(int型占用4字节),则这4个字节的空间保存着一个数4。&是取地址符号,即把变量a的地址(即这4个字节的首地址)赋给指针p (记住指针p的类型和变量a的类型要保持一致,否则的话,要进行类型转换)。这样子,指针p就保存着变量a的地址。我们如果把指针p当做内存空间里面另外一个连续的4个字节,那么这4个字节保存的数就是变量a的地址。printf("%d",*p)和printf("%d",a)的结果是一样的。这里的*是取变量符号(与&刚好作用相反,通过变量的地址找到变量),与定义时int *p的*号作用不同(定义时的*表示该变量是个 指针变量,而非是取它指向的变量)。 (2)数组和指针的关系。 指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。 1.指针与数组的关系 当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如: char str[20], *ptr; ptr=str; ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实现。如对数组元素的访问,既可以用下标变量访问,也可以用指针访问。 2.指向数组元素的指针 若有如下定义: int a[10], *pa; pa=a; 则p=&a[0]是将数组第1个元素的地址赋给了指针变量p。 实际上,C语言中数组名就是数组的首地址,所以第一个元素的地址可以用两种方法获得:p=&a[0]或p=a。 这两种方法在形式上相像,其区别在于:pa是指针变量,a是数组名。值得注意的是:pa是一个可以变化的指针变量,而a是一个常数。因为数组一经被说明,数组的地址也就是固定的,因此a是不能变化的,不允许使用a++、++a或语句a+=10,而pa++、++pa、pa+=10则是正确的。由此可见,此时指针与数组融为一体。 3.指针与一维数组 理解指针与一维数组的关系,首先要了解在编译系统中,一维数组的存储组织形式和对数组元素的访问方法。 一维数组是一个线形表,它被存放在一片连续的内存单元中。C语言对数组的访问是通过数组名(数组的起始地址)加上相对于起始地址的相对量(由下标变量给出),得到要访问的数组元素的单元地址,然后再对计算出的单元地址的内容进行访问。通常把数据类型所占单元的字节个数称为扩大因子。 实际上编译系统将数组元素的形式a[i]转换成*(a+i),然后才进行运算。对于一般数组元素的形式:<数组名>[<下标表达式>],编译程序将其转换成:*(<数组名>+<下标表达式>),其中下标表达式为:下标表达式*扩大因子。整个式子计算结果是一个内存地址,最后的结果为:*<地址>=<地址所对应单元的地址的内容>。由此可见,C语言对数组的处理,实际上是转换成指针地址的运算。 数组与指针暗中结合在一起。因此,任何能由下标完成的操作,都可以用指针来实现,一个不带下标的数组名就是一个指向该数组的指针。

相关文档