前几天这篇博客写了太多废话! 删啦~~。
本篇博客只是为chd A协的全嫩小鲜肉入门C语言的预科, 如果你在此处学习C语言, 不幸走火入魔, 小弱概不负责。
//请直接随便找个C语言编译器,抄一下下面的程序
//如果不会用编译器,或根本不知什么是编译器
//请自行默默百度, 下载, 安装,学习使用
//如果你懒得不想去百度, 请出门遇红灯直行!
#include<stdio.h>
int main()
{
printf("What fuck are you doing?");
return 0;
}
不要问为什么, 先抄写一下, 执行一下再说。
#include<stdio.h>// 这里指包含了一个文件,里面也是一些代码。
//只不过这些代码几乎每个程序都要用,于是创造C语言的那帮家伙
//替我们都写好啦, 直接用就可以啦!
int main()
{
printf("Talk is cheap!"); // 输出语句
return 0;
}
下面试一些基本语法:
然后是关键字, 简单变量类型 , 声明语句, 定义语句, 运算符号, 循环结构, 条件结构, 基本语句, 数组,字符串, 结构体, 指针 , 函数 , 递归函数 , (生存空间与作用域 ,动态申请内存, 内存模型 )括号里面的东西现在先不要看! 。估计你们理解有困难的地方, 我已加了链接或将要加链接, 可能链接讲的有点儿深, 随便看一下就好啦。
其实C语言真的就没多少东西可讲, 又感觉有好多东西要讲(像今天, 竟然一下就讲到了内存分配机制, 估计当时是智商挂掉了!)
//神奇的C语言输入输出
#include<stdio.h>
int main()
{
double me = 2222.2222222;
printf("%.0lf\n\n", me);
printf("%.2lf\n\n", me);
printf("%.10lf\n\n", me);
printf("%10.0lf\n\n", me);
printf("%2.2lf\n\n", me);
return 0;
}
适当的应用 scanf 可以跳过我们不需要的字符!
#include<stdio.h> int main() { int me, you; scanf("%d + %d", &me, &you); printf("%d + %d = %d\n", me, you, me+you); return 0; } //输入格式: 9 + 5 //输出结果: 9 + 5 = 13
//关于字符串的输入输出 #include<stdio.h> int main() { char str[100]; char ch; scanf("%s", str); scanf("%c", &ch); if(ch=='\n') printf("卧槽!\n"); printf("%s\n", str); printf("%c\n", ch); return 0; } // 输入:I love litte C. // 输出:I // (这里输出了一个空格) //输入:ACMer //输出:卧槽! // ACMer //
是不是感觉有点怪? 这是因为 scanf("%s", str); 会在遇到空格, 制表符, 换行符时结束, 并且把空格, 制表符, 换行符留在输入队列里(也就是并没有读入str[]内)
那么问题就来啦!
//比较两个字母的字典序
#include<stdio.h>
int main()
{
char ch1, ch2;
scanf("%c %c", &ch1, &ch2);
if(ch1<ch2) printf("%c < %c\n", ch1, ch2);
else if(ch1 > ch2) printf("%c > %c\n", ch1, ch2);
else printf("%c = %c\n", ch1, ch2);
return 0;
}
这个还是正常的, 但是如果再读入一次输入呢?
//比较两个字母的字典序
#include<stdio.h>
int main()
{
char ch1, ch2;
scanf("%c %c", &ch1, &ch2);
if(ch1<ch2) printf("%c < %c\n", ch1, ch2);
else if(ch1 > ch2) printf("%c > %c\n", ch1, ch2);
else printf("%c = %c\n", ch1, ch2);
scanf("%c %c", &ch1, &ch2);
if(ch1<ch2) printf("%c < %c\n", ch1, ch2);
else if(ch1 > ch2) printf("%c > %c\n", ch1, ch2);
else printf("%c = %c\n", ch1, ch2);
return 0;
}
//输入:a b
//输出:a < b
//输入:c d
//输出: < c
//上面出错的原因就是因为 ch1 是读取了第一次输入的换行符
在用scanf("%s", &str), scanf("%c", &ch) 一类的读入方式字符时, 如果有多组输入, 注意清理掉每行结尾的换行符。一个简单的方法就是用getchar()吸收掉换行符
//比较两个字母的字典序
#include<stdio.h>
int main()
{
char ch1, ch2;
scanf("%c %c", &ch1, &ch2);
if(ch1<ch2) printf("%c < %c\n", ch1, ch2);
else if(ch1 > ch2) printf("%c > %c\n", ch1, ch2);
else printf("%c = %c\n", ch1, ch2);
getchar(); // 吸收掉换行符
scanf("%c %c", &ch1, &ch2);
if(ch1<ch2) printf("%c < %c\n", ch1, ch2);
else if(ch1 > ch2) printf("%c > %c\n", ch1, ch2);
else printf("%c = %c\n", ch1, ch2);
return 0;
}
//输入:a b
//输出:a < b
//输入:c d
//输出:c < d
//上面出错的原因就是因为 ch1 是读取了第一次输入的换行符
由于scanf("%s", &str); 不能读取字符串(含有空格, 制表符的字符串)。 读取带有空格和制表符的字符串时,可以用gets(str);gets(str)会把空格,制表符, 换行符全部读入(遇到换行符终止读入, 但是读入了换行符) 而输出字符串时可以用 printf("%s\n", str), 或者 puts(str);
这里给学弟学妹一个福利! 让小弱替你们写第一道题吧! (此题没有什么技巧性, 就是有个坑, 就是上面所说的东西!) 成功的替你们分担了一道题, 好开心!
http://acm.hdu.edu.cn/showproblem.php?pid=2000
1 #include <stdio.h> 2 3 int main() 4 { 5 char a, b, c, d, e; 6 while(scanf("%c%c%c", &a, &b, &c)!=EOF) 7 { 8 getchar(); 9 d = a; e = a; 10 if(a > b) d = b; 11 if(d > c) d = c; 12 if(e < b) e = b; 13 if(e < c) e = c; 14 printf("%c %c %c\n", d, a+b+c-d-e, e); 15 } 16 return 0; 17 }