《C程序设计语言》学习笔记(一)——导言

Book

1.5.4

while (c = getchar() != EOF)
{
    if(c == ‘ ‘ || c == ‘\n’)
        flag= 1;
    else if (flag == 1)
    {
        flag = 0;
        count++;
    }
}
/*判断是否为一个单词的方法是检测空格或换行符,如果存在,设置一个标志表示现在位置是单词外,在该标志值不变时均不增加单词数。当读入非空格字符时,判断是否为首次读入,如果是就将标志置零,同时单词数加一。不能仅仅依据读入的是否为空格就做出判断。*/

1.6
1.

while (c = getchar()) != EOF)
if (c >= ‘0’ && c <= ‘9’)
    ++ndigit[c-‘0’];
/*实际上由getchar()得到的变量可以以整数的方式存储,该整数的值就是字符对应的ASCII码值,因此如果输入为’0’到’9’,减去’0’即可得到整数0至9,用于对数组对应位置进行处理。*/

2.
C语言中的char类型实际上可以等同于一个1byte的有符号整型数,可以将具体数字直接赋给char类型,如char a = 11,也可以像int类型数据一样进行各种运算。当使用a=getchar()将一个输入字符赋给a时,实际上a的值即等于输入的字符,有等于该字符对应的ASCII码值,具体输出的是ASCII码编号还是字符,要看输出控制是%d还是%c。

#include<stdio.h>
int main()
{
    char c,d;  //int类型也具有相同效果
    c=65;
    printf("%c\n",c);
    d='A';
    printf("%d\n",d);
    return0;
}

1.8

int getline(char s[],int lim)  /*将一行字符串复制到s中并返回其长度,注意在结尾加了换行符和字符串结束符*/
{
    int c,i;
    for(i=0;i<lim-1&& (c = getchar()) !=EOF && c != '\n',i++)
        s[i]= c;
    if(c == '\n')
    {
        s[i]= c;
        c++;
    }
    s[i]= '\0';
    return i;
}

void copy(char to[],char from[])  //字符串拷贝
{
    int i = 0;
         while((to[i]= from[i]) != '\0')  //在while函数里可以在判断语句里嵌套赋值语句
            i++;
}

1.10
如果外部变量的定义出现在使用它的函数之前,那么在那个函数中就没有必要使用extern声明。所以一般外部变量的定义均放在源文件的开始处。而通常把变量和函数的extern声明放在一个单独的文件中,这个文件习惯上称之为头文件,并在每个文件的开头使用#include语句把所要用的头文件包含进来。

Exercise Solution

1.8
在利用getchar()对一段文本进行检测时,如检测空格数,单词数,换行符数等,常用的代码为:

while(c = getchar() != EOF)
{
    //Somejudgement
}

1.18
欲查找一串输入结尾处连续的空格以及换行符等,思想为先将输入的字符串遍历一次,然后从尾部开始查找,如果一直搜索到头任然没有跳出循环,就说明该行没有空格,如果在中途跳出循环,就说明该行中存在空格或换行符。该方法也可得到输入的字符串长度加一的值。常用的代码为:

while(s[i] != '\n')
    i++;
i--;
while (i >= 0 && (s[i] == ' ' ||s[i] == '\t'))
    i--;
if (i >= 0)
{
    i++;
    s[i]= '\n';
    s[i+1]= '\0';
}

1.24
判断括号和引号是否匹配的方法是:在程序输入的过程中,每当输入一个左引号或括号,设置一个计数器,计数器加一;每当输入一个右引号或括号,计数器减一。若输入过程中计数器的值为负,说明括号肯定不匹配;若输入完成后计数器的值不为零,说明括号肯定不匹配。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值