11.11 到 11.20 作业汇总及一些基本面试题



11.11 到 11.17作业汇总及一些基本面试题


/* 判断大小端 */
#include <stdio.h>

union test
{
    short val;
    char array[sizeof(short)];
};

int main()
{
    union test t;
    t.val = 0x0102;

    if(t.array[0] == 2 && t.array[1] == 1)
    {
        printf("Little Endian!\n");
    }
    else if(t.array[1] == 2 && t.array[0] == 1)
    {
        printf("Big Endian!\n");
    }
    else printf("Unkown");
   
    return 0;
}


/* 小端 大端 互换 */

#include<stdio.h>

int main()
{
    unsigned int a = 1;
    unsigned int b;
    b = ((a & 0x000000ff) << 24) | ((a && 0x0000ff00) << 8) | ((a && 0x00ff0000) >> 8) | ((a && 0xff000000) >> 24);
    printf("%d\n",b);

    return 0;
}

1.题目:编写程序,打印出9×9乘法表
/*   编写程序,打印出9×9乘法表   */
#include <stdio.h>

int main()
{
    int i = 1;
    int j ;
    for (i = 1;i < 10; i ++)
    {
        for(j = 1; j < 10; j ++)
        {
            if(i >= j)
            printf("%d * %d = %d ",i,j,i * j);
        }
        printf("\n");
    }
    return 0;
}

2.题目:编写程序,实现strcmp()相同功能myStrcmp()函数
/* 编写程序,实现strcmp()相同功能myStrcmp()函数 */


#include <stdio.h>

int main()
{
    printf("Please input two numbers:\n");
    char a[10]={0};
    char b[10]={0};
    scanf("%s%s",a,b);
    int i, j;
    for(i = 0; i < 10; i ++)
    {
            if(a[i] > b[i])
            {
                printf("%s > %s\n",a,b);
                return 0;
            }
            else if(a[i] < b[i])
            {
                printf("%s < %s\n",a,b);
                return 0;
            }
    }
    if(a[i] == b[i])
        printf("%s = %s",a,b);
    return 0;
}

3.题目:编写程序,将十进制转换为8进制并输出(不允许使用printf("%o"))
/* 编写程序,将十进制转换为8进制并输出(不允许使用printf("%o"))*/


#include <stdio.h>

int main()
{
   printf("Please input number:\n");
   int a;
   scanf("%d",&a);
   int art[100];
   int i;
   int t;
   int b;
   for(i = 0; i < 100; i ++)
   {
       if(a != 0)
       {
           t = a % 8;
           art[i] = t;
           a = a / 8;
       }
       else break;
   }
    for(b = i - 1; b >= 0; b --)
    {
        printf("%d ",art[b]);
    }
    printf("\n");
    return 0;
}


4.题目:编写程序,打印菱形星号组合
   *
  * *
 *   *
*     *
 *   *
  * *
   *
/* 编写程序,打印菱形星号组合 */

#include <stdio.h>
#include <string.h>
int main()
{
    char str[7][7] = {' ',' ',' ','*',' ',' ',' ',
                      ' ',' ','*',' ','*',' ',' ',
                      ' ','*',' ',' ',' ','*',' ',
                      '*',' ',' ',' ',' ',' ','*',
                      ' ','*',' ',' ',' ','*',' ',
                      ' ',' ','*',' ','*',' ',' ',
                      ' ',' ',' ','*',' ',' ',' '};
    int i,j;
    for(i = 0; i < 7; i ++)
    {
        for(j = 0; j < 7; j ++)
        {
            printf("%c",str[i][j]);
        }
        printf("\n");
    }
    return 0;
}


5.题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。(google面试题)

 例如  输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。
 分析:这是一道广为流传的google面试题
/* 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。(google面试题)
 *
 *  例如  输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。
 *      分析:这是一道广为流传的google面试题      */

#include <stdio.h>


