前几天这篇博客写了太多废话! 删啦~~。  

      本篇博客只是为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 }
View Code

相关文章: