题目内容:
用函数编程:编写函数实现一个信号发生器(只有输出没输入的装置),并在主函数中调用。信号发生器每被调用一次就会产生一个信号(即一个数),产生的信号序列是一个三角波,即信号输出为0、1、2、3、2、1、0、1、2、3、2、1、0(由于是自动批卷只输出两个周期),如下图所示。主函数已经给出,不需更改,请编写信号发生器函数,要求不能采用全局变量。
#include <stdio.h>
int main()
{
int val, gen(); //这里的gen()是函数原型声明,不建议采用这种非标准用法但要能看懂
int k = 0;
printf("Signal is:\n");
for (;;) //无限循环
{
if (k >2) break;
val = gen(); //调用信号发生器函数,没有实际参数
printf("%d%*c\n", val, val + 1, '*'); //输出当前信号
if (val == 0) k++;
}
return 0;
}
int gen(void)
{
/********begin*************/
//在这里编写函数体
/*********end*************/
}
说明:printf()里“%*c”中的星号所在位置表示输出宽度,一般情况下可以用具体数值指定,在这里用星号表示变宽,数值由后面对应的val+1给出(会用就行,这个用法不是考试内容)。注意:scanf()也可以使用星号,但作用与此不同(请复习一下,这个是考试内容)。
输入格式:
无
输出格式:
见上面的程序
输入样例:
无
输出样例:
时间限制:500ms内存限制:32000kb
#include <stdio.h>
int main()
{
int val, gen(); //这里的gen()是函数原型声明,不建议采用这种非标准用法但要能看懂
int k = 0;
printf("Signal is:\n");
for (;;) //无限循环
{
if (k >2) break;
val = gen(); //调用信号发生器函数,没有实际参数
printf("%d%*c\n", val, val + 1, '*'); //输出当前信号
if (val == 0) k++;
}
return 0;
}
int gen(void)
{
static int i=0;static int j;
/********begin*************/
if((i-1)!=3&&j==0){
i++;
return i-1;
}
else if((i-1)==3&&j==0)
{
j=1;
}
if((i-1)!=0&&j==1){
i--;
return i-1;
}
else if((i-1)==0&&j==1){
j=0;
}
if((i-1)!=3&&j==0){
i++;
return i-1;
}
else if((i-1)==3&&j==0)
{
j=1;
}
if((i-1)!=0&&j==1){
i--;
return i-1;
}
else if((i-1)==0&&j==1){
j=0;
}
/*********end*************/
}