部分c语言课程实验整理。
1-04 求整数均值
本题要求编写程序,计算4个整数的和与平均值。题目保证输入与输出均在整型范围内。
输入格式:
输入在一行中给出4个整数,其间以空格分隔。
输出格式:
在一行中按照格式“Sum = 和; Average = 平均值”顺序输出和与平均值,其中平均值精确到小数点后一位。
输入样例:
1 2 3 4
输出样例:
Sum = 10; Average = 2.5
代码:
#include <stdio.h>
int main()
{
int num1,num2,num3,num4;
int Sum;
float Average;
scanf("%d%d%d%d",&num1,&num2,&num3,&num4);
Sum=num1+num2+num3+num4;
Average=Sum/4.0;
printf("Sum = %d; Average = %.1f",Sum,Average);
return 0;
}
2-04 厘米换算英尺英寸
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
输入格式:
输入在一行中给出1个正整数,单位是厘米。
输出格式:
在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。
输入样例:
170
输出样例:
5 6
代码:
#include <stdio.h>
/*(foot+inch/12)×0.3048,foot=12inch*/
int main()
{
double n;
double foot,inch;
scanf("%lf",&n);
n/=100.0;
foot=(int)(n/0.3048);
inch=12*(n/0.3048-foot);
printf("%d %d",(int)foot,(int)inch);
return 0;
}
3-2 高速公路超速处罚
按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
输出格式:
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
输入样例1:
65 60
输出样例1:
OK
输入样例2:
110 100
输出样例2:
Exceed 10%. Ticket 200
输入样例3:
200 120
输出样例3:
Exceed 67%. License Revoked
代码:
#include <stdio.h>
int main()
{
int v,limit_v;
scanf("%d %d",&v,&limit_v);
if(v<1.1*limit_v)
printf("OK");
else if(v>=1.1*limit_v && v<1.5*limit_v)
printf("Exceed %.f%%. Ticket 200",100.0*(v-limit_v)/limit_v);
else if(v>=1.5*limit_v)
printf("Exceed %.f%%. License Revoked",100.0*(v-limit_v)/limit_v);
return 0;
}
3-5 求一元二次方程的根
本题目要求一元二次方程ax2+bx+c=0的根,结果保留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 JudgeEquation(double a,double b,double c);
void conclusion(double a,double b,double c);
int JudgeEquation(double a,double b,double c)
{
if(a==0 && b==0 && c!=0)
{printf("Not An Equation");return 0;}
if(a==0 && b==0 && c==0)
{printf("Zero Equation");return 0;}
else
return 1;
}
void conclusion(double a,double b,double c)
{
double temp=b*b-4*a*c;
double x1,x2;
if(a==0)
{printf("%.2lf",-(c/b));}
else
{if(temp>=0)
{
x1=(-b-sqrt(temp))/(2*a);x2=(-b+sqrt(temp))/(2*a);
if(x1==x2)
{printf("%.2lf",x1);}
else
{printf("%.2lf\n%.2lf\n",x2,x1);}
}
else
{
printf("%.2lf+%.2lfi\n%.2lf-%.2lfi\n",(b==0?b:-b)/(2*a),sqrt(-temp)/(2*a),(b==0?b:-b)/(2*a),sqrt(-temp)/(2*a));}
}
}
int main()
{
double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
if(JudgeEquation(a,b,c)==1)
{conclusion(a,b,c);return 0;}
else
return 0;
}
4-2 水仙花数
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1 3+5 3+3 3。 本题要求编写程序,计算所有N位水仙花数。
输入格式:
输入在一行中给出一个正整数N(3≤N≤7)。
输出格式:
按递增顺序输出所有N位水仙花数,每个数字占一行。
输入样例:
3
输出样例:
153
370
371
407
代码:
#include <stdio.h>
#include <math.h>
void YuriJudge(int n,int N);
void YuriJudge(int n,int N)
{
int temp=0;
int m=n,j=1,e=1;
double x;
while(n)
{ x=n%10;
for(j=1,e=1;j<=N;j++)
{e*=x;}
temp+=e;
n/=10;
if(temp>m)
break;
}
if(temp==m)
printf("%d\n",m);
}
int main()
{
int N;
int n;
int min,max,cnt=0;
scanf("%d",&N);
min=pow(10.0,N-1);
max=pow(10.0,N)-1;
n=min;
while(n<=max)
{
YuriJudge(n,N);
n++;
}
return 0;
}
5-2 递归实现指数函数
本题要求实现一个计算xn(n≥1)的函数。
函数接口定义:
double calc_pow( double x, int n );
函数calc_pow应返回x的n次幂的值。建议用递归实现。题目保证结果在双精度范围内。
裁判测试程序样例:
#include <stdio.h>
double calc_pow( double x, int n );
int main()
{
double x;
int n;
scanf("%lf %d", &x, &n);
printf("%.0f\n", calc_pow(x, n));
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
2 3
输出样例:
8
代码:
double calc_pow( double x, int n )
{
double result=1;
if(n==0)
return 1;
result=x*calc_pow(x,n-1);
return result;
}
6-1 IP地址转换
一个IP地址是用四个字节(每个字节8个位)的二进制码组成。请将32位二进制码表示的IP地址转换为十进制格式表示的IP地址输出。
输入格式:
输入在一行中给出32位二进制字符串。
输出格式:
在一行中输出十进制格式的IP地址,其由4个十进制数组成(分别对应4个8位的二进制数),中间用“.”分隔开。
输入样例:
11001100100101000001010101110010
输出样例:
204.148.21.114
代码:
#include <stdio.h>
#include <math.h>
void Scan(char A[]);
void NumerationChange(char A[],int cnt);
int main()
{
char A[9]={0};
int cnt=0;
while(cnt<4)
{Scan(A);
NumerationChange(A,cnt);
cnt++;
}
return 0;
}
void Scan(char A[])
{int i=0;
while(i<8)
{
A[i++]=getchar();
}
}
void NumerationChange(char A[],int cnt)
{
int sum=0;
int i=0;
while(i<8)
{
sum+=((int)A[i]-48)*pow(2.0,(7-i));
i++;
}
if(cnt<3)
printf("%d.",sum);
else
printf("%d",sum);
}
7-4 查找子串
本题要求实现一个字符串查找的简单函数。
函数接口定义:
char *search( char *s, char *t );
函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。
裁判测试程序样例:
#include <stdio.h>
#define MAXS 30
char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */
int main()
{
char s[MAXS], t[MAXS], *pos;
ReadString(s);
ReadString(t);
pos = search(s, t);
if ( pos != NULL )
printf("%d\n", pos - s);
else
printf("-1\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
The C Programming Language
ram
输出样例1:
10
输入样例2:
The C Programming Language
bored
输出样例2:
-1
代码:
#include <string.h>
char *search( char *s, char *t )
{ char *result=NULL;
int i=0,j=0,temp=0;
int len=strlen(t);
int n=strlen(s);
for(;i<n;i++,temp=0)
{
j=i;
for(;s[j]==t[temp];temp++,j++){}
if(len<=temp)
{
result=&s[i];
return result;
}
}
return result;
}
7-1 字符串正反序连接
将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。
函数接口定义:
void fun (char *s, char *t);
其中s 和t都是用户传入的参数。函数将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。
裁判测试程序样例:
#include <stdio.h>
void fun (char *s, char *t);
int main()
{ char s[100], t[100];
scanf("%s", s);
fun(s, t);
printf("The result is: %s\n", t);
return 0;
}
/* 请在这里填写答案 */
输入样例:
abcd
输出样例:
The result is: abcddcba
代码:
void fun (char *s, char *t)
{
int cnt=0;
for(;*s!='\0';s++,t++)
{
*t=*s;
cnt++;
}
s--;
for(;cnt>0;cnt--,s--,t++)
{
*t=*s;
}
*t='\0';
}
7-4 删除字符串中数字字符
删除一个字符串中的所有数字字符。
函数接口定义:
void delnum(char *s);
其中 s 是用户传入的参数。 函数的功能是删除指针 s 所指的字符串中的所有数字字符。
裁判测试程序样例:
#include "stdio.h"
void delnum(char *s);
int main ()
{ char item[80];
gets(item);
delnum(item);
printf("%s\n",item);
return 0;
}
/* 请在这里填写答案 */
输入样例:
a0bc+d496df
输出样例:
abc+ddf
代码:
void delnum(char *s)
{char *t=s;
char *t1=s;
while(*s!='\0')
{
while(*s>='0' && *s<='9')
{
t=s;
for(;*t!='\0';t++)
{
*t=*(t+1);
}
}
s++;
}
}
7-6 查找子串
本题要求实现一个字符串查找的简单函数。
函数接口定义:
char *search( char *s, char *t );
函数search在字符串s中查找子串t,返回子串t在s中的首地址。若未找到,则返回NULL。
裁判测试程序样例:
#include <stdio.h>
#define MAXS 30
char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */
int main()
{
char s[MAXS], t[MAXS], *pos;
ReadString(s);
ReadString(t);
pos = search(s, t);
if ( pos != NULL )
printf("%d\n", pos - s);
else
printf("-1\n");
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
The C Programming Language
ram
输出样例1:
10
输入样例2:
The C Programming Language
bored
输出样例2:
-1
代码:
#include <string.h>
char *search( char *s, char *t )
{ char *result=NULL;
int i=0,j=0,temp=0;
int len=strlen(t);
int n=strlen(s);
for(;i<n;i++,temp=0)
{
j=i;
for(;s[j]==t[temp];temp++,j++){}
if(len<=temp)
{
result=&s[i];
return result;
}
}
return result;
}