一、

1.n的阶乘

int i=0;
int n;
int sum=1;
printf("输入n的值:"); 
scanf("%d",&n); //获取n的值
for(i=1;i<=n;i++)
{
   sum=i*sum;//实现阶乘
}
printf("%d\n",sum);
return 0;

2.n的阶乘之和

//法一:嵌套循环
int i=0;
int j=0;
int sum_1=1;
int sum_2=0;
int n=10;
for(i=1;i<=3;i++)
{
  sum_1=1;
  for(j=1;j<=i;j++)
    {
    sum_1=j*sum_1;//阶乘 
    }
    sum_2=sum_1+sum_2;//阶乘之和 
}
printf("%d",sum_2);

return 0;
//法二:
int i=0;
int sum=1;
int sum_1=0;
for(i=1;i<=3;i++)
{
  sum*=i;
  sum_1+=sum;	
}
printf("%d",sum_1);
return 0;	

3.冒泡排序

核心在于双层嵌套循环
排分数:

int i,j,t,n;
int a[100];
printf("输入需要排序的个数:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
    scanf("%d",&a[i]);
}

for(i=1; i<=n-1; i++)//n个数需要排n-1趟
{
   for(j=1; j<=n-i; j++)//每一趟需要比较n-i次大小
   {
   	if(a[j]<a[j+1])//交换位置,从小到大
   	{
   		t=a[j];
   		a[j]=a[j+1];
   		a[j+1]=t;	
   		}	
   }
}

for(i=1;i<=n;i++)//打印排好序的数字
{
   printf("%d\n",a[i]);
}
 
   return 0;

根据分数打印人名:

struct student{
	char name[21];
	char score;
};//创建一个结构体存放姓名和分数

int main(){
	int i,j,n;
	struct student a[100],t;//创建一个数组用来存放姓名和分数
	printf("输入一个n:");
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%s %d",&a[i].name,&a[i].score);//分别存入姓名和分数
	}
	//排序
	for(i=1;i<=n-1;i++)
	{
		for(j=1;j<=n-i;j++)
		{
			if(a[j].score<a[j+1].score)//数组中的分数进行比较
			{
				t=a[j];//交换保存着姓名和分数的数组
				a[j]=a[j+1];
				a[j+1]=t;
			}
			
		}
	}
	for(i=1;i<=n;i++)
	{
		printf("%s %d\n",a[i].name,a[i].score);//打印排好序的姓名和分数
	}
	return 0;	
}

时间复杂度为O(n^2)

4. 快速排序