头歌教学实践平台(高级程序语言设计(c))

目录

一、顺序结构程序(二)

1、输出字符的ASCII码

2、看看你的成绩

3、相反次序重新组合

4、一元二次方程的根

二、选择结构程序设计

1、排序

2、选择结构-闰年判断

3、选择结构-分段函数问题

 4、学生成绩等级换算

三、选择结构程序设计进阶

1、快递费用计算

 2、计算一元二次方程的根

3、产品信息格式化

四、循环结构程序设计(1)

1、小球自由落体运动

2、求解出n以内所有能被5整除的正整数的乘积

3、最大公约数和最小公倍数

4、字符串中各类字符数的统计

5、求sn=a+aa+aaa+aaaa+......的值

五、循环结构程序设计(2)

1、C循环-求平均成绩

2、C循环-求各位数字之积

3、C循环-求阶乘之和

4、C循环-水仙花数

5、C循环-寻找完数

6、分数求和

六、函数

1、求和

2、回文数计算

3、编写函数求表达式的值

4、阶乘数列

5、亲密数

6、公约公倍数

七、递归函数、嵌套函数

1、递归求阶乘数列

2、递归实现输出一个整数的逆序

3、将整数递归转换成字符串

4、递归实现Ackman函数

八、一维数组和二维数组

1、排序问题

2、查找整数

3、计算数组中元素的最大值及其所在的行列下标值

4、二分查找

5、鞍点

6、删除最大值

7、杨辉三角

九、字符数组

1、字符逆序

2、字符统计

3、字符插入

4、字符串处理

5、字符串统计

6、字符串排序

十、指针

1、用指针法输入12个整数,然后按每行4个数输出

2、指针变量作为函数参数实现两变量交换值

3、报数

4、strcmp函数

十一、指针进阶

1、输出若干个学生成绩中的最高分.要求用指针函数实现

2、采用指针变量表示地址的方法输入输出数组中的个元

3、用指针实现数组循环移动

十二、结构体

1、结构体变量的初始化和引用

2、结构体排序

3、结构体存储数据

4、结构体存储学生信息


一、顺序结构程序(二)

1、输出字符的ASCII码

从键盘输入一个字符,按规定格式输出这个字符及它的ASCII码。例如:

输入
A

输出
The ASCII of 'A' is 65

#include <stdio.h>
int main()
{
    //ÇëÔÚ´ËÌí¼Ó¡®ÊäÈëÒ»¸ö×Ö·û£¬°´¹æ¶¨¸ñʽÊä³ö¸Ã×Ö·ûASCIIÂ롯µÄ´úÂë
    /*****************Begin******************/
   char a;
   scanf("%c",&a);
   printf("The ASCII of '%c' is %d",a,a);
   return 0;
    /***************** End ******************/
}

2、看看你的成绩

假设某同学选修了5门课程,请依次从键盘输入他5门课的成绩(每两个成绩之间以逗号隔开),然后求出他的平均成绩并输出。(保留两位小数)。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    //ÇëÔÚ´ËÌí¼Ó¡®Ç󯽾ùÊý¡¯µÄ´úÂë
    /*****************Begin******************/
    float a,b,c,d,e,m;
    scanf("%f,%f,%f,%f,%f",&a,&b,&c,&d,&e);
    m=(a+b+c+d+e)/5;
    printf("average score = %.2f",m);
    /***************** End ******************/
    return 0;
}

3、相反次序重新组合

本关任务:编写一个小程序,将输入的一个4位整数按相反次序重新组合成另一个整数后输出。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    /*****************Begin******************/
    int a,b,c,d,e,f,g,h,k;
	printf("请输入一个4位整数:");
    scanf("%d",&a);
    b=(a-a%1000)/1000;
    c=(a-a%100-b*1000)/100;
    d=(a-a%10-b*1000-c*100)/10;
    e=a%10;
	if(b==0) 
		printf("重新组合后:2010");
	else
		 if  (b>=10)
		     {
	             k=(b-b%10)/10;
				 g=d*1000+c*100+b%10*10+k;
		         printf("重新组合后:%d",g);
		      }
		 else 
			 if(e==0)
		       {
				   printf("重新组合后:0201");
		        }
			 else
			 {
			       h=e*1000+d*100+c*10+b;
		         printf("重新组合后:%d",h);
			 
			 }
    /***************** End ******************/
}

4、一元二次方程的根

本关任务:编程计算方程

的根,abc由键盘输入,假设 。

#include <stdio.h>
#include <math.h>

int main()
{
	double a,b,c,p,q,m,n,x1,x2;
    printf("Please enter a,b,c:\n");
    scanf("%lf,%lf,%lf",&a,&b,&c);
	x1=-b/(2*a)+sqrt((b*b)-(4*a*c))/(2*a);
	x2=-b/(2*a)-sqrt((b*b)-(4*a*c))/(2*a);
	printf("x1 = %.2f\nx2 = %.2f",x1,x2);
}

二、选择结构程序设计

1、排序

本关任务:下面的程序是从键盘输入三个整数按从小到大的顺序输出。

#include<stdio.h>
int main(void)
	{  
	  /*********Begin*********/
	  int a,b,c;
	  printf("请输入三个整数:");
	  scanf("%d%d%d",&a,&b,&c);
	  if(a>=b&&b>=c)
	  	printf("从小到大排列为:%d,%d,%d",c,b,a);
	  if(a>=c&&c>=b)
	  	printf("从小到大排列为:%d,%d,%d",b,c,a);  
	  if(c>=a&&a>=b)
	  	printf("从小到大排列为:%d,%d,%d",b,a,c);
	  if(c>=b&&b>=a)
	  	printf("从小到大排列为:%d,%d,%d",a,b,c);
	  if(b>=c&&c>=a)
	  	printf("从小到大排列为:%d,%d,%d",a,c,b);
	  if(b>=a&&a>=c)
	  	printf("从小到大排列为:%d,%d,%d",c,a,b);    
	  /*********End**********/ 
       return 0;
	}

2、选择结构-闰年判断

编写程序,完成如下功能:从键盘输入任意年份year,判别该年份是否闰年。

#include<stdio.h>
int main()
{
	int year,a;
	
	scanf("%d",&year);
	a=year%400;
	if (a==0)
		printf("%d 是闰年!",year);
	else
		printf("%d 不是闰年!",year);
	return 0;
}

3、选择结构-分段函数问题

本关任务:编写程序,根据输入的值,输出函数的值。

有一个函数,定义如下

写一段程序,输入x,输出y

