C语言练习|PTA题目集《C语言程序设计实验与习题指导(第3版)》

这里是一个刚入门计算机、跨专业小白的上机练习记录。
题目集按函数和编程分的,我这里按标号来记录。

实验1

实验1-1 Hello World! (5分)

本题要求编写程序,输出一个短句“Hello World!”。

输入格式:
本题目没有输入。

输出格式:
在一行中输出短句“Hello World!”。

代码长度限制:16 KB
时间限制:400 ms
内存限制:64 MB

#include <stdio.h>
int main()
{
    printf("Hello World!");
        return 0;
}

笔记 :这里不用 return 0; 也符合输出格式,它表示程序结束正常退出,非常简单的程序里可以不写。

实验1-2 Welcome to You! (5分)

本题要求编写程序,输出一个短句“Welcome to You!”。

输入格式:
本题目没有输入。

输出格式:
在一行中输出短句“Welcome to You!”。

#include <stdio.h>
int main()
{
    printf("Welcome to You!");
    return 0;
}

实验1-3 Programming in C is fun! (5分)

本题要求编写程序,输出一个短句“Programming in C is fun!”。

输入格式:
本题目没有输入。

输出格式:
在一行中输出短句“Programming in C is fun!”。

#include <stdio.h> 
int main()
{
	printf("Programming in C is fun!");
    return 0;
} 

实验1-4 输出三角形 (5分)

本题要求编写程序,输出指定的由“*”组成的三角图案。

输入格式:
本题无输入

输出格式:
按照下列格式输出由“*”组成的三角图案。
在这里插入图片描述

#include <stdio.h>
int main()
{
	printf("****\n");
    printf("***\n");
    printf("**\n");
    printf("*\n");
}

笔记 :这里也可以只用一句printf()表达。

实验1-5 输出菱形图案 (5分)

本题要求编写程序,输出指定的由“A”组成的菱形图案。

输入格式:
本题无输入

输出格式:
输出由“A”组成的菱形图案。
在这里插入图片描述

#include <stdio.h>
int main()
{
	printf("  A\n");
    printf("A   A\n");
    printf("  A\n");
}

实验1-6 输出带框文字 (5分)

本题要求编写程序,输出指定的带框文字。

输入格式:
本题无输入

输出格式:
按照下列格式输出带框文字。
在这里插入图片描述

#include <stdio.h>
int main()
{
	printf("************\n  Welcome\n************\n");
}

实验1-7 What is a computer? (5分)

本题要求编写程序,输出一个短句“What is a computer?”。

输入格式:
本题目没有输入。

输出格式:
在一行中输出短句“What is a computer?”。

#include <stdio.h>
int main()
{
	printf("What is a computer?");
}

实验1-8 输出倒三角图案 (5分)

本题要求编写程序,输出指定的由“*”组成的倒三角图案。

输入格式:
本题目没有输入。

输出格式:
按照下列格式输出由“*”组成的倒三角图案。
在这里插入图片描述

#include <stdio.h>
int main()
{
	printf("* * * *\n * * *\n  * *\n   *\n");
}

笔记 :上机要注意输出和要求的输出格式是否完全一致,比如空格的数量。

实验2

实验2-1-1 计算摄氏温度 (5分)

本题要求编写程序,计算华氏温度100°F对应的摄氏温度。计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。

输入格式:
本题目没有输入。

输出格式:
fahr = 100, celsius = 计算所得摄氏温度的整数值

#include <stdio.h>
int main()
{
	int celsius,fahr;
	fahr=100;
	celsius=5*(fahr-32)/9;
	printf("fahr = 100, celsius = %d\n",celsius);
}

笔记 :这里因为输出的时候忘了一些空格,修改了三次才找到格式错误原因。

实验2-1-2 温度转换 (5分)

本题要求编写程序,计算华氏温度150°F对应的摄氏温度。计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。

输入格式:
本题目没有输入。

输出格式:
fahr = 150, celsius = 计算所得摄氏温度的整数值

#include <stdio.h>
int main()
{
	int celsius,fahr;
	fahr=150;
	celsius=5*(fahr-32)/9;
	printf("fahr = %d, celsius = %d",fahr,celsius);
}

实验2-1-3 计算物体自由下落的距离 (5分)

一个物体从100米的高空自由落下。编写程序,求它在前3秒内下落的垂直距离。设重力加速度为10米/秒^2。

输入格式:
本题目没有输入。

输出格式:
height = 垂直距离值(结果保留2位小数)

