【回顾题型进展】

两日做题记录

计算阶乘和:

(形参 实参❕)

#include <stdio.h>
double fact(int n);
int main()
{
	int i, n;
	int sum;
	printf("");
	scanf_s("%d", &n);
	sum = 0;

	for (i = 1; i <= n; i++)
	{
		sum = sum + fact(i);
	}

	printf("%d", sum);

	return 0;
}


double fact(int n)
{
	int i;
	int result;
	if (n < 0)
	{
		return 0;
	}
	result = 1;

	for (i = 1; i <= n; i++)
	{
		result = result * i;

	}
	return result;
}

二分段函数(保留小数):

#include <stdio.h>
int main```()
{
	double  x, y;
	printf("Enter x(x>=0):");
	scanf("%lf", &x);

	if (x <= 15)
	{
		y = 4 * x / 3;

	}
	else if(x > 15)
	{
		y = 2.5 * x - 10.5;
	}
	printf("y=%.2f\n",y);

	return 0;
}

在这里插入图片描述

坚持的力量:

(在 C 语言中,表达式 result = initial * (1 + factor)^day 的计算需要注意的是,C 语言中并没有直接的幂运算符(如 ^)。相反,你应该使用 math.h 库中的 pow 函数来计算幂)

#include <stdio.h>
#include <math.h>
int main()
{
	int day, initial;
	double factor, result;

	
	scanf("%d %lf %d", &initial, &factor, &day);

	result = initial * pow((1 + factor), day);

	printf("%.2lf\n", result);

	return 0;
}

Hello world!:

(attention空格的输入)

#include <stdio.h>
int main()
{
	char input;
	scanf("%c",&input);
	printf("Hello World!");
	return 0;
}

求五边形面积:

(使用的变量名没影响 主要要一一对应)

#include <stdio.h>
#include <math.h>

int main()
{
	double a1, a2, a3, a4, a5, a6, a7, s;
	double area(double x, double y, double z);

	scanf_s("%lf %lf %lf %lf %lf %lf %lf", &a1, &a2, &a3, &a4, &a5, &a6, &a7);
	s = area(a1,a5,a6) + area(a2, a3, a7) + area(a4, a6, a7);
	printf("%.2f\n", s);

	return 0;
}

double area(double x, double y, double z)
{
	double p = (x + y + z) / 2;
	return sqrt(p * (p - x) * (p - y) * (p - z));

}
    1. 函数放在主函数外:函数放在主函数外是最常见的做法,可以在主函数之前或之后定义函数。
    1. 函数放在主函数内:在 C 语言中,函数不能真正地在主函数内部定义。只能在主函数内部定义函数指针或使用 lambda 表达式在 C++ 中,在 C 中,所有函数都必须在主函数外部定义。
主函数内声明

如果你在主函数内部声明一个函数,编译器只会在主函数的作用域内识别这个声明。通常情况下,这种做法不是最佳实践,因为函数通常被设计为可以被多个函数调用,放在主函数内会限制它的可见性。

主函数外声明

在主函数外部声明 area() 函数是更常见的做法,尤其是当你希望在多个函数之间共享这个函数时。这样,任何函数都可以在其定义之前调用 area() 函数。

可见性: 在主函数外部声明 area() 函数使得它在整个文件中可见,而不仅仅是在主函数内部。这是更好的做法,因为它允许其他函数调用 area(),提高了代码的重用性和模块化。
最佳实践: 将函数声明放在文件的顶部(在 main() 函数之前)是 C 语言的最佳实践。这使得代码更清晰,便于阅读和维护。
编译器要求: 如果你在主函数内部声明 area(),你可以在主函数内调用它,但如果你在其他函数中调用 area(),编译器将报错,因为它在这些函数内不可见。

华氏摄氏温度转换:

#include <stdio.h>
int main()
{
    int fahr, lower, upper;
    double celsius;

    scanf_s("%d",&lower);
    scanf_s("%d", &upper);

    if (lower <= upper)
    {
        for (fahr = lower; fahr <= upper; fahr++)
        {
            celsius = (5.0 / 9) * (fahr - 32);
            printf("%d %6.1f\n", fahr, celsius);
        }
    }
    else
    {
        printf("Invalid Value!");

    }

    return 0;
}

6:这是字段宽度,表示输出的总宽度为6个字符。如果生成的数字(包括小数点和小数部分)少于6个字符,输出将会在左侧填充空格以满足宽度。如果数字的字符数超过6个,则会根据实际字符数输出,不会截断。

在编程中,给变量赋初值是一个重要的良好实践,尤其是在以下情况下:

  1. 未初始化变量的使用
    未初始化的变量在使用时会包含随机值,这可能导致程序的不确定行为或错误结果。因此,始终应在使用变量之前给它们赋初值。

  2. 计数器和累加器
    计数器(如 for 循环的索引)通常应初始化为 0 或 1。
    累加器(如用于计算总和的变量)通常应初始化为 0,以便在开始累加时没有旧值的干扰。

  3. 条件判断
    在条件判断中,初始化变量可以确保逻辑的正确性。例如,在使用 if 语句之前,确保变量的初始状态是明确的。

  4. 避免未定义行为
    某些语言(如 C/C++)不自动初始化局部变量。如果在使用这些变量之前没有赋值,程序可能会出现未定义行为,导致错误或崩溃。

  5. 提高代码可读性
    给变量赋初值可以帮助其他开发者(或自己在未来)更容易理解代码的意图。例如,看到一个变量被初始化为特定值,可以清楚地知道它在逻辑上的起始状态。

  6. 默认值
    在某些情况下,给变量赋一个“默认值”是有意义的。例如,在计算之前,可能希望某个变量具有一个特定的起始值(如 -1 表示“未计算”或 NULL 表示“无值”)。

  7. 防止逻辑错误
    在某些情况下,如果不对变量进行初始化,可能会导致逻辑错误。例如,在一个循环中,期望的结果可能依赖于某个变量的初始值。

阶乘:

#include <stdio.h>
int main(void)
{
	int i;
	int n;
	double product = 1;
	scanf_s("%d", &n);
	for (i = 1; i <= n; i++)
	{
		product = product * i;
		
	}
	printf("%.0f\n", product);
	return 0;
}
#include <stdio.h>
int main()
{
	int flag = 1;
	int i, denominator;
	double n, result, sum, pi;

	denominator = 1;
	result = 1;//因为刚开始其值就为1!!!!!!!!
	sum = 0;
	pi = 0;
	scanf_s("%lf", &n);
	for (i = 1; i <= n; i++)
	{
		sum += result;
		flag = -flag;
		denominator += 2;
		result = flag * (1.0 / denominator);
	}
	pi = 4 * sum;
	printf("%.4f\n", pi);
	printf("%d",n);
	return 0;
}

阶乘表:

#include <stdio.h>
double fact(int n);
int main()
{
    int i, n;
    double result = 1;
    scanf_s("%d", &n);

    for (i = 0; i <= n; i++)
    {
        result *= fact(i);
        
    }
    

}


double fact(int n)
{
    int i;
    double factor;
    factor = 1;
    
        for (i = 1; i <= n; i++)
        {
            factor *= i;
        }
        printf("%d! = %.0f\n", n, factor);
        return factor;
}

输入平面上任意三个点的坐标(x1,y1)、(x2,y2)、(x3,y3),检验它们能否构成三角形。如果这3个点能构成一个三角形,输出周长和面积(保留2位小数);否则,输出“Impossible”:


#include <stdio.h>
#include <math.h>
int main()
{
	int x1, y1;
	int x2, y2;
	int x3, y3;
	double pile1,pile2,pile3,perimeter,mid,area;

	
	scanf_s("%d,%d %d,%d %d,%d", &x1, &y1, &x2, &y2, &x3, &y3);

	pile1 = (sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)));
	pile2 = (sqrt((x3 - x2) * (x3 - x2) + (y3 - y2) * (y3 - y2)));
	pile3 = (sqrt((x1 - x3) * (x1 - x3) + (y1 - y3) * (y1 - y3)));
	if (((pile1 + pile2) > pile3) || ((pile1 + pile3) > pile2) || ((pile2 + pile3) > pile1))
	{
		perimeter = pile1 + pile2 + pile3;
		mid = perimeter / 2;

		area = sqrt(mid * (mid - pile1) * (mid - pile2) * (mid - pile3));
		printf("%.2f %.2f\n", perimeter, area);

	}
	else
	{
		printf("Impossible\n");
	}

	return 0;
	
}

查询自动贩卖机中商品的价格

假设你的代码是这样的:

scanf("%d", &choice); // 只在循环开始前读取一次

for (i = 1; i <= 5; i++) {
    // 这里不会再次读取 choice
    // 处理 choice 的逻辑
}

在这个例子中,用户在第一次输入 choice 后,程序会进入 for 循环,但不会再次询问用户输入新的选择。所有的迭代都会使用第一次的选择。

for (i = 1; i <= 5; i++) {
    printf("请输入选择 (0 退出): ");
    scanf("%d", &choice); // 在每次循环中读取新的 choice

    if (choice == 0) {
        break; // 如果选择为 0,退出循环
    }

    // 处理 choice 的逻辑
}

修正后的代码
为了让用户在每次循环中都能输入新的 choice,你需要将 scanf 放在 for 循环内部。这样,在每次迭代中,程序都会询问用户输入新的选择。

#include <stdio.h>
int main()
{
  int i,n;
  double price;
  
  while(1)
  {
    scanf("%d",&n);
 
    if(n==0)
    {
      printf("Thanks\n");
      break;
    }
    else
    {
      switch(n)
      {
        case 1:
		price=3.0;
		printf("%.1f",price);
		break;
        case 2:
		price=2.5;
		printf("%.1f",price);
		break;
        case 3:price=4.0;
		printf("%.1f",price);
		break;
        case 4:
		price=3.5;
		printf("%.1f",price);
		break;
       default:break;
      }
      
    }
  }
   return 0; 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值