(一)题4.输入n,计算s=1 1 2 1 2 3 1 2 3 4 ... 1 2 3 4 ... n
(一)题5.编制统计营业员一天的营业额的程序
(一)题6.翻译输入的字符序列
(一)题4.输入n,计算s=1 1 2 1 2 3 1 2 3 4 ... 1 2 3 4 ... n
解:
算式是以下形式的n项和:
1 (1 2) (1 2 3) ... (1 2 3 ... n)
设i-1项的值是p,则i项的值是p i。初始时,s为0,p也为0,顺序地将整数i=1,2,3,...n累计到变量p,并每次将新的p 值累计到变量s,则最后s就是算式的结果。
算法如下:
s=1 2 1 2 3 1 2 3 4 ... 1 2 3 ... n
{
输入n;
为变量p和s设定初值0;
for(i=1;i<=n;i )
{
将i累计到p;
将p累计到s;
}
输出s;
}
其中变量p和s设定初值可写在for的控制结构中,将i累计到p和将p累计到s可写成C语言的语句:
s =p =i.
程序代码如下:
#include<stdio.h>
void main()
{
int i,s,p,n;
printf("Enter n!\n");
scanf("%d",&n);
for(s=p=0,i=1;i<=n;i )
s =p =i; /*将i累计到p,并将p 累计到s*/
printf("S= %d\n",s);
}
------------------------------------------------
(一)题5.编制统计营业员一天的营业额的程序
解:
设程序采用一个循环实现,每次循环输入一笔交易金额并累计营业额。由于营业员一天完成的交易次数是不确定的,为此以最后附加输入一笔0或负数交易额作为交易金额已全部输入结束的标志。
有以下统计营业员一天营业额的算法:
统计营业员一天营业额
{
营业额清0;
输入第一笔交易额;
while(交易额>0.0)
{
累计营业额;
输入下一笔交易额;
}
输出营业额;
}
记一笔交易额为变量sale,营业额为sigma。
程序代码如下:
#include<stdio.h>
void main()
{
float sale,sigma;
sigma=0.0;
printf("Enter sale data.\n");
scanf("%f",&sale);
while(sale>0.0)
{
sigma =sale;
printf("Enter next sale data(<=0 to finish).\n");
scanf("%f",&sale);
}
printf("Sigma of sale is %.2f\n",sigma);
}
-----------------------------------------
(一)题6.输入字符序列,字符序列以特殊字符“#”结束。程序从前向后依次读入字符,并翻译出新的字符输出。翻译的规则是:如果当前读入的字符是数字符,如果该字符的面值为n,则它的后一个字符(包括数字符)需重复输出n 1次如果当前读入的字符不是数字符,则输出该字符。输出时,以上述一次翻译为一组,不同组间输出用一个空白字符隔开。翻译直至当前读入的字符为字符'#',结束翻译和输出。
解:
程序从前向后依次读入字符,并翻译输出新的字符输出是一个循环过程,当前读入的字符分数字字符和非数字字符两类。如果当前读入的字符是数字符n,翻译规则要求它的后一个输入字符需重复输出n 1次;如果当前读入的字符不是数字符,则输出该字符。
算法如下:
字符列翻译
{
读入当前字符;
while(当前字符!='#')
{
if(当前字符是数字符)
{
由当前字符算出后继字符重复输出的次数;
输入后继字符;
按计算所得次数重复输出后继字符;
}
else
输出当前字符
输出一个空白符;
输入下一个当前字符;
}
输出字符'#'和换行符
}
假定读入的当前字符存于变量ch,若该字符是数字符,则其面值为ch-'0',即当前字符的ASCII码减去字符'0'的ASCII码。所以后继字符重复输出的次数为ch-'0' 1。字符ch是数字符,可有条件表达式(ch>='0'&&ch<='9')为非零确定,即当前字符的ASCII码大于等于字符'0'的ASCII码,且小于等于字符'9'的ASCII码。
对应该算法的程序如下:
#include<stdio.h>
void main()
{
char ch,nch; /*当前字符和后继字符*/
int count; /*后继字符重复输出的次数*/
int k; /*工作变量*/
printf("Enter string.\n");
scanf("%c",&ch); /*读入当前字符*/
while(ch!='#') /*当前字符不等于字符'#',重复*/
{
if(ch>='0'&&ch<='9')/*当前字符是数字符*/
{
count=ch-'0' 1;/*后继字符重复输出的次数*/
scanf("%c",&nch);/*输入后继字符*/
for(k=0;k<count;k )/*重复输出后继字符count次*/
printf("%c",nch);
}
else
printf("%c",ch);/*输出当前字符*/
printf(" ");/*输出一个空白符*/
scanf("%c",&ch);/*输入下一个当前字符*/
}
printf("#\n");/*输出字符'#'和换行符*/
}

