C语言笔记(四)

上期答案:

1.加解密:

复制代码
#include<stdio.h>
#include<string.h>
int main()
{
	int a;
	printf("请选择功能:1-加密   2-解密\n");
	scanf("%d",&a);
	getchar();
	char text[1000];
	int i=0;
	if(a==1)
	{
		printf("请输入需要加密的内容:\n");
		fgets(text,1000,stdin);
		printf("加密后的结果为:\n");
		while(text[i]!='\0')
		{
			char c=text[i];
			if(c>='A'&&c<='Z')
			{
				c=(c-'A'+4)%26+'A';
			}
			else if(c>='a'&&c<='z')
			{
				c=(c-'a'+4)%26+'a';
			}
			printf("%c",c);
			i++;
		}
		
	}
	else if(a==2)
	{
		printf("请输入需要解密的内容:\n");
		fgets(text,1000,stdin);
		printf("解密后的结果为:\n");
		while(text[i]!='\0')
		{
			char c=text[i];
			if(c>='A'&&c<='Z')
			{
				c=(c-'A'-4+26)%26+'A';
			}
			else if(c>='a'&&c<='z')
			{
				c=(c-'a'-4+26)%26+'a';
			}
			printf("%c",c);
			i++;
		}
	}
	else
	{
		printf("输入数字不符合选择模式,请重新运行程序选择\n");
	}
	return 0;
}

2.利用数组求解数列

复制代码
#include<stdio.h>
#include<string.h>
int main()
{
	int a[20]={1,1};
	int n;
	printf("%d\n",a[0]);
	printf("%d\n",a[1]);
	for(n=2;n<19;n++)
	{
		a[n]=a[n-2]+a[n-1];
		printf("%d\n",a[n]);
	}
	return 0;
}

补充作业:

冒泡法讲解:

复制代码
#include<stdio.h>
int main()
{
    int a[10]={0};
    int i,j,temp; // i是外层循环(轮数),j是内层循环(每轮的比较)

    // 第一步:先完整输入10个数
    printf("请输入10个整型值:\n");
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }

    // 第二步:冒泡排序核心(两层循环)
    // 外层循环:10个数最多需要9轮排序
    for(i=0;i<9;i++)
    {
        // 内层循环:每轮比较到 10-1-i 的位置(后面i个数已经排好序了,不用再比)
        for(j=0;j<9-i;j++)
        {
            // 相邻两个数比较,大的往后换(实现从小到大排序)
            if(a[j] > a[j+1])
            {
                // 正确的两个数交换逻辑
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }

    // 第三步:排序完成后,输出结果
    printf("从小到大排序后的结果:\n");
    for(i=0;i<10;i++)
    {
        printf("%d ",a[i]);
    }

    return 0;
}

二维数组

二维数组的定义:

二维数组定义的一般形式为

类型说明符 数组名【常量表达式】【常量表达式】

复制代码
#include<stdio.h>
int main()
{
int a[5][3]={{80,75,92},{61,65,71},{59,63,70},{85,87,90},{76,77,85}};
int i,j;
int m_value=0,c_value=0,f_value=0,tatal_value=0;
float m,c,f,t;
for(i=0;i<5;i++)
{
	m_value+=a[i][0];
	c_value+=a[i][1];
	f_value+=a[i][2];
	for(j=0;j<3;j++)
	{
		tatal_value+=a[i][j];
	}
}
m=m_value/5.0;
c=c_value/5.0;
f=f_value/5.0;
t=tatal_value/15.0;
printf("m=%.1f\nc=%.1f\nf=%.1f\nt=%.1f\n",m,c,f,t);
    return 0;
}
复制代码
#include<stdio.h>
int main()
{
int i=0,j=0;
printf("输入数组的行数和列数:\n");
scanf("%d %d",&i, &j);
int a[i][j];
int b[j][i];
int m=0,n=0;
printf("给数组a赋值:\n");
for(m=0;m<i;m++)
{
	for(n=0;n<j;n++)
	{
		scanf("%d",&a[m][n]);
	}
}
printf("\n原数组a:\n");
for(m=0;m<i;m++)
{
	for(n=0;n<j;n++)
	{
		printf("%d ",a[m][n]);
	}
	printf("\n");
}
for(m=0;m<i;m++)
{
	for(n=0;n<j;n++)
	{
	b[n][m]=a[m][n];	
	
	}
}
printf("\n转置后的数组b:\n");
for(m=0;m<j;m++)
{
	for(n=0;n<i;n++)
	{
		printf("%d ",b[m][n]);
	}
	printf("\n");
}
    return 0;
}
复制代码
#include<stdio.h>
int main()
{
int a[3][4]={0};
int i,j;
int hang,lie;
int max;
printf("请给矩阵赋值:\n");
for(i=0;i<3;i++)
{
	for(j=0;j<4;j++)
	{
		scanf("%d",&a[i][j]);
	}
}
max=a[0][0];
hang=0;
lie=0;
for(i=0;i<3;i++)
{
	for(j=0;j<4;j++)
	{
		if(a[i][j]>max)
		{
			max=a[i][j];
			hang=i;
			lie=j;
		}
	}
}
printf("max=%d\n",max);
printf("hang=%d\n",hang);
printf("lie=%d\n",lie);
    return 0;
}
复制代码
#include<stdio.h>
int main()
{
    int a[3][3];
    int i,j;
    printf("请输入9个数字:\n");
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }

    printf("\n输出结果:\n");
    
    for(i=0;i<3;i++) 
    {
        for(j=0;j<3;j++) 
        {
            
            if(i == 1 || j == 1)
            {
                printf("%d ",a[i][j]); 
            }
            else
            {
                printf("  "); 
            }
        }
        printf("\n"); 
    }

    return 0;
}

