竞赛入门

编译带数学库源程序 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 }
原文地址:https://www.cnblogs.com/been/p/4063059.html