1、输入一串字符串计算它的大小写字母以及数字的数量
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i=0;
int j=0;
char s[32]={0};
//scanf("%s",&s[32]);
while(1)
{
scanf("%c",&s[j]);
if(s[j]=='\n')
break;
j++;
}
//gets(s);
int sum1=0;
int sum2=0;
int sum3=0;
while(i<32&&s[i]!=0)
{
if(s[i]>='0'&&s[i]<='9')
{
sum1++;
}
if(s[i]>='A'&&s[i]<='Z')
{
sum2++;
}
if(s[i]>='a'&&s[i]<='z')
{
sum3++;
}
i++;
}
printf("大写字母%d个,小写字母%d个,数字%d个",sum2,sum3,sum1);
return 0;
}
2、输入带空格的字符串,求单词个数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i,sum=0;
char s[1000];
gets(s);
int ret=strlen(s);
for(i=0;i<ret;i++)
{
if(s[i]!=' ')
{
sum++;
for(i++;s[i]!=' '&&i<ret;i++)
{
}
}
}
printf("单词个数为%d个\n",sum);
return 0;
}
3、输出斐波那契数列前15项
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i=0;
int s[32];
s[0]=1,
s[1]=1;
for(i=2;i<15;i++)
{
s[i]=s[i-1]+s[i-2];
}
for(i=0;i<15;i++)
{
printf("%d ",s[i]);
}
return 0;
}
4、冒泡排序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
int i=0,j=0;
int temp;
int s[10];
for(i=0;i<10;i++)
{
scanf("%d",&s[i]);
}
for(i=1;i<10;i++)
{
for(j=0;j<10-i;j++)
{
if(s[j]>s[j+1])
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
}
for(i=0;i<10;i++)
{
printf("%d ",s[i]);
}
return 0;
}
5、自己实现strlen功能
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char str[100];
gets(str);
//实现strlen的功能
int i=0;
while(str[i])
{
i++;
}
printf("%d\n",i);
return 0;
}
拓展题:
2、
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, const char *argv[])
{
char s1[]="ABCD1234efgh";
char *p1=s1;
char *p2=s1;
while(*p2)
{
p2++;
}
p2--;
//p2已经跳转到\0位置,需要减1
char a=0;
int i=0;
int ret=strlen(s1);
while(i<=ret/2)
{
a=*p1;
*p1=*p2;
*p2=a;
p1++;
p2--;
i++;
}
printf("%s\n",s1);
return 0;
}
3、
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(int argc, const char *argv[])
{
int i=0,flag=1,num=0;
char s[128];
gets(s);
while(s[i])
{
if(s[i]=='-')
{
flag=-flag;
}
else if(s[i]>='0'&&s[i]<='9')
{
num=num*10+(s[i]-'0');
}
i++;
}
printf("%d\n",num*flag);
return 0;
}
作业:
1-3,5:有道云笔记
4:有道云笔记
归纳总结:
strlen(s)是计算字符串s的长度(不包括'\0'),strcpy(s1,s2)是把s2完全相同的拷贝给s1,strcat(s1,s2)是把s2从s1的'\0'处开始,追加给s1,所以s1要足够大,防止发生越界访问,strcmp(s1,s2),对s1和s2挨个比较ascii值,ascii值较大的数大,输出>0则s1>s2,输出<0则s1<s2,输出为0则s1和s2完全相等。
一维整形数组从终端输入需要用for循环,字符串不带空格的输入可以用scanf("%s",s);直接输入,需要带空格的输入用gets(s);还可以用fgets(s,sizeof(s),stdin);输入。