二分法

二分查找只能用在已经排好序的数组上

复制代码
#include<stdio.h>
int main()
{
   int a[]={-12,0,6,16,23,56,80,100,110,115};
   int b;
   printf("请输入一个数:\n");
   scanf("%d",&b);
   int left=0;
   int right=9;
   int mid;
   int found=0;
   while(left<=right)
   {
       mid=(left+right)/2;
       if(a[mid]==b)
       {
           printf("找到了,序号是:%d\n",mid);
           found=1;
           break;
    }
    else if(a[mid]<b)
    {
        left=mid+1;
    }
    else
    {
        right=mid-1;
    }
   }
   if(found==0)
   {
       printf("这个数不在数组里面\n");
   }
    return 0;
}

函数

一个较大的程序可以分为若干个程序模块,每一个模块用来实现特定的功能

在高级语言中用子程序实现模块的功能,子程序由函数来完成

一个C程序可以由主函数和其他若干个函数构成

函数的调用关系

定义无参函数的一般形式:

类型标识符 函数名()

{

声明部分

语句部分

}

在定义函数时要用类型标识符指定函数值的类型,即函数带回来的值的类型

定义有参函数的一般形式:

类型标识符 函数名(形式参数表列)

{

声明部分

语句部分

}

定义空函数的一般形式为:

类型标识符 函数名()

{}

复制代码
#include<stdio.h>
int main()
{
	int max(int x,int y);
	int a,b,c;
	scanf("%d %d",&a, &b);
	c=max(a,b);
	printf("M is %d",c);
    return 0;
}
int max(int x,int y)
{
	int max;
	max=x;
	if(x<y)
	{
		max=y;
	}
	else
	max=x;
	return max;
}
相关推荐
yangSimaticTech1 小时前
整型数据的转换与比较并不简单
算法
老鼠只爱大米1 小时前
LeetCode经典算法面试题 #55:跳跃游戏(贪心法、动态规划、BFS等多种实现方案详解)
算法·leetcode·贪心算法·动态规划·bfs·java面试·跳跃游戏
云边散步1 小时前
godot2D游戏教程系列二(22)
笔记·学习·游戏
2501_908329852 小时前
C++中的备忘录模式
开发语言·c++·算法
qq_416018722 小时前
C++与机器学习框架
开发语言·c++·算法
chushiyunen2 小时前
langchain实现agent智能体笔记
笔记·langchain
左左右右左右摇晃2 小时前
数据结构——红黑树
算法
CoovallyAIHub2 小时前
传感器数据相互矛盾时,无人机蜂群如何做出可靠的管道泄漏检测决策?
算法·架构·无人机
CoovallyAIHub2 小时前
Claude Code Review:多 Agent 自动审查 PR,代码产出翻倍后谁来把关?
算法·架构·github