嵌入式初学-C语言-练习六

1.编写一个函数,通过输入球的半径,返回球的体积;

代码:

  1 /*
  2   需求:编写一个函数,通过输入球的半径,返回球的体积;V=(4/3)πr^3
  3 */
  4 #include <stdio.h>
  5 
  6 double v_a(int r)
  7 {
  8     double PI = 3.1415926;
  9     double v = (4.0/3)*PI*(r*r*r);
 10 
 11     return v;
 12 }
 13 
 14 int main()
 15 {
 16     int i;
 17     printf("请输入一个整型半径:");
 18     scanf("%d",&i);
 19 
 20 //    double V = v_a(r);
 21     printf("您输入的半径圆的体积为:%.3f立方\n",v_a(i));
 22 
 23     return 0;
 24 }

结果:

2.编写一个函数,通过输入一个数字字符,返回该数字

 代码:

  1 /*
  2   需求:编写一个函数,通过输入一个数字字符,返回该数字
  3 */
  4 #include <stdio.h>
  5 
  6 int nbr(char a)
  7 {
  8     a = a - '0';
  9 
 10     return a;
 11 }
 12 
 13 int main()
 14 {
 15     char b;
 16     printf("请输入一个'0'~'9'的字符:");
 17     scanf("%c",&b);
 18 
 19     int j = nbr(b);
 20 
 21     printf("你输入的字符%c所对应的数字是:%d\n",b,j);
 22 
 23     return 0;
 24 }

结果:

3.编写一个函数,输入四个数据分别表示2个点的x,y坐标,返回两点之间的距离;

代码:

  1 /*
  2   需求:编写一个函数,输入四个数据分别表示2个点的x,y坐标,返回两点之间的距离
  3 */
  4 #include <stdio.h>
  5 #include <math.h>
  6 
  7 double r_t(double x1,double y1,double x2,double y2)
  8 {
  9     double a = (x1 - x2) * (x1 - x2);
 10     double b = (y1 - y2) * (y1 - y2);
 11     double c = sqrt(a + b);   //横坐标相减的平凡和纵坐标相减的平方进行开根
 12 
 13     return c;
 14 }
 15 
 16 //主函数中输入两个横纵坐标
 17 
 18 int main()
 19 {
 20     float i1,i2,j1,j2;
 21     printf("请输入第一个点的坐标:");
 22     scanf("%f %f",&i1,&j1);
 23 
 24     printf("请输入第二个点的坐标:");
 25     scanf("%f %f",&i2,&j2);
 26 
 27     printf("您输入两点坐标的距离为:%f\n",r_t(i1,j1,i2,j2));
 28 
 29     return 0;
 30 }

结果:

4.编写一个函数,通过参数输入一个整型数,返回该数各位上数字的平方和;

代码:

  1 /*
  2   需求:编写一个函数,通过参数输入一个整型数,返回该数各位上数字的平方和;
  3 */
  4 #include <stdio.h>
  5 
  6 int sum_a(int i)
  7 {
  8     int j,k,num;
  9     while(i != 0)
 10     {
 11         j = 0;
 12         j = i % 10;
 13         i = i / 10;
 14         k = j * j;
 15         num += k;
 16     }
 17         printf("您输入数字各位上的平方为:%d\n",num);
 18 
 19     return num;
 20 
 21 
 22 }
 23 
 24 int main()
 25 {
 26     int a;
 27     printf("请输入一个整数:");
 28     scanf("%d",&a);
 29 
 30     sum_a(a);
 31 
 32 
 33     return 0;
 34 }

结果:

5.编写一个函数,通过参数输入x的值,当 x>5时, f(x) = 4x+7;否则 f(x) = -2x+3,返回结果值

代码:

  1 /*
  2   需求:编写一个函数,通过参数输入x的值,当 x>5时, f(x) = 4x+7;否则 f(x) = -2x+3,返回结果值
  3 */
  4 
  5 #include <stdio.h>
  6 
  7 int a_b(int x)
  8 {
  9     int fx = 0;
 10 
 11     if(x > 5)
 12     {
 13         fx = 4*x+7;
 14     }
 15     else
 16     {
 17         fx = -2*x+3;
 18     }
 19 
 20     return fx;
 21 
 22 }
 23 
 24 int main()
 25 {
 26     int a;
 27     printf("请您输入一个整数:");
 28     scanf("%d",&a);
 29 
 30     printf("您输入值的返回值为f(x)=%d\n",a_b(a));
 31 
 32     return 0;
 33 }

