6.14作业

1.输入一个字符串。删除空格

hello world ! ! !

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char dest[100]="";
	char src[100]="";
	gets(src);
	int i=0;
	for(int j=0;j<strlen(src);j++)
	{
		if(src[j]!=' ')
		dest[i++]=src[j];
	}
	dest[i]='\0';
	puts(dest);
	return 0;
}

2. 输入一个字符串,实现单词的逆置

good good study ---->study good good

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char str[100]="";
	gets(str);
	int i=0,j=strlen(str)-1;
	while(i<j)
	{
		char t=str[i];str[i]=str[j];str[j]=t;
		i++;j--;
	}
	i=j=0;
	while(str[i]!='\0')
	{
		while(str[j]!=' '&&str[j]!='\0')
		j++;
		int k=j-1;
		while(i<k)
		{
			char t=str[i];str[i]=str[k];str[k]=t;
			i++;k--;
		}
		while(str[j]==' ')
		j++;
		i=j;
	}
	puts(str);
	return 0;
}

3.输入一个字符串,计算单词的个数

"good good study" 3

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char str[100]="";
	gets(str);
	int count=0,flag=0;
	for(int i=0;i<strlen(str);i++)
	{
		if(str[i]!=' ')
		{
			if(flag==0)
			{
				count++;
			    flag=1;
			}
		}
		else
			flag=0;
	}
	printf("单词的个数为%d\n",count);
	return 0;
}

4.穷举算法:“鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?”

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int x,y,z;
	for(x=0;x<=100;x++)
	{
		for(y=0;y<=100;y++)
		{
			z=100-x-y;
			if(z>=0&&5*x+3*y+z/3.0==100)
			printf("公鸡有%d只,母鸡有%d只,小鸡有%d只\n",x,y,z);
		}
	}
	return 0;
}

5. 打印图形:九九乘法表

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int i,j;
	for(i=1;i<=9;i++)
	{
		for(j=1;j<=i;j++)
		printf("%d×%d=%-4d",j,i,j*i);
		putchar(10);
	}
	return 0;
}

6.循环输入n个元素,交换数组中最大值和最小值

12 3 5 2 5 --->2 3 5 12 5

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n;
	printf("please enter n:");
	scanf("%d",&n);
	int a[n],i;
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	int max=a[0],min=a[0],maxi=0,mini=0;
	for(i=0;i<n;i++)
	{
		if(max<a[i])
		{
			max=a[i];
			maxi=i;
		}
		if(min>a[i])
		{
			min=a[i];
			mini=i;
		}
	}
	a[maxi]=min,a[mini]=max;
	for(i=0;i<n;i++)
	printf("%d ",a[i]);
	putchar(10);
	return 0;
}

7.输入字符串,输入变量k的值,将字符循环右移k位

eg: k=2

char arr[]="abcde"

移动的结果是:

deabc

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char a[100]="";
	gets(a);
	int k,i,n=strlen(a);
	printf("k=");
	scanf("%d",&k);
	char b[100]="";
	for(i=0;i<k;i++)
	b[i]=a[i];
	for(i=n-1;i>=k;i--)
	a[(i+k)%n]=a[i];
	for(i=0;i<k;i++)
	a[(i+k)%n]=b[i];
	puts(a);
	return 0;
}

8.定义字符串并输入,请实现对字符串每个字符升序排序

“bdcae” --->"abcde"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char a[100]="";
	gets(a);
	for(int i=1;i<strlen(a);i++)
	{
		for(int j=0;j<strlen(a)-i;j++)
		{
			if(a[j]>a[j+1])
			{
				char t=a[j];
			    a[j]=a[j+1];
		     	a[j+1]=t;
			}
		}
	}
	puts(a);
	return 0;
}

9.输入5个学生的姓名,请输出姓名中的最大值

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char a[5][100];
	int i;
	for(i=0;i<5;i++)
	scanf("%s",a[i]);
	char max[100];
	strcpy(max,a[0]);
	for(i=0;i<5;i++)
	{
		if(strcmp(max,a[i])<0)
		strcpy(max,a[i]);
	}    
	printf("最大值为%s\n",max);
	return 0;
}

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void delete_space(char str[]);
void str_rev(char str[]);
void delete_space(char str[]);
void Print();
void str_rev(char str[]);
void swap_max_min(int *p,int n);

