php 逻辑训练小题目三(附我的答案)

【程序31】
题目:将一个数组逆序输出。 
1.程序分析:用第一个与最后一个交换。 

<?php
$arr=array("张氏","男",28,"本科");
$arr2=$arr;
for($i=0,$len=count($arr);$i<$len;$i++){
$arr[$i]=$arr2[$len-1-$i];
}
var_dump($arr);
?>


【程序32】 
题目:取一个整数a从右端开始的4~7位。 
程序分析:可以这样考虑: 
(1)先使a右移4位。 
(2)设置一个低4位全为1,其余全为0的数。可用~(~0<<4) 
(3)将上面二者进行&运算。 

main()
{
unsigned a,b,c,d;
scanf("%o",&a);
b=a>>4;
c=~(~0<<4);
d=b&c;
printf("%o\n%o\n",a,d);
}


【程序33】
题目:打印出杨辉三角形(要求打印出10行如下图) 
1.程序分析: 

1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 

<?php

for($i=1;$i<=10;$i++){
   for($j=1;$j<=$i;$j++){
   $arr[$i][1]=1;
	   if($i==$j){$arr[$i][$j]=1;
	   echo $arr[$i][$j]."\t";}
	   else{
	   @$arr[$i][$j]=$arr[$i-1][$j-1]+$arr[$i-1][$j];
	   echo $arr[$i][$j]."\t";
	   }
   }
   echo "<br/>";
}

?>


【程序34】 
题目:输入3个数a,b,c,按大小顺序输出。 
1.程序分析:利用指针方法。 

</pre><pre name="code" class="cpp">main()
{
float a,b,c,t;
scanf("%f,%f,%f",&a,&b,&c);
if(a>b)
{t=a;a=b;b=t;} /*实现a和b的互换*/
if(a>c)
{t=a;a=c;c=t;} /*实现a和c的互唤*/
if(b>c)
{t=b;b=c;c=t;] /*实现b和c的互换*/
printf("%5.2f,%5.2f,%5.2f\n",a,b,c);
}



【程序35】 

题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。 

$a=max($arr);
$b=min($arr);
$arr[array_search($b,$arr))]=max($arr);;
$arr[array_search($a,$arr))]=max($arr);;


【程序36】 
题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数 

#include "stdio.h"
#define N 7
main()
{
     int a[N]={1,2,3,4,5,6,7},b[N];
     int i,m,n,x;
     scanf("%d",&m);
     n=0;
     x=N;
     for(i=0;i<m;i++)
     {
         b[i]=a[x-1];
         x--;
     }
     for(i=N-m-1;i>=0;i--)
     {
         a[i+m]=a[i];
     }
     for(i=m-1;i>=0;i--)
     {
         a[n]=b[i];
         n++;
     }
     for(i=0;i<N;i++)
         printf("%d",a[i]);

}


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

<?php
   $arr=range(1,10);
   while(count($arr)>1){
     for($i=1;$i<3;$i++){
		   if(!next($arr)){reset($arr);}
		   if($i==2){
			   echo $arr[key($arr)];
		   unset($arr[key($arr)]);
		   }
	   
	 }
   }
   var_dump($arr);
?>


【程序38】 
题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 

strlen();


【程序39】 
题目:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数
1/1+1/3+...+1/n(利用指针函数) 

#include <stdio.h>
float sum1(int n);
float sum2(int n);
void main(){
    int n;
    scanf("%d",&n);
    float (*sum)(int n);
    if (n<1) {
    printf("输入整数不在范围");
    }
    else if(n%2==1){
    sum=sum1;
    printf("%f",sum(n));
    }
    else if(n%2==0){
    sum=sum2;
    printf("%f",sum(n));    
    }
}
float sum1(int n){
    float temp,sum;
    for(int i=1;i<=n;i++){
        if(i%2==1){
        temp=1.0/float(i);
        sum+=temp;
        }
    }
    return sum;
}
float sum2(int n){
    float temp,sum;
    for(int i=1;i<=n;i++){
        if(i%2==0){
        temp=1.0/float(i);
        sum+=temp;
        }
    }
    return sum;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值