编译带数学库源程序 gcc xxx.c -o xxx -lm
测试本机各种数据类型的位数
printf("%d",sizeof(int)) printf("%d",sizeof(char)) printf("%d",sizeof(float)) printf("%d",sizeof(double))
输入正整数n,输出n度的正弦、余弦值
1 #include <stdlib.h> 2 #include <math.h> 3 #include <stdio.h>// 消除链接库问题 4 int main() 5 { 6 int a; 7 scanf("%d",&a); 8 double c=(a*3.14159/180); // 角度转弧度 9 double b=sin(c); 10 printf("%.3lf ",b); 11 }
问题 scanf("%lf%lf%lf%lf",&a,&b,&c,&d)得出的abcd有问题 输入0011 输出0 1.870 1.870 0
用printf输出浮点型不能控制小数位数
问题 printf("%.3lf" ,a) 输入1.4142144 输出1.4144
1 scanf("%d ", &i); 格式串中有 ,所以需要输入两次回车才能继续; 2 3 scanf("%2d%2d", &i, &j); %2d指整形占用两位,所以当输入1234时, 12被赋值给i, 34被赋值给j; 4 5 float f; scanf("%4.1f", f); scanf的格式串中没有类似小数位数的格式,所以这样的输入经常会导致输入错误; 6 7 输入一个double型浮点数,怎么会不管怎么输入都得不到正确的结果 8 9 #include <stdio.h> 10 11 int main() 12 { 13 double d; 14 scanf("%f", &d); 15 printf("%f ", d); 16 return 0; 17 } 18 这个问题在于, scanf格式中的%f表示输入的是一个float类型,在笔者的平台上是4字节的,而实际上却被保存在double类型变量中,所以它被保存到变量d的低4个字节中(intel小端),但是整个double变量的值却和低4个字节的值根本不能直接运算,可以参考IEEE 754关于浮点数的标准。解决这个问题不复杂,只需要将格式%f改为%lf即可 19 scanf用于输入字符,但是第二个需要输入的字符却使用不正确,为什么呢? 20 #include <stdio.h> 21 22 int main() 23 { 24 char ch1, ch2; 25 scanf("%c%c", &ch1, &ch2); 26 printf("|%c|%c| ", ch1, ch2); 27 return 0; 28 } 29 因为在输入a后的回车也被当做了一个字符用于存储在b当中导致的。记得,scanf在输入整形、浮点型等数据的时候可以忽略回车、空格、制表符等字符,但是输入格式为%c的时候就不这样了,此时它会很认真。所以,将输入的代码改为scanf("%c %c", &ch1, &ch2);
假如定义的变量是int,但scanf确实%lf 也会导致输入出问题
%s,通常配对使用的是开辟一个char 型数组读入标准输入流中的一个字符串存入数组中,并且添加结束标记'/0'填入到读入的最后一个字符末尾中,可以用数组下标访问字符串的每一个成员
%c,读入单个的字符
char s[10]
printf("%s",s) //输出一个字符串
for(i=0;i<strlen(s);i++
printf("%c",s[i])//输出字符串
sscanf函数用法
1 int main() 2 { 3 char *s="11:22:33"; //注意这里,要声明为指针变量不然会出错 4 int HH,MM,SS; 5 sscanf(s,"%02d:%02d:%02d",&HH,&MM,&SS); 6 printf("%d",HH); 7 8 return 0; 9 10 }