这段时间,听刚刚学习c的同学说函数嵌套运用不太熟练,想做一个简单的程序进行练习,我也就当练练手了,哈哈.虽然说是比较简单,但是其中的思维也是值得思考的.

一、函数的嵌套使用

  简单说明题目:对于等式 y=x-x^3/3!+x^5/5!+.... 输入任意的x和分母,求得上等式

  当然可以找规律,比如分母是(2*n-1)的阶乘,但是我在这里只是介绍最直白的方法

  看代码:

 1 #include<stdio.h>
2 #include<math.h>
3
4 int factorial(int a){//求阶乘
5 int sum = 1,i;
6 for(i = 1;i <= a;i++){
7 sum *= i;
8 }
9 return sum;
10 }
11 double sum(double x,int b){//求等式的和
12 double sum = 0;
13 int i ;
14 int a = 2;
15 for(i = 1; i <= b; i=i+2){
16 sum += (pow(-1,a)*pow(x,i))/factorial(i);
17 a++;
18 }
19 return sum;
20 }
21 int main(){
22 double x;
23 int b;
24 begin:
25 printf("请输入x的值:\n");
26 scanf("%lf",&x);
27 printf("请输入分母的值:\n");
28 scanf("%d",&b);
29 if(b%2 == 0){
30 printf("输入的不是基数,请重新输入!\n");
31 goto begin;
32 }else{
33 printf("结果为:\n");
34 printf("%f",sum(x,b));
35 }
36
37 }

  1、首先我在这里使用了一个函数pow(double a,double b),在使用的时候一定要注意他的两个变量都是double型的.结果是用数值逼近的方法给出的,并不保证严格精确.

   另外,在pow函数使用时,经常会出现一些问题,如:

    如果底数 x 为负数并且指数 y 不是整数,将会导致 domain error 错误(域名错误)。
     如果底数 x 和指数 y 都是 0,可能会导致 domain error 错误,也可能没有;这跟库的实现有关。
     如果底数 x 是 0,指数 y 是负数,可能会导致 domain error 错我,也可能与库有关。
     如果返回值太大或者太小,将会导致 range error错误(范围错误,当内存不足时极易出现) 。

   所以在使用的过程中,为了代码的完整性和严密性,需要我们去做一些限制来限制这些情况的发生.

  2、使用了 goto语句.因为是用的c++编译环境,所以还是加上了这个.

   goto语句是在跳出多层循环时使用的, 还有一个功能是在性能考虑,在其他的应用方面没有什么作用.首先在c++ 11 lambda后goto存在的意义就不大, 统一的错误处理和资源管理可以交给RAII来进行管理.但是在性能方面,goto语句可以大大减少如switch,while等这些控制语句上的性能消耗.本人习惯于在调试方面进行适当的使用,保证调试的流畅性.

二、矩阵运算

  简单说明题目:定义三个函数,transposition  矩阵转置,mean  求平均值,sumDig  对角线元素之和,实用主函数进行调用.

  说到矩阵问题肯定是要使用数组了,定义二维数组的方式有很多,先看代码:

 1 #include<stdio.h>
