C程序设计(第五版 谭浩强著)再学习第四章

本文展示了多个C语言编程实例,包括求解二次方程、比较实数、按升序排列三个数、字符大小写转换、根据条件赋值、使用switch语句处理考试成绩和操作选择、判断闰年以及计算平方根等。这些实例主要涉及基础的输入输出、数学运算和条件逻辑控制。
摘要由CSDN通过智能技术生成

例题4-1

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

double a = 0, b = 0, c = 0;
double deta = 0;
double x1 = 0, x2 = 0;
int main(void)
{
	printf("请输入a、b、c\n");
	scanf("%lf%lf%lf", &a, &b, &c);
	deta = b * b - 4 * a * c;
	if (deta < 0)
		printf("此方程无实根\n");
	else
	{
		x1 = (-b + sqrt(deta)) / (2 * a);
		x2 = (-b - sqrt(deta)) / (2 * a);
		printf("x1 = %7.2f,x2 = %7.2f", x1, x2);
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述

例题4-2 输入两个实数,按由小到大的顺序输出这两个数。

#include <stdio.h>
//由题意知,输入的两个数是实数,所以代码这里定义为float类型。
float a = 0;
float b = 0;
float max = 0;
float min = 0;
int main(void)
{
	printf("请输入两个数a和b\n");
	scanf("%f%f", &a, &b);
	if (a > b)
	{
		max = a;
		min = b;
	}
	else if(a < b)
	{
		max = b;
		min = a;
	}
	else
	{
		max = a;
		min = b;
	}
	printf("min = %5.2f\n", min);
	printf("max = %5.2f", max);
	return 0;
}

在这里插入图片描述

例题4-3 输入3个数a、b、c,要求按由小到大的顺序输出。

#include <stdio.h>
//由题意知,输入的两个数是实数,所以代码这里定义为float类型。
float a = 0;
float b = 0;
float c = 0;
float bottle = 0;
int main(void)
{
	printf("输入三个数a、b、c\n");//                    a  b   c
	scanf("%f%f%f", &a, &b, &c);  //冒泡排序法   例如:-5  1  -6
	if (a > b)
	{
		bottle = a;
		a = b;
		b = bottle;
	}
	if (b > c)
	{
		bottle = b;
		b = c;
		c = bottle;
	}
	if (a > b)  //this is very important
	{
		bottle = a;
		a = b;
		b = bottle;
	}
	printf("三个数从小到大为%5.2f,%5.2f,%5.2f", a, b, c);
	return 0;
}

在这里插入图片描述
例题4-4 输入一个字符,判别他是否为大写字母,如果是,将它转换为小写字母。如果不是,不转换,然后输出最后得到的字符。

#include <stdio.h>

char a = 0;
int main(void)
{
	printf("请输入一个字符\n");
	//A ascii 65
	//a ascii 97
	scanf("%c", &a);
	/*if ('A' <a < 'Z')  //方法1
	{
		a = a + 32;
	}*/
	a = (a >= 'A' && a <= 'Z') ? (a + 32) : a;   //方法2
	printf("字符为%c\n", a);
	return 0;
}

在这里插入图片描述
在这里插入图片描述

之后的程序讲解主要是程序思路讲解加程序代码的编写。

例题4-5
在这里插入图片描述
在这里插入图片描述
思路:本题目可以用if-else if-else的语句来实现。当然也可以使用if-else语句,这个时候需要进行if语句的嵌套。

方法1

#include <stdio.h>
float x;
int y;
int main(void)
{
	printf("请输入x的值\n");
	scanf("%f", &x);
	if (x < 0)
		y = -1;
	else if (x == 0)
		y = 0;
	else
		y = 1;
	printf("输出的y的值y=%d", y);
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法2

#include <stdio.h>
float x;
int y;
int main(void)
{
	printf("请输入x的值\n");
	scanf("%f", &x);
	if (x < 0)
		y = -1;
	else
	{
		if (x == 0)
			y = 0;
		else
			y = 1;
	}
	printf("输出的y的值y=%d", y);
	return 0;
}

或者

float x;
int y;
int main(void)
{
	printf("请输入x的值\n");
	scanf("%f", &x);
	if (x < 0)
		y = -1;
	else
	{
		y = 1;
		if (x == 0) y = 0;
	}
	printf("输出的y的值y=%d", y);
	return 0;
}

例题4-6
在这里插入图片描述
本题建议用switch方法来实现,最重要的一点当然是switch要了熟于心呀。下图是需要用到的函数,需要注意的是其中的表达式值得类型可以为整型和字符型。
在这里插入图片描述

#include <stdio.h>

char grade;
int main(void)
{
	printf("请输入考试成绩等级\n");
	scanf("%c", &grade);
	switch (grade)
	{
		case 'A': printf("your score is 85 ~ 100\n"); break;
		case 'B': printf("your score is 70 ~ 84\n"); break;
		case 'C': printf("your score is 60 ~ 69\n"); break;
		case 'D': printf("your score is 0  ~ 60\n"); break;
		default : printf("message error,please type your grade again!\n");
	}
	return 0;
}

例题4-7
在这里插入图片描述
思路:本题依然需要使用switch语句,需要注意得是当满足’A’或’a’的时候均会执行A操作(这里的A操作可以任意,比如打印或者运行函数等等)。

#include <stdio.h>
char action;
int a = 5, b = 2;
void action1(int a, int b);
void action2(int a, int b);
int main(void)
{
	//printf("请输出你的操作,输入A或a,可以执行加法操作,输入B或b,可以执行乘法操作\n");
	printf("please type your action code\n");
	printf("if you type A or a,this program will preform add action\n");
	printf("if you type B or b,this program will preform multiply action\n");
	action = getchar();
	switch (action)
	{
	    case 'A':
		case 'a': action1(a,b); break;
		case 'B':
		case 'b': action2(a,b); break;
		default: printf("message error,please type again");
	}
	return 0;
}
void action1(int a, int b)
{
	printf("a + b = %d", a + b);
}
void action2(int a, int b)
{
	printf("a * b = %d", a * b);
}

例题4-8
在这里插入图片描述

#include <stdio.h>
int year = 0;
int leap = 0;
//leap = 1 是闰年
//leap = 0 不是闰年
//年份能被4整除,不能被100整除。 例如:2004
//年份能被400整除。 例如:2400
int main(void)
{
	printf("please type year\n");
	scanf("%d", &year);
	if (year % 4 == 0)   //%表示求余
	{
		if (year % 100 == 0)
		{
			if (year % 400 == 0) 
			{
				leap = 1;
			}
			else
			{
				leap = 0;
			}
		}
		else
		{
			leap = 1;
		}
	}
	else
	{
		leap = 0;
	}
	printf("leap = %d\n", leap);
	if (leap)
		printf("%d is leap year\n", year);
	else
		printf("%d is not leap year\n", year);
	return 0;
}

在这里插入图片描述
在这里插入图片描述
例题4-9
在这里插入图片描述

//变量为double,我们一般定义为double类型
#include <stdio.h>
#include <math.h>
//数值初始化
double a = 0.0, b = 0.0, c = 0.0;
double deta = 0.0;
double x1 = 0.0, x2 = 0.0;
double real = 0.0, unreal = 0.0;
//这里需要考虑三种情况,deta = 0,deta >0,deta <0
int main(void)
{
	printf("please type a value and b value and c value\n");
	scanf("%lf%lf%lf", &a, &b, &c);
	deta = b * b - 4 * a * c;
	if (fabs(a) <= 1e-6)
	{
		printf("function come arcoss error");
	}
	else
	{
		if (fabs(deta) <= 1e-6)
		{
			x1 = x2 = -b / (2 * a);
			printf("x1 = %f,x2 = %f\n", x1, x2);
		}
		else if (deta > 1e-6)
		{
			x1 = (-b + sqrt(deta)) / (2.0 * a);
			x2 = (-b - sqrt(deta)) / (2.0 * a);
			printf("x1 = %f,x2 = %f\n", x1, x2);
		}
		else if (deta < 1e-6)
		{
			real = -b / (2.0 * a);
			unreal = sqrt(-deta) / (2.0 * a);
			printf("x1 = %f + %fi,x2 = %f - %fi\n", real, unreal, real, unreal);
		}
	}
		return 0;
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
例题4-10
在这里插入图片描述

#include <stdio.h>
//每吨每千米货物基本运费为p(price),货物重w(weight),距离为s(distance),折扣为d(discount),总运费为f(freight)
//f = p*w*s*(1-d)
int s = 0,c = 0;
double p, w, f, d;
int main(void)
{
	printf("please enter price,weight,distance\n");
	scanf("%lf%lf%d", &p,&w,&s);
	if (s >= 3000)
		d = 15;
	else
	{
		c = s / 250;
		switch (c)
		{
			case 0: d = 0; break;
			case 1: d = 2; break;
			case 2:
			case 3: d = 5; break;
			case 4:
			case 5:
			case 6:
			case 7: d = 8; break;
			case 8:
			case 9:
			case 10:
			case 11: d = 10; break;
		}
	}
	f = p * w * s * (1 - d/100);
	printf("f = %10.2f", f);
	return 0;
}

在这里插入图片描述
习题4-3
在这里插入图片描述

#include <stdio.h>
int a = 3, b = 4, c = 5;
int x = 0, y = 0;
int value1 = 0, value2 = 0, value3 = 0, value4 = 0,value5 = 0;
int main(void)
{
	value1 = a + b > c && b == c;  
	//3+4>5 && 4 == 5
	//先计算3+4为7 -->7>5 && 4 == 5
	//接着计算7>5为1 -->1 && 4 == 5
	//接着计算4 == 5为0   --> 1 && 0 == 0
	printf("value1= %d\n", value1);
	value2 = a || b + c && b - c; 
	//3||4+5 && 4-5
	//先计算4+5为9 --> 3||9 && 4-5
	//接着计算9 && 4为1 -->3||1-5
	//接着计算1-5为-4   --> 3||-4 == 1
	printf("value2= %d\n", value2);
	value3 = !(a > b) && !c||1;
	//!(3>4) && !5 ||1
	//先计算3>4为0 --> !0 && !5 ||1
	//接着计算!0为1 --> 1 && !5 ||1
	//接着计算!5为0 --> 1 && 0 ||1
	//接着计算 1 && 0为0   --> 0||1 == 1
	printf("value3= %d\n", value3);

	value4 = !(a + b) + c - 1 && b + c / 2;
	//!(3+4)+5 -1 && 4 + 5/2
	//先计算3+4为7 --> !7+5 -1 && 4 + 5/2
	//接着计算!7为0 --> 0+5 -1 && 4 + 5/2
	//接着计算0+5为5 --> 5 -1 && 4 + 5/2
	//接着计算5 -1为4 --> 4 && 4 + 5/2
	//接着计算5/2为2 --> 4 && 4 + 2 
	//接着计算 4 + 2为6   -->4 && 6  == 1
	printf("value4= %d\n", value4);
	value5 = !(x=a)&& (y = b)&& 0;
	//!(x=3) && (y=4) && 0
	//先计算x=3为3 --> !3 && (y=4) && 0
	//接着计算y=4为4 --> !3 && 4 && 0
	//接着计算!3为0 --> 0 && 4 && 0 = 0
	printf("value5= %d\n", value5);
	return 0;
}

在这里插入图片描述
习题4-4
在这里插入图片描述

#include <stdio.h>
int a = 0, b = 0, c = 0;
int a1 = 0, b1 = 0, c1 = 0;
int bottle = 0;
int main(void)
{
	printf("please type a's value and b's value and c's value\n");
	scanf("%d%d%d", &a, &b, &c);
	a1 = a;
	b1 = b;
	c1 = c;
	if (a1 > b1)
	{
		bottle = b1;
		b1 = a1;
		a1 = bottle;
	}
	if (b1 > c1)
	{
		bottle = c1;
		c1 = b1;
		b1 = bottle;
	}
	printf("max = %d", c1);
	return 0;
}

在这里插入图片描述
习题4-5
从键盘输入一个小于1000的正数,要求输出它的平方根(如果平方根不是整数,则输出其整数。要求在输入数据后先对其进行检查是否小于1000的正数,若不是,则要求重新输入。

#include <stdio.h>
#include <math.h>
int a = 0;
int value = 0;
double value_f = 0.0;
int main(void)
{
	scanf("%d", &a);
	if (a >= 1000)
		printf("the value is over 1000,you should type again");
	else
	{
		value_f = sqrt(a);
		printf("value_f = %f\n", value_f);
		value = (int)(sqrt(a));
		printf("value = %d\n", value);
	}
	return 0;
}

在这里插入图片描述
习题4-6
在这里插入图片描述

#include <stdio.h>

double x = 0.0, y = 0.0;
int main(void)
{
	scanf("%lf",&x);
	if (x < 1)
		y = x;
	else if(x>=1 && x<10)
		y = 2 * x;
	else
		y = 3 * x - 11;	
	printf("x = %5.2f,y = %5.2f", x, y);
	return 0;
}

在这里插入图片描述
在这里插入图片描述
习题4-7
在这里插入图片描述
第一个代码缺少一对括号。
在这里插入图片描述
第二个代码缺少一对括号。
在这里插入图片描述
习题4-8
在这里插入图片描述

#include <stdio.h>
char grade = 0;
int main(void)
{
	printf("please type your grade\n");
	grade = getchar();
	switch (grade)
	{
		case 'A': printf(">=90"); break;
		case 'B': printf("80~89"); break;
		case 'C': printf("70~79"); break;
		case 'D': printf("60~69"); break;
		case 'E': printf("<60"); break;
		default: printf("please type correct grade"); break;
	}
	return 0;
}

习题4-9
在这里插入图片描述
本题写的不是很完美,要求的功能是有的,待优化。

#include <stdio.h>
int number = 0;
int len = 0;
//for example 23456
int main(void)
{
	printf("please type a number\n");
	scanf("%d", &number);
	printf("the number is %d\n", number);
	if (number / 10000 == 0)
		printf("please type correct number that compatible with the program\n");
	else
	{
		if (number / 10000 != 0)
		{
			len = 5;
	
		}
		if (number / 100000 != 0)
		{
			len = 6;
		}
		if (len == 5)
		{
			printf("len = %d\n", len);
			printf("%d,%d,%d,%d,%d\n", number / 10000, (number / 1000) % 10, (number / 100) % 10, (number / 10) % 10, number % 10);
			printf("%d%d%d%d%d\n", number % 10, (number / 10) % 10, (number / 100) % 10, (number / 1000) % 10, number / 10000);
		}
		if (len == 6)
		{
			printf("len = %d\n", len);
			printf("%d,%d,%d,%d,%d,%d\n", number / 100000, (number / 10000) % 10, (number / 1000) % 10, (number / 100) % 10, (number / 10) % 10, number % 10);
			printf("%d%d%d%d%d%d\n", number % 10, (number / 10) % 10, (number / 100) % 10, (number / 1000) % 10, (number / 10000) % 10, number / 100000);
		}
	}
	return 0;
}

在这里插入图片描述
在这里插入图片描述
注意:习题4-10、习题4-11这里不做证明。
习题4-12
在这里插入图片描述
在这里插入图片描述

#include <stdio.h>

double x = 0.0, y = 0.0;
int height = 0;
int main(void)
{
	printf("please type x value and y value\n");
	scanf("%lf%lf", &x, &y);
	height = 0;
	if ((x - 2) * (x - 2) + (y - 2) * (y - 2) <= 1)
		height = 10;
	else if ((x + 2) * (x + 2) + (y - 2) * (y - 2) <= 1)
		height = 10;
	else if ((x - 2) * (x - 2) + (y + 2) * (y + 2) <= 1)
		height = 10;
	else if ((x + 2) * (x + 2) + (y + 2) * (y + 2) <= 1)
		height = 10;
	else
	{ }
	printf("x = %f,y = %f,height = %d",x,y,height);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值