结果:

6.设计一个函数,用来求出多个数据的平均值;

代码:

  1 /*
  2   需求:设计一个函数,用来求出多个数据的平均值
  3 */
  4 #include <stdio.h>
  5 
  6 double a_b(double sum,int j)
  7 {
  8     double i = 0;
  9     i = sum / j;
 10 
 11     return i;
 12 
 13 }
 14 
 15 int main()
 16 {
 17     int n = 0,a,num = 0;
 18     printf("请输入您需要输入的整数的个数:");
 19     scanf("%d",&n);
 20     for(int m = 1;m <= n;m++)
 21     {
 22         printf("请输入你需要的数据:");
 23         scanf("%d",&a);
 24         num += a;
 25     }
 26 
 27     printf("您输入数据的平均值为:%f\n",a_b(num,n));
 28 
 29     return 0;
 30 }

结果:

7.设计一个函数,用来查找一个字符串中某个字符的位置;

代码:

  1 /*
  2   需求:设计一个函数,用来查找一个字符串中某个字符的位置
  3 */
  4 #include <stdio.h>
  5 char a_b(char n)
  6 {
  7     int m;
  8     char a[9] = {"love you!"};
  9     int pp = 1;
 10     for(m = 0;m < 9;m++)
 11     {
 12         if(n == a[m])
 13         {
 14             printf("您数入的字符下标为:%d,是字符串第%d个元素!\n",m,m+1);
 15             pp = 0;
 16         }
 17     }
 18         if(pp = 1)
 19         {
 20             printf("输入字符不正确!!\n");
 21         }
 22 
 23     return 0;
 24 }
 25 
 26 int main()
 27 {
 28     char a;
 29     printf("请您输入一个‘love you!’中任意一个字符包括空格及感叹号!\n");
 30     scanf("%c",&a);
 31     a_b(a);
 32 
 33     return 0;
 34 }

 结果:

8.设计一个函数,把一个整型数字转成对应的字符串格式

代码:

  1 /*
  2   需求:设计一个函数,把一个整型数字转成对应的字符串格式
  3 */
  4 #include <stdio.h>
  5 
  6 char a_b(int i)
  7 {
  8     printf("您输入整数的字符串格式是:%c\n",(char)i);
  9     return 0;
 10 }
 11 
 12 int main()
 13 {
 14     int a;
 15     printf("请输入一个整数:\n");
 16     scanf("%d",&a);
 17 
 18     a_b(a);
 19 
 20     return 0;
 21 
 22 }

结果:

9.设计一个函数,统计字符串中大写字母的个数

代码:

  1 /*
  2   需求:设计一个函数,统计字符串中大写字母的个数
  3 */
  4 #include <stdio.h>
  5 
  6 char a_b(int len,char arr[len])
  7 {
  8     int i,sum = 0;
  9 
 10     for(i = 0;i < len;i++)
 11     {
 12         if(arr[i] < 91 && arr[i] > 64)
 13         {
 14             sum++;
 15         }
 16     }
 17     return sum;
 18 }
 19 
 20 int main()
 21 {
 22     int m = 0;
 23 
 24     printf("请输入您需要输入字符串的长度:");
 25     scanf("%d",&m);
 26 
 27     char arr1[m];
 28 
 29     printf("请您输入一个字符串:\n");
 30     for(int j = 0; j < m;j++)
 31     {
 32         scanf("%c",&arr1[j]);
 33     }
 34 
 35     printf("您输入的字符串中有%d个大写字母\n",a_b(m,arr1));
 36 
 37     return 0;
 38 }

结果:

10.设计函数,实现strcmp 的功能;