2 #define M 3
3 void transposition(int a[][M],int n);//矩阵的转置
4 void mean(int a[][M],int n);//求平均值
5 void sumDig(int a[][M],int n);//求对角线元素之和
6
7 void transposition(int a[][M],int n){//矩阵的转置
8 int c,d = 0;
9 int i,j,k,t;
10 for(i = 0;i < M;i++){
11 for(j = d;j < n;j++){//将关于主对角线对称的元素进行交换
12 c = a[i][j];
13 a[i][j] = a[j][i];
14 a[j][i] = c;
15 }
16 d++;
17 }
18 for(k = 0;k < 3;k++){
19 for(t = 0;t < 3;t++){
20 printf("%d",a[k][t]);
21 printf(" ");
22 }
23 printf("\n");
24 }
25 printf("\n");
26 }
27
28 void mean(int a[][M],int n){//求平均值
29 int sum = 0;
30 int i,j;
31 for(i = 0;i < M;i++){
32 for(j = 0;j < n;j++){
33 sum += a[i][j];
34 }
35 }
36 printf("%d",sum/(3*3));
37 printf("\n");
38 }
39
40 void sumDig(int a[][M],int n){//求对角线元素之和
41 int sumDig = 0;
42 int i;
43 for(i = 0,j = 0;i < M;i++,j++){
44 sumDig += a[i][j];
45 }
46 for(i = 0,j = 2;i < M;i++,j--){
47 if(i != 2){//出去对角线交点元素
48 sumDig += a[i][j];
49 }
50 }
51 printf("%d",sumDig);
52 printf("\n");
53 }
54 int main(){
55 int a[3][3];
56 int i,j;
57 printf("输出3 x 3矩阵各元素:\n");
58 for(i = 0;i < 3;i++){
59 for(j = 0;j < 3;j++)
60 scanf("%d",&a[i][j]);
61 }
62 printf("转置后的矩阵为:\n");
63 transposition(a,3);
64 printf("矩阵平均值为:\n");
65 mean(a,3);
66 printf("对角线元素之和为:\n");
67 sumDig(a,3);
68 return 0;
69 }

  代码不是很难,关于逻辑方面就是简单的使用for循环,只要理解二维数组存在的方式,相信仔细看就会看懂的.下面就着重说一下关于c或c++中二维数组的定义方式及初始化.

  二维数组的定义方式:

    二维数组的一般定义形式是:

数据类型 数组名 [行的常数变量][列的常数变量]

    例如:定义一个3x3的二维数组,也就是我们常说的矩阵

int a[3][3];

    在C语言中,二维数组是按行排列的。也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;然后再在每一列进行存储,先是a[0][0],也就是第一行第一列,接着是a[0][1],第一行第二列.也就是在循环的时候,都将每一行看作是一维数组(整体的思想很重要).比如下面的代码:

1  int a[3][3];
2 int i,j;
3 printf("输入3 x 3矩阵各元素:\n");
4 for(i = 0;i < 3;i++){
5 for(j = 0;j < 3;j++){
6 scanf("%d",&a[i][j]);
7 }
8 }

  二维数组的赋值:

    二维数组的初始化可以按行分段赋值,也可按行连续赋值。具体的赋值方法有:

    按行看做一维数组进行分段:

1 int a[3][3] = {{1,2,3,},{4,5,6},{2,2,5}]};

      另外,在赋值的过程中,还可以对局部元素进行赋值,如:

1 int a[3][3] = {{1,2},{2}{8,5,7}};

    赋值的结果是:    1   2   0

             2   0   0

             8   5   7

    确定元素个数连续进行赋值:

1 int a[3][3] = {1,2,3,4,5,6,7,8,9};

    当清楚知道元素个数时,还可以将第一维度的常数进行省略,如:

1 int a[][3] = {1,2,3,4,5,6,7,8,9};

  

  先就这么多,有什么问题再加吧.

  我们都在进京赶考的路上.

    

   

  

  

c语言函数的嵌套使用和矩阵运算的更多相关文章

  1. 1207.1——C语言 函数

    函数可以分为无参函数和有参函数. 无参函数的定义 无参函数定义的一般形式如下:返回值类型  函数名(){    函数体} 说明: 返回值类型可以是C语言中的任意数据类型. 函数名是标识符的一种,命名规 ...

  2. C语言--函数篇

      1-1.函数简单调用 1 #include<stdio.h> 2 #include<string.h> 3 #include<windows.h> 4 int ...

  3. ios学习之旅---c语言函数

    1.函数的概述 C源程序是由函数组成的. 尽管在前面各章的程序中大都仅仅有一个主函数main(),但有用程序往往由多个 函数组成. 函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能. C语 ...

  4. 05. Go 语言函数

    Go 语言函数 函数是组织好的.可重复使用的.用来实现单一或相关联功能的代码段,其可以提高应用的模块性和代码的重复利用率. Go 语言支持普通函数.匿名函数和闭包,从设计上对函数进行了优化和改进,让函 ...

  5. 学习笔记之——C语言 函数

    采用函数的原因: 随着程序规模的变大,产生了以下问题: --main函数变得相当冗杂 --程序复杂度不断提高 --代码前后关联度提高,修改代码往往牵一发而动全身 --变量使用过多,命名都成了问题 -- ...

  6. 从linux0.11中起动部分代码看汇编调用c语言函数

    上一篇分析了c语言的函数调用栈情况,知道了c语言的函数调用机制后,我们来看一下,linux0.11中起动部分的代码是如何从汇编跳入c语言函数的.在LINUX 0.11中的head.s文件中会看到如下一 ...

  7. C语言(函数)学习之strstr strcasestr

    C语言(函数)学习之[strstr]&[strcasestr]一.strstr函数使用[1]函数原型char*strstr(constchar*haystack,constchar*needl ...

  8. C语言函数sscanf()的用法

    从文件读取数据是一件很麻烦的事,所幸有sscanf()函数. C语言函数sscanf()的用法 sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: int sscanf( st ...

  9. 不可或缺 Windows Native (6) - C 语言: 函数

    [源码下载] 不可或缺 Windows Native (6) - C 语言: 函数 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 函数 示例cFunction.h # ...

随机推荐

  1. Django(50)drf异常模块源码分析

    异常模块源码入口 APIView类中dispatch方法中的:response = self.handle_exception(exc) 源码分析 我们点击handle_exception跳转,查看该 ...

  2. 先进一站式IP及定制

    先进一站式IP及定制 芯动科技15年来立足中国本土,目前已实现从130nm到5nm工艺高速混合电路IP核全覆盖,且所有IP均自主可控,一站式赋能国产芯片发展. 提供经过批量生产验证或硅验证的IP产品, ...

  3. 现代传感器的接口:中断驱动的ADC驱动程序

    现代传感器的接口:中断驱动的ADC驱动程序 Interfacing with modern sensors: Interrupt driven ADC drivers 研究了如何编写一个阻塞的模数转换 ...

  4. JVM集合之开篇点题

    大家在平时的开发过程中是否遇到过StackOverflowError.OutOfMemoryError等类似的内存溢出错误呢?大家又是怎么解决这个问题的?再来,大家在面试过程中有没有被面试官提问过jv ...

  5. 『动善时』JMeter基础 — 46、使用Badboy工具录制JMeter脚本

    目录 1.使用Badboy录制JMeter脚本 2.使用Badboy参数化配置 3.解决"当前页面的脚本发生错误"提示框 4.总结 1.使用Badboy录制JMeter脚本 打开B ...

  6. 你应该这样去开发接口:Java多线程并行计算

    所谓的高并发除了在架构上的高屋建瓴,还得需要开发人员在具体业务开发中注重自己的每一行代码.每一个细节,面子有的同时,更重要的还是要有里子. 面对性能,我们一定要有自己的工匠精神,不可以对任何一行代码妥 ...

  7. 【题解】Luogu p2014 选课 树型dp

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

  8. 在线博客转PDF电子书 | JS爬虫初探

    最近在看一位大佬写的源码解析博客,平时上下班用手机看不太得劲,但是平板又没有网卡,所以就想搞个离线pdf版,方便通勤时间学习阅读. 所以,问题来了: 怎么把在线网页内容转成pdf? 这位大佬的博客是用 ...

  9. Spring Boot下的一种导出CSV文件的代码框架

    1.前言 ​ CSV,逗号分隔值(Comma-Separated Values),即为逗号分隔的文本文件.如果值中含有逗号.换行符.制表符(Tab).单引号及双引号,则需要用双引号括起来:如果值中包含 ...

  10. Bootstrap中宽度大于指定宽度时有空白的解决方法

    <div class="container-fluid"></div> 其中container-fluid的作用是占100%