void fun(int n)
{
    int a;
    int i;
    int count = 0;
    int b;
    for(i = 1; i <= n; i ++)
    {
        a = i;
        while(a != 0)
        {
            b = a % 10;
            a = a / 10;
            if(1 == b)
            {
                count ++;
            }
        }
    }
    printf("The result is %d",count);
    printf("\n");
}




int main()
{
    int n;
    printf("Please input n:\n");
    scanf("%d",&n);

    fun(n);


    return 0;
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        


题目1:什么是指针函数?什么是函数指针?回答并举例
答:(1)指针函数 :当一个函数声明其返回值为一个指针时,实际上就是返回一个地址给调用函数,以用于需要指针或地址的表达式中。
         举例     :char * function(char a ,char  b)
    (2)函数指针 :指向函数的指针包含了函数的地址,可以通过它来调用函数。
         举例     :a = &function ;b=(*a)();

简易版本:
 指针函数是返回值是指针类型的函数   例  char  *push(int i)
 函数指针是指向函数的指针        char(*push) (int i)

题目2:用变量a给出下面的定义
 a) 一个整型数
 b) 一个指向整型数的指针
 c) 一个指向指针的的指针,它指向的指针是指向一个整型数
 d) 一个有10个整型数的数组
 e) 一个有10个指针的数组,该指针是指向一个整型数的
 f) 一个指向有10个整型数数组的指针
 g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数
 h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数
 
 a、int a; 
 b、int *a; 
 c、int** a; 
 d、int a[10]; 
 e、int* a[10]; 
 f、int (*a)[10]; 
 g、int (*a)(int); 
 h、int (*a[10])(int);

题目3:查找最小的k个元素(笔试题)
 输入n个整数,输出其中最小的k个。
 例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4
 
/**********************************************************
File Name:        
Author:                  胡剑飞      Date:2016-12-11
Description:   查找最小的k个元素(笔试题)
    题目:输入n个整数,输出其中最小的k个。
    例如输入1,2,3,4,5,6,7和8这8个数字,
    则最小的4个数字为1,2,3和4

Fuction List:
************************************************************/
#include <stdio.h>
#define N 10
#define k  5

int main()
{
 int a[N] = {0};
 int i;
 for(i = 0; i < N; i++)
 {
  scanf("%d", &a[i]);
 }
 
 int temp;
 int j;
 for (i = 0; i < N-1; i++)
 {
  for(j = 0; j < N - 1 - i; j++)
  {
   if (a[j] > a[j+1])
   {
    temp = a[j];
    a[j] = a[j+1];
    a[j+1] = temp;
   }
  }
 }
 
 for(i = 0; i < k; i++)
 {
  printf("%4d", a[i]);
 }
 printf("\n");
 return 0;
}

题目4:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。(笔试题)
 句子中单词以空格符隔开。为简单起见,没有标点符号。
 例如输入“I am a student”,则输出“student a am I”
 
方法一:
/**********************************************************
File Name:         
Author:                  胡剑飞      Date:2016-12-11
Description:   输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。(笔试题)
    句子中单词以空格符隔开。为简单起见,没有标点符号。
    例如输入“I am a student”,则输出“student a am I”
Fuction List:
************************************************************/
#include <stdio.h>
#define N 50

void overturn1(char *p)
{
 char *h = p;
 
 while (*(++p) != '\0')
 {
  ;
 }
 p = p - 1;
 char temp;
 while(h <= p)
 {
  temp = *(p);
  *p = *h;
  *(h) = temp; 
  p--;
  h++;
 }
}

void overturn2(char* p)
{
 char *pre = p;
 char *cur = p;
 
 while (*(cur) != '\0')
 {
  if (*(cur) == ' ')
  {
   *cur = '\0';
   overturn1(pre);
   *cur = ' ';
   cur++;
   pre = cur;
  }
  else
  {
   cur++;
  }
 }
 
 overturn1(pre);
 
}

