第七周

河南某二本理科男自学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;
 } 

第二节 搜索

学习使用二分法对数组的内容进行搜索。二分法具有大大减小搜索量的有优点。

检查数组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;
  } 

更多推荐

C语言程序设计-入门(翁恺老师)——课堂代码练习(更新中)