输入一段英文,统计英文单词个数。
输入: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;
}
已有一个整数数列,输入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;
}
已有一个整数数列,输入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;
}
输入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-2;i++)
{
for(j=i+1;j<count-1;j++)
{
if(arr[i]==arr[j])
{
for(k=j;k<count-2;k++)//删除操作
{
arr[k]=arr[k+1];
}
count--;//每有一个相等,数组元素减少1
}
}
}
for(i=0;i<count-1;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=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;
}
输入十进制数字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;
}
输入一个字符串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;
}