int main()
{
 char phrase[N] = {0};
 
 printf("please input:\n");
 gets(phrase);
 
 overturn1(phrase);
 
 overturn2(phrase);
 puts(phrase);
 
 return 0;
}

方法二:
#include <stdio.h>

int main()
{
 char a[4][20] = {0};
 int i;
 
 for(i = 0; i < 4; i++)
 {
  scanf("%s", a[i]);
 }
 for(i = 3; i >= 0; i--)
 {
  printf("%s ", a[i]);
 }
 printf("\n");
}


题目5:网友年龄
 某君新认识一网友。
 当问及年龄时,他的网友说:
 “我的年龄是个2位数,我比儿子大27岁,
 如果把我的年龄的两位数字交换位置,刚好就是我儿子的年龄”
 请你计算:网友的年龄一共有多少种可能情况?
 提示:30岁就是其中一种可能哦.      (第七届蓝桥杯软件类省赛真题)
 
#include<stdio.h> 
 
int main() 

    int i; 
    int j; 
    int g; 
    int s; 
    int temp; 
    int count = 0; 
     
    for (i = 10; i < 100; i++) 
    {        
        g = i % 10;      
        s = i / 10; 
        temp = g * 10 + s; 
     
        for (j = 1; j < i; j++) 
        {        
            if ((temp == j) && (i - j == 27)) 
            { 
                printf ("i= %d\tj=%d\n",i ,j); 
                count++; 
            } 
        }    
    } 
    printf("count = %d\n",count); 
     
    return 0; 


题目1:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
#include <stdio.h> 

int main()

     
 int i, j, k, count = 0;
 printf("\n");
 for(i = 1; i < 5; i++)
 {
  for(j = 1; j < 5; j++)
  {
   for(k=1;k<5;k++)
   {
    if(i!=k&&i!=j&&j!=k)      /*确保i、j、k三位互不相同*/
    {
     count++;
     printf("%d%d%d\n",i,j,k);
    }
   }
  }
 }
 printf("count = %d\n", count);

题目2:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
#include <stdio.h> 
#include <math.h> 
 
int main(int argc, const char * argv[]) 

     
    int i,temp1,temp2; 
    for (i=0; i<100000; i++)
 { 
        temp1 = sqrtf(i+100); 
        temp2 = sqrtf(i+100+168); 
        if ((temp1*temp1 == i+100) && (temp2*temp2 == i+100+168))
  { 
            printf("--------> %d\n",i); 
        } 
    } 
         
     
    return 0; 

题目3:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
#include <stdio.h>

int main()
{
    //num要分解的数
    //i已经分解出来的。
    int num,i;
    printf("please input a num:");
    scanf("%d",&num);
    printf("%d=",num);

    //分解.从1到num检查,看看是不是因子。
    for(i=2; i<=num; i++)
        while(num%i==0)
        {
            num/=i;
            printf("%d*",i);
        }

    //1:输出最后一个因子。一定是1,如果上面for有=num也输出来了,所以只剩下1
    //即:num==1;
    //2:如果for没有=num的情况,那么,不一定是1的情况,可能还是其他,可以根据自己的需要改。
    printf("%d",num);

    return 0;
}

题目4:输入两个正整数m和n,求其最大公约数和最小公倍数。
#include <stdio.h>

int main()
{
 int x, y, temp, sum;
 printf("please input 2 numbers:");
 scanf("%d %d", &x, &y);
 
 sum = x * y;
 
 if(x < y)
 {
  x ^= y;
  y ^= x;
  x ^= y;
 }
 
 while(x % y)
 {
  temp = y;
  y = x % y;
  x = temp;
 }
 printf("最大公约数为%d\n", y);
 printf("最小公倍数为%d\n", sum/y);
 
 return 0;
}

题目5:输入一行字符,分别统计出其中英文字母、空格、数字的个数。

方法一:
#include<stdio.h>
 