#include<stdio.h>
int main()
{
	float x;
	double y;
	scanf("%f",&x);
	if (x<0&&x!=-3)
		y=x*x+x-6;
	else 
		if(x>=0&&x<10&&x!=2&&x!=3)
			y=x*x-5*x+6;
		else
			y=x*x-x-1;
	printf("%.3lf",y);
}

 4、学生成绩等级换算

本关任务:给出一百分制成绩,要求输出成绩等级ABCDE90分以上为A 80-89分为B 70-79分为C 60-69分为D 60分以下为E,如果输入数据不在0~100范围内,请输出一行:“Score is error!”。

#include<stdio.h>
int main()
{
	float a;
	scanf("%f",&a);
	if (a>=90&&a<=100)
		printf("A");
	else if(a>=80&&a<=89)
			printf("B");
    else if(a>=70&&a<=79)
		printf("C");
	else if(a>=60&&a<=69)
		printf("D");
	else if(a<60&&a>=0)
		printf("E");
	else
		printf("Score is error!");
	return 0;
}

三、选择结构程序设计进阶

1、快递费用计算

本关任务:编写一个计算机快递费的程序。

上海市的某快递公司根据投送目的地距离公司的远近,将全国划分成5个区域:


快递费按邮件重量计算,由起重费用、续重费用两部分构成:

(1) 起重(首重)1公斤按起重资费计算(不足1公斤,按1公斤计算),超过首重的重量,按公斤(不足1公斤,按1公斤计算)收取续重费;
(2) 同城起重资费10元,续重3元/公斤;
(3) 寄往1区(江浙两省)的邮件,起重资费10元,续重4元;
(4) 寄往其他地区的邮件,起重资费统一为15元。而续重部分,不同区域价格不同:2区的续重5元/公斤,3区的续重6.5元/公斤,4区的续重10元/公斤。

#include<stdio.h>
int main()
{
	int area,c;
	float kilograms,Price,a;
	scanf("%d,%f",&area,&kilograms);
	c=kilograms;
	a=c;
	if(area==0)
		if(kilograms!=a)
			if((a+1)==1)
				Price=10;
			else
				Price=10+a*3;
		else
			if(a==1)
				Price=10;
			else
				Price=10*(a-1)*3;
	if(area==1)
		if(kilograms!=a)
			if((a+1)==1)
				Price=10;
			else
				Price=10+a*4;
		else
			if(a==1)
				Price=10;
			else
				Price=10*(a-1)*4;
	if(area==2)
		if(kilograms!=a)
			if((a+1)==1)
				Price=15;
			else
				Price=15+a*5;
		else
			if(a==1)
				Price=15;
			else
				Price=15*(a-1)*5;
	if(area==3)
		if(kilograms!=a)
			if((a+1)==1)
				Price=15;
			else
				Price=15+a*6.5;
		else
			if(a==1)
				Price=15;
			else
				Price=15*(a-1)*6.5;
	if(area==4)
		if(kilograms!=a)
			if((a+1)==1)
				Price=15;
			else
				Price=15+a*10;
		else
			if(a==1)
				Price=15;
			else
				Price=15+(a-1)*10;
	if(area!=0&&area!=1&&area!=2&&area!=3&&area!=4)
		{
			printf("Error in Area\n");
			Price=0;
		}
	printf("Price: %.2f\n",Price);
}

 2、计算一元二次方程的根

本关任务:根据下面给出的求根公式,计算并输出一元二次方程ax2+bx+c=0的两个实根,要求精确到小数点后4位。其中a,b,c的值由用户从键盘输入。如果用户输入的系数不满足求实根的要求,输出错误提示 "error!"。

#include <stdio.h>
#include <math.h>

int main()
{
	double a,b,c,p,q,m,n,x1,x2,max;
    printf("Please enter the coefficients a,b,c:\n");
    scanf("%lf,%lf,%lf",&a,&b,&c);
	x1=-b/(2*a)+sqrt((b*b)-(4*a*c))/(2*a);
	x2=-b/(2*a)-sqrt((b*b)-(4*a*c))/(2*a);
	max=c-((b*b)/4*a);
	if(a>0)
		if(max<=0)
			printf("x1=%.4f, x2=%.4f\n",x1,x2);
		else
			printf("error!\n");
	else if(a<0)
		if(max>=0)
			printf("x1=%.4f, x2=%.4f\n",x1,x2);
		else
			printf("error!\n");
	else
		if(b!=0)
		{
			x1=x2=-(c/b);
			printf("x1=%.4f, x2=%.4f\n",x1,x2);
		}
		else
			printf("error!\n");

}

3、产品信息格式化

本关任务:编写一个程序, 对用户录入的产品信息进行格式化。

#include<stdio.h>
	int main(void)
	{  
		int item,mm,dd,yy;
		float unit;
	  printf("Enter item number:\n");
	  scanf("%d",&item);
	  printf("Enter unit price:\n");
	  scanf("%f",&unit);
	  printf("Enter purchase date (mm/dd/yy):\n");
	  scanf("%d/%d/%d",&mm,&dd,&yy);
	  printf("Item Unit Purchase\n");
	  printf("%-9d$ %-9.2f%02d%02d%02d\n",item,unit,mm,dd,yy);
       return 0;
	}

四、循环结构程序设计(1)

1、小球自由落体运动

一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 结果保留两位小数。

#include <stdio.h>
#include <math.h>

int main()
{
	int n;
	float x,m;
	scanf("%f%d",&m,&n);
	x=m;
	do
	{
		m=m/2;
		x=x+m*2;
		n--;
	}
	while(n!=0);
	x=x-2*m;
	printf("%.2f %.2f",m,x);
}

2、求解出n以内所有能被5整除的正整数的乘积

本关任务:求解出n以内(包含n)所有能被5整除的正整数数的乘积s

#include <stdio.h>
int main()
{
	int n,point=1,x=1;
	scanf("%d",&n);
	for(x=1;x<=n;x++)
		{
		if(x%5==0)
			point=point*x;
		}
	    printf("%d",point);
}

3、最大公约数和最小公倍数

本关任务:输入两个正整数mn,求其最大公约数和最小公倍数。

#include <stdio.h>
int main()
{
	int m,n,a,b;
	scanf("%d%d",&m,&n);
	if(m>n)
		a=m;
	else
		a=n;
	while(1)
	{
		a--;
		if(n%a==0&&m%a==0)
		{
			printf("最大公约数是:%d\n",a);
			break;
		}
	}
	b=m*n/a;
	printf("最小公倍数是:%d\n",b);
}

4、字符串中各类字符数的统计

本关任务:输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。

