(第八周上机二)C语言程序设计:制作一个信号发生器

文章描述了一个C语言编程任务,要求编写一个无输入的函数gen()作为信号发生器,生成一个特定的三角波序列(0,1,2,3,2,1,0...),并在主函数中调用。信号发生器每调用一次产生一个信号,输出两个周期的序列。主函数已给出,无需修改,重点在于实现gen()函数,且不能使用全局变量。提供的gen()函数示例使用了静态变量来跟踪状态。
摘要由CSDN通过智能技术生成

题目内容:

用函数编程:编写函数实现一个信号发生器(只有输出没输入的装置),并在主函数中调用。信号发生器每被调用一次就会产生一个信号(即一个数),产生的信号序列是一个三角波,即信号输出为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*************/
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

揽阳_Shadows

打赏这个宝藏博主!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值