scanf(\insert(str);
printf(\}
voidinsert(charstr[]) {inti;
for(i=strlen(str);i>0;i--) {str[2*i]=str[i]; str[2*i-1]=''; }
}8.编写一个函数,其功能是判断给定的正整数是否是素数,若是素数则返回函数值1,否则返回函数值0。 #include\#include\sushu(intn) {intk,i,flag;
k=sqrt((double)n); i=2; flag=0;
while((i<=k)&&(flag==0)) {if(n%i==0)flag=1; i=i+1;}
return(!flag);} voidmain() {
inta,b;
printf(\请输入一个正整数:\scanf(\b=sushu(a); if(b)
printf(\是一个素数\\n\else
printf(\不是一个素数\\n\
}9.有五个人坐在一起,问第五个人多少岁,他说比第四个人大2岁,问第四个人多少岁,他说比第三个人大2岁,问第三个人多少岁,他说比第二个人大2岁,问第二个人多少岁,他说比第一个人大2岁,问第一个人多少岁,他说10岁,问第五个人多少岁? #include\intf(intn) {inta;
if(n==1)a=10; elsea=f(n-1)+2; return(a);} voidmain()
{printf(\}
第六章指针
一.选择题
1.一个变量的指针就是(B)。
A)变量的名称B)变量的地址C)变量的类型D)变量的值 2.两个指针变量不能(B)。
A)相减B)相加 C)比较D)指向同一地址 3.在C语言中,对变量的访问方式是(A)。
A)能直接访问,能间接访问B)能直接访问,不能间接访问
C)不能直接访问,能间接访问 D)不能直接访问,不能间接访问 4.在C语句:int(*pa)[5];中,pa表示的是一个(C)。 A)指针数组的名字 B)指向整型变量的指针
C)指向包含5个整型元素的一维数组的指针D)指向函数的指针 5.在C语句:int*function();中,function表示的是一个(A)。 A)返回值为指针的函数名字 B)指向整型变量的指针 C)指向数组的指针D)指向函数的指针 6.有以下程序(假设从键盘输入数据1,2)。
#include
voidswap(int*p1,intp2) {*p1=*p1+p2; p2=p2+*p1;} voidmain()
{inta,b,*pointer1;
scanf(\pointer1=&a; swap(pointer1,b);
printf(\
程序执行后的输出结果是(D)。 A)3,5 B)a=3,b=5 C)3,2 D)a=3,b=2 7.有以下程序。
#include
{intarray[]={1,2,3,4,5,6,7}; inti,j,*pointer1,*pointer2; pointer1=&array[1]; pointer2=&array[5]; i=*pointer1**pointer2;
j=*(pointer1+2)+*(pointer2+1); printf(\
程序执行后的输出结果是(C)。
A)5,9 B)9,5 C)12,11 D)11,12
8.有以下程序。
#include
{staticintarray[3][4]={1,3,5,7,9,11,13,15,17,19,21,23}; int(*p)[4],i,j,sum[3]; p=array;
for(i=0;i<3;i++) {sum[i]=0;
for(j=0;j<4;j++)
sum[i]=sum[i]+*(*(p+i)+j); printf(\} }
程序执行后的输出结果是(A)。
A)16,48,80,B)164880 C)144 D)80 9.有以下程序。
#include
voidfun(intx,inty,int*z) {*z=x-y;} voidmain() {inta,b,c; fun(11,5,&a); fun(8,a,&b); fun(a,b,&c);
printf(\}
程序执行后的输出结果是(C)。
A)2,4,6B)2,6,4C)6,2,4 D)6,4,2 10.有以下程序。
#include
{chara[]=\char*ch_pointer=&a[9]; while(--ch_pointer>=&a[0]) putchar(*ch_pointer);}
程序执行后的输出结果是(D)。 A)ABCDEFGHIB)ABCDEFGH C)HGFEDCBA D)IHGFEDCBA 二.填空
1.在C语言中,指针++运算的意义是使指针指向下一个数据元素的位置。指针--运算的意义是使指针指向上一个数据元素的位置。在指针变量中具体增加或减少的字节数则是由系统自动根据指针变量的基类型决定。
2.单目运算符&后面跟上变量名字来表示该变量的地址。
3.在C语言中,对于int*pa[10],表示定义pa是一个指针数组。因为*比[]优先级低,所以pa先要与[]结合成为pa[10]的数组形式,它有10个数组元素;然后再与前面的int*结合来表示数组元素的类型是指向整型变量的指针,就是说,每个数组元素都可以指向一个整型变量。 4.在C语言中,对于int(*fun_p)(intx),表示定义fun_p为一个指向函的指针变量。因为fun_p首先要与*结合成为指针变量;然后再与后面的()结合,表示该指针变量指向函数,该函数的
返回值(即函数值)为整型。
5.指向函数的指针变量在使用之前必须要先定义,而且也必须进行初始化,使它指向某个函数。指向函数的指针变量定义中的返回值类型和参数表内容应该与该函数的返回值类型和参数表内容保持一致。同时注意,指向函数的指针变量只能指向函数的入口地址,而不能指向函数中间的某一条语句。
6.使用指针的方法编写程序,求两个浮点数的和以及差。
#include
voidsub_add(floatx,floaty,float*sub,float*add); main() {floata,b;
floatsub_result,add_result;
printf(\scanf(\
sub_add(a,b,&sub_result,&add_result); printf(\}
voidsub_add(floatx,floaty,float*sub,float*add)/*差、和的函数定义*/ {*sub=x-y;/*两个浮点数的差赋值给指针sub所指向的变量*/ *add=x+y;/*两个浮点数的和赋值给指针add所指向的变量*/ return; }
7.使用指针编写程序,从键盘输入一个字符串,然后统计字符串中字符的个数。
#include
intlength(char*p); main()
{charstring[30]; intl;
printf(\scanf(\l=length(string);
printf(\}
intlength(char*p)/*定义函数,统计字符串中字符的个数*/ {intlen=0; while(*p!='\\0') {len++; p++; }
return(len); }
8.使用指针编写程序,按照正反两个顺序打印一个字符串。
#include
{char*p_string1,*p_string2;
p_string1=\定义字符指针变量并且指向一个字符串*/