C语言第四次线下作业

 C语言C语言C语言,重要的事情说三遍。

有几个选择语言的时候选成了C++,希望没事()

1. 编写函数,计算表达式  的值( ),形参n的值由主程序输入并传递,函数返回值为s.

#include<stdio.h>
int main()
{
	int n;
	int f(int n);
	scanf("%d",&n);
	printf("%d",f(n));
	return 0;
}
int f(int n)
{
	int i,j,x,s=0;
	for(i=1;i<=n;i++)
	{
		x=1;
		for(j=1;j<=i;j++)
		{
			x*=j;
		}
		s+=x;
	}
	return s;
}

2. 编写数字加密和解密函数。测试值由主程序输入。

2.1 编写数字加密函数 int encrypt(int n). 其输入为一个四位数,返回为加密后的数。其加密方法为: 

  • 将该数每一位上的数字加9,然后除以10 取余,作为该位上的新数字,
  • 将第1 位和第3 位上的数字互换,第2 位和第4 位上的数字互换,组成加密后的新数。

例:输入  1257    输出  The encrypted number is 4601

#include<stdio.h>
int encrypt(int n)
{
	int i,t,a[4];
	for(i=0;i<4;i++)
	{
		a[i]=n%10;
		n/=10;
	}
	for(i=0;i<4;i++)
	{
		a[i]=(a[i]+9)%10;
	}
	t=a[0];
	a[0]=a[2];
	a[2]=t;
	t=a[1];
	a[1]=a[3];
	a[3]=t;
	t=1000*a[3]+100*a[2]+10*a[1]+a[0];
	return t;
}
int main()
{
	int n;
	scanf("%d",&n);
	printf("The encrypted number is %d",encrypt(n));
	return 0;
}

2.2 编写数字解密函数 int decrypt(int n), 其输入为一个使用2.1 encrypt 函数加密后的四位数,返回为解密后的数

  例:输入  4601  输出  The decrypted number is 1257

#include<stdio.h>
int decrypt(int n)
{
	int b[4],i,t;
	for(i=0;i<4;i++)
	{
		b[i]=n%10;
		n/=10;
	}
	t=b[0];
	b[0]=b[2];
	b[2]=t;
	t=b[1];
	b[1]=b[3];
	b[3]=t;
	for(i=0;i<4;i++)
	{
		b[i]+=1;
	}
	t=1000*b[3]+100*b[2]+10*b[1]+b[0];
	return t;
}
int main()
{
	int n;
	scanf("%d",&n);
	printf("The decrypted number is %d",decrypt(n));
	return 0;
}

3.数组转置:在主函数中定义一个n(1<=n<=6)维方阵,并从键盘读入数组元素;编写函数transpose(a,n)实现数组a转置;在主函数中输出转置后的方阵。

例:输入    4

1   2   3   4                    输出     1   5   9   13

5   6   7   8                             2   6   10  14

9   10  11  12                            3   7   11  15

13  14  15  16                            4   8   12  16