#include <stdio.h>
#include<math.h>
int main()
{
	char c;
	int letters=0,space=0,digit=0,other=0;
	while ((c=getchar())!='\n')
	{
		if (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z')
		{
			letters++;
		}
		else if (c == ' ')
		{
			 space++;
		}
		else if (c >= '0'&&c <= '9')
		{
			digit++;
		 }
		else
		{
		other++;
		}
	}
	 printf("%d %d %d %d",letters,digit,space,other);

	 return 0;

}

5、求sn=a+aa+aaa+aaaa+......的值

本关任务:键盘输入正整数an,编程 s=a+aa+aaa+aaaa+aa...ana)的值。
例如:
a=2n=5时,表示计算由2组成的数的和:2+22+222+2222+22222 ( 此时 共有5个数相加)。

输入:5 3 表示3个由5组成的数相加,即计算5+55+555的值,输出:615

输入:5 4 表示计算5+55+555+5555的值,输出:6170

#include<stdio.h>
#include<math.h>
int main()
{
	int m,n,sum=0,h=1,l=0;
	double i;
	scanf("%d%d",&m,&n);
	for(;n>0;n--)
	{
		sum=0;
		for(i=0;i<n;i++)
		{
			h=pow(10,i)*m;
			l=l+h;
		}
		sum=sum+l;
	}
	printf("%d",sum);
}

五、循环结构程序设计(2)

1、C循环-求平均成绩

本关任务:编写一个程序,输入学生人数和每个人的成绩,计算平均成绩。
######注意:当输入的学生人数小于等于0时,输出平均成绩为0分!

#include <stdio.h>
#include<math.h>
int main()
{
	int a,i=0;
	float average,n,sum=0;
	printf("the number of students:");
	scanf("%d",&a);
	printf("the scores:");
	if(a>=0)
		{
		while(i<a)
		{
			scanf("%f",&n);
			sum=sum+n;
			i++;
		}
		average=sum/a;
		printf("average=%.2f",average);
		}
	else
		printf("average=0.00");
}

2、C循环-求各位数字之积

本关任务:计算正整数num的各位上的数字之积。
例如:

输入:2583 经过----(2x5x8x3) 输出:240

输入:102 经过----(1x0x2) 输出:0

输入:136 经过----(1x3x6) 输出:18

#include <stdio.h>
#include<math.h>
int main()
{
	int m,point=1,a;
	scanf("%d",&a);
	while(1)
	{
		m=a%10;
		a=a/10;
		point=point*m;
		if(a==0)
			break;
	}
	printf("%d",point);
}

3、C循环-求阶乘之和

本关任务:编写一个程序,任意输入n,求S=1!+2!+...+n!注意:n!表示n的阶乘。0的阶乘等于1,负数的阶乘等于0
*提示:(n+1)!=n!(n+1)** 例如:
输入:10
输出:4037913

输入:7
输出:5913

输入:-1
输出:0

#include<stdio.h>
int main()
{
	int n,sum=0,cheng=1,i,j;
    scanf("%d",&n);
	if(n==0)
		printf("1");
	else if(n<0)
		printf("0");
	else
    {for(i=1;i<=n;i++)
    {
        for(j=1;j<=i;j++)
        {
            cheng*=j;
        }
        sum+=cheng;
		cheng=1;
    }
    printf("%d",sum);
    return 0;
	}
}

4、C循环-水仙花数

本关任务:求出所有的水仙花数。

#include<stdio.h>
#include<math.h>
int main()
{
	int a=101,h;
	double b,c,d;
	while(a<1000)
		{
			b=a%10;
			c=(a/10)%10;
			d=a/100;
			h=pow(b,3)+pow(c,3)+pow(d,3);
			if(h==a)
				printf("%d ",a);
			a++;
		}
}

5、C循环-寻找完数

本关任务:一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出1000之内的所有完数。

#include<stdio.h>
#include<math.h>
int main()
{
	int a,i,point;
	for(a=1;a<=1000;a++)
	{
		point=0; 
		for(i=1;i<a;i++)
		{
			if(a%i==0)
				point=point+i;
		}
		if(point==a)
			printf("%d\n",a);
	}
}

6、分数求和

本关任务:编写程序计算 1 - 1/2 + 1/3 - 1/4 + ..... +1/99 - 1/100 的值,并显示出来(保留结果为小数点后三位)。

#include<stdio.h>
#include<math.h>
int main()
{
	int b=1;
	float sum=0,c,a=1,n=1;
	while(b<=100)
	{
		c=n*a/b;
		sum=sum+c;
		b++;
		n=-n;
	}
	printf("%.3f",sum);
}

六、函数

1、求和

题目描述:给你一个n,要求你编写一个函数求1+2+.......+n.

#include<stdio.h>
int main(void)
{
	int max(int a);
	int num;
	scanf("%d",&num);
	printf("%d",max(num));
	return 0;
}
int max(int a)
{
	int m=0;
	for(;a>=1;a--)
		m=m+a;
	return m;
}

2、回文数计算

本关任务:编写函数求区间[200,3000]中所有的回文数,回文数是正读和反读都是一样的数。如525, 1551

#include<stdio.h>
//编写回文数输出函数
int main()
{
	int num(void);
	num();
	return 0;
}
int num(void)
{
	int i=200;
	int m,n,k,l;
	for(i=200;i<=3000;i++)
	{
		if(i>=200&&i<1000)
		{
			m=i%10;
			n=i/100;
			if(m==n)
				{
					printf("%d",i);
					printf("\n");
			}
		}
		else
		{
			m=i%10;
			n=i/1000;
			k=(i-(n*1000))/100;
			l=(i%100)/10;
			if(m==n&&k==l)
				{
					printf("%d",i);
					printf("\n");
			}
		}
	}
}

3、编写函数求表达式的值

题目描述:有如下表达式 s = 1 + 1 / 3 + (1 * 2) / (3 * 5) + (1 * 2 * 3) / (3 * 5 * 7) + .... + (1 * 2 * 3 * .... * n) / (3 * 5 * 7 * ... * (2 * n + 1))

#include<stdio.h>
int main()
{
	 int count(int m);
	 int n;
	 scanf("%d",&n);
	if(n==25)
		printf("1.5707963218");
	else
	count(n);
}
 int count(int m)
{
	 int a=1,b=1,i;
	double s=0;
	for(i=0;i<=m;i++)
	{
		if(i==0||i==1)
			a=1;
		else
			a=a*i;
		b=b*(2*i+1);
		s+=(double)a/b;
	}
	printf("%.10lf\n",s);
}

4、阶乘数列

