C语言面试题

本人是个人的学习笔记,若有错误请指正

1.输入一个数,分解打印出它的因数乘积。如若输入的值是-125,输出  -125=-5*5*5  或  90=2*3*3*5

程序:   

#include<math.h>

main(){

   int i,n=90,r;

    printf("%d=",n);

    r=n;

    for(i=2;i<sqrt(n);i++){    

       while(r%i==0){

           printf("%d ",i);

            r=r/i;

           if(r>1)putchar('*');

        }        

    }

2.选择排序法    时间复杂度 O(n^2)

       其基本思想是:首先在未排序的数列中找到最小(or最大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(or最大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕.  

第一次轮流:至少轮到第n-1个(0_n-2)——>     i=0;i<=n-2  i<n-1

              轮到第n个 也行(0_n-1)——>   i=0; i<n

第二次:选取到最后一个   第n个(0_n-1)    i=0; i<n

程序;

3.冒泡排序法    时间复杂度 O(n^2)

相邻两数两两比较,一共n-1次,进行交换。最终,最大的数在最右边(沉底),进行n-1次。每一趟都需要从第1位开始进行相邻两个数的比较。

第二重循环:两两比较,最大的往右边,1_n-1次— i=0;i<n-1

第二次进行的时候,最大的数沉底,不用进行,1_n-i-1次 i<n-i-1

程序:

  

4.将一个数组{},倒序输出

int main()

{

    int i,j,t,n;

    int a[]={8,6,5,4,7,1};//数字

    n=sizeof(a)/sizeof(int); //个数

    printf("倒序前");

    shows(a,n);  //打印

//左右两边互换,0_n-1,I_n-1

    for(i=0,j=n;i<j;i++,j--){

        t=a[j-1];

        a[j-1]=a[i];

        a[i]=t; 

        shows(a,n);//打印

    }
   
    printf("倒序后");

    shows(a,n);    //打印 

    system("pause");

    return 0;

}

字符串倒序输出

int main()
{
	int i,j,t,n;
    char a[]="I LOVE YOU";//字符
    n=strlen(a);//个数
    
    printf("倒序前");
    printf(" : %s\n",a);//打印

//交换左右两边字符串,两端向中间
// i< j

   for(i=0,j=n;i<j;i++,j--){
		 t=a[j-1];
        a[j-1]=a[i];
        a[i]=t;  
        printf(" : %s\n",a);
//打印
    }    
    printf("倒序后");
    printf(" : %s\n",a);//打印    
	system("pause");
	return 0;
}

5.二维数组的地址

        二维数组的可以说成是由2个数组构成的,如下;

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

数组地址A 

行数组名称  ( A[0])  1       2       3       4      A+1地址

                           A[1]      5       6       7       8      A+2地址

                           A[2]      9      10      11      12      A+3地址

                                  A[]+0    +1      +2      +3      地址

        列数组为A[0]、A[1] 、A[2]      *A=A[0]  *(A+1)=A[1]    *(A+2)=A[2]  

        行数组为A[0][0]、A[0][1]、A[0][2]、 A[0][3]     A[0]存放首地址  A[0][j]=*(A[0]+j)

                        A[1][0] 、A[1][0]、A[1][0]、A[1][0]    A[1]存放首地址

                        A[2][0]、A[2][0]、A[2][0]、A[2][0]     A[2]存放首地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值