0713c语言练习(作业4)

博客包含多个C语言编程题目及实现。有打印9×9乘法表、实现myStrcmp()函数、十进制转八进制、打印菱形星号等题目。详细给出各题思路,如利用循环、余数计算等,并展示对应代码和结果,还涉及二进制位操作相关题目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目:编写程序,打印出9×9乘法表(这道题相对而言比较简单,用两次for循环就行了,我写了三种不同样式的)
(1)代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>

int main()
{
    int i,j;
    int a;
    for(i=1;i<=9;i++)
    {
        for(j=1;j<=9;j++)
        {
            printf("%d*%d=%d\t",i,j,i*j);
        }
        printf("\n");
    }

    return 0;
}

结果图:
在这里插入图片描述
(2)代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>

int main()
{
    int i,j;
    for(i=1;i<=9;i++)
    {
        for(j=1;j<=i;j++)
        {
            printf("%d*%d=%d\t",i,j,i*j);
        }
        printf("\n");
    }

    return 0;
}

结果图:
在这里插入图片描述
(3)代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>

int main()
{
    int i,j;
    for(i=1;i<=9;i++)
    {
        for(j=1;j<=9;j++)
        {
            if(j<i)
            {
                printf("      ");
            }
            else
                printf("%d*%d=%2d",i,j,i*j);
        }
        printf("\n");
    }


    return 0;
}

结果图:
在这里插入图片描述
2.题目:编写程序,实现strcmp()相同功能myStrcmp()函数。(首先我们要知道strcmp()的功能,strcmp是比较两个字符串的,但是是从左向右追个进行比较,直到出现两个不同的字符时开始比较,前者大于后者是输出一个正数,后者大于前者时输出一个负数,如果两个字符串相等时则输出0,因此知道了这个strcmp的功能后就不难写出这个代码了。)
代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>
int main()
{
    char a[100],b[100];
    int i,p=0;
    gets(a);
    gets(b);
    for(i=0;a[i]!='\0'&&b[i]!='\0';i++)
    {
        if(a[i]==b[i])
        {
            continue;
        }
        if(a[i]>b[i]) 
        {
            p=1;
            break;
        }
        if(a[i]<b[i])
        {
            p=-1;
            break;
        }
        if(a[i]=='\0'&&b[i]=='\0')
        {
            p=0;
        }
        else if(a[i]=='\0')
        {
            p=-1;
        }
        else 
        {
            p=1;
        }
    }
    printf("%d\n",p);

    return 0;
}

结果:
在这里插入图片描述
3.题目:编写程序,将十进制转换为8进制并输出(不允许使用printf("%o"))。(这道题目要求我们把一个十进制数转换为八进制输出,还不允许我们使用%o,因此我们就得想其他的办法了,十进制转化为八进制有一个公式就是求他的余数,也就是n%8,n/8不停的循环,然后把余数存进一个数组,最后n=0的时候停止循环并退出。)
代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>
#include <math.h>
int main()
{
    int n,m,i,sum;
    sum=0;
    i=0;
    printf("请输入一个十进制数:");
    scanf("%d",&n);
    while(n)
    {
        m=n%8;
        n=n/8;
        sum+=m*pow(10,i);
        i++;
    }
    printf("这个十进数的八进制数为:%d\n",sum);

    return 0;
}

结果:
在这里插入图片描述
4.题目:编写程序,打印菱形星号组合
*
* *

  • *
    
 *(这道题我使用的笨办法做的,找规律就行)

代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>

