上期答案:
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;
}










