• 函数入门及C Primer Plus第五章编程题


    本文参考C Primer Plus进行C语言学习

    文章目录

    • 带参数的函数
    • C Primer Plus第五章编程题

    一.带参数的函数

    1. #include<stdio.h>
    2. void pound(int n); //ASC函数原型声明
    3. int main()
    4. {
    5. int times=5;
    6. char ch='!'; //ASCⅡ码是33
    7. float f=6.0f;
    8. pound(times); //int类型的参数
    9. pound(ch);
    10. pound(f);
    11. return 0;
    12. }
    13. void pound(int n)
    14. {
    15. while(n-->0)
    16. printf("#");
    17. printf("\n");
    18. }

            如果函数不接受任何参数,函数头的圆括号应该写上关键字void。由于该函数接受一个int类型的参数,所以圆括号中包含一个int类型n的声明。

            声明参数就创建了被称为形式参数 的变量。该例中,形式参数是int类型的变量n。像pound(10)这样的函数调用会把10赋给n。在程序中,pound(times)就是把times的值(5)赋给n。我们称函数调用传递的值为实际参数。所以,函数调用pound(10)把实际参数10传递给函数,然后该函数把10赋值给形式参数(变量n)。也就是说,main()中变量的值被拷贝给pound()中的新变量。

            变量名是函数私有的,即在函数中定义的变量名不会和别处的相同名称发生冲突。如果在pound()中用times()代替n,那么这个times和main()中的times不同。也就是说,程序中出现了两个相同的变量名,但是函数可以区分它们。

            现在,我们来学习函数调用。第一个函数调用是pound(times),times的值5被赋给n。因此,printf()函数打印了5个#和一个换行符。第二个函数调用是pound(ch),!在ASCⅡ中值为33.但是pound()函数的参数类型是int,与char不匹配。函数开头的函数原型在这里发挥了作用。原型即是函数的声明,描述了函数的返回值和参数。pound()函数的原型说明了两点:

    • 该函数没有返回值
    • 该函数有一个int类型的参数

             该例中,函数原型告诉编译器pound()需要一个int类型的参数。相应地,当编译器执行到pound(ch)表达式时,会把参数ch 自动转换成int类型。在我们的系统中,该参数从1字节的33变成4字节的33,所以现在33的类型满足函数的要求。与此类似,最后一次调用是pound(f),使得float类型的变量被转换成合适的类型。
            在ANSI C之前,C使用的是函数声明,而不是函数原型。函数声明只指明了函数名和返回类型,没有指明参数类型。为了向下兼容,C现在仍然允许这样的形式:
            void pound();         /*ANSI C之前的函数声明*/
            如果用这条函数声明代替pound.c程序中的函数原型会怎样?第1次函数调用,pound(times)没问题,因为times 是int 类型。第2次函数调用,pound(ch)也没问题,因为即使缺少函数原型,C也会把char和short 类型自动升级为int 类型。第3次函数调用,pound(f)会失败,因为缺少函数原型,float会被自动升级为double。在函数调用中使用强制类型转换,可以修复这个问题:

            pound((int)f);        //把f强制转换为正确类型

            注意,如果f的值太大,超过了int类型表示的范围,这样做也不行。

    2.C Primer Plus第五章编程题

    1.编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时间。使用#define或const创建一个表示60的符号常量或const 变量。通过while循环让用户重复输入值,直到用户输入小于或等于0的值才停止循环。

    1. #include<stdio.h>
    2. #define TIME 60;
    3. int main()
    4. {
    5. int min,hour;
    6. printf("请输入分钟数:\n");
    7. scanf("%d",&min);
    8. while(min>0) //不可写成<=
    9. {
    10. hour=min/TIME;
    11. min=min%TIME;
    12. printf("转换为%d小时,%d分钟\n",hour,min);
    13. printf("请输入分钟数:\n");
    14. scanf("%d",&min);
    15. }
    16. }


    2.编写一个程序,提示用户输入一个整数,然后打印从该数到比该数大10的所有整数(例如,用户输入5,则打印 5~15的所有整数,包括5和15)。要求打印的各值之间用一个空格、制表符或换行符分开。

    1. #include<stdio.h>
    2. int main()
    3. {
    4. int num,sum;
    5. scanf("%d",&num);
    6. sum=num+11;
    7. while(num<sum)
    8. {
    9. printf("%d ",num++);
    10. }
    11. return 0;
    12. }


    3.编写一个程序,提示用户输入天数,然后将其转换成周数和天数。例如,用户输入18,则转换成2周4天。以下面的格式显示结果:
    18 days are 2 weeks, 4 days.
    通过while循环让用户重复输入天数,当用户输入一个非正值时(如0或-20),循环结束。

    1. #include<stdio.h>
    2. #define DAY 7;
    3. int main()
    4. {
    5. int day,week,days;
    6. printf("请输入天数:");
    7. scanf("%d",&day);
    8. while(day>0)
    9. {
    10. week=day/DAY;
    11. days=day%DAY;
    12. printf("%d days are %d weeks,%d days\n",day,week,days);
    13. printf("请输入天数:");
    14. scanf("%d",&day);
    15. }
    16. return 0;
    17. }

    4.编写一个程序,提示用户输入一个身高(单位:厘米),并分别以厘米和英寸为单位显示该值,允许有小数部分。程序应该能让用户重复输入身高,直到用户输入一个非正值。其输出示例如下:Enter a height in centimeters: 182
    182.0 cm = 5 feet,11.7 inches
    Enter a height in centimeters (<=0 to quit):168.7
    168.0 cm = 5 feet, 6.4 inches
    Enter a height in centimeters (<=0 to quit):0
    bye

    1. #include <stdio.h>
    2. #define CM_to_INCH 2.54
    3. #define CM_to_FEET 30.48
    4. int main(void)
    5. {
    6. float height, inch;
    7. int feet;
    8. printf("请输入一个身高(厘米):");
    9. scanf("%f", &height);
    10. while (height > 0){
    11. feet = height / CM_to_FEET;
    12. inch = (height - feet * CM_to_FEET) / CM_to_INCH;
    13. printf("%.2f cm = %d feet, %.2f inches\n", height, feet, inch);
    14. printf("请输入一个身高(厘米):");
    15. scanf("%f", &height);
    16. }
    17. return 0;
    18. }

     
    5.修改程序 addemup.c(程序清单 5.13),你可以认为 addemup.c是计算20天里赚多少钱的程序(假设第1天赚S1、第2天赚$2、第3天赚$3,以此类推)。修改程序,使其可以与用户交互,根据用户输入的数进行计算(即,用读入的一个变量来代替20)。

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. int i = 1, count = 0, sum = 0;
    5. while (i<21)
    6. {
    7. printf("请输入您第 %d 天的收入:", i);
    8. scanf("%d", &count);
    9. sum = sum + count;
    10. i++;
    11. }
    12. printf("这20天的总收入为:%d元\n", sum);
    13. return 0;
    14. }

    6.修改编程练习5的程序,使其能计算整数的平方和(可以认为第1天赚$1、第2天赚$4、第3天赚$9,以此类推,这看起来很不错)。C没有平方函数,但是可以用n*n来表示n的平方。

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. int i = 1, count = 0, sum = 0;
    5. while (i<21)
    6. {
    7. count=i*i;
    8. printf("请输入您第 %d 天的收入:%d元\n", i,count);
    9. sum = sum + count;
    10. i++;
    11. }
    12. printf("这20天的总收入为:%d元\n", sum);
    13. return 0;
    14. }

    7.编写一个程序,提示用户输入一个double类型的数,并打印该数的立方值。自己设计一个函数计算并打印立方值。main()函数要把用户输入的值传递给该函数。

    1. #include
    2. void lifang(double n);
    3. int main(void)
    4. {
    5. double num;
    6. scanf("%lf",&num);
    7. lifang(num);
    8. return 0;
    9. }
    10. void lifang(double n)
    11. {
    12. double lifang_n;
    13. lifang_n=n*n*n;
    14. printf("该数的立方值为:%lf",lifang_n);
    15. }


    8.编写一个程序,显示求模运算的结果。把用户输入的第1个整数作为求模运算符的第2个运算对象,该数在运算过程中保持不变。用户后面输入的数是第1个运算对象。当用户输入一个非正值时,

    1. #include <stdio.h>
    2. int main(void)
    3. {
    4. int n1, n2, n3;
    5. printf("请输入两个整数:");
    6. scanf("%d %d", &n1, &n2);
    7. while (n1 > 0 & n2 > 0)
    8. {
    9. n3 = n2 % n1;
    10. printf("求模运算结果为:%d %% %d = %d\n", n2, n1, n3);
    11. printf("请输入两个整数:");
    12. scanf("%d %d", &n1, &n2);
    13. }
    14. printf("Error!");
    15. return 0;
    16. }

    9. 编写一个程序,要求用户输入一个华氏温度。程序应读取double类型的值作为温度值,并把该值
    作为参数传递给一个用户自定义的函数Temperatures()。该函数计算摄氏温度和开氏温度,并以小数点后面两位数字的精度显示3种温度。要使用不同的温标来表示这3个温度值。下面是华氏温度转摄氏温度的公式:
    摄氏温度=5.0/9.0*(华氏温度-32.0)
    开氏温标常用于科学研究,0 表示绝对零,代表最低的温度。下面是摄氏温度转开氏温度的公式:
    开氏温度=摄氏温度+273.16
    Temperatures()函数中用const 创建温度转换中使用的变量。在main()函数中使用一个循环让用户重复输入温度,当用户输入q或其他非数字时,循环结束。scanf()函数返回读取数据的数量,所以如果读取数字则返回1,如果读取q则不返回1。可以使用—运算符将scanf()的返回值和1作比较,测试两值是否相等。

    1. #include
    2. void Temperatures(double fahrenheit);
    3. int main(void)
    4. {
    5. double temp_fahrenheit;
    6. printf("请输入一个华氏温度:");
    7. while (scanf("%lf", &temp_fahrenheit) == 1)
    8. {
    9. Temperatures(temp_fahrenheit);
    10. printf("请输入一个华氏温度:");
    11. }
    12. printf("Done!");
    13. getchar();
    14. getchar();
    15. return 0;
    16. }
    17. void Temperatures(double fahrenheit)
    18. {
    19. const double a = 1.8, b = 32.0, c = 273.16;
    20. double centigrade, kelvin;
    21. centigrade = a * (fahrenheit - b);
    22. kelvin = centigrade + c;
    23. printf("华氏温度为:%.2lf, 对应的摄氏温度为:%.2lf, 开氏温度:%.2lf\n", fahrenheit, centigrade, kelvin);
    24. }


  • 相关阅读:
    关于毕业答辩PPT制作与提问环节
    Netty,Tcp,socket的java框架,netty学习
    背课文记单词,读课文记单词,读文章记单词;40篇文章搞定3500词;71篇文章突破中考单词;15篇文章贯通四级词汇;15篇文章贯通六级词汇
    电脑重装系统后鼠标动不了该怎么解决
    从0搭建新项目平台后台测试环境
    SpringBoot项目中实现MySQL读写分离
    Microsoft Visual Studio 2019下载及安装流程记录
    TensorFlow入门(十、共享变量)
    UG NX二次开发(C#)-外部模式-导出dwg格式的文件
    Windows10解锁新功能,智能释放C盘,更改系统默认存储位置
  • 原文地址:https://blog.csdn.net/weixin_62428401/article/details/136516355