#include<stdio.h>
int main()
{
	int g=10;
	int t=3;
	float height;
	
	height=0.5*g*t*t;

    printf("height = %.2f", height);
    return 0;
}

实验2-1-4 计算平均分 (5分)

已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均成绩(结果按整型输出)。

输入格式:
本题无输入

输出格式:
按照下列格式输出结果:
math = 87, eng = 72, comp = 93, average = 计算所得的平均成绩

#include <stdio.h>
int main()
{
	int math=87;
	int eng=72;
	int comp=93;
	int average;
	average=(math+eng+comp)/3;
	printf("math = 87, eng = 72, comp = 93, average = %d", average);
}

(有时候找不到错误在哪,重新敲一遍就过了)

实验2-1-5 将x的平方赋值给y (5分)

假设x的值为3,计算x的平方并赋值给y,分别以“y = x ∗ x”和“x ∗ x = y”的形式输出x和y的值。

输入格式:
本题无输入

输出格式:
按照下列格式输出代入x=3的结果:
y = x * x
x * x = y

#include <stdio.h>
int main()
{
	int x=3;
	int y;
	y=x*x;
	printf("%d = %d * %d\n", y,x,x); 
	printf("%d * %d = %d", x,x,y);
}

实验2-1-6 计算华氏温度 (5分)

本题要求编写程序,计算摄氏温度26°C 对应的华氏温度。计算公式:F=9×C/5+32,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型。

输入格式:
本题目没有输入。

输出格式:
celsius = 26, fahr = 对应的华氏温度整数值

#include <stdio.h>
int main()
{
	int celsius=26;
	int fahr;
	fahr=9*celsius/5+32;
	printf("celsius = 26, fahr = %d", fahr);
}

实验2-1-7 整数152的各位数字 (10分)

本题要求编写程序,输出整数152的个位数字、十位数字和百位数字的值。

输入格式:
本题无输入。

输出格式:
152 = 个位数字 + 十位数字 10 + 百位数字 100

#include <stdio.h>
int main()
{
	int num=152;
	int a,b,c;
	a=num/100;//百位 
	c=num%10;//个位
	b=(num/10)%10 ;
	printf("152 = %d + %d*10 + %d*100",c,b,a);
}

实验2-2-1 计算分段函数[1] (10分)

本题目要求计算下列分段函数f(x)的值:
在这里插入图片描述
输入格式:
输入在一行中给出实数x。

输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

输入样例1:
10
输出样例1:
f(10.0) = 0.1
输入样例2:
0
输出样例2:
f(0.0) = 0.0

#include<stdio.h>
int main()
{
	float x,y;
	scanf("%f",&x);
	if(x==0){
		y=0;
		printf("f(%0.1f) = %0.1f",x,y);
	}
	else{ 
		y=1.0/x;
		printf("f(%0.1f) = %0.1f",x,y);
	}
} 

实验2-2-2 计算摄氏温度 (10分)

给定一个华氏温度F,本题要求编写程序,计算对应的摄氏温度C。计算公式:C=5×(F−32)/9。题目保证输入与输出均在整型范围内。

输入格式:
输入在一行中给出一个华氏温度。

输出格式:
在一行中按照格式“Celsius = C”输出对应的摄氏温度C的整数值。

输入样例:
150
输出样例:
Celsius = 65

#include<stdio.h>
int main()
{
	int C,F;
	scanf("%d",&F);
	C=5*(F-32)/9;
	printf("Celsius = %d",C);
} 

实验2-2-3 计算存款利息 (10分)

本题目要求计算存款利息,计算公式为interest=money×(1+rate)^​year​​ −money,其中interest为存款到期时的利息(税前),money是存款金额,year是存期,rate是年利率。

输入格式:
输入在一行中顺序给出三个正实数money、year和rate,以空格分隔。

输出格式:
在一行中按“interest = 利息”的格式输出,其中利息保留两位小数。

输入样例:
1000 3 0.025
输出样例:
interest = 76.89

#include<stdio.h>
#include<math.h>
int main()
{
	float interest,money,rate,year;
	scanf("%f %f %f",&money,&year,&rate);
	interest=money*pow((1+rate),year)-money;
	//数学函数pow(a,b)表示a的b次方 
	printf("interest = %0.2f",interest);
} 

实验2-2-4 计算分段函数[2] (10分)

本题目要求计算下列分段函数f(x)的值:
f2-11
注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

输入格式:
输入在一行中给出实数x。

输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。

