《C程序设计语言》--导言(笔记)

1.6 数组

编写一个程序,以统计各个数字、空白符(包括空格符、制表符及换行符)以及所有其他字符的出现次数。
所有的输入字符可以分成12类,因此可以用一个数组存放各个数字出现的次数,这样比使用10个独立的变量更方便。

版本一

#include <stdio.h>
/*统计各个数字、空白符以及其他字符出现的次数*/
int main()
{
	int c,i,nwhite,nother;      //定义变量
	int ndigit[10];             //定义数组,用以记录数字出现的次数
	nwhite = nother = 0;        //初始化变量空白符和其他字符出现的次数为0
	for(i=0;i<10;i++)
	{
		ndigit[i]=0;            //遍历数组,使每个数组值都为0
	}
	while((c=getchar()) != EOF)
		if(c  >= '0' or c <='9')
			++ndigit[c-'0'];    //在asc码中'0'对应的值为48,'5'对应于53,故53-48=5,ndigit[5]+=ndigit[5]
        else if (c == ' ' || c == '\n' || c == '\t')
            ++nwhite;
        else
            ++nother;
	printf("digits =");
	for(i = 0;i < 10;i++)
		printf("%d",ndigit[i]);//遍历数组,输出他们的次数
	printf(",white space = %d, other = %d\n",nwhite,nother);
}

1.7 函数

现在通过编写一个求幂的函数power(m,n)来说明函数定义的方法
# include <stdio.h>
int power(int m,int n);     //声明函数
/*测试power函数*/
int main()
{
    int i;
    for (i = 0; i < 10; i++) {
        printf("%d %d %d\n",i, power(2,i), power(-3,i));
    }
    return 0;
}
/*power函数:求底数的n次幂,其中 n >= 0 */
int power(int base,int n)
{
    int i,p;
    p=1;
    for (i = 0; i <= n; i++) {
        p = p * base;
    }
    return p;
}

在这里插入图片描述

1.8 参数——传值调用

才C语言中,所有函数参数都是“通过值”传递的。也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中。
才C语言中,被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。
上例中的power函数就利用了这一性质。

int power(int base,int n)
{
    int i,p;
    p=1;
    for (i = 0; i <= n; i++) {
        p = p * base;
    }
    return p;
}

1.9 字符数组

字符数组是C语言中最常用的数组类型。

编写一个程序,该程序读入一组文本行,并把最长的文本行打印出来。

该算法的基本框架:

while (还有未处理的行)
if(该行比已处理的最长行还要长)
	保存该行
	保存该行长度
打印最长行
# include <stdio.h>
#define MAXLINE 1000//宏定义

int getline(char line[],int maxline);           //声明获取行长度的函数
void copy(char to[],char from[]);               //声明拷贝行的函数

/*打印最长的输入行*/
int main()
{
    int len;                                //当前行长度
    int max;                                //目前为止发现最长行的长度
    char line[MAXLINE];                     //当前的输入行
    char longest[MAXLINE];                  //用于保存最长的行

    max=0;                                  //初始化最长行为0
    while ((len = getline(line,MAXLINE)) > 0)
        if (len > max){
            max = len;
            copy(longest,line);
        }
    if (max > 0)
        printf("%s",longest);
    return 0;
}

/*将一行读入s中,并返回该行长度*/
int getline(char s[],int lim)           //函数定义。lim:数组长度
{
    int c,i;

    for (i = 0; i < lim-1 && (c=getchar()) != EOF && c != '\n'; ++i) {
        s[i]=c;
    }
    if (c == '\n'){
        s[i]=c;
        ++i;
    }
    s[i]='\n';
    return i;
}

void copy(char to[],char from[])
{
    int i;
    i=0;
    while ((to[i] = from[i]) != '\0')
        ++i;
}


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值