笔试题
1.通过if来比较flag于零值(0710/work work1.c)
float flag;
int flag;
double flag
bool flag;
int* flag;
注:此题思路是考虑各个类型的精度然后做出判断
超出精度的值此值就为零;
代码如下:
#include<stdio.h>
#include<stdbool.h>
void main()
{
float flag=0.00000001;
int flag1=2;
double flag2=0.000000001;
bool flag3=true;
int* flag4;
if(flag>-0.0000001&&flag<0.0000001)
{
printf("flag为0 %f\n",flag);
}
else
{
printf("flag不为0 %f\n",flag);
}
if(flag1>-1&&flag1<1)
{
printf("flag1为0 %d\n",flag1);
}
else
{
printf("flag1不为0 %d\n",flag1);
}
if(flag2>-0.0000000000000001&&flag2<0.00000000000000001)
{
printf("flag2为0 %.16f\n",flag2);
}
else
{
printf("flag2不为0 %.16f\n",flag2);
}
if(flag3==true)
{
printf("不为0 %d\n",flag3);
}
else
{
printf("为0%d\n",flag3);
}
if(flag4==NULL)
{
printf("为0 %d\n",flag4);
}
else
{
printf("不为0 %d\n",flag4);
}
}
2.插入排序
注:以i为界i之前:已排序i之后未排序
将当前比对的值用temp存储出来一但不满足循环条件就把当前值个当前位置
3.查找子字符串
注:先一个一个遍历找到父字符串中找到与子字符串第一个相等的下标然后再往后寻找子字符串长度的个数如果全不一样查找成功。
练习题
1.输出下面的形状
注:此题思路是找到每一行输出空格和行数的关系假定行数为i,输出空格行数为j,那么j和i的关系为j-i;
输出的*号个数n于行数i的关系是n=2*i-1;
代码如下:
#include<stdio.h>
void main()
{
int i=0;
int j=0;
int a=0;
for(i=1;i<=5;i++)
{
for(j=5;j>i;j--)
{
printf(" ");
}
for(j=1;j<=2*i-1;j++)
{
printf("*");
}
printf("\n");
}
for(a=4;a>=1;a--)
{
for(j=4;j>=a;j--)
{
printf(" ");
}
for(j=1;j<=2*a-1;j++)
{
printf("*");
}
printf("\n");
}
}
2.求某两个正整型的最小公倍数
(int a,int b)
最小公倍数int n
注:循环找出第一个能对a,b同时取余都等于0的n值;
代码如下:
#include<stdio.h>
void main()
{
int i=1;
int a,b;
scanf("%d",&a);
scanf("%d",&b);
for(i=1;;i++)
{
if(i%a==0&&i%b==0)
{
printf("%d\n",i);
break;
}
}
}
3.将54321的整型数字倒着打印
注:对一个正整数,对10取余再除以10如此循环可以将此正整数的低位到高位依次取出,
代码如下:
#include<stdio.h>
void main()
{
int num=54321;
for(;num!=0;num=num/10)
{
printf("%d\n",num%10);
}
}
4.输入一个数判断这个数是不是回文数
注:1.先对输入的数,对101取余再除以10如此循环直到这个数为0为止,就可以将这个数从低位到高位依次取出
2.将取出的最低位放到最高位,最高位放到最低位。方法如下:将最低位乘以十加上次低位然后再乘以十加上次次低位如此重复直到加上原先数的最高位;
代码如下:
#include<stdio.h>
void main()
{
//12321
int num;
scanf("%d",&num);
int b=num;
int a=0;
for(;num!=0;num/=10)
{
a=a*10+num%10;
}
if(a==b)
{
printf("此数字为回文数字n");
}
else
{
printf("此数字不为回文数字\n");
}
}
5.求浮点型的二进制数(正数)
注:将整数部分的十进制数转换为二进制方法是:对2取余再除以2再取余再除以2。。。。。
将小数部分的十进制数转换为二进制方法是:取整乘2再取整直到直到小数部分等于0时结束
代码如下:
#include<stdio.h>
void main()
{
/* int a;
int b[100];
int i=0;
int j;
scanf("%d",&a);
for(;a!=0;a=a/2,i++)
{
b[i]=a%2;
}
for(j=(i-1);j>=0;j--)
{
printf("%d",b[j]);
}
*/
float a;
int i=0;
scanf("%f",&a);
for(;a>=1;a-=1)
{
i++;
}
int b[100]={};
int c=0;
int d=0;
for(;i!=0;i=i/2,d++)
{
b[d]=i%2;
}
for(c=(d-1);c>=0;c--)
{
printf("%d",b[c]);
}
int e=0;
printf(".");
for(e=1,a=a*2;e<7;e++)
{
if(a>1)
{
printf("1");
a=a-1;
a=a*2;
}
else if(a<1)
{
printf("0");
a=a*2;
}
else if(a==1)
{
printf("1");
break;
}
}
}
6.求鞍点:声明一个4行5列的二维数组,求出数组中鞍点及其所在行与列
(鞍点:即该位置上的元素在该行中最大,在该列中最小。)