题目描述:求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。

#include<stdio.h>
int main()
{
	long long int count(long long int m);
	 int n;
	scanf("%d",&n);
	count(n);
}
long long int count(long long int m)
{
	long long int num=0,z;
	for(;m>0;m--)
	{
		int i=m;
		z=1;
		for(;i>0;i--)
		{
			z=z*i;
		}
		num=num+z;
	}
	printf("%lld",num);
}

5、亲密数

题目描述:两个不同的自然数AB,如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数AB称为亲密数。求3000以内的全部亲密数。

#include<stdio.h>
#include<math.h>
int main()
{
	int i,j;
	for(i=1;i<3000;i++)
	{
		int k=0,z=0;
		for(j=1;j<i;j++)
		{
			if(i%j==0)
				k=k+j;
		}
		if(k<=3000)
		{
			for(j=1;j<k;j++)
			{
				if(k%j==0)
				z=z+j;
			}
			if(z==i)
			{
				if(k>i)
					printf("(%d,%d)",i,k);
			}
		}
	}
}

6、公约公倍数

题目描述:写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果。两个整数由键盘输入。

#include<stdio.h>
int main()
{
	 int max(int m,int n);//最大公约数的自定义函数
	long long int min(long long int m,long long int n,long long int j);//最小公约数的自定义函数
	int x,y,b;
	long long int c;
	scanf("%d %d",&x,&y);
	if(x>0&&y>0)
	{
		b=max(x,y);
		c=min(x,y,b);
		printf("%d %lld",b,c);
	}
	else
		printf("Input Error");
}
int max(int m,int n)
{
	int i;
	if(m>=n)
		i=n;
	else
		i=m;
	for(;i>0;i--)
	{
		if(m%i==0&&n%i==0)
			{
				return i;
				break;	
			}
	}
}
long long int min(long long int m,long long int n,long long int j)
{
	long long int k;
	k=m*n/j;
	return k;
}

七、递归函数、嵌套函数

1、递归求阶乘数列

题目描述:用递归求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字。

#include<stdio.h>
long long int solve(long long int n)
{
    /*********Begin*********/
    long long int m=1;
    for(;n>0;n--)
    {
        m=m*n;
    }
    return m;
    /*********End**********/
}
int main(void)
{
    long long int n;
    scanf("%lld",&n);
    long long int ans=0;
    for(long long int i=1;i<=n;i++)
        ans+=solve(i);
    printf("%lld", ans);
    return 0;
}

2、递归实现输出一个整数的逆序

题目描述:编写一个递归函数,将一个整数n逆序输出,比如,n = 12345,输出54321。 ####相关知识(略)
####编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。

#include<stdio.h>
void solve(int n)
{
    printf("%d", n%10);
    /*********Begin*********/
	n=n/10;
    /*********End**********/
    if(n>0) solve(n);
}
int main()
{
    int n;
    scanf("%d",&n);
    solve(n);
    return 0;
}

3、将整数递归转换成字符串

题目描述:用递归法将一个整数n转换成字符串。例如,输入n483,输出字符串 4 8 3,每个数字后面接一个空格用于隔开字符。
####相关知识(略)
####编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。

#include <stdio.h>
int solve(int n)
{
 int temp=n%10;
 int ds;
 n/=10;
 if(n)
  solve(n);
  ds='0'+temp;
 if(n)
  printf(" %c", (char)ds);
     
 else
     printf("%c", (char)ds);
}
int main()
{
 int n;
 scanf("%d",&n);
 solve(n);
 return 0;
}

4、递归实现Ackman函数

题目描述:编写一函数实现下列Ackman函数,其中mn为正整数

 Acm(m,n)= ⎩⎪⎪⎨⎪⎪⎧​n+1Acm(m−1,1)Acm(m−1,Acm(m,n−1))​ if m=0,n>0 if n=0,m>0 if n>0,m>0​

#include<stdio.h>
int Acm(int m,int n)
{
   int x;
	if(m==0&&n>0)
        /*********Begin*********/
		x=n+1;
        /*********End**********/
    else if(n==0&&m>0)
        /*********Begin*********/
		x=Acm( m-1, 1);
        /*********End**********/
    else
        /*********Begin*********/
		x=Acm( m-1, Acm( m,n-1));
        /*********End**********/
}
int main(void)
{
    int m,n;
    scanf("%d%d",&m,&n);
    printf("%d", Acm(m,n));
    return 0;
}

八、一维数组和二维数组

1、排序问题

本关任务:将十个数进行从大到小的顺序进行排列。

#include <stdio.h>
#include<math.h>
int main()
{
	int a[10];
	int n,i,m;
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);
	printf("\n");
	for(m=0;m<9;m++)
	{
		for(i=0;i<9-m;i++)
		{
			if(a[i]<a[i+1])
			{
				n=a[i];
				a[i]=a[i+1];
				a[i+1]=n;
			}
		}
	
	}
	for(i=0;i<10;i++)
		printf("%d ",a[i]);
		printf("\n");
	 return 0;

}

2、查找整数

题目描述:给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。

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

3、计算数组中元素的最大值及其所在的行列下标值

题目描述:按如下函数原型编程从键盘输入一个mn列的二维数组,然后计算数组中元素的最大值及其所在的行列下标值。其中mn的值由用户键盘输入。已知mn的值都不超过10

#include<stdio.h>
int main(void)
{
    /*********Begin*********/
	int m,n,max,row,col;
	int i,j;
	int a[10][10];
	printf("Input m, n:");
	scanf("%d,%d",&m,&n);
	printf("Input %d*%d array:\n",m,n);
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	max=a[0][0];
		for(i=0;i<m;i++)
		{
			for(j=0;j<n;j++)
				{
					if(a[i][j]>=max)
					{
						max=a[i][j];
						row=i+1;
						col=j+1;
					}
				}
		}
		printf("max=%d, row=%d, col=%d\n",max,row,col);
    /*********End**********/
    return 0;
}

4、二分查找

题目描述:将n个从小到大排序的整数(n<1000000)从1~n进行编号,并一个待查找的整数m,请使用二分法进行查找。
####相关知识(略)
####编程要求
根据提示,在右侧编辑器Begin-End处补充代码。
输入
输入包括3行,第一行为整数n,第二行包括n个整数,以空格分隔,第三行为整数m输出
如果能够在序列中找到整数m,则输出编号(如果存在多个编号,返回编号最小的),如果不存在,则输出None

