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;
}