代码:

  1 /*
  2   需求:设计函数,实现strcmp 的功能;
  3 */
  4 #include <stdio.h>
  5 int my_strcmp(const char arr1[],const char arr2[])
  6 {
  7     int i = 0;
  8 
  9     // 判断数组中是否存在字符,如果不存在就跳出循环
 10     while(arr1[i] && arr2[i])
 11     {
 12         if(arr1[i] != arr2[i])
 13         {
 14             return arr1[i] - arr2[i];
 15             // 此时会产生两个结果,一个正数(1),一个是负数(-1)
 16         }
 17         i++;
 18     }
 19 
 20     return arr1[i] - arr2[i];
 21 }
 22 
 23 
 24 int main()
 25 {
 26     const char str1[] = "MaJie";
 27     const char str2[] = "MaYingLong";
 28 
 29     int result = my_strcmp(str1,str2);
 30 
 31     if(result < 0)
 32     {
 33         printf("'%s' 小于 '%s'\n",str1,str2);
 34     }
 35     else if(result > 0)
 36     {
 37     printf("'%s' 大于 '%s'\n",str1,str2);
 38     }
 39     else
 40     {
 41     printf("'%s' 和 '%s' 相同\n",str1,str2);
 42     }
 43 
 44     return 0;
 45 }

11.编写函数,用于判断输入的字符是不是个数字。是返回1,不是返回0.

代码:

  1 /*
  2   需求:编写函数,用于判断输入的字符是不是个数字。是返回1,不是返回0
  3 */
  4 #include <stdio.h>
  5 
  6 int a_b(char a)
  7 {
  8     if(a >= 48 && a <= 57)
  9     {
 10         printf("返回值是1,您输入的是字符数字\n");
 11         return 1;
 12     }
 13     else
 14     {
 15         printf("返回值是0,您输入的不是字符数字\n");
 16         return 0;
 17     }
 18 
 19 }
 20 
 21 int main()
 22 {
 23     char i;
 24     printf("请输入一个字符:");
 25     scanf("%c",&i);
 26 
 27     a_b(i);
 28 
 29     return 0;
 30 
 31 }

结果:

12.设计一程序,实现一个简单的计算器。

‘要求:有菜单函数 和加、减、乘、除的函数 主函数调用这些函数实现程序的功能.要求菜单函数能 够输出如下的界面

1、加法 2、减法 3、乘法 4、除法 0.退出‘

代码:

  1 /**
  2   *设计一程序,实现一个简单的计算器。
  3   * 要求:有菜单函数 和加、减、乘、除的函数 主函数调用这些函数实现程序的功能.要求菜单函数能 够输出如下的界面
  4   *       1、加法 2、减法 3、乘法 4、除法 0.退出
  5 */
  6 #include <stdio.h>
  7 
  8 double a_b(int i,double x,double y)
  9 {
 10     switch(i)
 11     {
 12         case 1:
 13         printf("%.2lf+%.2lf=%.2lf\n",x,y,x+y);
 14         break;
 15 
 16         case 2:
 17         printf("%.2lf-%.2lf=%.2lf\n",x,y,x-y);
 18         break;
 19 
 20         case 3:
 21         printf("%.2lf*%.2lf=%.2lf\n",x,y,x*y);
 22         break;
 23 
 24         case 4:
 25         if(y == 0)
 26         {
 27             printf("除数不能为0\n");
 28         }
 29         else
 30         {
 31             printf("%.2lf/%.2lf=%.2lf\n",x,y,x/y);
 32         }
 33         break;
 34     }
 35 
 36 }
 37 int main()
 38 {
 39 
 40     int p;
 41     double a,b;
 42 
 43     printf("*************************************\n");
 44     printf("*************************************\n");
 45     printf("***********新版计算器 1.0************\n");
 46     printf("*************************************\n");
 47     printf("*************************************\n");
 48 
 49     printf("请输入您要选择的运算方式:\n");
 50     printf("输入数字1进行加法\n");
 51     printf("输入数字2进行减法\n");
 52     printf("输入数字3进行乘法\n");
 53     printf("输入数字4进行除法\n");
 54     printf("输入数字0退出\n");
 55 
 56     scanf("%d",&p);
 57     if(p !=0)
 58     {
 59         printf("请输入两个您要运算的数:\n");
 60         scanf("%lf %lf",&a,&b);
 61 
 62         a_b(p,a,b);
 63     }
 64     else
 65     {
 66         printf("退出计算器!!\n");
 67     }
 68     return 0;
 69 }

