learn c
1.你好世界
#include<stdio.h>
int main(){
printf("hello world\n");
return 0;
}
2.1.输入两数互相减必须整数
#include<stdio.h>
int main()
{ int a=0;
int c=0;
scanf("%d %d",&a,&c);
int e=a-c;
printf("%d",e);
return 0;
}
2.2.输入两数互相减可以小数
#include<stdio.h>
int main()
{ double a=0;
double c=0;
scanf("%lf %lf",&a,&c);
double e=a-c;
printf("%f",e);
return 0;
}
3.输入三位数然后倒过来
#include<stdio.h>
int main()
{ int a=443;
printf("现在你来输入一个三位数吧\n");
scanf("%d", &a);
int c=(a/100);
int e=(a-100*c)/10;
int u=(a-100*c-10*e);
int p=u*100+e*10+c;
printf("%d\n",p);
return 0;
}
3.输入三位数然后倒过来2
#include<stdio.h>
int main()
{ int a=443;
printf("三位数\n");
scanf("%d", &a);
if (a>999)
{printf("这是三位数?太大了");
}
if (a<0)
{printf("负数了");
}
if (a>0&&a<99)
{
int c=(a/100);
int e=(a-100*c)/10;
int u=(a-100*c-10*e);
int p=u*100+e*10+c;
printf("%d\n",p);
}
return 0;
}
4.判断数字位数
#include<stdio.h>
int main()
{ int a;
int n=0;
scanf("%d",&a);
n=n+1;
a/=10;
while (a>0)
{
n++;
a=a/10;
}
printf("%d",n);
return 0;
}
4.判断数字位数2
#include<stdio.h>
int main()
{ int a;
int n=0;
scanf("%d",&a);
do
{ n=n+1;
a/=10;
} while (a>0);
printf("%d",n);
return 0;
}
4.判断数字位数3
#include<stdio.h>
int num,a;
int main()
{
scanf("%d",&num);
do
{
num=num/10;
a++;
}while(num>0);
printf("%d",a);
}
5.计算阶乘
#include<stdio.h>
int main()
{ int a;
printf("我会帮你计算___的阶乘\n");
scanf("%d",&a);
int b=1;
int c=1;
if (a<0)
{
printf("上课听讲了嘛你阶乘就负数");
return 1;
}
if (a>1)
{while (c<=a)
{
b*=c;
c=c+1;
}
}else{
printf("这是特殊的!长大以后再来学习吧,可以先告诉你答案\n");
}
printf("%d!=%d\n",a,b);
return 0;
}
5.计算阶乘2
#include<stdio.h>
int main()
{ int a;
printf("我会帮你计算___的阶乘\n");
scanf("%d",&a);
int b=1;
if (a<0)
{
printf("上课听讲了嘛你阶乘就负数");
return 1;
}
if (a>1)
{for (int c=1; c<=a; c++)
{
b*=c;
}
}else{
printf("这是特殊的!\n");
}
printf("%d!=%d\n",a,b);
return 0;
}
5.计算阶乘3
int jcheng(int a)
{
if(a<=1)
{
return 1;
}else
{
return a*jcheng(a-1);
}
}
6.一二一二,一往前站,罗列序号
#include<stdio.h>
int main()
{ int a;
printf("班上有多少人?我将为你列举站在第一排的学生序号。\n");
scanf("%d",&a);
for ( int i = 1; i <= a; i=i+2)
{
printf("%d ",i);
}
return 0;
}
7.跟10比大小
#include<stdio.h>
#include<stdbool.h>
int main()
{ int a;
int b=10;
scanf("%d",&a);
a>b?printf("1"):printf("2");
return 0;
}
8.判断正负
#include<stdio.h>
#include<stdbool.h>
int main()
{ int a;
printf("我可以判断正负\n");
scanf("%d",&a);
if (a>0){
printf("正数\n");
}
else if (a<0){
printf("负数\n");
}
else if (a=0){
printf("是0哦\n");
}
else{
printf("请输入数字哦\n");
}
return 0;
}
9.五以内的正整数加二
#include<stdio.h>
#include<stdbool.h>
int main()
{ int a;
printf("给我一个五以内的正整数,我可以告诉你这个数加二等于多少\n");
scanf("%d",&a);
switch (a){
case (0):
case (-1):
printf("这不是正整数哦");
break;
case (1):
printf("是3");
break;
case (2):
printf("是4");
break;
case (3):
printf("是5");
break;
case (4):
printf("是6");
break;
case (5):
printf("是7");
break;
default:
printf("请输入五以内的正整数哦");
break;
}
return 0;
}
10.算1加到n
#include<stdio.h>
#include<stdbool.h>
int main()
{ int a;
int b=0;
int c=0;
printf("算整数1到前n项的和\n");
scanf("%d",&a);
while (a>0)
{
b+=a;//b+=a = b=a+b
a--;
c++;
}
printf("%d",b);
return 0;
}
10.算1加到n2
#include<stdio.h>
#include<stdbool.h>
int main()
{ int a;
int b=0;
int c=0;
printf("算整数1到前n项的和\n");
scanf("%d",&a);
double d=(a+1)*a/2;
printf("%f",d);
// 数学的魅力啊!
return 0;
}
11.100以内猜数字
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{//随机生成一个一百以内的数字
srand(time(0));
int a=rand();
int b=a%100+1;
int c=0;
int d=0;
printf("我已经想好了一个1~100的数字\n");
do
{
printf("请猜猜这个数字吧\n");
scanf("%d",&c);
d++;
if (c>b)
{
printf("你猜的数字大了,再试试吧");
}
else if (c<b)
{
printf("你猜的数字小了,再试试吧");
}
} while (c!=b);
printf("天,太棒了哥们,你只用了%d次数就猜到了答案\n",d);
return 0;
}
11.1猜数字(自定义版本)
#include<stdio.h>
int main()
{
int realnum=123;
int guessnum;
int a=0;
printf ("now,we have number now!\n") ;
do
{
printf ("have a guess!\n");
scanf ("%d",&guessnum) ;
a++;
if (guessnum>realnum)
{
printf("too much\n");
}
else if (guessnum<realnum)
{
printf("too little\n");
}
} while (guessnum!=realnum&&a<5);
if (a<5&&a>=1)
{
printf("great job!\nyou succeeded in just %d attempts",a);
}else
{
printf("you lose\n");
}
return 0;
}
12.判断素数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
int b;
int c=1;
printf("我会帮你判断____是否是素数\n");
scanf("%d",&a);
for (b=2; b < a; b++)
{
if (a%b==0)
{
c=0;
break;
}
}
if (c==1)
{
printf("是素数");
} else{
printf("不是素数");
}
return 0;
}
13.判断多少以内的所有素数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
int b;
int d;
printf("我会帮你输入____之前的所有素数\n");
scanf("%d",&d);
for ( a=2; a <d; a++)
{
int c=1;
for (b=2; b < a; b++)
{
if (a%b==0)
{
c=0;
break;
}
}
if (c==1)
{
printf("%d\n",a);
}
}
return 0;
}
14.判断前多少个素数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a=2;
int b;
int d;
printf("我会帮你输入前____个素数\n");
scanf("%d",&d);
//for ( a=2; a <d; a++)
int e=0;
while (e<d)
{
int c=1;
for (b=2; b < a; b++)
{
if (a%b==0)
{
c=0;
break;
}
}
if (c==1)
{
printf("%d\n",a);
e++;
}
a++;
}
return 0;
}
14.判断前多少个素数2
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a=2;
int b;
int d;
printf("我会帮你输入前____个素数\n");
scanf("%d",&d);
//for ( a=2; a <d; a++)
int e=0;
for ( a=2; e < d; a++)
{
int c=1;
for (b=2; b < a; b++)
{
if (a%b==0)
{
c=0;
break;
}
}
if (c==1)
{
printf("%d\n",a);
e++;
}
}
return 0;
}
15.1.1除以n的前n项和
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
int b;
double c=0.0;
printf("f(n)=1/1+1/2+1/3+1/4+...1/n,输入n\n");
scanf("%d",&a);
for ( b = 1; b <= a; b++)
{
c+=1.0/b;
}
printf("f(n)=%f\n",c);
return 0;
}
15.2.正负1除以n的前n项和
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
int b;
double c=0.0;
int d=1;
printf("f(n)=1/1-1/2+1/3-1/4+...1/n,输入n\n");
scanf("%d",&a);
for ( b = 1; b <= a; b++)
{
c+=d*1.0/b;
d=-d;
}
printf("f(n)=%f\n",c);
return 0;
}
16.找两个数的最大公约数(枚举法)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a,b;
int min;
printf("输入两个数中间用“ ”间隔开\n");
scanf("%d %d",&a,&b);
if (a>b)
{
min=b;
}else{
min=a;
}
int c=1;
int i;
for ( i = 1; i <= min; i++){
if (a%i==0){
if (b%i==0){
c=i;
}
}
}
printf("%d和%d的最大公约数为%d",a,b,c);
return 0;
}
16.找两个数的最大公约数(辗转相除法)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a,b;
printf("输入两个数中间用“ ”间隔开\n");
scanf("%d %d",&a,&b);
int c;
int d;
while (b!=0)
{
d=a%b;
a=b;
b=d;
}
c=a;
printf("最小公约数为%d",c);
return 0;
}
17.1.输入任意多位数,倒过来展现(3.的进阶)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
scanf("%d",&a);
do
{
int b=a%10;
printf("%d ",b);
a/=10;
} while (a>0);
printf("\n");
return 0;
}
17.2.输入任意多位数,正着展现
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
int b=1;
int c=1;
printf("输入一个数字吧\n");
scanf("%d",&a);
int d=a;
while (d>9)
{
d/=10;
b++;
c*=10;
}
printf("这是%d位数\n",b);
do
{
int e=a/c;
printf("%d",e);
if (c>1)
{
printf(" ");
}
a%=c;
c/=10;
} while (c>0);
printf("\n");
return 0;
}
18.算平均数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
int a;
double b=0;
int c=0;
printf("我将为你计算所有数字的平均数\n中间用“ ”间隔开来,输入“-1”时候,为你输出平均数\n");
scanf("%d",&a);
while (a!=-1)
{
b+=a;
c++;
scanf("%d",&a);
}
if (c>0)
{
printf("你总共输入了%d个数,他们的平均数是%f",c,b/c);
}
return 0;
}
19.统计1~9的整数的个数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int main()
{
const int num=10;
int a;
int count[num];
int i;
for ( i = 0; i < num; i++)
{
count[i]=0;
}
scanf("%d",&a);
while (a!=-1)
{
if (a>=0&&a<=9)
{
count[a]++;
}
scanf("%d",&a);
}
for ( i = 0; i < num; i++)
{
printf("%d:%d\n",i,count[i]);
}
return 0;
}
20.计算两数之间所有数之和
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void sum(int a,int b)
{
int i;
int sum=0;
for ( i = a; i<=b ; i++)
{
sum+=i;
}
printf("从%d加到%d等于%d",a,b,sum);
}
int main()
{
int c,d;
printf("输入两个数字我会为你计算这两个数之间所有数的和,两数之间用“,”连接\n");
scanf("%d,%d",&c,&d);
sum(c,d);
return 0;
}
21.前多少数的素数表
#include<stdio.h>
#include<stdbool.h>
#include<math.h>
int main(void)
{
const int maxnum=25;//修改的地方
int prime[maxnum];
int i;
int x;
for ( i = 0; i < maxnum; i++)
{
prime[i]=1;
}
for ( x = 2; x < maxnum; x++)
{
if (prime[x])
{
for ( i = 2; i*x < maxnum; i++)
{
prime[i*x]=0;
}
}
}
for ( i = 2; i < maxnum; i++)
{
if (prime[i])
{
printf("%d\t",i);
}
}
printf("\n");
return 0;
}
22.给与数组,然后线性搜索
#include<stdio.h>
#include<math.h>
int search(int key,int a[],int len)
{
int ret=-1;
for ( int i = 0; i < len; i++)
{
if (key==a[i])
{
ret=i;
break;
}
}
return ret;
}
int main()
{
printf("数列1,2,3,5,6,5,121,38,12,34,23中我可以告诉你这个数字是第几个\n");
int a;
int abc[]={1,2,3,5,6,5,121,38,12,34,23};
scanf("%d",&a);
int r=search(a,abc,sizeof(abc)/sizeof(abc[0]));
if (r!=-1)
{printf("这是数列的第%d个\n",r);
}
else printf("这个数字不在数列中哦\n");
}
23.数字美分和英文一一对应
#include<stdio.h>
#include<math.h>
int amount[]={1,5,10,25,50};
char *name[]={"penny","nickel","dime","quarter","half-doller"};
int search(int key,int a[],int len)
{
int ret=-1;
for ( int i = 0; i < len; i++)
{
if (key==a[i])
{
ret=i;
break;
}
}
return ret;
}
int main()
{
printf("我可以告诉你1,5,10,25,50美分的英文哦\n");
int a;
scanf("%d",&a);
int r=search(a,amount,sizeof(amount)/sizeof(amount[0]));
if (r!=-1)
{
printf("%s\n",name[r]);
}
else printf("你的%d美分太零碎啦\n",a);
}
23.数字美分和英文一一对应2
#include<stdio.h>
#include<math.h>
/*
int amount[]={1,5,10,25,50};
char *name[]={"penny","nickel","dime","quarter","half-doller"};
*/
struct
{
int amount;
char *name;
}miao[]={
{1,"penny"},
{5,"neckel"},
{10,"dime"},
{25,"quarter"},
{50,"half-doller"},
};
int search(int key,int a[],int len)
{
int ret=-1;
for ( int i = 0; i < len; i++)
{
if (key==a[i])
{
ret=i;
break;
}
}
return ret;
}
int main()
{
printf("我可以告诉你1,5,10,25,50美分的英文哦\n");
int a;
scanf("%d",&a);
//int r=search(a,amount,sizeof(amount)/sizeof(amount[0]));
for ( int i = 0; i < sizeof(miao)/sizeof(miao[0]);i++)
{
if (a==miao[i].amount)
{
printf("%s\n",miao[i].name);
break;
}
}
return 0;
}
24.二分法
#include<stdio.h>
#include<math.h>
int search(int key,int a[],int len)
{
int ret=-1;
int left=0;
int right=len-1;
while (right >left)
{
int mid=(left + right)/2;
if (a[mid]==key)
{
ret=mid;
break;
}
else if (a[mid]>key)
{
right=mid-1;
}
else
{
left=mid+1;
}
return ret;
}
}
int main()
{
return 0;
}
25.选择排序
#include<stdio.h>
#include<math.h>
int search(int key,int a[],int len)
{
int ret=-1;
int left=0;
int right=len-1;
while (right >left)
{
int mid=(left + right)/2;
if (a[mid]==key)
{
ret=mid;
break;
}
else if (a[mid]>key)
{
right=mid-1;
}
else
{
left=mid+1;
}
return ret;
}
}//二分法,但是这个的前提是有序排序,所以这个时候需要排序
int max(int a[],int len)
{
int maxid=0;
for (int i = 1; i < len; i++)
{
if (a[i]>a[maxid])
{
maxid=i;
}
}
return maxid;
}
int main()
{
int abc[]={1,2,3,5,6,5,121,38,12,34,23};
int len=sizeof(abc)/sizeof(abc[0]);
for ( int i = len-1; i > 0; i--)
{
int maxid=max(abc,i+1);
int t=abc[maxid];
abc[maxid]=abc[i];
abc[i]=t;
}
//输出
for ( int i = 0; i < len; i++)
{
printf("%d ",abc[i]);
}
return 0;
}
//int abc[]={1,2,3,5,6,5,121,38,12,34,23};
//sizeof(abc)/sizeof(abc[0])
26.显示地址
#include<stdio.h>
#include<math.h>
int main()
{
int i=0;
int p;
p=(int)&i;
printf("%p\n",p);
printf("%x\n",&i);
printf("%p\n",&i);
printf("%p\n",&p);
printf("%lu\n",sizeof(int));
printf("%lu\n",sizeof(i));
return 0;
}
27.定义地址
#include<stdio.h>
#include<math.h>
int main()
{
int i=0;
int *p=&i;
scanf("%d",p);
printf("%d\n",i);
return 0;
}
28.定义字符
#include<stdio.h>
int main()
{
char a;
scanf("%c",&a);
printf("a=%d\n",a);
printf("a='%c'\n",a);
return 0;
}
29.字符串函数(40.-43.目录)
#include<stdio.h>
#include<string.h>
int main()
{
char line[]="Hello!";
char a[]="abc";
char b[100];
//strlen(line)告诉字符有多长
printf("strlen=%d\n",strlen(line));
printf("sizeof=%d\n",sizeof(line));
//strcmp比大小 ,并且显示差值
printf("strcmp=%d\n",strcmp(line,a));
//strcpy誊抄
//安全版本是 strncpy ,size_t n
strcpy(b,line);
printf("b=%s\n",b);
//strcat连接
//安全版本是 strncat ,size_t n
printf("strcat=%d\n",strcat(a,b));//不一样的!!%d是地址%s是字符串!!
printf("strcat=%s\n",strcat(a,b));
//strchr从左寻找
//strrchr从右寻找
return 0;
}
30.用指针换两个数字
#include<stdio.h>
#include<string.h>
void swap(int *a,int *b);
int main(void){
int a=1;
int b=2;
printf("%d,%d",a,b);
swap(&a,&b);
printf("%d,%d",a,b);
}
void swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
31.除法
#include<math.h>
#include<stdio.h>
//如果除法成功,返回1,否则返回0
int divide(int a,int b,int *result);
int main (void){
int a,b,c;
printf("输入a和b,中间用“ ”分开,我会为你计算出a/b: \n");
scanf("%d %d",&a,&b);
if (divide(a,b,&c))
{
printf("%d/%d=%d\n",a,b,c);
}
return 0;
}
int divide(int a,int b,int *result)
{
int ret = 1;
if (b==0)
{
ret = 0;
}else{
*result = a/b;
}
return ret;
}
32.指针计算
#include<math.h>
#include<stdio.h>
int main (viod)
{
char ac[] = {0,1,2,3,4,5,6,7,8,9,};
char *p = ac;
char *p1 = ∾
char *p2 = &ac[6];
printf("p = %p\n",p);
printf("p+1 = %p\n",p+1);
printf("*(p+1) = %d\n",*(p+1));
printf("p1-p2= %d\n",p1-p2);
/*
*p->ac[0]
*(p=1)->ac[1]
*(p+n)==ac[n]
*/
int ad[] = {0,9090,2,3,4,5,6,7,8,9,};
int *b = ad;
int *b1 = &ad[1];
int *b2 = &ad[2];
printf("b = %p\n",b);
printf("b+1 = %p\n",b+1);
printf("*(b+1) = %d\n",*(b+1));
printf("b1-b= %d\n",b1-b);
printf("b2-b= %d\n",b2-b);
return 0;
}
33.指针展示
#include<math.h>
#include<stdio.h>
int main (viod)
{
char ac[] = {0,1,2,3,4,5,6,7,8,9,-1,};
char *p = ∾
int i;
for ( i = 0; i < sizeof(ac)/sizeof(ac[0]); i++)
{
printf("%d\n",ac[i]);
/* code */
}
for ( p=ac; *p!=-1; p++)
{
printf("%d\n",*p);
/* code */
}
for ( p=ac; *p!=-1;)
{
printf("%d\n",*p++);
/* code */
}
while (*p!=-1)
{
printf("%d\n",*p++);
/* code */
}
int ad[] = {0,9090,2,3,4,5,6,7,8,9,};
int *b = ad;
return 0;
}
34.自定义数组长度
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
int main (viod)
{
int num;
int* a;
int i;
printf("输入数量:");
scanf("%d",&num);
//int a[num];
a = (int*)malloc(num*sizeof(int));
for ( i = 0; i < num; i++)
{
scanf("%d",&a[i]);
/* code */
}
for ( i = num-1; i >= 0; i--)
{
printf("%d",a[i]);
/* code */
}
free(a);
return 0;
}
35.借空间
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
int main (viod)
{
void *p = 0;
int a = 0;
while ((p=malloc(100*1024*1024)))
{
a++;
}
printf("分配了%d00MB的空间\n",a);
//free(NULL);
free(p);
return 0;
}
36.复述 EOF
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
int main (int argc,char const *argv[])
{
int ch;
while ((ch= getchar())!=EOF)
{
putchar(ch);
/* code */
}
/*
windows是
输入ctrl+z是输入结束
输入ctrl+c是强制结束程序
linux是
输入ctrl+d是输入结束
输入ctrl+c是强制结束程序
*/
printf("EOF\n");
return 0;
}
37.字符串数组
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
int main (void)
{
char *a[] = {
"Hello",
"world",
"asdfghjklzxcvbnm",
};
char b[][10] = {
"Hello",
"world",
};
return 0;
}
38.main里有啥
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
int main (int argc,char const *argv[])
{
for ( int i = 0; i < argc; i++)
{
printf("%d:%s\n",i,argv[i]);
}
return 0;
}
39.用字符串数组表示月份(9.和23.的进阶)
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
int main (void)
{
printf("请输入月份:");
int i ;
scanf("%d",&i);
char *month []=
{
"January\n",
"February\n",
"March\n",
"April\n",
"May\n",
"June\n",
"July\n",
"August\n",
"September\n",
"October\n",
"November\n",
"December\n",
};
printf("%s\n",month[i-1]);
/*
if (i >= 1 && i <= 12) {
printf("%s\n", month[i - 1]);
} else {
printf("输入无效!请输入1到12之间的数字。\n");
}*/
return 0;
}
40.获取长度
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int mylen(const char *s)
{
//int cnt = 0;
int idx = 0;
while (s[idx] != '\0')
{
idx++;
//cnt++;
}
//return cnt;
return idx;
}
int main (int argc,char const *argv[])
{
char line []="Hello";
printf("strlen=%lu\n",strlen(line));//计算长度
printf("strlen=%lu\n",mylen(line));
printf("sizeof=%lu\n",sizeof(line));
return 0;
}
41.比字符串大小
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*
int mycmp(const char *s1,const char *s2)
{
int idx = 0;
while (s1[idx]==s2[idx] && s1[idx]!='\0')
{
//while (1)
//{
//if (s1[idx]!=s2[idx])
//{
// break;
//}
//else if (s1[idx]=='\0')
//{
// break;
//}
idx++;
}
return s1[idx]-s2[idx];
}
*/
int mycmp(const char *s1,const char *s2)
{
int idx = 0;
while (*s1==*s2 && *s1!='\0')
{
s1++;
s2++;
}
return *s1-*s2;
}
int main (int argc,char const *argv[])
{
char s1[]="abc";
char s2[]="bbc";
char s3[]="Abc";
char s4[]="abc ";
printf("%d\n",strcmp(s1,s1));//si==s2 0
printf("%d\n",strcmp(s1,s2));//si<s2 -1
printf("%d\n",strcmp(s1,s3));//si>s2 1
printf("%d\n",strcmp(s1,s4));
printf("%d\n",mycmp(s1,s1));//si==s2 0
printf("%d\n",mycmp(s1,s2));//si<s2 -1
printf("%d\n",mycmp(s1,s3));//si>s2 1
printf("%d\n",mycmp(s1,s4));
printf("%d\n",'a'-'A');
return 0;
}
42.复制
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//1
/*
int *mycpy(char *dst ,char *src)
{
int idx = 0;
while (src[idx]!='\0')
{
dst[idx]=src[idx];
idx++;
}
dst[idx]=src[idx];
dst[idx]='\0';
return dst;
}
*/
//2
/*
int *mycpy(char *dst ,char *src)
{
int idx = 0;
while (src[idx])
{
dst[idx]=src[idx];
idx++;
}
dst[idx]=src[idx];
dst[idx]='\0';
return dst;
}
*/
//3
/*
int *mycpy(char *dst ,char *src)
{
char *ret=dst;
while (*src!='\0'){
*dst=*src;
dst++;
src++;
}
*dst='\0';
return ret;
}
*/
int *mycpy(char *dst ,char *src)
{
char *ret=dst;
while (*dst++=*src++);
*dst='\0';
return ret;
}
int main (int argc,char const *argv[])
{
char s1[]="abc";
char s2[]="abc";
strcpy(s1,s2);
return 0;
}
43.找字符
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main (int argc,char const *argv[])
{
char s[]="hello";
char *p=strchr(s,'l');
char c=*p;
*p='\0';
p=strchr(p+1,'l');
char *t=(char*)malloc(strlen(s)+1);
strcpy(t,p);
//printf("%s\n",p);
printf("%s\n",s);
free(t);
return 0;
}
44.找字符串
#define _GNU_SOURCE//特殊分大小写前置
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <strings.h>//特殊分大小写(但是vs好像不支持strcasestr)
char *my_strcasestr(const char *a, const char *b) {
size_t n = strlen(b);
while (*a) {
if (strncasecmp(a, b, n) == 0)
return (char *)a;
++a;
}
return NULL;
}
int main (void)
{
char s[]="helloWorld";
char a[]="owo";
char *p1=strstr(s,a);
//char *p2=strcasestr(s,a);
char *p2=my_strcasestr(s,a);
//p1=strstr(p1+1,s);//找多个,确定至少有一个
//printf("%s\n",p1);
if (p1) //判断存在
{
printf("在 %ld\n", p1 - s);
}
else
{
printf("'%s'没找到捏\n", a);
}
//p2=strcasestr(p2+1,s);//必须是p != NULL
//printf("%s\n",p2);
if (p2) //判断存在
{
printf("在 %ld\n", p2 - s);
}
else
{
printf("'%s'没找到捏\n", a);
}
return 0;
}
45.二维数组转一维(纵向左到右)
#include<stdio.h>
void num(const int*a,int b,int c,int d[])
{
//a 是首项元素,b 是行,c 是列
for (int j=0;j<c;++j)
for (int i=0;i<b;++i)
{
*d++=a[i*c+j];
}
}
int main()
{
int e[4][3] = {1,2,3,4,5,6,7,8,9,10,11,12};
int f[100];
num(&e[0][0],4,3,f);
for (int i=0;i<12;++i)
{
printf("%d",f[i]);
}
return 0;
}
46.输入任意多位数,倒过来展现(3.的进阶)(17.1.的进阶)
#include<stdio.h>
int main()
{
int a;
scanf("%d", &a);
int c=0;
do {
int b=a%10;
if (b!=0||c)
{
printf("%d",b);
c=1;
}
a/=10;
} while (a>0);
if (!c)
{
printf("0");
}
return 0;
}
47.次方(次幂)函数
int cifang(int a,int b){
int c=1;
for(int i=1;i<=b;i++){
c*=a;
}
return c;
}
48.比大小(冒泡排序)
#include<stdio.h>
int main()
{
int itoio[10]={0};
//输入十个数字
printf("write ten num(each number is separated by ',' :\n");
for ( int i = 0; i < 10; i++)
{
scanf("%d,",&itoio[i]);
}
//比大小
//int itoio[10]={12,51,3,12,36,98,74,15,54,20};
int a,b,c;
for ( a = 0; a < 10-1; a++)
{
for ( b = 0; b < 10-1-a; b++)
{
if (itoio[b]>itoio[b+1])
{
c=itoio[b];
itoio[b]=itoio[b+1];
itoio[b+1]=c;
}
}
}
for ( int i = 0; i < 10; i++)
{
printf("%d ",itoio[i]);
}
printf("\n");
return 0;
}