C语言函数、数组、字符串,C语言内置函数qsort的介绍

一、函数的作用:可以把公共的代码封装起来,可以进行多次调用,优化代码的可读性

函数的定义方法

返回值类型    函数名(形式参数) /*函数头*/
{							  /*函数体*/
	变量声明
	函数实现过程
}

1.返回值类型:返回函数的运算结果的数据类型,void不返回任何数据
2.函数名:可以随机取名,但是最好见名知意
3.形式参数:函数被调用时应该接收到的参数,每个参数用逗号隔开

示例代码:

#include<stdio.h>

//定义一个add函数
int add(int a,int b){
	return a+b;
}
//定义一个无返回值的函数
void showAdd(){
	printf("a+b的结果为:");
}

int main(){
	int a,b;
	scanf("%d%d",&a,&b);
	int c;
	c=add(a,b);
	showAdd();
	printf("%d",c);
} 

运行结果

在这里插入图片描述

二、数组的使用

数组的定义格式如下:

类型名 数组名[数组长度]

ps:

int a[10];	/*定义一个含有10个整型元素的一维数组*/
char c[200]; /*定义一个含有200个字符元素的一维数组c*/
double arr[5];/*定义一个含有5个浮点型元素的一维数组arr*/

数组初始化:

类型名 数组名[数组长度] = {初值表}

ps:

int a[10] = {1,2,3,4,5,6,7,8,9,10}

数组的输入和输出都要在循环当中进行

for(int i=0;i<n;i++){
	scanf("%d",a[i]);
	printf("%d",a[i]);
}

三、字符型数据和字符串

char 变量名;

getchar():去掉最后一个字符数据

字符串也就是一串字符组成的数组

声明方法:

char arr[100];

输入方法:

scanf("%s",a);//到空格结束
gets(a);//到回车结束

gets代码:

#include<stdio.h>
#include<string.h>
int main(){
	char a[100];
	gets(a);
	int l = strlen(a);
	puts(a);
	printf("%d",l);
} 

在这里插入图片描述
scanf代码:

#include<stdio.h>
#include<string.h>
int main(){
	char a[100];
	scanf("%s",a);
	int l = strlen(a);
	puts(a);
	printf("%d",l);
} 

在这里插入图片描述

输出方法

	puts(a);

常用字符串函数:

1.求字符串长度函数:strlen(str)
功能:求字符串的长度

2.字符串复制函数:strcpy(str1,str2)
功能:赋值第二个参数的内容到第一个参数中

3.字符串比较函数:strcmp(str1,str2)
功能:比较字符串1和字符串2的大小,等于返回0,前者大返回1否则返回-1

4.字符串连接函数strcat(st1,str2)
功能:拼接两个字符串

例题:输入一个单词,统计当中单词a出现的次数

#include<stdio.h>
#include<string.h>
int main(){
	char a[100];
	scanf("%s",a);
	int l = strlen(a);
	int t=0;
	for(int i=0;i<l;i++){
		if(a[i] == 'a'){
			t++;
		}
	}
	printf("%d",t);
} 

效果如下:

在这里插入图片描述

数组的排序:
1.冒泡排序:

#include<stdio.h>
int main(){
	int a[110];
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	
	for(int i=0;i<n-1;i++){
		for(int j=i;j<n;j++){
			if(a[i]>a[j]){
				int t;
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
	}
	for(int i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	
}

2.qsort排序

#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a,const void *b)
{
    return *(int *)a-*(int *)b;//这是从小到大排序,若是从大到小改成: return *(int *)b-*(int *)a;
}
int main()
{
    int a[100];
    int n;
    scanf("%d",&n);//n代表数组中有几个数字
    int i;
    for(i=0;i<n;i++)
    {
    	scanf("%d",&a[i]);	
	}
       
    qsort(a,n,sizeof(a[0]),cmp);//(数组,需要排序的数字个数,单个数字所占内存大小,比较函数)
    
     for(i=0;i<n;i++)
     {
     	printf("%d ",a[i]);
	 }
        
    return 0;
}

数组快速去重:

#include<stdio.h>
int main(){
	int a[110];
	int b[20]={0};
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
		b[a[i]]++;
	}
	
	for(int i=0;i<n;i++){
		if(b[a[i]]==1){
			printf("%d ",a[i]);
		}
	}

	
}

练习题:

在这里插入图片描述

#include<stdio.h>
#include<string.h> 
int main(){
	char ch[10000];
	int n;
	gets(ch);
	n=strlen(ch);
	for(int i=0;i<n;i++)
	{
		ch[i]=ch[i]-32;
	}
	puts(ch);
	return 0;
	
}
//解题思路:
//小写字母转大写字母:ascll码表中,小写字母序号比大写字母序号大32 

在这里插入图片描述

#include<stdio.h>
int main()
{
	int x,y;
	scanf("%d%d",&x,&y);
	int t=0;
	for(int i=x;i<=y;i++)
	{
		//取出四位数的各个位上的数 
		int a,b,c,d,sum;
		a=i%10;
		b=(i/10)%10;
		c=(i/100)%10;
		d=(i/1000)%10;
		sum=(a*a*a*a)+(b*b*b*b)+(c*c*c*c)+(d*d*d*d);
		if(sum==i)
		{
			t++;
		}
	}
	printf("%d",t);
	return 0;
 } 

在这里插入图片描述

#include<stdio.h>
int main(){
	int a[100];
	int b[10]={0,0,0,0,0,0,0,0,0,0};
	int n,i,j,k,x,y,z;
	scanf("%d",&n); 
	z=0;
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);//输入数组 
		if(a[i]>z)//查找数组最大值 
		{
			z=a[i];
		}
	}
	for(i=0;i<n;i++)
	{
		//查找相同的数 
		k=a[i];
		b[k]++; 
	}
	x=0;
	for(j=0;j<10;j++)//找到出现最多的数的次数 
	{
		if(b[j]>x)
		{
			x=b[j];
		 } 
	}
	for(j=0;j<10;j++)//众数可能不止一个 ,故要输出所有的众数 
	{
		if(b[j]==x)
		{
			printf("%d ",j);
		 } 
	}
	printf("%d",z);
	return 0;
}
 

在这里插入图片描述

#include<stdio.h>
int main()
{
	long long int n;
	scanf("%lld",&n);
	int a=n%10;
	if(a==0)
	{
		printf("az");
	}
	else
	{
		printf("yyds");
	}
	return 0;
}
//解题思路: 
//jmff先手获胜,则他之前yyz操作后数字必须小于等于九 
//即jmff每次操作都必须保证数字变为整十的数 
//只有数字本身为整十数时,jmff先手才无法将其再次变为整十数 

在这里插入图片描述

#include<stdio.h>
int main()
{
	long long int n,k;
	scanf("%lld%lld",&n,&k);
	int sum=n;
	int a,b,c;
	while(1)
	{
		if(n>=k){
			a=n/k;//可以换a瓶 
			sum+=a;//喝到的 
			b=n%k;//余下的瓶子数
			n=a+b; 
		}
		else{
			break;
		}
	}
	printf("%d",sum);
	return 0;
 } 

在这里插入图片描述

#include<stdio.h>
int main(){
	
	double n,sum=0,t;
	int a[10010];
	scanf("%lf",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
		sum+=a[i];
	}
	t=sum/n;
	for(int i=0;i<n;i++){
		if(a[i]>t){
			printf("%d ",a[i]);
		}
	}
	
}

在这里插入图片描述

#include<stdio.h>
int main(){
	int a[1010];
	int i=0;
	for(;;){
		scanf("%d",&a[i]);
		
		if(a[i]==-1){
			i++;
			break;
		}
		i++;
	}
	int k;
	scanf("%d",&k);
	for(int j=0;j<i;j++){
		if(a[j]==k){
			printf("%d",j);
			break;
		}
		else if(a[j]!=k&&j==i-1){
			printf("不存在");
		}
	}
}

期末考试题:

在这里插入图片描述

#include<stdio.h>
#include<string.h>
int main(){
	char a[1010];
	gets(a);
	int l;
	l=strlen(a);
	for(int i=0;i<l;i++){
		if(a[i]=='0'){
			printf("1");
		}
		else{
			printf("0");
		}
	}
}

在这里插入图片描述
3.
在这里插入图片描述

#include<stdio.h>

int main(){
	int n;
	int a[1010];
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	int k;
	scanf("%d",&k);
	for(int i=0;i<n;i++){
		if(k<=a[i]){
			printf("%d ",a[i]);
		}
	}
}

4.在这里插入图片描述

#include<stdio.h>
#include<math.h>
int main(){
	int n;
	scanf("%d",&n);
	while(n--){
		long long int k;
		scanf("%lld",&k);
		int l;
		l=(int)log10(k)+1;
		printf("%d\n",l);
	}
}

扩展部分:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值