C语⾔程序设计-⼊门(翁恺⽼师)——课堂代码练习(更新
中)
第七周
河南某⼆本理科男⾃学C语⾔中。
本帖⼦记录了翁恺⽼师上课举例⼦的代码,⽬前从第七周开始,代码对应⽼师课程的章节。⽬的在于学习记录和学习交流。
欢迎各位⼩伙伴批评指错,希望可以和各位⼀起进步。
第六周学习“数组”,“数组与函数”,第七周主要学习,对数组本⾝的 “计算”  “搜索” “排序”三块内容
第⼀节 数组的运算
输出数组a 中的素数
#include<stdio.h>
int main()
{
const int maxnumber=25;
int isPrime[maxnumber];
//数组构造模块
int i;
for(i=0;i<maxnumber;i++)
{
isPrime[i]=1;
}
//数组初始化模块
int x;
for(x=2;x<maxnumber;x++)
{
if(isPrime[x]==1)
//未开始判断前,每个X对饮的isPrime[x]都=1,都默认是素数
{
for(i=2;x*i<maxnumber;i++)/*变量i是数组的脚标;变量x是从2到25中间的每⼀个数字;
i从2开始的原因:若乘以i=0,x*i=0 会去25次0;若i=1;x*i=x,会把所有⼩于25的数字都标
记为⾮素数。 */
{
isPrime[x*i]=0;
//如果X的倍数在⼩于maxnumber,那么这个倍数因为可以被X整除⽽不是素数,需要去掉。
}
}
}
//素数判断模块
for(i=2;i<maxnumber;i++)
{
if(isPrime[i]==1)
{
printf("%d\t",i);
}
}
/
/⾮素数输出模块
return 0;
}
第⼆节 搜索
基础c语言代码学习使⽤⼆分法对数组的内容进⾏搜索。⼆分法具有⼤⼤减⼩搜索量的有优点。
检查数组a,是否有⽤户输⼊的关键元素key
#include<stdio.h>
int search(int key,int a[],int len)
//参数表⾥只写需要外部给参数的变量
{
int ret=-1;  //默认不到
int left=0;
int right=len-1;
while(left<right)
{
int mid=(left+right)/2;
if(key>a[mid])
{
left=mid+1;
}
else if(key<a[mid])
//此时key在mid的左边,mid右侧⽆⽤
{
right=mid-1;
//left是+1,right是-1*
}
else
//此时key==a[mid]
{
ret=1;
break;
//⼀定要记得到以后退出循环 *
}
}
return ret;
//单⼀出⼝,返回ret
}
int main()
{
int a[]={1,3,5,34,57,68,73,78};
//只⽤⼤⼩顺序排列好的数组才可以使⽤⼆分法*
int len=sizeof(a)/sizeof(a[0]);
int key=1;
if(search(key,a,len))
{
printf("数字%d在数组a中",key);
}
}
第三节 排序初步
因为⼆分法的使⽤对象是⼤⼩顺序排列好的数组,所以为了使⽤⼆分法,要学习排序给⽆顺序的数组a排序
#include<stdio.h>
int maxmid(int a[],int len)
{
int maxmid=0;
int i; //i是数组的所有脚标
for(i=0;i<len;i++) //i<len 最后⼀个进⼊循环的正好的len-1
{
if(a[maxmid]<a[i])
{
maxmid=i;
}
}
return maxmid;
//返回最⼤值的脚标
}
int main()
{
int a[]={3,5,1,34,23,90,26,73}; //定义⼀个数组
int len=sizeof(a)/sizeof(a[0]);  //该数组的长度
//数组建⽴模块
int i;
for(i=len-1;i>0;i--)  //i--保证最后数组a最后⼀个元素不再参与排序
{
int max=maxmid(a,i+1); //i+1=len ;  变量max 变成数组a最⼤值的脚标
int t=a[max];  //最⼤值存⼊变量t中
a[max]=a[i];    //最后⼀个a[i]被换到a[max]原来的位置
a[i]=t;      //最后⼀个元素变成了最⼤值
/
/以上三⾏是两个数字交换的代码;
}
//计算模块
for(i=0;i<len;i++)
{
printf("%d ",a[i]);
}
//打印数组模块
return 0;
}

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。