int main()
{
    int i,j,k;
    for(i=1;i<=4;i++)
    {
        for(j=1;j<=7;j++)
        {
            if(j-i==3||j+i==5)
            {
                printf("*");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }
    for(i=5;i<8;i++)
    {
        for(j=1;j<8;j++)
        {
            if(i-j==3||j+i==11)
            {
                printf("*");
            }
            else
            {
                printf(" ");
            }
        }
        printf("\n");
    }

    return 0;
}

结果:
在这里插入图片描述
5.题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。(google面试题)(这道题目我之前有过一个类似的是算9出现的次数的,关键是算法,可以用do while或者while来写,先是对a%10的余数进行跟1比较,相等就+1,不等就a/10,毕竟有时候a不可能是一位数,可能是两位三位四位等等,所以逐步/10,再求余直到a=0退出循环,这样每位数都能计算到内)

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>
int Find(int n)
{
    int i,nu,t=0;
    for(i=1;i<=n;i++)
    {
        nu=i;
        do{
            if(nu%10==1)
            {
                t++;
            }
            nu=nu/10;
        }while(nu!=0);
    }
    return t;
}
int main()
{
    int n,m;
    printf("请输入n:");
    scanf("%d",&n);
    m=Find(n);
    printf("1-n之间1的个数:%d\n",m);

    return 0;
}

结果:
在这里插入图片描述
6.题目请编写一个c函数,该函数给出一个字节中被置为1的位的个数。(一个字节那我们可以理解为输入一个字符型的量,因为字符型所占的就是一个字节,而且字符都有各自的ascii码值,所以将这个字符的ascii值赋值给一个整型变量,那么这个整型变量就得到这个字符的acii值,然后再将这个十进制的数转化为二进制,将每一位存入数组中,然后在统计一的个数)
代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>
int fun(char n)
{
    int i,m,t=0;
    for(i=0;i<8;i++)
    {
        m=(n>>i)&1;
        if(m==1)
        {
            t++;
        }
    }
    return t;
}
int main()
{
    char n;
    int m;
    printf("请输入一个字符:");
    scanf("%c",&n);
    m=fun(n);
    printf("被置1的位的个数:%d\n",m);

    return 0;
}

结果:
在这里插入图片描述
7.题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.
代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>
void fun(int a,int p1,int p2)
{
    int i,t;
    for(i=p2;i>=p1;i--)
    {
        t=(a>>i)&1;
        if(t==1)
        {
            printf("1");
        }
        else
        {
            printf("0");
        }
    }
    printf("\n");
}
int main()
{
    int a,p1,p2;
    printf("请输入一个整数:");
    scanf("%d",&a);
    printf("请输入p1,p2(p1<p2<32):");
    scanf("%d%d",&p1,&p2);
    fun(a,p1,p2);

    return 0;
}

结果:
在这里插入图片描述
8.题目:输入一个整数a,再输入两个整数p1,p2(p1,p2<32),将该整数的二进制表示方法中从右端开始的p1到p2位取反后输出
代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>

void fun(int a,int p1,int p2)
{
    int i;
    int t,m=0;
    int p[32];
    if(a>=0)
    {
        for(i=p2;i>=p1;i--)
        {
            t=(a>>i)&1;
            if(t==0)
            {
                printf("1");
            }
            else
            {
                printf("0");
            }
        }
    }
    else 
    {
        i=0;
        a=abs(a);
        while(i<32)
        {
            m=a%2;
            a=a/2;
            p[i]=m;
            i++;
        }
        p[31]=1;
        for(i=p2;i>=p1;i--)
        {
            p[i]=1-p[i];
            printf("%d",p[i]);
        }

    }
    printf("\n");
}
int main()
{
    int a,p1,p2;
    printf("请输入一个整数a:");
    scanf("%d",&a);
    printf("请输入两个整数p1,p2(p1,p2<32):");
    scanf("%d%d",&p1,&p2);
    fun(a,p1,p2);

    return 0;
}

结果:
在这里插入图片描述
9.题目:输入一个整数a,再输入两个整数p(p<32),v(0|1),将该整数a的p位设置为v,输出修改后的该整数的二进制表示.
代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>

int main()
{
    int a,p,v,m,i,n;
    int num[32];
    printf("请输入一个整数a:");
    scanf("%d",&a);
    printf("请输入一个p(p<32)和一个v(0或1):");
    scanf("%d%d",&p,&v);
    if(a>=0)
    {
        for(i=31;i>=0;i--)
        {
            num[i]=(a>>i)&1;
        }
    }
    else
    {
        a=abs(a);
        for(i=31;i>=0;i--)
        {
            num[i]=(a>>i)&1;
        }
        num[31]=1;
    }
    num[p]=v;
    printf("p位置为v之后:\n");
    for(i=31;i>=0;i--)
    {
        printf("%d",num[i]);
    }
    printf("\n");

    return 0;
}

结果:
在这里插入图片描述
10.题目:输入一个32位的整数a,使用按位异或^运算,生成一个新的32位整数b,使得该整数b的每一位等于原整数a中该位左右两边两个bit位的异或结果
提示:0 ^ 0 = 0; 1 ^ 1 = 0; 0 ^ 1 = 1; 1 ^ 0 = 1;
代码:

/*****************************************************
copyright (C), 2014-2015, Lighting Studio. Co.,     Ltd. 
File name:
Author:Jerey_Jobs    Version:0.1    Date: 
Description:
Funcion List: 
*****************************************************/

#include <stdio.h>
#include <math.h>
int main()
{
    int a,anum[32],bnum[32],b=0,i;
    printf("请输入一个整数a:");
    scanf("%d",&a);
    for(i=31;i>=0;i--)
    {
        anum[i]=(a>>i)&1;
    }
    for(i=31;i>=0;i--)
    {
        bnum[i]=anum[i]^anum[i-1];
    }
    for(i=31;i>=0;i--)
    {
        b+=bnum[i]*pow(2,i);
    }
    printf("b=%d\n",b);

    return 0;
}

结果:
在这里插入图片描述

分数阶傅里叶变换(Fractional Fourier Transform, FRFT)是对传统傅里叶变换的拓展,它通过非整数阶的变换方式,能够更有效地处理非线性信号以及涉及时频局部化的问题。在信号处理领域,FRFT尤其适用于分析非平稳信号,例如在雷达、声纳和通信系统中,对线性调频(Linear Frequency Modulation, LFM)信号的分析具有显著优势。LFM信号是一种频率随时间线性变化的信号,因其具有宽频带和良好的时频分辨率,被广泛应用于雷达和通信系统。FRFT能够更精准地捕捉LFM信号的时间和频率信息,相比普通傅里叶变换,其性能更为出色。 MATLAB是一种强大的数值计算和科学计算工具,拥有丰富的函数库和用户友好的界面。在MATLAB中实现FRFT,通常需要编写自定义函数或利用信号处理工具箱中的相关函数。例如,一个名为“frft”的文件可能是用于执行分数阶傅里叶变换的MATLAB脚本或函数,并展示其在信号处理中的应用。FRFT的正确性验证通常通过对比变换前后信号的特性来完成,比如评估信号的重构质量、信噪比等。具体而言,可以通过计算原始信号与经过FRFT处理后的信号之间的相似度,或者对比LFM信号的关键参数(如初始频率、扫频率和持续时间)是否在变换后得到准确恢复。 在MATLAB代码实现中,通常包含以下步骤:首先,生成LFM信号模型,设定其初始频率、扫频率、持续时间和采样率等参数;其次,利用自定义的frft函数对LFM信号进行分数阶傅里叶变换;接着,使用MATLAB的可视化工具(如plot或imagesc)展示原始信号的时域和频域表示,以及FRFT后的结果,以便直观对比;最后,通过计算均方误差、峰值信噪比等指标来评估FRFT的性能。深入理解FRFT的数学原理并结合MATLAB编程技巧,可以实现对LFM信号的有效分析和处理。这个代码示例不仅展示了理论知识在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值