int world_count(char str[]);
void QiongJu();
char* Max_name(char (*p)[128],int line,int row);//p-->str
void move(char *str,int k);
int main(int argc, const char *argv[])
{
	int chioce;
	while(1)
	{
		printf("1.删除空格\n");
		printf("2.单词逆值\n");
		printf("请输入你的选择:");
		scanf("%d",&chioce);
		switch(chioce)
		{
			case 1:
				{
					char str[128]="";
					printf("please enter str:");
					getchar();
					gets(str);
					//调用删除空格的函数
					delete_space(str);
				}
				break;
			case 2:
				{
					char str[]="good   good   study";
					str_rev(str);
				}break;
			case 3:
				{
						char str[128]="";
					printf("please enter str:");
					getchar();
					gets(str);
					//计算单词的个数
					printf("单词的个数是:%d\n",world_count(str));
				}break;
			case 4:
				{
					QiongJu();
				}break;
			case 5:
				{
					Print();
				}break;
			case 6:
				{
					int arr[]={12,3,5,3,6,8,3,6};
					
					swap_max_min(arr,sizeof(arr)/sizeof(arr[0]));
				}break;
			case 7:
				{
					char str[128]="";
					int k;
					printf("please enter str:");
					scanf("%s",str);
					printf("please enter k:");
					scanf("%d",&k);
					move(str,k);
				}break;
			case 8:
				{
					char str[5][128]={""};
					for(int i=0;i<5;i++)
					{
						printf("please enter %d name:",i+1);
						scanf("%s",str[i]);
					}
					char*p=Max_name(str,5,128);
					puts(p);
				}break;
			default:printf("error\n");break;
		}
	}
	return 0;
}

char* Max_name(char (*p)[128],int line,int row)//p-->str
{
	static char max[128];
	strcpy(max,*p);//max赋值为第一个字符串


	//aaa  bbbb cccc   ddd
	//max
	for(int i=0;i<line;i++)
	{
		if(strcmp(max,*(p+i))<0)
		{
			strcpy(max,*(p+i));
		}
	}
	return max;
}
void move(char *str,int k)
{
	//k=2
	//abcde
	for(int j=0;j<k;j++)
	{
		char t=*str;
		int n=strlen(str);
		for(int i=n-1;i>0;i--)
		{
			str[(i+1)%n]=str[i];
		}
		str[1]=t;
	}
	puts(str);
}
void swap_max_min(int *p,int n)
{
	int max=*p,min=*p,maxi=0,mini=0;
	for(int i=0;i<n;i++)
	{
		if(max<*(p+i))
		{
			max=*(p+i);maxi=i;
		}
		if(min>*(p+i))
		{
			min=*(p+i);mini=i;
		}
	}
	//交换 a[maxi]  a[mini]
	int t=*(p+maxi);*(p+maxi)=*(p+mini);*(p+mini)=t;
	for(int i=0;i<n;i++)
		printf("%d ",*(p+i));
}

//九九乘法表
void Print()
{
	for(int i=1;i<=9;i++)
	{
		for(int j=1;j<=i;j++)
		{
			printf("%d*%d=%-3d",j,i,i*j);
		}
		putchar(10);
	}
}
void QiongJu()
{
	int x,y,z;
	//x:0--20
	//y:0-33
	//z:0--100
	//x+y+z==100 
	//5*x+3*y+z/3==100
	//z%3==0
	for(int x=0;x<=20;x++)
	for(int y=0;y<=33;y++)
		for(int z=0;z<=100;z++)
			if(x+y+z==100&&5*x+3*y+z/3==100&&z%3==0)
				printf("x=%d y=%d z=%d\n",x,y,z);
}

//删除空格
void delete_space(char str[])
{
	//“a  b  c def”
	// 0123456789
	// ij
	int i,j;
	int k=0;

	for(i=0;str[i]!='\0';i++)
	{
		if(str[i]==' ')
		{
			//把后面的值前移动
			for(j=i+1;str[j]!='\0';j++)
			{
				str[j-1]=str[j];//前移
			}
			str[j-1]=0;
			i--;

		}
	}
	printf("k=%d\n",i);
	puts(str);
}


void str_rev(char str[])
{
	//先整体逆值
//yood    good   studg
//i                  j
// i                j	
	int i=0,j=strlen(str)-1;
	while(i<j)
	{
		char t=str[i];str[i]=str[j];str[j]=t;
		i++;j--;
	}
// "study   good   good\0"
//                      i   
//                    k
//                     j
	//单词逆值
	i=0,j=0;
while(str[i]!='\0')
{
	//找到空格结束
	while(str[j]!=' '&& str[j]!='\0')
		j++;
	//k标志单词的最后一个下表
	int k=j-1;
	//交换i--k之间的字符
	while(i<k)
	{
		char t=str[i];str[i]=str[k];str[k]=t;
		i++;k--;
	}
	//j循环到跳过空格
	while(str[j]==' ')
		j++;
	i=j;
}
	puts(str);
}

//计算单词的个数
int world_count(char str[])
{
	int count=0;
	for(int i=0;str[i]!='\0';i++)
	{
		if(str[i]!=' '&&str[i+1]==' ' || str[i]!=' '&&str[i+1]=='\0')
			count++;
	}
	return count;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值