小C的故事(快速学C语言,,,极速版!)
2015-09-15 22:38
239 查看
前几天这篇博客写了太多废话! 删啦~~。
本篇博客只是为chd A协的全嫩小鲜肉入门C语言的预科, 如果你在此处学习C语言, 不幸走火入魔, 小弱概不负责。
不要问为什么, 先抄写一下, 执行一下再说。
下面试一些基本语法:
然后是关键字, 简单变量类型 , 声明语句, 定义语句, 运算符号, 循环结构, 条件结构, 基本语句, 数组,字符串, 结构体, 指针 , 函数 , 递归函数 , (生存空间与作用域 ,动态申请内存, 内存模型 )括号里面的东西现在先不要看! 。估计你们理解有困难的地方, 我已加了链接或将要加链接, 可能链接讲的有点儿深, 随便看一下就好啦。
其实C语言真的就没多少东西可讲, 又感觉有好多东西要讲(像今天, 竟然一下就讲到了内存分配机制, 估计当时是智商挂掉了!)
适当的应用 scanf 可以跳过我们不需要的字符!
是不是感觉有点怪? 这是因为 scanf("%s", str); 会在遇到空格, 制表符, 换行符时结束, 并且把空格, 制表符, 换行符留在输入队列里(也就是并没有读入str[]内)
那么问题就来啦!
这个还是正常的, 但是如果再读入一次输入呢?
在用scanf("%s", &str), scanf("%c", &ch) 一类的读入方式字符时, 如果有多组输入, 注意清理掉每行结尾的换行符。一个简单的方法就是用getchar()吸收掉换行符
由于scanf("%s", &str); 不能读取字符串(含有空格, 制表符的字符串)。 读取带有空格和制表符的字符串时,可以用gets(str);gets(str)会把空格,制表符, 换行符全部读入(遇到换行符终止读入, 但是读入了换行符) 而输出字符串时可以用 printf("%s\n", str), 或者 puts(str);
这里给学弟学妹一个福利! 让小弱替你们写第一道题吧! (此题没有什么技巧性, 就是有个坑, 就是上面所说的东西!) 成功的替你们分担了一道题, 好开心!
http://acm.hdu.edu.cn/showproblem.php?pid=2000
View Code
上面这些题目, 全是侮辱智商的格式题。 但是表示当时做完后还是蛮开心的! 上面的题虽然侮辱智商, 但是对于不熟悉语言的新人来说, 还是有难度的! 请不要做直接copy的伸手党! 尽量独立完成, 格式问题可以参考代码! 仅供纯新手入门浏览!
CHD ACMer 新手必读
虽然学长很弱, 但是学长真的很希望学弟学妹好好学习一下C语言(不管你来不来听课), 然后壮大A协!
成功从来没有捷径, 永远别指望靠一篇水博客学会编程(这里特指C语言)。 这里推荐一本权威的C语言教材: C语言程序设计(200多页)
本篇博客只是为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
#include<stdio.h> int main() { int n,m,i,sum,t; scanf("%d",&m); while(m--) { sum=0; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&t); sum+=t; } printf("%d\n",sum); if(m!=0) printf("\n"); } return 0; }
View Code
上面这些题目, 全是侮辱智商的格式题。 但是表示当时做完后还是蛮开心的! 上面的题虽然侮辱智商, 但是对于不熟悉语言的新人来说, 还是有难度的! 请不要做直接copy的伸手党! 尽量独立完成, 格式问题可以参考代码! 仅供纯新手入门浏览!
CHD ACMer 新手必读
虽然学长很弱, 但是学长真的很希望学弟学妹好好学习一下C语言(不管你来不来听课), 然后壮大A协!
成功从来没有捷径, 永远别指望靠一篇水博客学会编程(这里特指C语言)。 这里推荐一本权威的C语言教材: C语言程序设计(200多页)
相关文章推荐
- 《VC++就业培训宝典之MFC视频教程》学习笔记
- 简单选择排序的C++实现
- discrete adaboost的C++实现
- discrete adaboost的C++实现
- 让你不在害怕指针
- C++中使用clock()函数测试程序时间
- Hoj1161树状数组统计
- Android NDK的C++11标准支持
- c++11实现l延迟调用(惰性求值)
- 插入排序的C++实现
- C++内存对象查看
- C++中#ifdef#endif
- ### C++总结-[类的继承]
- C++内存对齐
- C++中的异常处理
- C/C++中“#”和“##”的作用和用法
- c++11实现optional
- C语言堆栈入门——堆和栈的区别
- C语言知识点复习 一
- (转)C语言union(联合体 共用体)