结果:

13.设计函数实现冒泡排序;

代码:

  1 #include <stdio.h>
  2 
  3 int a_b(int len,int arr[len])
  4 {
  5     int i,j,t;
  6     //对数组arr使用冒泡排序法进行排序(使用的标准冒泡排序法)
  7 
  8     //外层循环:控制比较的轮数,因为有11个数,所以需要比较length-1轮
  9     for(int i = 0;i < len-1;i++)
 10     {
 11         //内层循环:每一轮中比较的次数,每一轮比较的次数为length - 1 - i
 12         for(int j = 0;j < len - 1 - i;j++)
 13         {
 14             //相邻的两个数进行比较,满足条件交换位置
 15             if(arr[j] > arr[j + 1])
 16             {
 17                 t = arr[j];
 18                 arr[j] = arr[j + 1];
 19                 arr[j + 1] = t;
 20             }
 21         }
 22     }
 23 
 24     printf("冒泡排序后遍历数组:\n");
 25 
 26     for(i = 0;i < len;i++)
 27     {
 28         printf("%d  ",arr[i]);
 29     }
 30     printf("\n");
 31 
 32 
 33 }
 34 
 35 int main()
 36 {
 37     //创建一个数组,用来存储排序的数列
 38     int arr1[10];
 39     int a;  //i:比较轮数,j:每一轮比较的次数,t:临时变量,用来比较时交换数据
 40 
 41     printf("请输入10个测试整数:\n");
 42 
 43     //计算数组大小
 44     int length = sizeof(arr1) / sizeof(int); //等价于sizeof[0]
 45 
 46     //通过循环录入数据
 47     for(a = 0;a < length;a++)
 48     {
 49         scanf("%d,",&arr1[a]);
 50     }
 51 
 52     a_b(length,arr1);
 53 
 54     return 0;
 55 }

结果:

### 回答1: 学习51单片机和C语言编程,可以帮助我们更深入地理解嵌入式系统的原理和工作方式。对于初学者来说,掌握一份适合自己的学习资料非常重要。 要学习51单片机-C语言版,可以阅读《手把手教你学51单片机-C语言版pdf》这本电子书,这本书内容丰富,讲解详细,配合实例编程,非常适合初学者自学。以下是学习本书的几个关键点: 第一,掌握基本的硬件知识,包括单片机的结构和特性,尤其是各种寄存器的作用和配置方法。 第二,了解C语言编程基础,尤其是语法、数据类型、运算符、控制结构、函数等,这是编写单片机程序的基础。 第三,通过实例编程加强对知识的理解和运用能力。例如,可以尝试写一些简单的IO控制、定时器中断、串口通讯等程序。 第四,可以搭配相应的开发板和开发环境进行实践学习。例如,可以使用STC89C51开发板和Keil或SDCC开发环境。 总之,《手把手教你学51单片机-C语言版pdf》这本电子书是一个不错的学习资料,但也需要具备一定的基础知识和耐心,可以结合其他资料和实践不断提高自己的能力。 ### 回答2: 学习51单片机-c语言版, 需要基础的C语言编程知识。在学习前,先要熟悉C语言的数据类型、循环、判断及函数等语法结构,并掌握C语言的编写方法。 在学习51单片机-c语言版之前,需要准备好学习环境,如下载并安装Keil软件, 安装并关联好相应的单片机模拟器。Keil软件中有类似于记事本的编辑窗口用来编写C语言代码, 以及编译,调试和下载程序到单片机等功能。 在学习时,可以选择一些简单的例程开始学习,逐步理解其代码逻辑,了解基本的寄存器操作和中断等知识。可以从LED灯等简单的实验开始,逐渐增加难度和功能的复杂度。 同时,可以参考一些权威的学习资料如《单片机原理与应用》、《51单片机学习与应用》等相关书籍,或结合网络资源进行学习。在学习过程中,需要勤加练习,多编写代码进行实践,同时多与他人交流学习体会和技术问题。通过坚持不断的学习和练习,便可以逐步掌握51单片机-c语言编程技巧,提高自己的单片机应用开发能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值