输入样例1:
10
输出样例1:
f(10.00) = 3.16
输入样例2:
-0.5
输出样例2:
f(-0.50) = -2.75

#include<stdio.h>
#include<math.h>
int main()
{
	float x,y;
	scanf("%f",&x);
	if(x>=0){
		y=pow(x,0.5);
		//pow(a,b)表示a的b次方 
		printf("f(%0.2f) = %0.2f",x,y);
	}
	else{ 
		y=pow((x+1),2)+2*x+1/x;
		printf("f(%0.2f) = %0.2f",x,y);
	}
	return 0;
} 

实验2-2-5 求整数均值 (10分)

本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。

输入格式:
输入在一行中给出4个整数,其间以空格分隔。

输出格式:
在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。

输入样例:
1 2 3 4
输出样例:
Sum = 10; Average = 2.5

#include<stdio.h>
int main()
{
	int a,b,c,d;
	float sum=0,average=0;
	scanf("%d %d %d %d",&a,&b,&c,&d);
	sum=a+b+c+d;
	average=sum/4;
	printf("Sum = %0.0f; Average = %0.1f",sum,average);
	return 0;
} 

实验2-2-6 计算分段函数[3] (10分)

本题目要求计算下列分段函数f(x)的值:
在这里插入图片描述
输入格式:
输入在一行中给出实数x。

输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

输入样例1:
10
输出样例1:
f(10.0) = 0.1
输入样例2:
234
输出样例2:
f(234.0) = 234.0

#include<stdio.h>
int main()
{
	float x,y;
	scanf("%f",&x);
	if(x==10){
		y=1.0/x;
		printf("f(%0.1f) = %0.1f",x,y);
	}
	else{ 
		y=x;
		printf("f(%0.1f) = %0.1f",x,y);
	}
	return 0;
} 

实验2-2-7 整数四则运算 (10分)

本题要求编写程序,计算2个正整数的和、差、积、商并输出。题目保证输入和输出全部在整型范围内。

输入格式:
输入在一行中给出2个正整数A和B。

输出格式:
在4行中按照格式“A 运算符 B = 结果”顺序输出和、差、积、商。

输入样例:
3 2
输出样例:
3 + 2 = 5
3 - 2 = 1
3 * 2 = 6
3 / 2 = 1

#include<stdio.h>
int main()
{
	int A,B;
	scanf("%d %d",&A,&B);
	printf("%d + %d = %d\n",A,B,A+B);
	printf("%d - %d = %d\n",A,B,A-B);
	printf("%d * %d = %d\n",A,B,A*B);
	printf("%d / %d = %d\n",A,B,A/B);
	return 0;
}

实验2-2-8 阶梯电价 (15分)

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式:
输入在一行中给出某用户的月用电量(单位:千瓦时)。

输出格式:
在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。

输入样例1:
10
输出样例1:
cost = 5.30
输入样例2:
100
输出样例2:
cost = 55.50

#include<stdio.h>
int main()
{
	float a,cost;
	scanf("%f",&a);
	if(a<0)
		printf("Invalid Value!");
	else if(a<=50){
		cost=a*0.53;
		printf("cost = %0.2f",cost);
	}
	else{
		cost=50*0.53+(a-50)*(0.53+0.05);
		printf("cost = %0.2f",cost);
	}
}

实验2-2-9 计算火车运行时间 (15分)

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。

输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

输入样例:
1201 1530
输出样例:
03:29

#include<stdio.h>
int main()
{
	int t1,t2,t,h,m;
	scanf("%d %d",&t1,&t2);
	t=(t2/100*60+t2%100)-(t1/100*60+t1%100);
	h=t/60;
	m=t%60;
	printf("%02d:%02d",h,m);
}

笔记 :把输入的小时和分钟分开,统一单位为分钟,便于后面作差。并且要保证,即使是14:59与15:01这样实际时间大但是显示分钟小的情况,也能用。

实验2-3-1 求1到100的和 (10分)

本题要求编写程序,计算表达式 1 + 2 + 3 + … + 100 的值。

输入格式:
本题无输入。

输出格式:
sum = 累加和

#include<stdio.h>
int main()
{
	int i,sum=0;
	for(i=1;i<=100;i++){
		sum+=i;
	}
	printf("sum = %d",sum);
	return 0;
}

实验2-3-2 求N分之一序列前N项和 (15分)

本题要求编写程序,计算序列 1 + 1/2 + 1/3 + … 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:
6
输出样例:
sum = 2.450000

