【C】课程实验

部分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;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值