C语言数组练习

这篇文章包含了一系列C语言编程问题,包括打印杨辉三角、图形打印特定字符模式、解决逻辑谜题找出凶手、判断数字的因数以及字符串的逆置和处理。这些问题涵盖了基础的数组操作、条件判断和字符串处理技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、打印杨辉三角

#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
	int m;
	printf("please enter a value:");
	scanf("%d",&m);
	int arr[m][m];
	for(int i=0;i<m;i++)
	{
		for(int j=0;j<m-i;j++)
			printf("  ");
		for(int j=0;j<=i;j++)
		{
			if(j==0||i==j)
				arr[i][j]=1;
			else
				arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
			printf("%4d",arr[i][j]);
		}
		putchar(10);
	}
	return 0;
}

【输入样例】
	please enter a value:6
【输出样例】
               1
             1   1
           1   2   1
         1   3   3   1
       1   4   6   4   1
     1   5  10  10   5   1

2、 图形打印
A
BB
CCC
DDDD
DDDD
CCC
BB
A

#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
	for(int i='A';i<='D';i++)
	{
		for(int j='A';j<=i;j++)
			printf("%c",i);
		putchar(10);
	}
	putchar(10);
	for(int i='D';i>='A';i--)
	{
		for(int j='D';j>='D'-i+65;j--)
			printf("%c",i);
		putchar(10);
	}
	return 0;
}

【输出样例】
    A
    BB
    CCC
    DDDD
    
    DDDD
    CCC
    BB
    A

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

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

【输出样例】
  凶手是D

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

#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
	int num;
	printf("please enter a value:");
	scanf("%d",&num);
		if(num%3==0)
			printf("3 ");
		if(num%5==0)
			printf("5 ");
		if(num%7==0)
			printf("7 ");
		if(num%3!=0&&num%5!=0&&num%7!=0)
			printf("n");
	putchar(10);
	return 0;
}

【输入样例】
  105
【输出样例】
  3 5 7

5、字符串逆置
“good good study”
“study good good”

#include <stdio.h>
#include <string.h>
void strrev(char *p,char *q)
{
	while(p<q)
	{
		char t=*p;*p=*q;*q=t;
		p++;q--;
	}
}
int main(int argc, const char *argv[])
{
	char str[]="good good study";
	char *p=str;
	char *q=str+strlen(str)-1;
	strrev(p,q);
	p=q=str;
	while(*p!='\0')
	{
		while(*q!=' '&&*q!='\0')
			q++;
		char *k=q-1;
		strrev(p,k);
		while(*q==' ')
			q++;
		p=q;
	}
	puts(str);
	return 0;
}

【输出样例】
 "study good good"

6、实现atoi函数

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

【输出样例】
   1234

7、输入一个字符串,删除字符串中的空格
“this is my class”
“thisismyclass”

#include <stdio.h>
#include <string.h>
int main(int argc, const char *argv[])
{
	char str1[]="this   is  my  class";
	char str2[20];
	int k=0;
	for(int i=0;str1[i]!='\0';i++)
		if(str1[i]!=' ')
			str2[k++]=str1[i];
	str2[k]=0;
	puts(str2);
	return 0;
}

【输出样例】
thisismyclass

8、自定义封装字符串函数,strcmp,strcpy,strlen,strcat

#include <stdio.h>
#include <string.h>
long MyStrlen(char str[]);
int MyStrcmp(char str1[],char str2[]);
void MyStrcpy(char str1[],char str2[]);
void MyStrcat(char str1[],char str2[]);
int main(int argc, const char *argv[])
{
	char str1[20]="abcd";
	char str2[]="qwer";

	long len=MyStrlen(str1);  //调用MyStrlen函数,计算str1的字符串长度,赋值给len
	printf("str1的字符串长度是%ld\n",len);

	int num=MyStrcmp(str1,str2);  //调用MyStrcmp函数,将返回值赋值给num
	if(num>0)printf("str1>str2");
	else if(num<0)printf("str1<str2");
	else printf("str1=str2");
	putchar(10);

	MyStrcat(str1,str2);  //调用MyStrcat函数,将str2连接到str1后面
	printf("str1=%s\n",str1);
	MyStrcpy(str1,str2);  //调用MyStrcpy函数,将str2复制给str1
	printf("str1=%s\n",str1);

	return 0;
}

long MyStrlen(char str[])
{ 
	int count=0,i=0;
	while(str[i])
	{
		count++;
		i++;
	}
	return count;
}

int MyStrcmp(char str1[],char str2[])
{
	int i=0;
	while(str1[i]==str2[i])
	{
		if(str1[i]=='\0')
			break;
		else
			i++;
	}
	return str1[i]-str2[i];
}
void MyStrcpy(char str1[],char str2[])
{
	int i=0;
	while(str2[i])
	{
		str1[i]=str2[i];
		i++;
	}
	str1[i]='\0';
}
void MyStrcat(char str1[],char str2[])
{
	int i=0,j=0;
	for(i=0;str1[i];i++);
	while(str2[j])
		str1[i++]=str2[j++];
	str1[i]='\0';
}

【输出样例】
str1的字符串长度是4
str1<str2
str1=abcdqwer
str1=qwer

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值