0
点赞
收藏
分享

微信扫一扫

LVS负载均衡集群基础概念

Sophia的玲珑阁 03-11 23:30 阅读 2

文章目录

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


一.带参数的函数


#include<stdio.h>
void pound(int n);	//ASC函数原型声明
int main()
{
	int times=5;
	char ch='!';	//ASCⅡ码是33
	float f=6.0f;
	
	pound(times);	//int类型的参数
	pound(ch);		
	pound(f);
	return 0;
}

void pound(int n)
{
	while(n-->0)
	printf("#");
	printf("\n");
}

        如果函数不接受任何参数,函数头的圆括号应该写上关键字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的值才停止循环。

#include<stdio.h>
#define TIME 60;
int main()
{
	int min,hour;
	printf("请输入分钟数:\n");
	scanf("%d",&min);
	while(min>0)	//不可写成<=
	{
		
		hour=min/TIME;
		min=min%TIME;
		printf("转换为%d小时,%d分钟\n",hour,min);
		printf("请输入分钟数:\n");
		scanf("%d",&min);
	}

}


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

#include<stdio.h>
int main()
{
	int num,sum;
	scanf("%d",&num);
	sum=num+11;
	while(num<sum)
	{
		printf("%d ",num++);
	}
	return 0;
}


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

#include<stdio.h>
#define DAY 7;
int main()
{
	int day,week,days;
	printf("请输入天数:");
	scanf("%d",&day);
	while(day>0)
	{
		week=day/DAY;
		days=day%DAY;
		printf("%d days are %d weeks,%d days\n",day,week,days);
		printf("请输入天数:");
		scanf("%d",&day);
	}
	return 0;
}

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


#include <stdio.h>
#define CM_to_INCH 2.54
#define CM_to_FEET 30.48
int main(void)
{
  float height, inch;
  int feet;

  printf("请输入一个身高(厘米):");
  scanf("%f", &height);
  while (height > 0){
    feet = height / CM_to_FEET;
    inch = (height - feet * CM_to_FEET) / CM_to_INCH;
    printf("%.2f cm = %d feet, %.2f inches\n", height, feet, inch);
    printf("请输入一个身高(厘米):");
    scanf("%f", &height);
  }
  return 0;
}

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

#include <stdio.h>
int main(void)
{
  int i = 1, count = 0, sum = 0;

  while (i<21)
  {
    printf("请输入您第 %d 天的收入:", i);
    scanf("%d", &count);
    sum = sum + count;
    i++;
  }
  printf("这20天的总收入为:%d元\n", sum);

  return 0;
}

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

#include <stdio.h>
int main(void)
{
  int i = 1, count = 0, sum = 0;

  while (i<21)
  {
  	count=i*i;
    printf("请输入您第 %d 天的收入:%d元\n", i,count);
    sum = sum + count;
    i++;
  }
  printf("这20天的总收入为:%d元\n", sum);

  return 0;
}

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

#include <stdio.h>
void lifang(double n);
int main(void)
{
	double num;
	scanf("%lf",&num);
	lifang(num);
	return 0;
}
void lifang(double n)
{
	double lifang_n;
	lifang_n=n*n*n;
	printf("该数的立方值为:%lf",lifang_n);
}


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

#include <stdio.h>
int main(void)
{
  int n1, n2, n3;

  printf("请输入两个整数:");
  scanf("%d %d", &n1, &n2);
  while (n1 > 0 & n2 > 0)
  {
    n3 = n2 % n1;
    printf("求模运算结果为:%d %% %d = %d\n", n2, n1, n3);
    printf("请输入两个整数:");
    scanf("%d %d", &n1, &n2);
  }
  printf("Error!");

  return 0;
}

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

#include <stdio.h>
void Temperatures(double fahrenheit);
int main(void)
{
  double temp_fahrenheit;

  printf("请输入一个华氏温度:");
  while (scanf("%lf", &temp_fahrenheit) == 1)
  {
    Temperatures(temp_fahrenheit);
    printf("请输入一个华氏温度:");
  }
  printf("Done!");
  getchar();
  getchar();
  return 0;
}
void Temperatures(double fahrenheit)
{
  const double a = 1.8, b = 32.0, c = 273.16;
  double centigrade, kelvin;
  centigrade = a * (fahrenheit - b);
  kelvin = centigrade + c;
  printf("华氏温度为:%.2lf, 对应的摄氏温度为:%.2lf, 开氏温度:%.2lf\n", fahrenheit, centigrade, kelvin);
}


举报

相关推荐

0 条评论