您的位置:首页 > 编程语言 > C语言/C++

小C的故事(快速学C语言,,,极速版!)

2015-09-15 22:38 239 查看
  前几天这篇博客写了太多废话! 删啦~~。

本篇博客只是为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多页)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: