《C程序设计》上机实验报告(六)之函数及其应用

实验内容:

1.运行程序

#include <stdio.h>

void ex(int x,int y);

void main( )

{ int a=1,b=2;

  ex(a,b);

  printf("a=%d,b=%d\n",a,b);

}

void ex(int x,int y)

{   x++;

    ++y;

    printf("\nx=%d,y=%d\n",x,y);

}

要求:

(1)输入源程序并进行编译、连接。

(2)将初始化(a=1,b=2)改为键盘输入(调用系统函数scanf())。

(3)将程序运行结果填入表5-1,分析参数传递与结果的关系。

表5-1 程序测试及结果分析

实参传递给形参后

子函数返回后

输出结果

x=2

y=3

输出结果

a=1

b=2

结果分析:输入数据,将实参传递给形参,再引用函数输出结果

2.运行程序

#include <stdio.h>

int b=0;

int f(int a);

void main( )

{   int a=2,i;

    for(i=0;i<3;i++)

        printf("%d\n",f(a));

    printf("\n");

}

int f(int a)

{

    int c=3;

    a=a+1;

    b+=a;

    c++;

    return (a+b+c);

}

要求:

(1)输入源程序并进行编译、连接、运行和调试。

(2)运行并将结果填入表5-3。

(3)分析函数中a、b、c的存储类型及其在每次调用中的变化。

(4)将函数f()中的语句“int c=3;”改为“static int c=3;”后进行编译、连接、运行和调试。将结果填入表5-3。

(5)比较(4)修改前后函数f使用的变量a、b、c的差别。

表5-2 程序测试及结果分析

b变量的类型为

全局变量

f函数调用

第1次

第2次

第3次

输出结果

10

13

16

表5-3 程序测试及结果分析

c变量的类型为

局部变量

f函数调用

第1次

第2次

第3次

输出结果

10

14

18

3. 运行程序

#include <stdio.h>

int func2(int a,int b);

int func1(int a,int b);

void main( )

{   int x=7,y=17;

    printf("%d\n",func1(x,y));

}

int func1(int a,int b)

{

    int c;

    a+=a;

    b+=b;

    c=func2(a,b);

    return c*c;

}

int func2(int a,int b)

{

    int c;

    c=a*b%3;

    return c;

}

要求:

(1)输入源程序并进行编译、连接、运行并调试。

(2)运行并将结果填入表5-4。

(3)分析函数之间的调用关系。

表5-4 程序测试及结果分析

func1返回的值

2

func2返回的值

2

main的输出结果

4

4.编写程序

编写一个函数,计算并返回三角形的面积。其中三角形的3条边长a、b、c作为函数的参数。输入a、b、c,判断是否能够构成三角形。

程序:#include<stdio.h>

#include<math.h>

double sanbian(double a, double b, double c)

{

  if (a + b > c && a + c > b && b + c > a)

  {

      printf("三条边可构成三角形\n");

      return 1;

  }

  else

      printf("输入错误\n");

  return 0;

}

double area(double a, double b, double c)

{

  double q, s;

  q = (a + b + c) / 2.0;

  s = sqrt(q * (q - a)*(q - b)*(q - c));

  return s;

}

int main()

{

  double a, b, c;

  printf("输入三条边长");

  scanf("%lf%lf%lf", &a, &b, &c);

  if (sanbian(a, b, c))

      printf("三角形的面积是 % lf", area(a, b, c));

  else

      printf("输出错误");

  return 0;

}

5.编写程序

编写一个程序,用两个函数分别求最大公约数和最小公倍数,其值不由函数带回,将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。

程序:#include<stdio.h>

int fun1(int m, int n) // 最大公约数函数

{

  int t;

  if (m < n)

  {//确保m为大数

      t = m;

      m = n;

      n = t;

  }

  while (n != 0)

  {//辗转相除 ,找最大公约数

      t = m % n;

      m = n;

      n = t;

  }

  return  m;//此时n为0,返回公约数m

}

int fun2(int m, int n)

{//最小公倍数函数

  int t;

  t = m * n / fun1(m, n);

  return t;

}

int main() {

  int m, n;

  printf("请输入两个正整数:\n");

  scanf("%d%d", &m, &n);

  printf("%d和%d的最大公约数为:%d\n", m, n, fun1(m, n));

  printf("%d和%d的最小公约数为:%d", m, n, fun2(m, n));

}

6.编写程序

写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。

要求:

(1)判别素数的函数名为:prime。

   (2)程序中测试数据为:17、34、2、1、0

(3)算法分析中表示出判断素数的算法。

(4)结果分析中讨论判断素数的几种算法,并分析优劣。

程序:#include <stdio.h>

#include <math.h>

bool prime(int m)

{

  int i;

  if (m <= 1) return false;

  for (i = 2; i <= m - 1; i++)

      if (m % i == 0) break;

  if (i >= m) return true;

  else return false;

}

void main()

{

  int i;

  int a[5] = { 17,34,2,1,0 };

  for (i = 0; i < 5; i++)

  {

      if (prime(a[i]))

          printf("a[%d]=%d is a prime number\n", i, a[i]);

      else

          printf("a[%d]=%d is not a prime number\n", i, a[i]);

  }

}

7.编写程序

编写具有如下原型的函数:

void chgStr(char is[],char os[]);

由它负责将is 中的输入字符串按照如下的规则变换成结果字符串放入os数组中。

从头到尾逐字符地对输入字符串is进行处理:

(1)若is的当前字符不是数学字符,则将该字符复制到输出字符串os中。

(2)若is的当前字符是一个数学字符,且假定其大小值为n,则将该数字字符替换为n+1个相关字母存放到结果字符串os中:字符0替换为1个a,字符1替换为2个b,字符2替换为3个c,……,字符9替换为10个j。

例如:当输入字符串is为“s1k02”时,输出字符串os应为“sbbkaccc”;

      当输入字符串is为“abc5uf20t”时,输出字符串os应为“abcffffffufcccat”;

编写函数,对chgStr()进行调用,以验证其正确性.

程序:int  main()

{

  char is[20], os[20];

  int i, j, n, k;

  char c;

  printf("输入一个字符串_");

  gets_s(is);

  puts(is);

  i = 0, j = 0;

  while (is[i] != '\0')

  {

      if (is[i] < '0' || is[i]>'9')

          os[j++] = is[i++];

      else

      {

          n = is[i++] - '0';

          c = 'a' + n;

          for (k = 0; k <= n; k++)

              os[j++] = c;

      }

  }

  os[j] = '\0';

  puts(os);

}

8.

程序:#include <stdio.h>

double f(double x);

double g(double x);

int main()

{

  system("color f3");

  int i;

  for (i = -5; i <= 5; i++)

      printf("x=%2d,g(%2d)=%8.3f\n", i, i, g(i));

}

double f(double x)

{

  return x * x + 10.0 / 21 * x - 1;

}

double g(double x)

{

  return x * x + 10.0 / 21 * x - 1;

}

9.编写程序

编写具有如下原型的函数:

bool f(long x);

其功能为:若整数x仅由偶数字(0、2、4、6、8) 组成时(如x=2468),函数返回true;

否则返回false(如x=2214)。

编写主函数,对f()进行调用,以验证其正确性。

要求:输入输出界面设计为下面的形式

Input a long integer:x=2214

NO!—(Include:1,3,5,7)

再一次执行:

Input a long integer:x=80246

YES!—(Only: 0,2,4,6,8)

程序:#include <stdio.h>

bool f(long x)

{

  long yousa;

  while (x % 10 != 0)

  {

      yousa = x % 10;

   if (yousa != 0 && yousa != 2 && yousa != 4 && yousa != 6 && yousa != 8)

          return false;

      else

          x = x / 10;

  }

  return true;

}

void main()

{

  long int x;

  printf("input a long integer:x=");

  scanf("%d", &x);

  if (f(x))

      printf("YES!—(Only:0,2,4,6,8)");

  else

      printf("NO!—(Include:1,3,5,7)");

}

  10.编写程序

编写一个将x进制正整数转化为十进制数并输出结果的函数,具有如下原型:

void ChgxTo10(char a[],int x);

其中:参数a中存放的是x进制正整数的各位数字字符(如x可为2或8或16等,为大于等于2而小于等于16的正整数),要将其转化为十进制数并输出。

要求及提示:

(1)编写主函数,输入具体数据a(一个数字字符串)及其进制x,而后作为实参对ChgxTo10()进行调用以验证其正确性。

(2)要注意检查a数组中x进制数的合法性,即只允许出现数字字符1~x-1。例如可以再编写并使用如下的函数checkx()来完成该检查功能:

void checkx(char a[],int x);

(3)程序执行后的输入输出界面可设计为:

    a,x=? 7b 16

       7B(16)=123(10)

       再一次执行:

    a,x=? 236 7

       236(7)=125(10)

程序:#include <stdio.h>

#include <math.h>

bool checkx(char a[], int x);

void chgxto10(char a[], int x);

void main()

{

  int x;

  char a[20];

  printf("input 1~9 or A~F data.\n");

  scanf("%s", &a);

  printf("input radix x:");

  scanf("%d", &x);

  if (checkx(a, x))

      chgxto10(a, x);

  else

      printf("data is not right\n");

}

bool checkx(char a[], int x)

{

  int i = 0;

  char b[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };

  bool flag;

  while (a[i] != '\0')

  {

      flag = 0;

      for (int j = 0; j < x; j++)

      {

          if (a[i] == b[j])

          {

              flag = 1;

              break;

          }

      }

      if (flag == 0) return false;

      i++;

  }

  return true;

void chgxto10(char a[], int x)

{

    long sum = 0;

  int num = 0, i = 0, j;

  int p;

  while (a[i++] != '\0') num++;

  for (j = num - 1, i = 0; j >= 0; j--, i++)

  {

      if (a[j] >= '0' && a[j] <= '9')

          p = a[j] - '0';

      else if (a[j] >= 'A' && a[j] <= 'F')

          p = a[j] - 'A' + 10;

}

程序测试及运行结果:

4.

5.

程序测试及运行结果:

6.

7.

8.

程序测试及运行结果:

9.

10.

四、分析与讨论

1.函数实参和形参的“传递”方式有哪些?

答:(1)常量传递,实参是常量,形参是变量

  1. 变量传递,实参是变量,形参是变量
  2. 地址传递 ,实参是地址,形参也是地址
  3. 指针指针传递,实参是指针,形参是指针
  4. 指针地址传递,实参是指针,形参是地址
  5. 地址指针传递,实参是地址,形参是指针
  6. 数组元素变量传递,实参是数组元素,形参是变量
  7. 变量数组元素传递,实参是变量,形参是数组元素

2.函数的形参与实参类型总结?

答:形参:在定义函数时指定的参数,在未出现函数调用时,他们并不占用内存中的存储单元。只有在发生函数调用时,函数中的形参才被分配内存单元。在函数调用结束后,形参所占用的内存单元也被释放。

实参:即你调用函数时传递的参数。实参可以是常量、变量、表达式。

实参与形参的类型应相同或兼容赋值;

如果实参为int型而形参为float型,则按不同类型的赋值规则进行转换。

形参和实参实际上占用的是两份不同的存储单元。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/375213.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

202418读书笔记|《成功的聪明人太多了,我必须为笨蛋争一口气》——做精致有趣的你呀

202418读书笔记|《成功的聪明人太多了&#xff0c;我必须为笨蛋争一口气》——做精致有趣的你呀 《成功的聪明人太多了&#xff0c;我必须为笨蛋争口气》书单狗一如既往的搞笑&#xff0c;幽默&#xff0c;博学。狗生哲学&#xff1a;做精致有趣的你呀。 趁着付费会员卡的劲儿&…

数据结构——框架简介

1.数据结构的作用 数据结构是计算机科学中一种重要的概念&#xff0c;它主要用于组织和存储数据以便有效地进行操作。数据结构可以看作是数据的组织方式&#xff0c;通过合理的数据结构设计&#xff0c;可以更高效地执行各种操作&#xff0c;提高程序的性能和可维护性。 以下是…

PyTorch 2.2 中文官方教程(十九)

使用 RPC 进行分布式管道并行 原文&#xff1a;pytorch.org/tutorials/intermediate/dist_pipeline_parallel_tutorial.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 作者&#xff1a;Shen Li 注意 在github中查看并编辑本教程。 先决条件&#xff1a; PyTorc…

【Jenkins】pipeline基本使用

目录 一、pipeline 二、创建pipeline项目 1、安装pipeline插件 2、创建pipeline项目 三、pipeline语法 1、pipeline组成 2、agent&#xff1a;指定流水线的执行位置&#xff0c;流水线中每个阶段都必须在某个地方执行 3、stage&#xff1a;阶段&#xff0c;代表流水线的…

2024 高级前端面试题之 框架通识 「精选篇」

该内容主要整理关于 框架通识 的相关面试题&#xff0c;其他内容面试题请移步至 「最新最全的前端面试题集锦」 查看。 框架通识精选篇 1. MVVM2. 路由原理3. Virtual Dom3.1 为什么需要 Virtual Dom3.2 Virtual Dom 算法简述3.2 Virtual Dom 算法实现 4. Diff算法4.1 React-Di…

【MySQL】学习如何使用DCL进行用户管理

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-JwFD16F1Kh0fle0X {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

五、医学影像云平台 - 医共体

原创不易&#xff0c;多谢关注&#xff01;谢谢&#xff01; 1. 医学大影像设备市场现状 目前影像设备&#xff0c;可以说低端产品同质化越来越严重&#xff0c;利润越来越薄&#xff0c;而高端超高端设备&#xff0c;整体销售额却在增长&#xff0c;利润空间也比低端的要高的…

行业应用科普 | 患者护理应用连接器

【摘要/前言】 通过医疗专业人士为患者提供护理的种种需求&#xff0c;已经不限于手术室与医院的各种安全状况。当今许多患者的护理都是在其他环境进行&#xff0c;例如医生办公室、健康中心&#xff0c;还有越来越普遍的住家。尤其是需要长期看护的患者&#xff0c;所需的科技…

PCB经验规则的综合应用

PCB经验规则的综合应用 走线尽量短&#xff0c;长度小于信号波长的十分之一 二是无法短的&#xff0c;就控制它的阻抗 按传输线设计、控制阻抗 首先我们来看看电路板的参数。常见的1.6毫米电路板 1oz 铜箔&#xff0c;介质 FR4&#xff0c;介电常数4.6-4.8&#xff0c;板芯厚…

编译原理与技术(三)——语法分析(四)自底向上-移进归约

一、语法分析的主要方法 二、归约 三、句柄&#xff08;可归约串&#xff09; 归约涉及到一个问题。 对于输入串&#xff0c;我们怎么知道哪一部分可以被归约&#xff1f; 我们定义&#xff0c;可以被归约的子串称为句柄。 显然&#xff0c;句柄可能不是唯一的。 四、移进-…

CTF-show WEB入门--web17

今日完成web12,老规矩先看看题目提示&#xff1a; 我们可以看到题目提示为&#xff1a; 备份的sql文件会泄露敏感信息 然后我们再打开题目链接; 然后我们查看页面内容和网页源代码&#xff0c;什么有用的信息都没有得到&#xff1a; 根据题目提示为敏感信息泄露&#xff0c;那…

解析与模拟常用字符串函数strcpy,strcat,strcmp,strstr(一)

今天也是去学习了一波字符串函数&#xff0c;想着也为了加深记忆&#xff0c;所以写一下这篇博客。既帮助了我也帮助了想学习字符串函数的各位。下面就开始今天的字符串函数的学习吧。 目录 strcpy与strncpy strcat与strncat strcmpy strstr strcpy与strncpy 在 C 语言中&…

机器学习系列6-逻辑回归

重点&#xff1a; 1.逻辑回归模型会生成概率。 2. 对数损失是逻辑回归的损失函数。 3. 逻辑回归被许多从业者广泛使用。 # 1.逻辑回归&#xff1a;计算概率 **许多问题需要将概率估算值作为输出。逻辑回归是一种非常高的概率计算机制。** 实际上&#xff0c;您可以通过以下两种…

Fart12配套批量修复二代函数抽取壳工具发布

旧版Fart12定制版jadx的弊端 之前寒冰大佬推出的Fart12定制版jadx可以将Fart12脱下来的dex文件与主动调用过程中拿到的函数体bin文件自动重构与合并&#xff0c;修复并合并成新的dex。 修复完之后dex文件大小也会变大&#xff0c;且函数体也由原来的nop变成了真正的函数逻辑代…

算法练习-二叉搜索树的最小绝对差(思路+流程图+代码)

难度参考 难度&#xff1a;中等 分类&#xff1a;二叉树 难度与分类由我所参与的培训课程提供&#xff0c;但需要注意的是&#xff0c;难度与分类仅供参考。且所在课程未提供测试平台&#xff0c;故实现代码主要为自行测试的那种&#xff0c;以下内容均为个人笔记&#xff0c;旨…

代码随想录 Leetcode37. 解数独

题目&#xff1a; 代码(首刷看解析 2024年2月6日&#xff09;&#xff1a; class Solution { private:bool backtracking(vector<vector<char>>& board) {for (int i 0; i < 9; i) {for (int j 0; j < 9; j) {if (board[i][j] .) {for (char k 1; k…

“掌握温度,感知湿度,一触即知!”DHT11温湿度传感器,为您的生活增添一份关怀与精准。#非标协议【下】

“掌握温度&#xff0c;感知湿度&#xff0c;一触即知&#xff01;”DHT11温湿度传感器&#xff0c;为您的生活增添一份关怀与精准。#非标协议【下】 前言预备知识1.DHT11温湿度传感器初识1.1产品概述1.2与51单片机接线1.3数据传送逻辑和数据格式 2.发送时序检测DHT11温湿度传感…

Linux基础-磁盘

1.磁盘分区 1.分区有固定大小 2.直接写在这块盘的磁盘分区表中&#xff08;DPT&#xff09;&#xff0c;和上面装什么操作系统没有任何关系 2.每一个磁盘分区都要先有一个磁盘分区类型 GPT&#xff08;首选&#xff09; MBR 3.磁盘专业术语叫做块设备&#xff08;Block Dev…

numpy基础之切片索引

1 numpy基础之切片索引 多维数组有多个轴&#xff0c;索引下标从0轴开始&#xff0c;每个轴下标用逗号分隔。 比如[m,n,o]&#xff0c;表示0轴上索引为m&#xff0c;1轴上索引为n&#xff0c;2轴上索引为o的下标。 切片索引下标是在指定轴上用冒号选取一定范围的下标。 比如…

mac缩小图片大小的软件有哪些?推荐6款实用软件

mac缩小图片大小的软件有哪些&#xff1f;在处理图片时&#xff0c;我们经常需要调整图片的大小以适应不同的需求。在Mac上&#xff0c;有许多软件可以帮助我们实现这一目标。本文将介绍6款知名的图片缩小软件&#xff0c;让你轻松应对图片大小的调整。 1.改图鸭 这是一款功能…