#include<stdio.h>
int main()
{
	int i,n;
	double sum=0;
	scanf("%d",&n);
	
	for(i=1;i<=n;i++){
		sum+=1.0/i;
	}
	printf("sum = %0.6lf",sum);
	return 0;
}

笔记:注意输出是双精度浮点数,计算过程中sum+=1.0/i,右边注意不能写成两个整型。

实验2-3-3 求奇数分之一序列前N项和 (15分)

本题要求编写程序,计算序列 1 + 1/3 + 1/5 + … 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:
23
输出样例:
sum = 2.549541

#include<stdio.h>
int main()
{
	int i,n;
	double sum=0;
	scanf("%d",&n);
	
	for(i=0;i<n;i++){
		sum+=1.0/(2*i+1);
	}
	printf("sum = %0.6lf",sum);
	return 0;
}

实验2-3-4 求简单交错序列前N项和 (15分)

本题要求编写程序,计算序列 1 - 1/4 + 1/7 - 1/10 + … 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后三位。题目保证计算结果不超过双精度范围。

输入样例:
10
输出样例:
sum = 0.819

#include<stdio.h>
int main()
{
	int i,n,a=1;
	double sum=0;
	scanf("%d",&n);
	
	for(i=0;i<n;i++){
		sum+=a*1.0/(3*i+1);
		a=-a;
	}
	printf("sum = %0.3lf",sum);
	return 0;
}

实验2-3-5 输出华氏-摄氏温度转换表 (15分)

输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。
温度转换的计算公式:C=5×(F−32)/9,其中:C表示摄氏温度,F表示华氏温度。

输入格式:
在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:
第一行输出:“fahr celsius”
接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。
若输入的范围不合法,则输出"Invalid."。

输入样例1:
32 35
输出样例1:
fahr celsius
32 0.0
34 1.1
输入样例2:
40 30
输出样例2:
Invalid.

#include<stdio.h>
int main()
{
	int lower,upper;
	int fahr;
	double celsius;
	scanf("%d %d",&lower,&upper);
	
	if(lower<=upper && upper<=100){
		printf("fahr celsius\n");
		for(fahr=lower;fahr<=upper;fahr+=2){
			celsius=5.0*(fahr-32)/9;
			printf("%d%6.1f\n",fahr,celsius);
		}
	}
	else{
		printf("Invalid.");
	}

	return 0;
}

笔记 :lower≤upper≤100的条件判定不能写为“lower≤upper≤100”;
%a.bf表示输出格式为占据a个字符、小数点后保留b位的浮点数。

实验2-3-6 求交错序列前N项和 (15分)

本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中输出部分和的值,结果保留三位小数。

输入样例:
5
输出样例:
0.917

#include<stdio.h>
int main()
{
	int i,n,a=1;
	double sum=0;
	scanf("%d",&n);
	
	for(i=0;i<n;i++){
		sum+=a*(i+1)/(2.0*i+1);
		a=-a;
	}
	printf("%0.3f",sum);
	return 0;
}

实验2-3-7 求平方与倒数序列的部分和 (15分)

本题要求对两个正整数m和n(m≤n)编写程序,计算序列和m^
​2
​​ +1/m+(m+1)^
​2
​​ +1/(m+1)+⋯+n^
​2
​​ +1/n。

输入格式:
输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例:
5 10
输出样例:
sum = 355.845635

#include<stdio.h>
int main()
{
	int m,n,i;
	double sum=0;
	scanf("%d %d",&m,&n);
	
	for(i=m;i<=n;i++){
		sum+=i*i+1.0/i;
	} 
	printf("sum = %0.6f",sum);
	return 0;
}

(函数)实验2-4-1 统计各位数字之和是5的数 (20分)

本题要求实现两个函数:一个函数判断给定正整数的各位数字之和是否等于5;另一个函数统计给定区间内有多少个满足上述要求的整数,并计算这些整数的和。

函数接口定义:
int is( int number );
void count_sum( int a, int b );
函数is判断number的各位数字之和是否等于5,是则返回1,否则返回0。
函数count_sum利用函数is统计给定区间[a, b]内有多少个满足上述要求(即令is返回1)的整数,并计算这些整数的和。最后按照格式count = 满足条件的整数个数, sum = 这些整数的和
进行输出。题目保证0<a≤b≤10000。
输入样例:
104 999
输出样例:
104 is counted.
count = 15, sum = 3720

#include<stdio.h>
int is( int number );
void count_sum( int a, int b );

