C语言基础复习(六)

例题1:统计单词个数

输入一段英文,统计英文单词个数。

输入:i am a student.

输出:4

#include<stdio.h>
#include<string.h>
int is(char c)//用于判断此字符是否为字母
{
	if((c>='a'&&c<='z')||(c>='A'&&c<='Z')) return 1;
	else return 0;
}
int wordcount(char *s)
{
	int i,j,count=0;
	for(i=0,j=1;s[i]!='\0';i++,j++)
	{
		if(is(s[i])&&!is(s[j])) count++;//前一个是字母,后一个不是字母,此时是单词
	}
	return count;
}
int main()
{
	char str[50];
	gets(str);
	printf("单词个数:%d",wordcount(str));

	return 0;
}

例题2:删除元素(一)

已有一个整数数列,输入1个整数,从该数列中删除从左到右第一次出现的该整数。

原有:a[]={0,1,2,3,4,5,6,7,8,9}

输入:6

输出:0 1 2 3 4 5 7 8 9

#include<stdio.h>
void remov(int *arr,int n)
{
	int i,j,a;
	scanf("%d",&a);
	for(i=0;i<n;i++)
	{
		if(arr[i]==a)
		{
			for(j=i;j<n-1;j++)
			{
				arr[j]=arr[j+1];
			}
			break;//只删除第一个,找到一个直接break跳出循环 
		}
	}
}
int main()
{
	int a[]={0,1,2,3,4,5,6,7,8,9},n,i;
	n=sizeof(a)/sizeof(a[0]);//计算数组长度
	remov(a,n);
	for(i=0;i<n-1;i++) printf("%d ",a[i]);
	return 0;
}

例题3:删除元素(二)

已有一个整数数列,输入1个整数,从该数列中删除所有出现的该整数。

原有:10 8 8 6 5 6 4 3 2 1

输入:6

输出:10 8 8 5 4 3 2 1

输入:8

输出:10 6 5 6 4 3 2 1

#include<stdio.h>
void remov(int *arr,int* pn)
{
	int *i,*j,a;
	scanf("%d",&a);
	for(i=arr;i<arr+*pn;i++)
	{
		if(*i==a)
		{
			for(j=i;j<arr+*pn-1;j++)//每删除一个,*pn的值也在改变 
			{
				*j=*(j+1);
			}
			(*pn)--;//!!用于后续打印输出,和删除元素后的数组,来判断数组还剩下多少个数 
			i--;//针对两个数连在一起的情况 
		}
	}
}
int main()
{
	int a[]={10,8,8,6,5,6,4,3,2,1},n,i,*pn=&n;//用指针可以 
	n=sizeof(a)/sizeof(a[0]);//计算数组长度
	remov(a,pn);
	for(i=0;i<*pn;i++) printf("%d ",a[i]);
	return 0;
}

例题4:删除重复元素

输入10个整数数列,删除数列中所有重复的整数,使数列中给所有整数是唯一(不重复)

输入:10 8 8 6 5 6 4 3 2 1

输出:10 8 6 5 4 3 2 1

#include<stdio.h>
int main()
{
	int arr[10],count=0,i,j,k;
	for(i=0;i<10;i++)
	{
		scanf("%d",&arr[i]);
		count++;
	}
	for(i=0;i<count-1;i++)
	{
		for(j=i+1;j<count;j++)
		{
			if(arr[i]==arr[j])
			{
				for(k=j;k<count-1;k++)//删除操作 
				{
					arr[k]=arr[k+1];
				}
				count--;//每有一个相等,数组元素减少1 
				j--;//元素向前移动后,要从当前位置重新判断 
			}
		}
	}
	for(i=0;i<count;i++) printf("%d ",arr[i]);
	return 0;
}

例题5:排序

方法一:

#include<stdio.h>
void swap(int* a,int* b)
{
	int t;
	t=*a;
	*a=*b;
	*b=t;
}
int main()
{
	int arr[10]={1,5,7,9,4,1,6,8,2,10};
	int i,j;
	for(i=1;i<10;i++)
	{
		for(j=i-1;j>=0;j--)
		{
			if(arr[j+1]<arr[j]) swap(&arr[j+1],&arr[j]);
		}	
	} 
	for(i=0;i<10;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

方法二:

#include<stdio.h>
void swap(int* a,int* b)
{
	int t;
	t=*a;
	*a=*b;
	*b=t;
}
int main()
{
	int arr[10]={1,5,7,9,4,1,6,8,2,10};
	int i,j;
	for(i=0;i<10-1;i++)
	{
		for(j=i+1;j<10;j++)
		{
			if(arr[j]<arr[i]) swap(&arr[i],&arr[j]);
		}
	}
	for(i=0;i<10;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

例题6:等边数字三角形

输入十进制数字a(0~9)、整数n,形成等边直角三角形结构:

                    a

                    aa

                    aaa

                    aaa.... aaaa。

并求所有数据项之和。

#include<stdio.h>
int main()
{
	int a,n,i,j,sum=0,s=0;
	scanf("%d%d",&a,&n);
	for(i=1;i<=n;i++)
	{
		s=s*10+a;
		printf("%d\n",s);
		sum=sum+s;
	}
	printf("和为:%d",sum);
	return 0;
}

例题7:判断子字符串

输入一个字符串1,再输入一个字符串2,判断字符串2是否包含在字符串1中。如果包含,返回字符串2在字符串1中的起始位置;如不包含,则返回-1.

输入:i am a student.

           student

输出:7

#include<stdio.h>
#include<string.h>
int strcontain(char *s1,char *s2)
{
	int i,j,k,n1=strlen(s1),n2=strlen(s2);
	for(i=0;i<n1;i++)//s1中的每一个字符都判断一遍
	{
		for(j=0,k=i;j<n2&&k<n1;j++,k++)//每次将j归零,到s2遍历完成或s1遍历完成为止
		{
			if((s1[k]!=s2[j]))//如果在遍历时,对应位置不相等,直接break
			{
				break;
			}
		}
		if(j==n2)//若j(s2的循环)加到了n2
		{
			return i;//返回s1中开始遍历的i(位置)
		}	
	}
	return -1;
}
int main()
{
	char str1[50];
	char str2[50];
	int is;
	gets(str1);
	gets(str2);
	is=strcontain(str1,str2);
	printf("%d\n",is);
	return 0;
}

  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

背水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值