Day7-C语言打印杨辉三角

1.杨辉三角

            1
          1    1
        1    2    1
      1    3    3    1
    1    4    6    4    1
  1    5    10   10   5    1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n;
	printf("打印几行杨辉三角:");
	scanf("%d",&n);
	int arr[n][n];
	int i,j,k;
	for(i=0;i<n;i++)
	{
		for(k=n;k>=i;k--)
		{
			printf("  ");
		}
		for(j=0;j<=i;j++)
		{
			if(j==0||j==i)
				arr[i][j]=1;
			else if(i>1)
				arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
			printf("%-4d",arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

结果为:

 2,图形打印

A
BB
CCC
DDDD

DDDD
CCC
BB
A
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int i,j;
	char m;
	printf("输入字母:");
	scanf("%c",&m);
	if(m<'A'||m>'z')
	{
		printf("输入不合法\n");
	}
	else if(m>='a'&&m<='z')
	{
		m=m-('a'-'A');
	}
	for(i='A';i<=m;i++)
	{
		for(j='A';j<=i;j++)
		{
			printf("%c",i);
		}
		printf("\n");
	}
	for(i=m;i>='A';i--)
	{
		for(j=i;j>='A';j--)
		{
			printf("%c",i);
		}
		printf("\n");
	}
	return 0;
}

结果为:

 3,穷举算法

日本某地发生了一件谋杀案,警察通过排查确定茶人凶手必定4个中的一个 以下为4个嫌疑犯的供词 A说:罪犯是他们3人当中 B说:人不是我杀的,是C C说:A和D之间有一个是罪犯 D说:B说的是事实 已知2个人说了真话,2个人说了假话 请编程确定谁是凶手

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char kill;
	for(kill='A';kill<='D';kill++)
	{
		if((kill!='A')+((kill!='B')&&(kill=='C'))+((kill=='A')||(kill=='D'))+((kill=='C')&&(kill!='B')&&(kill!='D'))==2)
			printf("%c\n",kill);
	}
	return 0;
}

结果为:D

4.判断

给定一个整数,判断它是否被3、5、7整除,并输出一下信息 1.能同时被3,5,7整除(直接输出3 5 7,每个数字之间一个空格) 2.只能内其中两个整数整除(输出两个数,小的在前,大的在后,例如3 5 或者 3 7 或者5 7,中间使用空格隔开) 3. 只能被其中一个整数整除(输出这个除数) 4.不能被任何数整除,输出小写字母n 案例如下: 输入:105 输出:3 5 7

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	int n;
	printf("请输入一个数:");
	scanf("%d",&n);
	int arr[3]={3,5,7};
	int i,t=0;
	for(i=0;i<3;i++)
	{
		if(n%arr[i]==0)
		{
			printf("%d ",arr[i]);
			t++;
		}
	}
	if(t==0)
		printf("%d",n);
	printf("\n");
	return 0;
}

结果为:

 

5.字符串单词逆置

”good good study“

"study good good"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char str1[]="  df sd fsdsaf ";//"good  good  study";
	int i=0,j=strlen(str1)-1;
	char t;
	while(i<j)
	{
		t=str1[i];
		str1[i]=str1[j];
		str1[j]=t;
		j--;
		i++;
	}
	int k;
	i=j=0;
	while(str1[i]!='\0')
	{
		if(str1[j]!=' '||str1[j]!='\0')
		{
			j++;
		}
		k=j-1;
		while(k>i)
		{
				t=str1[i];str1[i]=str1[k];str1[k]=t;
				i++;
				k--;
		}
		if(str1[j]==' ')
			j++;
		i=j;
	}
	printf("%s\n",str1);
	return 0;
}

结果为:

6,实现atoi函数

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char str[]="12365321";
	int i=0,sum=0;
	while(str[i])
	{
		sum=sum*10+str[i]-'0';
		i++;
	}
	printf("%d\n",sum);
	return 0;
}

结果为:

 7.输入一个字符串,删除字符串中的空格

”this is my class“

"thisismyclass"

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
	char str[]="this is my class";
	int i=0;
	int j,n=strlen(str);
	while(str[i])
	{
		if(str[i]==' ')
		{
			for(j=i;j<n;j++)
			{
				str[j]=str[j+1];
			}
		}
		i++;
	}
	printf("%s\n",str);
	return 0;
}

结果为:

 8.字符串长度 strlen

用自己写的函数来实现strlen,strcpy,  strcat, strcmp 

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char *My_strcpy(char *dest,const char *src);
int My_strlen(char *s);
char *My_strcat(char *dest, const char *src);
int My_strcmp(const char *s1,const char *s2);
int main(int argc, const char *argv[])
{
	char str1[100]="abcdef";
	char str2[]="abcdef";
	//printf("%s\n",My_strcpy(str1,str2));
	//printf("%d\n",My_strlen(str1));
	//printf("%s\n",My_strcat(str1,str2));
	printf("%d\n",My_strcmp(str1,str2));
	return 0;
}