int main()
{
    int a, b;

    scanf("%d %d", &a, &b);
    if (is(a)) printf("%d is counted.\n", a);
    if (is(b)) printf("%d is counted.\n", b);
    count_sum(a, b);

    return 0;
}

int is( int number )
{
	int sum=0,t;
    while (number!=0){//对number各位数字求和 
        t=number%10;//取当前number的末位 
        sum+=t;//末位数加和 
        number /= 10;//去掉number末位的数 
    }
    if(sum==5){
        return 1;
    }
    return 0;
}
	
void count_sum( int a, int b )
{	
	int count=0,sum=0,i=a; //i初始值为闭区间左端a值,不能初始化为0 
	while(i>=a && i<=b){
		if(is(i)){
			sum+=i;
			count++;
		}
		i++;
	} 
	printf("count = %d, sum = %d",count,sum);
}

**笔记:**这类题,题目已给定相应的主程序,只要补全函数即可,注意函数和给定的原型声明要一致。

实验2-4-2 生成3的乘方表 (15分)

输入一个非负整数n,生成一张3的乘方表,输出3 ​0​​ ~3 ​n 的值。可调用幂函数计算3的乘方。

输入格式:
输入在一行中给出一个非负整数n。

输出格式:
按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。题目保证输出数据不超过长整型整数的范围。

输入样例:
3
输出样例:
pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i=0,a;
	scanf("%d",&n); 
	while(i<=n){
		a=pow(3,i);
		printf("pow(3,%d) = %d\n",i,a);
		i++;
	}
	return 0;
}

实验2-4-3 求平方根序列前N项和 (15分)

本题要求编写程序,计算平方根序列√​1​​ +√​2​​ +√​3​​ +⋯的前N项之和。可包含头文件math.h,并调用sqrt函数求平方根。

输入格式:
输入在一行中给出一个正整数N。

输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:
10
输出样例:
sum = 22.47

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i=0;
	double sum=0.0;
	scanf("%d",&n); 
	while(i<=n){
		sum+=sqrt(i);
		i++;
	}
	printf("sum = %.2f",sum);
	return 0;
}

实验2-4-4 求阶乘序列前N项和 (15分)

本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。

输入格式:
输入在一行中给出一个不超过12的正整数N。

输出格式:
在一行中输出整数结果。

输入样例:
5
输出样例:
153

#include<stdio.h>
int main()
{
	int n,i=1,a=1,sum=0;
	scanf("%d",&n); 
	while(i<=n){
		a*=i;
		sum+=a;
		i++;
	}
	printf("%d",sum);
	return 0;
}

实验2-4-5 简单实现x的n次方 (10分)

本题要求实现一个计算x^​n​​ (n≥0)的函数。

函数接口定义:
double mypow( double x, int n );
函数mypow应返回x的n次幂的值。题目保证结果在双精度范围内。

输入样例:
0.24 4
输出样例:
0.003318

#include <stdio.h>

double mypow( double x, int n );

int main()
{
    double x;
    int n;

    scanf("%lf %d", &x, &n);
    printf("%f\n", mypow(x, n));

    return 0;
}

double mypow( double x, int n )
{
	int i=1;
	double result=1.0;
	while(i<=n){
		result*=x;//result存放x的幂次 
		i++;
	}
	return result; 
}

实验2-4-6 求幂之和 (15分)

本题要求编写程序,计算sum=2 ​1 ​​ +2 ​2 ​​ +2 ​3 ​​ +⋯+2 ​n ​​ 。可以调用pow函数求幂。

输入格式:
输入在一行中给出正整数n(≤10)。

输出格式:
按照格式“result = 计算结果”输出。

输入样例:
5
输出样例:
result = 62

#include<stdio.h>
#include<math.h>
int main()
{
	int n,i=1,result=0;
	scanf("%d", &n); 
	while(i<=n){
		result+=pow(2,i);
		i++;
	}
	printf("result = %d",result);
	return 0;
}

实验2-4-7 求组合数 (15分)

本题要求编写程序,根据公式
在这里插入图片描述 在这里插入图片描述
​​ 算出从n个不同元素中取出m个元素(m≤n)的组合数。
建议定义和调用函数fact(n)计算n!,其中n的类型是int,函数类型是double。

输入格式:
输入在一行中给出两个正整数m和n(m≤n),以空格分隔。

输出格式:
按照格式“result = 组合数计算结果”输出。题目保证结果在double类型范围内。

输入样例:
2 7
输出样例:
result = 21

#include<stdio.h>
double fact(int n);