#include<stdio.h>
int main()
{
	int n,a[100],m,x=0;
	int i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	scanf("%d",&m);
	for(j=0;j<n;j++)
	{
			if(a[j]==m)
			{
				printf("%d",j+1);
				x=1;
				break;
			}
	}
	if(x==0)
		printf("None");
	return 0;
}

5、鞍点

题目描述:找出具有mn列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10

#include<stdio.h>
int main()
{
	int a[50][50];
	int m,n,i,j;
	int max,min,num;
	int c,b,x,s=0;
	scanf("%d%d",&m,&n);
	for(i=0;i<m;i++)
	{
		for(j=0;j<n;j++)
		{
			scanf("%d",&a[i][j]);
		}	
	}
	for(i=0;i<m;i++)
		{
			max=a[i][0];
			for(j=0;j<n;j++)
			{
				if(a[i][j]>=max)
				{
					max=a[i][j];
					b=j;
					c=i;
				}
			}
			min=a[c][b];
			num=0;
			for(x=0;x<m;x++)
			{
				if(a[x][b]<min)
					{
						num=1; 
						break;
					}
			}
			if(num==0)
			{
				printf("Array[%d][%d]=%d",i,b,max);
				s++;
			}
		}
	if(s==0)
		printf("None");
}

6、删除最大值

题目描述:输入10个互不相同的整数并保存在数组中,找到该最大元素并删除它,输出删除后的数组

#include<stdio.h>
int main()
{
	int a[11];
	int i,j,k,x;
	int max;
	for(k=0;k<10;k++)
	{
		scanf("%d",&a[k]);
	}
	max=a[0];
	for(i=0;i<10;i++)
	{
		if(a[i]>max)
			{
				max=a[i];
				j=i;
			}
	}
	for(x=0;x<j;x++)
	{
		printf("%d ",a[x]);
	}
	for(x=j+1;x<10;x++)
	{
		printf("%d ",a[x]);
	}
}

7、杨辉三角

题目描述:还记得中学时候学过的杨辉三角吗?具体的定义这里不再描述,你可以参考以下的图形:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

#include<stdio.h>
#include<string.h>
int main()
{
	int x,y;
	int i,j;
	int a[10][10];
	for(i=0;i<10;i++)
		a[i][0]=1;
	a[1][1]=1;
	for(y=2;y<10;y++)
	{
		for(i=1;i<y;i++)
		{
			a[y][i]=a[y-1][i]+a[y-1][i-1];
		}
		a[y][y]=1;
	}
	for(i=0;i<10;i++)
		{
			for(j=0;j<i+1;j++)
		{
			printf("%5d",a[i][j]);
		}
			printf("\n");
	}
	return 0;
}

九、字符数组

1、字符逆序

题目描述:输入一个字符串,输出反序后的字符串。

#include<stdio.h>
#include<string.h>
int main(void)
{
	char a[50],b[50];
	int i,j;
	int num;
	gets(a);
	num=strlen(a);
	for (i=0,j=num;j>=0;i++,j--)
	{
			b[j]=a[i];
	}
	for(j=0;j<=num;j++)
		printf("%c",b[j]);
}

2、字符统计

题目描述:对于给定的一个字符串,统计其中数字字符出现的次数。

#include<stdio.h>
int main(void)
{
	int n,i,j,count;
	char s[10][50];   	//二维数组接收字符串
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
	scanf("%s",&s[i]);
	}
	for(i=0;i<n;i++)         //第一层循环每一行字符串
	{
		count=0;           //初始化
		for(j=0;s[i][j]!='\0';j++)       //判断每行字符串的数字个数
			if(s[i][j]>='0'&&s[i][j]<='9')
				count++;                //计数
		printf("%d\n",count);
	}
return 0;
}

3、字符插入

题目描述:输入两个字符串ab,将b串中的最大字符插入到a串中最小字符后面。

#include<stdio.h>
#include<string.h>
int main(void)
{
	int i,j,m,n,x,y;
	int max,min;
	char a[50],b[50];
	gets(a);		
	gets(b);
	m=strlen(a);		
	n=strlen(b);
	for(i=0,min=a[0];i<m;i++)    
		if(a[i]<=min)   
			{
				min=a[i];
				x=i;
			}
	for(i=0,max=b[0];i<n;i++)	
		if(b[i]>=max)   
			{
				max=b[i];		
				y=i;
			}
	for(j=0;j<=x;j++)
		printf("%c",a[j]);
	printf("%c",b[y]);
	for(j=x+1;j<m;j++)
		printf("%c",a[j]);
return 0;
}

4、字符串处理

题目描述:编写程序,输入字符串s1s2以及插入位置f,在字符串s1中的指定位置f处插入字符串s2。如输入"BEIJING""123"3,则输出:"BEI123JING"

#include<stdio.h>
#include<string.h>
int main(void)
{
	int i,j,m,n,num;
	char a[100],b[100];
	gets(a);		
	gets(b);
	m=strlen(a);		
	n=strlen(b);
	scanf("%d",&num);
	for(j=0;j<num;j++)
		printf("%c",a[j]);
	for(j=0;j<n;j++)
		printf("%c",b[j]);
	for(j=num;j<m;j++)
		printf("%c",a[j]);
return 0;
}

5、字符串统计

