《C程序设计》课件第6章.ppt
#includestdio.hvoidmain(){chars[8];doubleval,power,number;inti,sign;printf(Inputstringofanumber:);gets(s);i=0;sign=1;if(s[i]==′+′||s[i]==′-′)/*sign处理符号*/sign=(s[i++]==′+′)?1:-1;for(val=0;s[i]=′0′s[i]=′9′;i++)/*处理整数数字部分*/val=10*val+s[i]-′0′;if(s[i]==′.′)i++;for(power=1;s[i]=′0′s[i]=′9′;i++)/*处理小数数字部分*/{val=10*val+s[i]-′0′;power*=10;}number=sign*val/power;printf(\nnumber=%f\n,number);}运行结果:Inputstringofanumber:-234.55↙number=-234.550000例6.10输入一个由若干单词组成的文本行(最多80个字符),每个单词之间用若干个空格隔开,统计此文本行中单词的个数。分析:要统计单词的个数首先要解决如何去判断一个单词。假定把一个文本行放在str数组中,那么这一辨别工作即从str[0]开始去逐个检查数组元素,跳过所有的空格后,找到的第一个字母就是一个单词的开头,这时计数器就可加1,在此之后如果连续读到的是非空格字符,则这些字符是属于刚统计过的那个单词,因此不应计数。下一次计数应在读到一个或几个空格后再遇到非空格字符时进行。根据以上的分析,对单词个数加1必须同时满足两个条件:第一,当前所检查的这个字符是非空格;第二,所检查字符的前一个字符是空格。假设num用来统计单词的个数,prec存放所检查的前一个字符,nowc存放当前所检查的字符。程序如下:#includestdio.hvoidmain(){charstr[80],prec,nowc;inti,num;printf(Inputatextline:);gets(str);prec=′′;num=0;i=0;while(str[i]!=′\0′){nowc=str[i];if(nowc!=′′prec==′′)num++;/*是新单词,个数加1*/prec=nowc;/*将已检查的字符保存至prec,继续查*/i++;}printf(\nThenumberofwordsis:%d,num);}运行结果:Inputatextline:thebigcar↙Thenumberofwordsis:3例6.11输入3行4列的矩阵,找出在行上最大,在列上最小的那个元素。如果没有这样的元素,则打印出相应的信息。分析:在一个矩阵中符合上述条件的元素称为鞍点。为简单起见,假定每行和每列中的元素值各不相同。算法可描述如下:(1)找出第i行上最大的元素。记下所在的列号c,最大元素的值rmax。(2)在第c列上,把rmax和该列上的其它元素比较,判断在该列上rmax是否是最小的元素。只要发现有一个元素小于或等于它,则说明rmax在该列上不是最小的元素。(3)若rmax是第c列上的最小元素,则找到鞍点,打印此鞍点的值。(4)重复以上步骤,使i从第1行到第3行重复以上步骤,并且一旦找到一个鞍点就退出循环。程序如下:#includestdio.hvoidmain(){inta[3][4],i,j