int main()
{
	int m,n;
	double result;
	scanf("%d %d",&m,&n);
	result=fact(n)/(fact(m)*fact(n-m));
	printf("result = %.0f",result);
	return 0;
}

double fact(int n)
{
	int i=1;
	double a=1;
	while(i<=n){
		a*=i;
		i++;
	}
	return a;
}

实验3-1 求一元二次方程的根 (20分)

本题目要求一元二次方程的根,结果保留2位小数。

输入格式:
输入在一行中给出3个浮点系数a、b、c,中间用空格分开。

输出格式:
根据系数情况,输出不同结果:
1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;
2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;
3)如果方程只有一个根,则直接输出此根;
4)如果系数都为0,则输出"Zero Equation";
5)如果a和b为0,c不为0,则输出"Not An Equation"。

输入样例1:
2.1 8.9 3.5
输出样例1:
-0.44
-3.80
输入样例2:
1 2 3
输出样例2:
-1.00+1.41i
-1.00-1.41i
输入样例3:
0 2 4
输出样例3:
-2.00
输入样例4:
0 0 0
输出样例4:
Zero Equation
输入样例5:
0 0 1
输出样例5:
Not An Equation
在这里插入图片描述
这种情况,题目中并未给出输出样例,所以要多次尝试输出的格式是否符合它的要求。

#include<stdio.h>
#include<math.h> 
int main()
{
	double  a,b,c,d;//方程为ax^2+bx+c=0 
	scanf("%lf %lf %lf", &a,&b,&c);
	d=b*b-4*a*c;//方程根数判别式
	if(a==0&&b==0&&c==0){
		printf("Zero Equation");
	}//系数都为0 
	else if(a==0&&b==0&&c!=0){
		printf("Not An Equation");
	}// a、b为0,c不为0 
	else if(a!=0&&d>0){
		double x1,x2;
		x1=(-b+sqrt(d))/(2*a);
		x2=(-b-sqrt(d))/(2*a);
		printf("%.2f\n%.2f",x1,x2);
	}//2个不相等的实数根 
	else if((a!=0&&d==0)||a==0){
	//题目并未排除a=0时的一元一次方程的情况 
		double x;
		if(a==0){
			x=-c/b;
		}
		else{
			x=(-b+sqrt(d))/(2*a);
		}
		printf("%.2f",x);
	}//只有1个根 
	else if(a!=0&&d<0){
		double y1,y2;
		y1=-b/(2*a);
		y2=sqrt(-d)/(2*a);
		if(b!=0){//有重实根 
			printf("%.2f+%.2fi\n%.2f-%.2fi",y1,y2,y1,y2);
		}
		else{//纯虚根
			printf("0.00+%.2fi\n0.00-%.2fi",y2,y2);
		}
	}//2个不相等的复数根 
	return 0;
} 

实验3-2 计算符号函数的值 (10分)

对于任一整数n,符号函数sign(n)的定义如下:
在这里插入图片描述
请编写程序计算该函数对任一输入整数的值。

输入格式:
输入在一行中给出整数n。

输出格式:
在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。

输入样例1:
10
输出样例1:
sign(10) = 1
输入样例2:
0
输出样例2:
sign(0) = 0
输入样例3:
-98
输出样例3:
sign(-98) = -1

#include<stdio.h>
int main()
{
	int n,sign;
	scanf("%d",&n);
	if(n<0){
		sign=-1;
	} 
	else if(n==0){
		sign=0;
	}
	else if(n>0){
		sign=1;
	}
	printf("sign(%d) = %d",n,sign);
	return 0;
} 

实验3-3 比较大小 (10分)

本题要求将输入的任意3个整数从小到大输出。

输入格式:
输入在一行中给出3个整数,其间以空格分隔。

输出格式:
在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:
4 2 8
输出样例:
2->4->8

#include<stdio.h>
int main()
{
	int a,b,c,t;
	scanf("%d %d %d",&a,&b,&c);
	if(a>b){
		t=a;
		a=b;
		b=t;
	}//a<b
	if(a>c){
		t=a;
		a=c;
		c=t;
	}//a<c 
	if(b>c){
		t=b;
		b=c;
		c=t;
	}//b<c
	printf("%d->%d->%d",a,b,c); 
	return 0;
}

实验3-4 统计字符 (15分)

本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

输入格式:
输入为10个字符。最后一个回车表示输入结束,不算在内。

输出格式:
letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数

输入样例:
aZ &
09 Az
输出样例:
letter = 4, blank = 3, digit = 2, other = 1
----未完待续----


版权声明:本文为weixin_46234789原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。