C语言基础题目(一)

1:输入一个字节的数(小于256)与移位个数,输出移位的结果(一个字节循环移位)

    unsigned char a=0,b=0;

    int n=0,x = 0,y = 0,c=0,d=0;

    scanf("%d,%d",&x,&y);

    a = (char)x;

    n = (char)y;

    c=a>>n;

    d=a<<(8-n);

    b=c|d;

    printf("%d",b);

思路:把输入的int型的数字转换成char型的,因为根据要求一个字节char符合要求。

        根据题意循环移位即例:右移出的数字要在左边循环回来,即只需看移出的数字在左边的拼合

        如00101111右移2位得出11001011  

        a>>1即代表a/2,a<<1即代表a*2     

        移完后再把2个数按2进制拼合  即通过 a|b (a位或b)

知识补充:位运算符(此处位二进制的位运算符)

包括:<< 左移(十进制数左移一位代表x10,二进制数左移一位代表x2,当然)还有>>1为除以二

         & 位与   2012-11-14

 


1:
sn=a+aa+aaa+aaaa+......+aa.....a的值,其中a是一个数字,例如:2+22+222+2222+22222(此时n=5)na的值由键盘输入,请编程实现以上和过程
       
       int a=0,sum=0,n=0,a1=0;//位数;

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

    a1=a;

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

    {

        a=a*10+a1;

        sum=a+sum;

    }

    printf("%d",sum+a1);

===================================================================================================
2://输入十个数找出第二大的数显示出来

    int max=0,tmax=0,s=0;

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

    {

        scanf("%d",&s);

        if(s>max){

            tmax=max;

            max=s;

        }else if(s>tmax)

            tmax=s;

    }

    printf("第二大是%d",tmax);
//思路:当输入一个新数字进行的比较的时候如果输入的数字比当前最大的数(max)大要把这个数字赋给max,记得把刚才max的值赋给tmax(第二大的数),如果输入的值比max小,记得要和tmax比较,若果比tmax大,记得把值赋给tax。
 
=======================================================================================
 
指针相关
3:在主函数中输入6个字符串,对他们按从小到大的顺序,然后输出这6个已经排好序的字符串。要求使用指针数组进行处理。

    char str[6][100]={0};

    for (int i=0; i<6; i++) {

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

    }

    for (int i=0; i<6; i++) {

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

    }

    printf("\n");

    //1:换内容

    char temp[100]={0};

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

        for (int j=0; j<5-i; j++) {

            if (strcmp(str[i],str[i+1])>0) {

                strcpy(temp,str[i+1]);

                strcpy(str[i+1], str[i]);

                strcpy(str[i], temp);

            }

        }

    }

    for (int i=0; i<6; i++) {

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

    }

----------------------------------------------------------------------------------------------------    

    //2:换地址

    char *p[6]={0};

    for (int i=0; i<6; i++) {

        p[i]=str[i];//因为是二维的,是一个字符串的数组,所以p[i]=str[i],如果是str1[100]="android iphone"可以直接p[0]=str1但是二维不可以

    }

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

        for (int j=0; j<5-i; j++)

        {

            if (strcmp(p[i], p[i+1])>0)

            {

                char*temp=p[i];

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

                p[i+1]=temp;

            }

        }

    }

    for (int i=0; i<6; i++) {

        printf("%s\t",p[i]);//只是指针改变,并不是内容改变,所以下面的str[i]还是原来的样子

    }

    printf("\n");

    

    for (int i=0; i<6; i++) {

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

    }
=====================================================================================================

 

posted @ 2012-12-08 13:51  言程序  阅读(498)  评论(0)    收藏  举报