void sort(float *a, int n){
int i,j
float t
for (i=0i<n-1i++)
for (j=i+1j<nj++)
if (a[j]>饥团a[i]) {t=a[i]a[i]=a[j]a[j]=t}
}
void insert(float *a,float x,int n)
{
int i,m
if (x<=a[n-1]){a[n]=x}
else if (x>=a[0]){
for (i=ni>0i--) a[i]=a[i-1]a[0]=x
} else {
for (i=0i<n-1i++) if (x<=a[i] &&x>=a[i+1]){ m=ibreak}
for (i=n-1i>mi--) a[i+1]=a[i]a[m+1]=x
}
}
int find(float *a,float y,int n){
int flag= -99,i
for (i=0i<ni++) if (a[i]==y){flag=ibreak}
return flag //让罩找到则返回下标号,没找到为负值
}
void save(float *a, int n){
FILE *fp
int i
fp=fopen("student_score.txt","w")
for (i=0i<ni++) fprintf(fp,"%g\n",a[i])
fclose(fp)
printf("saved in student_score.txt\n")
}
int main() {
float s[101],x,y
int i,n,fd
printf("input n: ")scanf("%d",&n)
printf("\ninput %d scores: ",n)
for (i=0i<ni++) scanf("%f",&s[i])
printf("\ninput one extra score x: ")
scanf("%f",&x)
sort(s,n)
insert(s,x,n)
printf("input score y which you want to find:\n")
scanf("%f",&y)
fd=find(s,y,n+1)
if ( fd<0 ) printf("Not find\n")else printf("find at %d\n",fd)
save(s,n+1)
//烂滑橘for (i=0i<n+1i++) printf("%g\n",s[i])
return 0
}
#include <stdio.h>/**
float变量内部编码16进制:0xbd600000
等价于:
floatb变量内部编码2进制:10111101011000000000000000000000
该二进制每位的含义为:
1 01111010 11000000000000000000000
S EEEEEEEE MMMMMMMMMMMMMMMMMMMMMMM
其中:
S:1位,符号档岩漏位,0表示正数,行烂1表示负数
E:8位,指数加上127后的值的二进制数
M:23位,24位底数去掉最高位1后的二进制数
由此得到:
这个浮点数是:负数
这个浮点数的指数枣郑部分是:
01111010(2进制) - 127(10进制) = 122(10进制)- 127(10进制) = -5(10进制)
这个浮点数的底数部分是:
11000000000000000000000(2进制) + 最高位1 = 1.11000000000000000000000(2进制)
现在通过指数部分的值,来调整底数部分值。调整方法为:
如果指数为负数,底数的小数点向左移,如果指数E为正数,底数的小数点向右移。
这里指数是-5,底数小数点向左移动5位,得到:
0.0000111000000000000000000000(2进制)
上面这个二进制就是浮点数的值,转换为10进制是:
1/2^5 + 1/2^6 + 1/2^7 = 1/32 + 1/64 + 1/128 = 0.0546875(10进制)
下面是验证的代码
**/
#include <stdio.h>
int main(void) {
int i= 0xbd600000
float *pf=(float*)(&i)
//输出:-0.05468750
printf("%.8f",*pf)
return 0
}
1、★编写程序,输入两个整数:1500和350,求出它们的商和余数并输出。main()
{int
a
int
b
scanf("%d%d",a,b)
printf("商:%d\n余数:%d",a/b,a%b)
}
2、★编写程序,读入三个整数给a,b,c,然后交换它们中的数,把a中原来的值给b,b中原来的值给c,
c中原来的值给a,且输出改变后的a,b,c的值
main()
{int
a
int
b
int
c
int
tmp
scanf("%d%d%d",a,b,c)
printf("a:%d
b:%d
c:%d",a,b,c)
tmp=c
c=b
b=a
a=c
printf("a:%d
b:%d
c:%d",a,b,c)
}
3、★输入两个整型变量a,b的值,输出a+b,a-b,a*b,a/b,(float)a/b,a%b的结果,要求连同算式一起输出,每个算式占一行。
main()
{int
a
int
b
scanf("%d%d",a,b)
printf("a+b=%d\na-b=%d\na*b=%d\na/b=%d\n(float)a/b=%f\na%b=%d",a+b,a-b,a*b,a/b,(float)a/b,a%b)
}
4、★输入一个非负数,计算以这个数为半径的圆周长和面积。
main()
{float
a
scanf("%f",a)
printf("周长=%f\n面积=%f",2*a*3.14,3.14*a*a)
}
5、★输入任意一个三位数,将其各位数字反序输卖腔出(例如输入123,输出321).
main()
{int
a
int
b
scanf("%d",a)
printf("%d",a%10)
a=a%100
printf("%d",a%10)
a=a%10
printf("%d",a%10)
}
6、★输入任意大小的三个整数,判断其中是否有两个奇数一个偶数。若是,则输出“YES”,不是则输出“NOT”
(要求用条件表达式进行判断,不使用if语句)
main()
{int
a
int
b
int
c
int
n=0
scanf("%d%d%d",a,b,c)
a%2==1?n++:a
b%2==1?n++:b
c%2==1?n++:c
if
n==2
printf("YES")
else
printf("NOT")
}
7、★求前驱字符和后继字符。输入一中拍衫个字符,找出它的前驱字符和后继字符,并按ASCII码值,按从大到小的顺序输出这三个字符及其对应的贺毕ASCII码值。
main()
{char
a
scanf("%c",a)
printf("%c%c%c"a-1,a,a+1)
}
累啊
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)