char *My_strcpy(char *dest,const char *src)
{
	char *p=dest;
	while(*src!='\0')
	{
		*dest=*src;
		src++;
		dest++;
	}
	*dest=*src;
	return p;
}

int My_strlen(char *s)
{
	char *p=s;
	while(*p!='\0')
	{
		p++;
	}
	return p-s;
}

char *My_strcat(char *dest,const char *src)
{
	char *p=dest;
	while(*dest!='\0')
		dest++;
	while(*src!='\0')
	{
		*dest++=*src++;
	}
	*dest='\0';
	return p;
}

int My_strcmp(const char *s1,const char *s2)
{
	while(*s1==*s2&&*s1=='\0'&&*s2=='\0')
	{
		s1++;
		s2++;
	}
	return *s1-*s2;

}

4)二维数组的地址

二位数组的地址是连续的,二维数组看似是二维,实则在计算机中的存储形式是一维。

二维数组数组名是常量,所以不可以进行自增或自减。

int main(int argc, const char *argv[])
{
    int arr[2][3]={11,22,33,44,55,66};
    for(int i=0;i<2;i++)
    {
    for(int j=0;j<3;j++)
    {
        printf("arr[%d][%d]=%p\n",i,j,&arr[i][j]);
    }
    }
arr++;//报错,常量不可以进行自增

1.3 一维字符数组

字符数组:存储多个字符的容器,属于线性结构

字符串:由0个或多个字符组成的整体,成为字符串

【多用双引号括起来,字符串的标志\0,当字符串使用双引号括起来时,计算机会自动添加\0,所有汉字都是字符串】

""空串  "a" "abcd" "+234" "1"  "  "   "你好" 字符串
'1'   不是字符串

1) 字符数组的定义格式

数据类型:char 数组名:满足命名规范 常量表达式:定义是不为0,不为空,不为小数,初始化时不为变量

格式: 存储类型 char 数组名[常量表达式]
数据类型:char
数组名:满足命名规范
常量表达式:定义是不为0,不为空,不为小数,初始化时不为变量

2)字符数组的初始化

1> 单字符初始化
    char str[4]={'a','b','c','d'};//全部初始化
    char str[4]={'a','b','\0','\0'};//部分初始化,剩余元素默认\0填充
        \0等价0
    char str[]={'a','b','c','d'};省略数组长度,数组长度默认时实际元素的个数
2> 字符串形式初始化【常用】
    char str[4]={"abc"};//全部初始化,计算机自动添加\0
    char str[4]="a";//部分初始化,剩余元素以\0填充
    char str[]="hello";//数组长度时6,默认实际字符的个数,同时添加\0
3> 错误初始化
    char str[4]="1234";//不报错,逻辑错误
    
    char str[4];
    str="1234" //错误
    

3)字符数组的引用

1> 字符串整体引用,格式控制符%s
    char str[4]="abc";
    scanf("%s",str);//字符串输入不需要加&
    printf("%s",str);
2> 字符串单个引用
    char str4[6]="hello";
    for(int i=0;i<6;i++)
    {
    printf("%c",str4[i]);
    }
3> gets和puts

    gets
     1.头文件:#include <stdio.h>
     2.格式:char *gets(char *s);
     3,参数:char *s
     4,返回值:char *,返回的时一个地址
     5,使用格式:
         char str[10];
         gets(str);
         特点:输入字符串可以识别空格
     puts         
     1. 头文件:#include <stdio.h>
     2,格式:int puts(const char *s);
     3,参数:const char *s,表示输出的数组名
     4,返回值:int  输出字符的个数
     5,使用格式:puts(str);
     特点:输出自带换行功能    

4)字符数组长度和字符串长度

字符数组长度:计算\0  就是sizeof
字符串长度:不计算\0,  strlen,实际字符的个数
字符数组长度    字符串长度
char a[10]={'a','b'};      10              2
char b[]={'a','b'}         2     不是字符串,所以读取的长度不确定,原因找不到\0.会越界继续向下访问
char c[]="abcd"            5            4
char d[10]="abc"           10            3
char e[]="abc\0def"        8            3

字符串函数

1> 字符串长度 strlen

    格式:size_t strlen(const char *s);      
    头文件:#include <string.h>
    返回值:size_t: 表示unsigned int/unsigned long 
            输出长度的格式控制:%lu  %ld
     参数:const char *s:计算长度的数组名
     使用格式:strlen(字符串)
2>计算变量的长度
    char str[]="hello"
    printf("strlen(str)=%ld\n",strlen(str));
3>计算字符串常量的长度
    printf("strlen(”hello“)=%ld\n",strlen("hello"));  
4>  非函数实现计算字符串长度
int count=0;
for(int i=0;str[i]!='\0';i++)
{
    count++;
}

2> 字符串拷贝strcpy

1> 认识strcpy
    头文件:#include <string.h>
    格式:char *strcpy(char *dest, const char *src);
    参数:两个参数,dest:目标字符串,src:源字符串
        把src拷贝给dest,src不变,dest变成src的值
    返回值: char *  返回dest的地址   
    使用格式:
        1,直接使用:strcpy(str1,str2);把str2拷贝str1
        2,拷贝直接输出
            char str1[10]="hello",str2[5]="123"
            printf("%s",strcpy(str1,str2));  
 2>dest只能变量,src:可以是变量或者常量
     char dest[10]="hello";
     char src[5]="1234";
     strcpy(dest,src);
     strcpy(dest,"1234");                          
3> 非函数实现字符串拷贝[重要]
    char dest[20]="hello";
    char src[]="ASD"
    "ASD\0o"
     0
        i
    "ASD"
     0
        i
    for(int i=0;src[i]!='\0';i++)
    {
      dest[i]=src[i];      
    }
    dest[i]='\0';  //dest[i]=src[i]

3>字符串连接

1> 认识字符串连接
    头文件:#include <string.h>
    格式:char *strcat(char *dest, const char *src);
    参数:两个参数,dest:目标字符串  src:源字符串
        把src连接到dest的后面,dest改变,src:没有变
    返回值: char * 表示dest的地址
2>目标字符串只能是变量,src可以是变量或者常量
    注意:在字符串连接时,目标字符串长度需要足够大
    char dest[20]="hello",src[]="world";
    strcat(dest,src);
    strcat(dest,"world");
3> 非函数实现连接
     char dest[20]="hello",src[]="world";
     //先循环到dest的最后
     int i;
     for(i=0;dest[i]!='\0';i++);
     //把src复制该dest
     "hello\0"
            i
        "world"
        
        int j;
        for(j=0;src[j]!='\0';j++)
        {
            dest[i]=src[j];  
            i++;
        }
        dest[i]='\0';

4> 字符串比较

1> 认识字符串比较
     头文件:#include <string.h>

     格式:int strcmp(const char *s1, const char *s2);
      参数:两个参数,拿s1比较s2
          如果s1>s2,返回的结果s1-s2的ASCII,  返回>0
          如果s1<s2,返回的结果s1-s2的ASCII,  返回<0
          如果s1=s2,返回的结果s1-s2的ASCII,  返回=0
      返回值:int 表示s1-s2的ASCII       
 2>字符串常见比较if格式
 int main(int argc, const char *argv[])
{
    char s1[]="ABDD";
    char s2[]="ABDD";
    int n=strcmp(s1,s2);
    printf("n=%d\n",n);
    if(strcmp(s1,s2)>0)//if(s1>s2)
    printf("s1>s2");
    else if(strcmp(s1,s2)<0)
    printf("s1<s2");
    else
    printf("s1=s2");
    return 0;
}
3> 非函数实现字符串比较
   s1 "hello"  
           i
   s2 "hello"
           j
while(s1[i]==s2[j])
{
    if(s1[i]=='\0')
    {
        break;            
    }
    i++;j++;
}
if(s1[i]>s2[j])
    printf("s1>s2");
else if(s1[i]<s2[j])
    printf("s1<s2")
else
    printf("s1=s2");
               

二维字符数组

格式:char  数组名[常量表达式1][常量表达式2]
常量表达式1:第一维,表示行数,字符串的个数
常量表达式2:第二维,表示列,每个字符串的字节大小

char a; 单字符,存储一个字符
char a[10];字符数组,存储10个字符,一个字符串
char a[3][5];3个字符串,每个字符串5个字节

1) 二维字符数组的定义以及初始化

1> 全部初始化
    char a[3][5]={{"abcd"},{"defg"},{"frtg"}};
    char a[2][4]={{'a','b','c','\0'},{'w','e','r','\0'}};
    char a[][4]={{"abc"},{"wer"}};
2> 部分初始化
    char a[3][5]={"ab","d","frt"};
    char a[2][4]={{'a','\0'},{'w','e','\0'}};
    char a[][4]={{"ab"},{"r"}};
3> 错误初始化
    char a[3][5];
    a={"abc","wer","rtyu"};

2)二维字符数组引用

1.使用行列的方式遍历二维数组
    char a[3][5]={"abcd","ASDF","123"};
    for(int i=0;i<3;i++)
    {
        for(int j=0;j<5;j++)
        {
            printf("%c",a[i][j]);
        }
        printf("\n");
    }
    
    2.常用:二维数组类似一位数组的循环方式
    for(int i=0;i<3;i++)
    {
    printf("%s\n",a[i]);
    }
3.特殊的遍历
char a[3][4]={"abcd","ASDF","123"};
a[0]: "abcdASDF123"
a[1]: "ASDF123"
a[2]: "123"

4,二维数组的循环输入和循环输出
    char a[3][5];
    for(int i=0;i<3;i++)
    {
    scanf("%s",a[i]);
    }
    for(int i=0;i<3;i++)
    {
    printf("%s ",a[i]);
    }

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ck钉钉钉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值