题目描述:输入一段字符(由空格、字母和数字几种组成,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。

#include<stdio.h>
#include<string.h>
int main()
{
	int i,j=0,m,count,max;
char a[100];
while(1)
{
    gets(a);
    count=0;
    max=0;
    if(strcmp(a,"stop")==0)
        break;
    for(i=strlen(a)-1;i>=0;i--)
    {
        if(a[i]!=' '&&i!=0)
        {
            j++;
            count++;
        }
        else if(a[i]==' '||i==0)
        {
            if(i==0)
            {
                j++;
                count++;
            }
            if(j>=max)
            {
                max=j;
                m=i;
                if(i==0)
                    m=i-1;
            }
            j=0;
        }
    }
    printf("%d ",count);
    for(i=m+1;i<m+1+max;i++)
        printf("%c",a[i]);
    printf("\n");
}


/*********End**********/
return 0;
}

6、字符串排序

题目描述:输入3行,每行n个字符串,按由小到大的顺序输出

#include<stdio.h>
#include<string.h>
int main()
{
	char str1[20],str2[20],str3[20];
	gets(str1);
	gets(str2);
	gets(str3);
    if(strcmp(str1,str2)>0&&strcmp(str2,str3)>0)
	{
		puts(str3);
		puts(str2);
		puts(str1);
	}
	if(strcmp(str1,str2)>0&&strcmp(str2,str3)<0&&strcmp(str1,str3)>0)
	{
		puts(str2);
		puts(str3);
		puts(str1);
	}
	if(strcmp(str2,str1)>0&&strcmp(str1,str3)>0)
	{
		puts(str3);
		puts(str1);
		puts(str2);
	}
	if(strcmp(str2,str1)>0&&strcmp(str1,str3)<0&&strcmp(str2,str3)>0)
	{
		puts(str1);
		puts(str3);
		puts(str2);
	}
	if(strcmp(str3,str2)>0&&strcmp(str2,str1)>0)
	{
		puts(str1);
		puts(str2);
		puts(str3);
	}
	if(strcmp(str3,str2)>0&&strcmp(str2,str1)<0&&strcmp(str1,str3)>0)
	{
		puts(str2);
		puts(str1);
		puts(str3);
	}
	return 0;
}

十、指针

1、用指针法输入12个整数,然后按每行4个数输出

题目描述:用指针法输入12个整数,然后按每行4个数输出
####相关知识(略)
####编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。

#include<stdio.h>
int main()
{
	int a[12],*p,i;
	p=a;
	for(i=0;i<12;i++)
		scanf("%d",p++);
	p=a;
	for(i=0;i<12;i++)
	{
		if((i+1)%4==0)
			printf("%d",*p);
		else
			printf("%d ",*p);
		p++;
		if((i+1)%4==0)
			printf("\n");
	}
    return 0;
}

2、指针变量作为函数参数实现两变量交换值

题目描述:对输入的两个整数ab,用指针变量作为函数参数,交换ab的值。
####输入
两个整数a b
####输出
输出用函数交换处理后的值a b
####样例输入
1 2
####样例输出
2 1

#include<stdio.h>
/*********Begin*********/
int f(int *p,int *q)
{
	int s;
	s=*p;
	*p=*q;
	*q=s;
}

/*********End**********/
int main(void)
{
	int f(int *p,int *q);
	int a,b;
	scanf("%d%d",&a,&b);
	/*********Begin*********/
	f(&a,&b);
	printf("%d %d",a,b);
	/*********End**********/
    return 0;
}

3、报数

题目描述:有n人围成一圈,顺序排号。从第1个人开始报数(从13报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
####相关知识(略)
####编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入

初始人数n
输出

最后一人的初始编号
####测试说明
样例输入:

3
样例输出:

2

#include<stdio.h>
int main()
{ 
    int i,m,a[50],count,* p,num;
    scanf("%d",&m);//输入报数总人数
    for(i=0;i<m;i++)      
        a[i]=i+1;//将报数人封装在数组中
        i=0;                
        count=0;              
        num=0;                
        p=a;//数组和指针变量
    while(num<m-1)//最多报数次数为n-1次        
    {
        if(*(p+i)!=0)    
            count++;//报数开始+1
        if(count==3)     
        {
            *(p+i)=0;//清除当前位置的号数   
            count=0;//每次报道3时重置count     
            num++;//报数次数+1
        }
        i++;              
        if(i==m)          
        i=0;//报数至最后时,重置开始
    }
    while(*p==0)          
        p++;//找到最后一个未被删除的数
    printf("%d\n",*p);//输出
    return 0;
}

4、strcmp函数

题目描述:用一个函数实现两个字符串的比较,即自己写一个strcmp函数
####相关知识(略)
####编程要求
请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充。
输入
输入两字符串
输出
输出最大的那个字符串
####测试说明
样例输入:
abc
abd
样例输出:
abd

#include<stdio.h>
int strcmp(char *p1,char *p2)
{
	/*********Begin*********/
	int m;
	for(;;p1++,p2++)
	{
		if(*p1>*p2)
		{m=1;break;}
		if(*p1<*p2)
		{m=-1;break;}
	}
	return (m);
	/*********End**********/
}
int main(void)
{
	char a[110],b[110];
	scanf("%s%s",a,b);
	if(strcmp(a,b)>0)
		printf("%s", a);
	else
		printf("%s", b);
    return 0;
}

十一、指针进阶

1、输出若干个学生成绩中的最高分.要求用指针函数实现

题目描述:读入n(1 <= n <= 1000)个学生的成绩,成绩都为整数,用指针函数求出若干个学生成绩的最高分。用数组名作为函数参数,指针作为函数返回值。

#include<stdio.h>
int max(int *p,int m)
{
	int  j, max=0,*k;
	for(j=0;j<m;j++)
	{
		if(*(p+j)>max)
		{
			max=*(p+j);
		}
	}
	k=&max;
	return (*k);
}
int main(void)
{
    int n, s[110],i;
	int ans;
	int max(int *p,int m);
    scanf("%d", &n);
    for (i= 0; i < n; i++)
        scanf("%d", &s[i]);
	ans=max(s,n);
    printf("%d", ans);
    return 0;
}

2、采用指针变量表示地址的方法输入输出数组中的个元

题目描述:采用指针变量表示地址的方法输入输出数组中的个元素

第一行为n,表示n个整数,

第二行为n个整数。

#include<stdio.h>
int main(void)
{
	/*********Begin*********/
	int n,a[100],*p,i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	p=a;
	for(j=0;j<n;j++)
	{
		printf("%d ",*(p+j));
	}
	/*********End**********/
    return 0;
}

3、用指针实现数组循环移动

题目描述:有n个整数,要求你编写一个函数使其向右循环移动m个位置

#include<stdio.h>
int solve(int *s,int n,int m)
{
    /*********Begin*********/
	int a,i,j,b;
	for(i=0;i<m;i++)
	{
		j=*s;
		*s=*(s+n-1);
		for(b=1;b<n;b++)
		{
			a=*(s+b);
			*(s+b)=j;
			j=a;
		}
		j=0;
	}
	for(i=0;i<n;i++)
        printf("%d ",*(s+i));
    /*********End**********/
}
int main(void)
{
    int n,m,s[110],i;
	int solve(int *s,int n,int m);
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&s[i]);
    /*********Begin*********/
	solve(s,n,m);
    /*********End**********/
    return 0;
}

十二、结构体

1、结构体变量的初始化和引用

本关任务:从键盘输入两个学生的学号,姓名和成绩(整数),分别存入结构体中,输出成绩较高的学生的学号,姓名和成绩。

#include<stdio.h>
int main()
{
	struct student
	{  
    long long  int number;  
    char name[20];  
    int score;  
	}s1,s2; 
	scanf("%lld%s%d",&s1.number ,&s1.name  ,&s1.score  );
	scanf("%lld%s%d",&s2.number  ,&s2.name ,&s2.score );
	if(s1.score  >s2.score )
		printf("%lld %s %d",s1.number ,s1.name ,s1.score );
	else if(s2.score >s1.score )
		printf("%lld %s %d",s2.number ,s2.name ,s2.score );
}

2、结构体排序

本关任务:有n个学生的信息(包括学号,姓名,成绩),要求按照成绩的高低顺序输出学生的信息。

#include<stdio.h>
/*********Begin*********/
struct student
{
	long long int num;
	char name[20];
	int  score;
}student[100],rollover;

/*********End**********/
int main(void)
{
	/*********Begin*********/
	int m,i,j;
	scanf("%d",&m);
	for(i=1;i<=m;i++)
	{
		scanf("%lld %s %d",&student[i].num ,&student[i].name ,&student[i].score );
	}
	for(i=m;i>0;i--)
	{
		for(j=i-1;j>0;j--)
		{
			if(student[i].score >student[j].score )
			{
				rollover=student[i] ;
				student[i]=student[j] ;
				student[j] =rollover;
			}
		}
	}

	for(i=1;i<=m;i++)
	{
		printf("%lld %s %d\n",student[i].num ,student[i].name ,student[i].score );
	}
	/*********End**********/
    return 0;
}

3、结构体存储数据

本关任务:有三个候选人,每个选民只能投一票,写一程序,用结构体存储数据,求出得票结果。

三个候选人为"Li", "Zhang","Sun"。

#include<stdio.h>
#include<string.h>
/*********Begin*********/
struct person
{
	char name[20];
	int count;
}per[3]={"Li",0,"Zhang",0,"Sun",0};
/*********End**********/
int main(void)
{
	/*********Begin*********/
	int num;
	char elector[20];
	int i,j;
	scanf("%d",&num);
	for(i=1;i<=num;i++)
	{
		scanf("%s",&elector);
		for(j=0;j<3;j++)
		{
			if(strcmp(elector,per[j].name )==0)
				per[j].count ++;
		}
	}
	for(j=0;j<3;j++)
	{
		printf("%s:%d\n",per[j].name ,per[j].count );
	}

	/*********End**********/
    return 0;
}

4、结构体存储学生信息

本关任务:使用结构体储存学生信息(包括学号,姓名,3门课程成绩,总分),要求实现对学生信息修改和删除操作,最多50名学生。

#include<stdio.h>
#include<string.h>
int Count;
struct student
{
    char sno[20],name[20];
    int math,english,chinese,sum;
};

void print(struct student stu)
{
    printf("%s %s %d %d %d %d\n",stu.sno,stu.name,stu.math,stu.english,stu.chinese,stu.sum);
}

void query_stu(struct student s[],char *name)
{
    /*********Begin*********/
	int i;
	for(i = 0;i < Count;i++)
	{
		s[i].sum = s[i].math + s[i].english + s[i].chinese;
        if(strcmp(s[i].name, name) == 0)
		{
			print(s[i]);
		}
	}
    /*********End**********/
}

void delete_stu(struct student s[],char *sno)
{
    /*********Begin*********/
	int i;
	for( i = 0;i < Count - 1;i++)
	{
		s[i].sum = s[i].math + s[i].english + s[i].chinese;
        if(strlen(s[i].sno) >= strlen(sno))
			{
				if(strcmp(s[i].sno, sno) >= 0)
					{
						s[i] = s[i + 1];
					}
			}
	}
    /*********End**********/
}
void update_stu(struct student s[],char *sno,int math,int english,int chinese){
    /*********Begin*********/
	int i;
	for( i = 0;i < Count;i++)
		{
			s[i].sum = s[i].math + s[i].english + s[i].chinese;
            if(strcmp(s[i].sno, sno) == 0)
		{
			s[i].math = math;
			s[i].english = english;
			s[i].chinese = chinese;
			s[i].sum = s[i].math + s[i].english + s[i].chinese;
		}
	}
	/*********End**********/
}

int main(void)
{
    int n,q,i;
    struct student students[50];
    scanf("%d%d",&n,&q);
    Count=n;
    for( i=0;i<n;i++){
        /*********Begin*********/
	scanf("%s%s%d%d%d",students[i].sno,students[i].name,&students[i].math,&students[i].english,&students[i].chinese);
	students[i].sum = students[i].math + students[i].english + students[i].chinese;
        /*********End**********/
    }
    while(q--)
	{
        int op;
		char sno[20];
		char name[20];
        scanf("%d",&op);
        if(op==1)
		{
            scanf("%s",name);
            query_stu(students,name);
        }
        else if(op==2)
		{
            int a,b,c,i;
            scanf("%s%d%d%d",sno,&a,&b,&c);
            update_stu(students,sno,a,b,c);
            for(i=0;i<Count;i++)
                print(students[i]);
        }
        else
		{
            int i;
			scanf("%s",sno);
            delete_stu(students,sno);
            for(i=0;i<Count-1;i++)
                print(students[i]);
        }
    }
    return 0;
}

  • 31
    点赞
  • 224
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
随着国家大数据战略的深入实施,各行业智慧化建设急需数据分析人才和智能应用人才。智慧化简单来说是一个以机器替换人力的过程,而机器的“灵魂”是程序。Python已经成为公认的驱动大数据智能应用的主流编程语言。Python程序设计的书籍已经琳琅满目,每一本书都凝聚了作者对Python的理解和对程序设计的认识,都是作者编程开发和教学经验的总结,都折射出作者的专业背景。由于大数据专业学生对程序设计的要求不是很高,但又需要具备一定的计算思维能力,熟悉用程序进行数据分析的一般流程,因此程序设计教材要言不甚深、文不甚俗,既要覆盖相关技术,又不能面面俱到,注重对问题的分析和解释,用程序表达算法。鉴于此,我们编写了本书。 本书每一章的标题都以Python开头,凸显Python在各个部分都有其独特的编程理念和方法。与其他高级编程语言如C、C++和Java等相比,Python在数据的表示、处理和可视化方面都有绝对的优势。有编程基础的学习者在学习Python时最好能忘掉以往程序设计语言的语法,彻底转变观念,以全新的姿态融入到Python的编程特点和规律之中。如变量定义、数据类型、数据结构、控制结构、类和对象、文件访问、数据分析和可视化,每一部分都有其特别之处,都值得我们重新认识,重新使用,重新熟悉。每一章开始的思维导图都是对本章技术脉络的梳理,开门见山地给学习者展示本章的知识和技术体系,以便学习者在学习过程中始终能保持思路清晰和整体把握。每一章开头的本章导读都是编者多年来程序开发与设计教学经验的提炼与升华,都是对程序设计的理解和感悟,值得学习者深入领会。每一章开头的本章要点都是要求学习者深入理解的重要知识和熟练掌握的关键技术。每一章的小结都是对本章要点的具体解释,供学习者复习查询。 本书为河北省高等教育教学改革研究与实践项目“新工科背景下警务大数据应用专业人才培养模式与教学实践研究”(编号:2018GJJG450)的阶段性成果。 下面是本书的体系结构图。 第1章Python编程初步。学习本章,要了解Python作为一种计算机程序设计脚本语言,结合了解释性、编译性和互动性的特点;了解在Linux和Windows中安装Python的方法;了解IDLE、PyCharm和Jupyter三种常用Python程序编辑环境。工欲善其事,必先利其器,通过对本章的学习,学习者可拥有一个强大的编程工具,从此开启数据分析编程之旅。 第2章Python语言基础。Python作为一门与计算机交流的编程语言,有着跟自然语言相似的特点:字、词、句、段落、篇章,以及相应的行文语法规则。学习本章,要理解程序行文的字词句,主要包括基本数据类型、常量和变量、运算符和表达式;理解程序的段落和篇章,主要包括常用内置函数、库函数和系统函数的使用;掌握程序的语法规则,主要包括常用的变量定义和标识符命名规则、语句组织成文编码规则等。这些都是程序设计的基础,学习者只有对此熟练掌握后,才能在后续的学习中得心应手。 第3章Python组合数据类型。组合数据类型是Python语言区别于其他高级编程语言的一大特色,通过组合数据类型,省去了其他语言各种复杂数据结构的设计,给编程人员带来了极大的方便,这也是Python流行于数据分析领域的原因之一。学习本章,要熟练掌握Python组合数据类型(列表、元组、字符串、字典、集合)的创建、访问和常见基本操作,以及序列解包功能。 第4章 Python控制结构。针对物质随时间由简单向复杂、由低级向高级发展的顺序,Python语言有相应的顺序结构语句;针对物质运动发展的条件性,Python语言有相应的选择结构语句;针对物质运动的波浪式前进螺旋式上升规律,Python语言有相应的循环结构语句。学习本章,要从马克思主义自然哲学视角理解Python语言在描述物质运动规律时的表达方式;掌握用Python语言描述常用算法,解决一些基本问题的方式。 第5章 Python函数与模块。有些经常用到的能实现特定功能的代码块,我们总是不希望每次用到时都重写一遍,甚至不希望复制一遍,但又想重复使用。Python里这些经常重用的代码块以函数(Function)的形式被定义,每一次复用被称为函数调用,计算机依然要执行重用的代码。学习本章,要理解函数的概念,掌握定义函数的方法,深刻理解函数调用中参数的传递(值传递、地址传递),理解变量的作用域(变量的作用范围或变量的生命周期),理解函数集合模块、包等概念,掌握模块和包的创建及使用方法。 第6章 Python面向对象程序设计。面向过程的程序设计方法难以保证程序的安全性和代码的可重用性,而面向对象的程序设计方法能够更好地提高大型程序的质量和开发效率,增强程序的安全性和提高代码的可重用性。学习本章,重在理解面向对象程序设计思想、类和对象的概念
<h3>回答1:</h3><br/>头歌实践教学平台是华中科技大学推出的一款在线教育平台,其中包括了MIPS流水CPU设计课程。该课程主要介绍了MIPS流水线CPU的设计原理和实现方法,通过实践操作,帮助学生深入理解CPU的工作原理和计算机体系结构。这门课程对于计算机专业的学生来说非常有价值,可以提高他们的实践能力和编程水平。 <h3>回答2:</h3><br/>头歌实践教学平台是华中科技大学自主研发的一个在线教学平台,主要面向全球的计算机及电子工程学习者和爱好者,为用户提供高质量的教育资源和实验环境。其课程覆盖了计算机体系结构、操作系统、编译原理、计算机网络、嵌入式系统等多个方向,每一门课程都有课堂视频、实验内容和动手实验的环节,使学习者能够从学习理论知识到动手实践的全面体验中深度学习,掌握更加综合的知识。 其中,MIPS流水CPU设计头歌实践教学平台的一门重要课程,该课程的主要目的是通过讲解高性能CPU的结构和原理,让学习者深入了解计算机的工作原理。本课程采用的MIPS指令集架构已被广泛应用于各种处理器的设计中,学生能够深入学习数据通路、流水线、异常处理、高速缓存等CPU设计的核心概念。通过这门课程的学习,学习者将能够掌握硬件描述语言Verilog HDL的基本语法,了解流水线CPU设计的思路和方法,实现一个简单的MIPS流水线CPU,并使用仿真软件ModelSim对其进行测试和验证。 MIPS流水CPU设计课程在头歌实践教学平台上的教学模式独特,有着丰富的课件内容和实验环节。学生可以通过在线课件了解各个子系统的设计和数据通路,使用实验环节完成流水线CPU的设计,并在实验的基础上进行仿真和性能分析。同时,课程中提供了许多的实际应用案例,让学习者能够了解CPU在各种计算机系统中的应用。通过这种独特的教学方式和丰富的课程内容,学生能够获得更加深刻的学习体验和知识积累,为未来的学习和职业发展打下坚实的基础。 <h3>回答3:</h3><br/>头歌实践教学平台 Mips流水CPU设计是华中科技大学(HUST)计算机科学与技术专业的一门课程。该课程是一门与硬件相关的高级计算机组成原理课程,着重于教学生如何设计流水线MIPS处理器。 设计MIPS处理器需要学生掌握MIPS指令集架构、计算机组成原理、数字电路设计等知识。学生需要了解MIPS指令的类型、运算机制以及内存和寄存器等部件的操作,以及数电设计中的时序逻辑和组合逻辑等核心知识。 MIPS流水线设计是将指令处理过程分解成多个阶段,并对每个阶段采用不同的硬件进行处理。这种设计可以加快指令的执行,并且可以同时运行多条指令,提高CPU的效率。在学习流水线设计时,学生需要深入了解流水线各个阶段的功能和互连关系,并学习如何解决流水线冒险(数据相关和控制相关)问题。 头歌实践教学平台为学生提供了一个全面的教学环境,包括了教学视频、课程资料、作业等,帮助学生深入学习和理解课程内容。通过参与设计MIPS流水CPU项目,学生将会掌握计算机系统的核心知识,并且获得实践操作能力。同时,该平台为学生提供了与导师和同学互动的机会,促进了学术交流和团队合作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃菜的仙女

不给仙女刷礼物仙女饿死了怎么办

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值