#include<stdio.h>
#define M 0
void transpose(int a[][6],int n)
{
	int i,j,k;
	for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
		{
			k=a[i][j];
			a[i][j]=a[j][i];
			a[j][i]=k;
		}
}
int main()
{
	int a[6][6];
	int n,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			scanf("%d",&a[i][j]);
	transpose(a,n);
	for(i=0;i<n;i++)
	{
		for(j=0;j<n;j++)
		{
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
}

 

4.分数的四则运算,即对两个分数进行加、减、乘、除等运算,要求用C语言编写4个分数的函数来实现四则运算。

输入:

分数1 操作符 分数2 (操作符为 + - *  /)

输出:

计算结果

要求:

计算结果使用分数表示,并且为最简化。例如结果为2/6,则被简化为1/3

例:输入  1/6 + 1/3   输出  1/6+1/3=1/2

输入  1/6 - 1/3   输出  1/6-1/3=-1/6

提示:在进行化简时,需要求出分子和分母的最大公约数,即这个数可以同时整除分子和分母,其该数为最大的数。计算结果可能是个负数,求最大公约数时,要保证两个数为同号。

#include<stdio.h>
int main()
{
	int a,b,c,d,e,f,i;
	char x;
	scanf("%d/%d %c %d/%d",&a,&b,&x,&c,&d);
	switch(x)
	{
		case 42:
		{
			e=a*c;
			f=b*d;
			break;
		}
		case 43:
		{
			e=a*d+b*c;
			f=b*d;
			break;
		}
		case 45:
		{
			e=a*d-b*c;
			f=b*d;
			break;
		}
		case 47:
		{
			e=a*d;
			f=b*c;
			break;
		}
	}
	for(i=2;i<=e&&i<=f;i++)
	{
		if((e%i==0)&&(f%i==0))
		{
			e=e/i;
			f=f/i;
			i=1;
		}
	}
	printf("%d/%d %c %d/%d=%d/%d",a,b,x,c,d,e,f);
	return 0;
}

 

5.学生信息:编写4个函数实现下列功能(通过参数传递实现,函数参数为数组):

(1)函数input( ) ——输入20个学生姓名和高考总分;

(2)函数sort( ) ——按高考总分从高到低的顺序排序,姓名顺序也随之调整;

(3)函数display( )——显示所有学生姓名及其高考总分;

(4)函数search( ) ——根据姓名用顺序查找方法找出该学生,查找成功返回学生下标,否则返回-1;

(5)主函数——①调用input( )输入学生姓名及成绩;②调用函数sort( )进行排序;③调用display( )输入排序后的学生姓名及成绩;④输入一个姓名,调用函数search( ),根据返回值判定是否查找成功,若查找成功,输出该学生姓名及高考总分,否则显示查找失败。

提示:高考分数储存于一维整形数组,学生姓名为储存为二维字符数组。

#include<stdio.h>
#include <string.h>
int main()
{
	char name[20][20],x[20];
	int score[20],m;
	void input(char name[][20],int score[20]);
	void sort(char name[][20],int score[20]);
	void display(char name[][20],int score[20]);
	int search(char name[][20],int score[20],char x[20]);
	input(name,score);
	sort(name,score);
	display(name,score);
	getchar();
	printf("wanted name:");
	gets(x);
	m=search(name,score,x);
	if(m==-1)
		printf("NOT FOUND\n");
	else
		printf("name:%s		score:%d",name[m-1],score[m-1]);
	return 0;
}
void input(char name[][20],int score[20])
{
	int i;
	printf("name:");
	for(i=0;i<20;i++)
	{
		printf("%d.",i+1);
		gets(name[i]);
	}
	printf("score:");
	for(i=0;i<20;i++)
	{
		printf("%d.",i);
		scanf("%d",&score[i]);
	}
}
void sort(char name[][20],int score[20])
{
	int t,i,j;
	char p[20];
	for(i=0;i<20;++i)
	{
		for(j=0;j<20-i;++j)
		{
			if(score[j]<score[j+1])
			{
				t=score[j+1];
				score[j+1]=score[j];
				score[j]=t;
				strcpy(p,name[j]);
				strcpy(name[j],name[j+1]);
				strcpy(name[j+1],p);
			}
		}
	}
}
void display(char name[][20],int score[20])
{
	int i;
	for(i=0;i<20;i++)
	{
		printf("name:%s		score:%d\n",&name[i],score[i]);
	}
}
int search(char name[][20],int score[20],char x[20])
{
	int i,n=10086,k;
	for(i=0;i<20;i++)
	{
		if(strcmp(x,name[i])==0)
		{
			n=i+1;
			break;
		}
	}
	if(n>=1&&n<=20)
		k=n;
	else
		k=-1;
	return k;
}

6.字符串处理

定义两个C源程序文件:fmain.c 和 fstring.c。fmain.c中包含主函数,实现字符串处理功能选项和字符串的输入与结果的输出。fstring.c中包含两个函数delchar(s,c)和strreverse (s),实现删除字符和字符串反转功能。

delchar(s,c):在主函数中输入字符串和要删除的字符,此函数将字符串s中出现的所有c字符删除;再在主函数中输出删除后的字符串。

strreverse (s):在主函数中读入字符串,此函数实现将字符串s反转;再在主函数中输出反转后的字符串。

fstring.c

#include<stdio.h>
#include<string.h>
extern char str[50];
extern char c;
void strreverse(char str[50])
{
	int i,n,m;
	char t;
	for(i=0;i<50&&str[i]!='\0';i++);
	n=i-1;
	if(n%2==0)
		m=n/2;
	else
		m=(n-1)/2;
	for(i=0;i<=m;i++)
	{
		t=str[i];
		str[i]=str[n-i];
		str[n-i]=t;
	}
}
void delchar(char str[50],char c)
{
	char shadow[50];
	int i,j;
	for(i=0,j=0;i<50&&str[i]!=0;i++)
	{
		if(str[i]==c)
			continue;
		shadow[j]=str[i];
		j++;
	}
	shadow[j]='\0';
	strcpy(str,shadow);
	str[j]='\0';
}

fmain.c

#include<stdio.h>
#include<string.h>
int main()
{
	char str[50],c;
	void strreverse(char s[50]);
	void delchar(char str[50],char c);
	int x;
	char yn;
	int yesorno(char yn);
	printf("1.Reverse a string.\n2.Delete a character in a string.\n");
	printf("Please input your choice:");
	scanf("%d",&x);
	getchar();
	printf("Enter a string: ");
	gets(str);
	if(x==1)
	{
		strreverse(str);
		printf("Reversed string is:êo");
		printf("%s\n",str);
	}
	else if(x==2)
	{
		printf("Enter a character you want to delete:");
		scanf("%c",&c);
		getchar();
		delchar(str,c);
		printf("Reversed string is:êo");
		printf("%s\n",str);
	}
	else
		printf("ERROR");
	printf("Would you like to continue? (ꡧy/n)ê?");
	scanf("%c",&yn);
	x=yesorno(yn);
	while(x!=0)
	{
		printf("1.Reverse a string.\n2.Delete a character in a string.\n");
		printf("Please input your choice:");
		scanf("%d",&x);
		getchar();
		printf("Enter a string: ");
		gets(str);
		if(x==1)
		{
			strreverse(str);
			printf("Reversed string is:êo");
			printf("%s\n",str);
		}
		else if(x==2)
		{
			printf("Enter a character you want to delete:");
			scanf("%c",&c);
			getchar();
			delchar(str,c);
			printf("Reversed string is:êo");
			printf("%s\n",str);
		}
		else
			printf("ERROR");
		printf("Would you like to continue? (ꡧy/n)ê?");
		scanf("%c",&yn);
		x=yesorno(yn);
	}
	return 0;
}
int yesorno(char yn)
{
	int t;
	if(yn==89||yn==121)
		t=1;
	else
		t=0;
	return t;
}

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值