精华内容
下载资源
问答
  • 定义一个返回值为char*类型的函数 定义一个char类型字符(传入) 用malloc函数在堆区开辟一个新的空间存字符串 定义一个char*类型指针标记字符串首地址 定义一个char*类型字符串为空 定义一个int类型变量计数 while...

    定义一个返回值为char*类型的函数

    1. 定义一个char类型字符(传入)
    2. 用malloc函数在堆区开辟一个新的空间存字符串
    3. 定义一个char*类型指针标记字符串首地址
    4. 定义一个char*类型字符串为空
    5. 定义一个int类型变量计数
    6. while循环,当传入字符c不等于‘\n’时
      字符c的值传入malloc定义的字符串,
      字符串地址后移
      计数
      当(统计次数+1)等于开辟空间大小时
      给字符串赋‘\0’
      增大空间
      给新字符串开辟增大后的空间
      调用strcpy函数将原有字符串(标记指针所指向)内容存到新的字符串中
      释放原字符串的空间
      标记指针指向新字符串的首地址

    最后为字符串赋‘\0’
    返回 标记指针首地址

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    char* Getstring();
    int main()
    {
    	//char* p=Getstring();
    	printf("%s\n",Getstring());
    	return 0;
    }
    char* Getstring()
    {
    	char c;
    	int size=5;
    	char* s=(char *)malloc(size);
    	char* pMark=s;
    	char* news=NULL;
    	int count=0;
    	while((c=getchar())!='\n')
    	{
    		*s=c;
    		s++;
    		count++;
    		if(count+1==size){
    			*s='\0';
    			size+=5;
    			news=(char *)malloc(size);
    			strcpy(news,pMark);
    			free(pMark);
    			pMark=news;
    			s=news+count;
    		}
    	}
    	*s='\0';
    	return pMark;
    }
    

    随意输入一组字符串
    即得到该字符串
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 这是我最近研究的在simulink中搭建控制器的s函数。由于一些原因,无法将完整的simulink模型公开。之后,将用c语言写的控制器函数导入其中,会出现无法运行的报错。原因是在matalab环境中需要将.c语言编辑成.mex64...

    在这里插入图片描述这是我最近研究的在simulink中搭建控制器的s函数。由于一些原因,无法将完整的simulink模型公开。之后,将用c语言写的控制器函数导入其中,会出现无法运行的报错。原因是在matalab环境中需要将.c语言编辑成.mex64(64位系统)才能运行。需要我们添加编译环境。

    1.MinGW-w64编译器的安装

    1.首先下载MinGW-w64编译器
    下载地址
    http://tdm-gcc.tdragon.net/download

    2.傻瓜式安装即可
    creat,然后不停next,
    在这里插入图片描述
    其中注意:32位还是64位下载需要对应,其次,create时候建议将check for updated files一项取消勾选,这是官网给的建议,因为后续可能会跟版本有关出现错误。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2.添加环境变量

    1.点开我的电脑;
    2.右击属性;
    3.点开高级系统设置;
    4.在高级选项中添加环境变量;(如图设置,只在其中添加关于MW-MINGW64的变量即可)
    在这里插入图片描述

    3.在matlab中进行配置

    1.setenv(‘MW_MINGW64_LOC’,‘C:\TDM-GCC-64’) //逗号后面的内容为文件安装的位置
    2.mex -setup //注意mex与-之间的空格
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • C语言编写函数查找水仙花数 设有一个3位数,它的百位数、十位数、个位数的立方和正好等于这个3位数,如153=1+125+27。 编写函数,返回小于等于传入参数n且满足该条件的三位数(称为水仙花数)的个数。 (指定函数...

    C语言编写函数查找水仙花数

    设有一个3位数,它的百位数、十位数、个位数的立方和正好等于这个3位数,如153=1+125+27。
    编写函数,返回小于等于传入参数n且满足该条件的三位数(称为水仙花数)的个数。
    (指定函数原型:int find(int n)) 返回值要求:如果传入参数n不是三位数或者在该范围内没有找到,则find返回0, 否则返回找到的水仙花数的个数。 注意:不要在find函数中打印(如调用printf或puts等函数)任何数据,否则视为错误。

    在这里插入代码片
    #include<stdio.h>
    #include<stdlib.h>
    #include<math.h>
    int find(int n)
    {   int a, b, c;
     if (n < 100 || n>999)
             return 0;
     else{
     int d=100, count = 0;
      while (d <= n )
      {
       a = d /100;
       b = (d - a * 100) / 10;
       c = (d- a * 100 - b * 10);
       if (pow(a,3)+pow(b,3)+pow(c,3)== d)
       {
                count++;
       }
       d++;
      }
      return count;
     }
    }
    int main()
    {
     int n, r;
     r = scanf_s("%d", &n);
     if (r != 1)
     { 
      printf("error");
          return -1;
     }
     r = find(n);
     printf("%d", r);
     return 0;
    }
    展开全文
  • 我在计算VIX的时候,使用的是 TS 的分钟线,我的基本...网上几乎没有关于Cell保存为CSV的matlab函数介绍,好不容易找到一个,但是效率实在是太低了,严重影响了运行速度。一咬牙,一跺脚,我决定挑战一下自己的C语言

    我在计算VIX的时候,使用的是 TS 的分钟线,我的基本思路是把数据保存到本地,然后用C#计算出数据,生成mat文件,供以后使用。

    由于TS使用Cell作为数据保存的载体,所以,我需要把cell写入为CSV格式的文件。问题出现了!!!网上几乎没有关于Cell保存为CSV的matlab函数介绍,好不容易找到一个,但是效率实在是太低了,严重影响了运行速度。一咬牙,一跺脚,我决定挑战一下自己的C语言功底,用C语言写一个保存函数,用来让matlab调用!!这个函数我命名为 my_Cell2CSV。


    首先,我先把这个函数的代码放上。我是用NotePad++编写的,然后调试的时候就是用Matlab的mex加载,如果遇到错误就返回notepad,继续修改。(当中有碰到过错误要我不得不重启Matlab的,心累。。)

    /*=================================================================
    Made by White Hacker, any question please contact by wh_wing@126.com
    Bon courage et bonne chance!
     *============================================================*/
    
    #include "mex.h"
    #include "string.h"
    
    void mexFunction(int nlhs,mxArray *plhs[], int nrhs, const mxArray *prhs[])
    {
        //变量定义
        size_t elements;	//Cell Table 中的元素数量
    	size_t nRow = 0;	//Cell Table 中的行数
    	size_t nCol = 0; 	//Cell Table 中的列数
    	mxArray *tempCell;	
    	mwIndex i,j,cur;
    	FILE *fp;                
    	char* path;
    	mxArray *cellTable;
    	
        //保证有有且仅有两个参数    
        if (nrhs != 2) {
            mexErrMsgIdAndTxt( "MATLAB:my_Cell2CSV:invalidNumInputs",
                    "Two input arguments required.");
        }
    	
        //判断第一个参数是否是Cell类型
        if (!(mxIsCell(prhs[0]))){
            mexErrMsgIdAndTxt( "MATLAB:my_Cell2CSV:invalidInputType",
                    "Input array must be of type CELL.");
        }
        //判断第二个参数是否是string类型
        if (!(mxIsChar(prhs[1]))){
            mexErrMsgIdAndTxt( "MATLAB:my_Cell2CSV:invalidInputType",
                    "PATH input must be of type STRING.");
        }
    	
        //得到所有元素数量
    	cellTable = prhs[0];
    	path = mxArrayToString(prhs[1]);
        elements = mxGetNumberOfElements(cellTable);
    	mexPrintf("Total elements number: ");
    	mexPrintf("%d\n",elements);
    	
    	//获得行数和列数
    	nRow = mxGetM(cellTable);
    	nCol = mxGetN(cellTable);
    	
    	//写入文件
    	fp=fopen(path, "w+");
    	if(fp!=NULL)
    	{
    		//循环打印数据 
    		for(i = 0; i < nRow; i++)
    		{//行循环
    			for(j=0; j < nCol; j++)
    			{//列循环
    				cur = j * (mwIndex)nRow + i;	//当前索引
    				tempCell = mxGetCell(cellTable,cur);	//获得当前Cell Table中的Cell
    				//根据类型输出数据
    				if(mxIsChar(tempCell))
    				{//如果元素是字符串(char*)
    					fprintf(fp,"%s",mxArrayToString(tempCell));
    				}
    				else if(mxIsDouble(tempCell))	
    				{//如果元素是小数(Double)
    					double* doubleNum = (double*)mxGetData(tempCell);
    					fprintf(fp,"%f",*doubleNum);
    				}
    				else if(mxIsInt32(tempCell))	
    				{//如果元素是整数(Int32)
    					int* intNum = (int*)mxGetData(tempCell);
    					fprintf(fp,"%d",*intNum);		
    				}
    				//行尾以外的列,打印","
    				if(j < nCol-1)
    				{
    					fprintf(fp,",");
    				}
    			}
    			fprintf(fp,"\n");	
    		}
    		//关闭文件
    		fclose(fp);
    		mexPrintf("Storage is completed!\n");
    	}
    	else
    	{
    		mexErrMsgIdAndTxt( "MATLAB:my_Cell2CSV:invalidInputType",
                    "File is not opened correctly!.");
    	}
    }
    

    matlab如何调用.c程序呢?答案是matlab的自带命令 mex XXX.c (注意:c文件要放在当前文件夹下),具体的窗口如下:


    命令成功后,会有一个mexwXX的文件。至此,调用准备就做好了。

    为了测试程序的时间,我特意先使用原来用matlab语言写的程序做,结果如下:


    再用my_Cell2CSV函数写入cell table到CSV中,结果如下:


    结果真的是快了近200倍!!!真的是很大的性能提升!!!

    下面是我的调用代码,tic和toc没有写。。


    clc;
    clear;
    
    %% Time and Path Setting
    curYear = 2015;
    curMonth = 11;
    curDay = 4;
    path = 'F:\Internship_Projects\VIX\';
    
    %% Data Parameters
    date = datenum(curYear,curMonth,curDay)-693960;
    current = 10000 * curYear + 100 * curMonth + curDay;
    
    %% Connect TS And Get info and trade tables
    ts = actxserver('TSExpert.CoExec');
    infoMat = ts.RemoteCallFunc('my_GetAllOptions',{date,'SH510050'});
    trdMat = ts.RemoteCallFunc('my_Get1mData',{date});
    
    %% Load Function
    mex my_Cell2CSV.c;
    
    %% Write data to CSV
    fprintf('Writing the data to CSV file...\n');
    my_Cell2CSV(infoMat,[path,'Data\OptionInfo_',int2str(current),'.CSV']);
    my_Cell2CSV(trdMat,[path,'\Data\TradingData_',int2str(current),'.CSV']);
    fprintf('Writing is finished!\n');
    
    %% Call exe to Calculate VIX
    fprintf('Doing the VIX Calculation...\n');
    cmd = [path,'VIX\VIX\bin\Debug\VIX.exe',...
        ' ',path,...
        ' ',num2str(0.045),...
        ' ',num2str(0),...
        ' ',int2str(current)];
    fprintf('Finish!');
    system(cmd);
    




    【总结】

    以前上学的时候就说matlab不太适合用for循环,如今发现果然如此。幸好之前磨python源代码的时候还复习了一下C语言的知识,才可以马上写matlab C API层的程序。今天这篇只是开始,以后应该会写更多的C函数!

    【PS】其实我自己挺喜欢C#这门语言的,但是和同事交流下来,大家都用的是R语言或者matlab。说实话,C#做统计、做量化的确是有不方便的地方,但是我现在有个想法,想要自己做一些能够方便开发的C#类,将在以后的博客中写出来。

    展开全文
  • 东北大学在线编程社区problem1610 ...主函数如下所示,请只提供子函数编写: int pws(char s[]); int main() { char str[50]; int n; gets(str); n = pws(str); if (n==1) printf (“pass”); else printf (
  • C语言编写函数字符串删除对应的字符(笨方法) 思路 看了网上很多博客我发现当出现指定字符重复出现时,不会全部删除 这是一种笨方法, 有好的方法请在下方回复谢谢 代码实现 int main() { void del...
  • 问题描述:编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数1/1+1/3+...+1/n(最好利用指针函数来完成)。 程序源码: #include "stdio.h" int main() { float peven...
  • C语言编写函数求n!,然后再计算

    千次阅读 2020-04-27 15:34:34
    #include int main() { int JC(int m, int n); int m, n, x; printf("请输入阶乘的下标:"); scanf("%d",&m);... } 编写JC函数,求n!;在主函数中调用这个函数,求n!的值,其中m,n的值从键盘输入 最后得出=
  • 初学C,便写了一段字符串连接函数发表玩玩,希望看到地人儿可以有所帮助呦! #include<stdio.h> int main() { void MyStrcat(char *dstStr, char *srcStr); char str1[80], str2[40], *p, *q; printf...
  • C语言编写通用冒泡排序函数

    千次阅读 2019-02-20 17:40:34
    C语言模拟实现qsort函数 一、首先用冒泡排序法对一个数组进行排序: 注:此处为升序排列
  • /*编写函数,通过一个指针将一个字符串反向*/ #include<stdio.h> int revert(char *s){ char *p=s,c; while(*p) p++; p--; while(s<p){ c=*s; *s++=*p; *p--=c; } } int main() { char a[50...
  • C语言编写函数实现字符串旋转

    千次阅读 2015-07-04 09:29:56
    //编写函数实现字符串旋转 #include #include #include void reverse(char *left, char *right) { char temp; assert(left); assert(right); while (right > left) { temp = *left; *left = *right; ...
  • #include "stdio.h" void TestFunc(); long fun(int m,int n) { /**********Begin**********/ long int x=1; int i; for(i=1;i<=n;i++) x=x*m; return x; ... long s; long fun(int,int);
  • C语言编写strcpy函数

    千次阅读 2016-06-11 18:50:35
    很多公司的面试官在面试程序员的时候,要求应聘者写出库函数strcpy()的工作方式或者叫实现,很多人以为这个题目很简单,实则不然,别看这么一个小小的函数,它可以从三个方面来考查:(1)编程风格(2)出错处理(3)...
  • 编写程序,从键盘输入一个不等于0的浮点数,然后利用格式控制串分别输出这个浮点数的符号、整数部分和小数部分。例如输入-123.456,输出应该是按下列格式输出**(不允许使用if语句)**: ```sign: - ```...
  • C语言编写简单的求解对数函数

    千次阅读 2019-04-11 16:40:41
    C语言编写简单的对数函数 作为一个图像处理芯片公司的工程师,支持不同sensor的曝光策略是一个ISP的基本功能,但是有的sensor曝光策略复杂,还需要加上sensor厂商自己添加的补丁,而ISP本身空间有限,不能引用math...
  • c语言】malloc函数详解

    万次阅读 多人点赞 2018-07-29 11:35:53
    谈到malloc函数相信学过c语言的人都很熟悉,但是malloc底层到底做了什么又有多少人知道。 关于malloc相关的几个函数 关于malloc我们进入Linux man一下就会得到如下结果: 也可以这样认为(window下)原型: ...
  • 2.递归法,(函数调用自身进行计算)3.指针-指针法,(库函数使用的是此方法)现在列入程序:方法1:/* 计数法 */ int my_strlen(char *p) { int number = 0; while (*p) { number++; p++; } return...
  • 1.strcpy拷贝函数 #include <stdio.h> char *mystrcpy(char *str, const char *ptr) { char *temp = str; while((*str++ = *ptr++) != '\0'); return temp; } int main() { char str[20] = ...
  • 在大小写敏感的前提下,用C语言编写函数计算子字符串substr在主字符串mainstr中的索引值。 如果substr完全包含在mainstr中,请计算出索引值。否则,返回-1. 具体代码如下: findstr.c /** Author: snowdream ...
  • //编写函数实现库函数atoi,把字符串转换成整形 #include #include int my_atoi(const char *src) { int flag=1; int sum=0; while (*src) { if (*src == ' ') src++; else if (*src == '+') { ...
  • C语言文件操作函数大全

    万次阅读 多人点赞 2018-01-19 20:35:35
    C语言文件操作函数大全 2018-1-19  13.1C语言文件 1,两种文件存取方式(输入,输出方式) 顺序存取 直接存取 2,数据的两种存放形式 文本文件 二进制文件 13.2文件指针 定义文件类型指针变量的一般...
  • c语言输入输出函数

    千次阅读 多人点赞 2013-08-26 17:58:16
    本文就c语言常见输入函数进行简单介绍,对比。 ps:由于自己能力有限,时间有限,多数介绍,总结都是摘录网上相关学习资料,下面给出本文参考资料的原文链接。 C语言的输入输出函数  C/C++学习笔记1 - ...
  • 编写函数,将一个字符串中元音字母复制到另一个字符串
  • 在MATLAB中有时候用模块搭建实现一个功能不是十分方便,可以通过编写程序来实现,simulink模块库提供了很不错的编程模板供用户使用。我们只需要简单的进行配置就能够利用模板来像C语言一样编写程序了
  • C语言-gets函数

    千次阅读 多人点赞 2020-03-20 20:43:37
    gets函数 gets函数原型:char *gets(char *str) 功能:从stdio流中读取字符串直到遇到换行符或者EOF时停止,并将读取的结果存放在str指针所指字符数组中换行符不作为读取内容 ,读取的换行符被转换为NULL值 并由此...
  • 编写一个函数,它从一个字符串中提取一个子字符串。函数原型如下: int substr(char dst[], char src[],intstart, int len)  { } 目标:  从src数组起始位置向后偏移start个字符的位置开始,最多复制len个非NUL...
  • 函数C语言程序基本的组成单位,每个程序有且只能有一个主函数(main()),其他的函数都是子函数。按照不同的额分类标准,函数可以分成不同的类: 函数从是否有返回值,可以将函数分为又返回值和无返回值函数两种...
  • C语言入门:函数递归与写法

    千次阅读 多人点赞 2018-01-03 19:43:11
    C语言中的递归函数让很多人烦恼,那么如何去写一个递归函数呢?

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 101,358
精华内容 40,543
关键字:

c语言编写s函数

c语言 订阅