int main()
{
   char a[100];
   int i=0;
   int kg=0;
   int yy=0;
   int sz=0;
   int k=0;
  
   printf("请输入:");
   gets(a);
   printf("%s\n",a);
  
   while(a[i] != '\0')
    {
       if( a[i] == 32)
           kg++;
      
       if(a[i] >= 'a' & a[i] <='z')
           yy++;
         
       if(a[i] >= 'A' & a[i] <='Z')
           yy++;
 
       if(a[i] >= '0' & a[i] <='9')
           sz++;
       i++;
    }
   printf("空格有%d个\n",kg);
   printf("英语字母字符有%d个\n",yy);
   printf("数字字符有%d个\n",sz);
 
   return 0;
}

方法二:
#include <stdio.h>
int main()
{
         intch_num=0;
         intint_num=0;
         intspace_num=0;
         charch=getchar();
         while(ch!= '\n')
         {
             if(ch == ' ')
      space_num++;
      else if(ch >= '0' &&ch <= '9')
     int_num++;
    else if((ch >= 'A'&& ch <='Z')||(ch >= 'a' && ch <= 'z'))
     ch_num++;
     ch =getchar();
         }
       
         printf("ch_num=%d\nint_num=%d\nspace_num=%d\n",ch_num,int_num,space_num);
         return0;
       
 }

方法三:
#include<stdio.h>


int main()
{
    char a[100];
    int i=0;
    int kg=0;
    int yy=0;
    int sz=0;
    int k=0;
   
    printf("请输入:");
    scanf("%[^\n]",a);
 
    while(a[i] != '\0')
    {
        if( a[i] == 32)
            kg++;
       
        if(a[i] >= 'a' & a[i] <='z')
            yy++;
          
        if(a[i] >= 'A' & a[i] <='Z')
            yy++;


        if(a[i] >= '0' & a[i] <='9')
            sz++;
        i++;
    }
    printf("空格有%d个\n",kg);
    printf("英语字母字符有%d个\n",yy);
    printf("数字字符有%d个\n",sz); 
   
  
    return 0;
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               


题目1:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。

#include <stdio.h>

int main()
{
 int i,j,k,sum;
 printf("1000以内的完数有:\n");
 for(i=2;i<=1000;i++)
 {
  k=i/2;
  sum=0;
  for(j=1;j<=k;j++)
   
   if(i%j==0)
   sum=sum+j;
     
  if(sum==i)
  printf("sum= %d\n", sum);
 }
 return 0;
}

题目2:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。

#include<stdio.h>
int main()
{
    int a,b,c,i;
    float sum;
    a=1;b=2;
    for(i=1;i<=20;i++)
    {
        sum=sum+1.0*b/a;
        c=a;
        a=b;
        b=c+b;
    }
    printf("%.2f",sum);
    return 0;
}


题目3:求1+2!+3!+...+10!的和

#include <stdio.h>
int main()
{
 long long a=0,t=1;
 int i,k;
 for(k=1;k<=10;k++)
 {
  t=1;
  for(i=k;i>0;i--)
   t=t*i;
  printf("%d\n",t);
  a=a+t;
 } 
 printf("1+2!+3!+…+10!=%ld",a);
}

题目4:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。

#include <stdio.h>

int main()
{
 int num,i,j,k;
 for(num=100;num<=999;num++)    
 {
  i=num/100;     
  j=num%100/10;
  k=num%10;     
  if(num==i*i*i+j*j*j+k*k*k)     
   printf("%d\n",num);    
 }
 return 0;
}


题目5:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加由键盘控制
#include <stdio.h> 
#include<math.h> 
int main () 

    int a,n,sum1=0,sum2=0,i; 
    while (scanf("%d %d",&a,&n)!=EOF) 
    {  
  for (i = 0; i <n; i++) 
        { 
            sum1=sum1*10+a; 
            sum2=sum2+sum1;  
        } 
        printf("%d\n", sum2);
  sum1=sum2=0; 
    } 
    return 0; 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值