C语言期末复习

这篇文章包含一系列C语言实现的基础算法,包括判断水仙花数、闰年,输出九九乘法口诀表,检查素数,计算累加和,实现阶乘,以及使用选择排序和冒泡排序方法。此外,还提到了如何找数组中的最大值和最小值以及结构体在学生成绩管理中的应用。
摘要由CSDN通过智能技术生成
  • 求水仙花数

#include<stdio.h>
int main()
{
    int i = 0;
    int a = 0, b = 0, c = 0, d = 0;
    for (i = 0; i < 1000; i++)
    {
        a = i % 10;//求出个位数
        b = (i / 10) % 10;//十位数
        c = i / 100;//百位数
        //判断其各位数字的立方是否确好等于该数本身
        if (i == (a * a * a + b * b * b + c * c * c))
        {
            printf("%d\n", i);//是则输出
        }
    }
 
    return 0;
}
  • 判断是否闰年

#include<stdio.h>
int main(){
    int year;
    printf("请输入年份\n");
    scanf("%d",&year);                
        if(year%4==0&&year%100!=0||year%400==0){        //如果(条件)
            printf("the year is leapyear");    //输出今年是闰年
        }else{                                                 //否则
            printf("the year is not leapyear");   //输出今年不是闰年
        }
}
  • 九九乘法口诀表

#include<stdio.h>

int main(){        //主函数

        int i,j;        //声明变量

        for(i=1;i<=9;i++){                //for循环(条件)

                for(j=1;j<=i;j++){        //for循环(条件)

                printf("%d*%d=%d",i,j,i*j);        

                }

        printf("\n");                                        //换行

        }

}
  • 判断是否为素数

#include<stdio.h>
int main()
{
    int i, n;
    printf("请输入一个数:"); 
    scanf("%d", &n);
    if(n<=1)
        printf("这不是素数\n");
    else
        {
        for (i = 2; i < n ; i++)
        {
             if (n%i == 0)
             break;
         }
         if(i>=n)
            printf("这是素数\n");
         else
            printf("这不是素数\n");
      }
     return 0;
}
  • 寻找素数

素数的因子是只能有1和他本身

void FindPrime()
{
    int i = 0; int j = 0;
    for (i = 1; i <= 100; i++)//这里可以直接+=2,因为偶数不可能是素数
    {
        for ( j = 2; j <= i; j++)
        {
            if (i % j == 0)//如果余数为0,则不是素数,结束循环
                break;
        }
        if(i==j)//如果j一直加到和i相等,证明i是素数
        printf("%d ", i);
    }
}
int main()
{
    FindPrime();
}

此方案与上一种方案类似,定义了一个flag用来标记,为1是素数,为0则表示不是素数。

# include <stdio.h>
int main()
{
    
    int i;
    //先求出100-200之间的所有的数
    //这里给出一个for循环
    int count = 0;
    for(i = 100; i < 200; i++)
    {
        int j; //定义一个变量j用来表示因子
 
        int flag = 1;//此时定义一个flag标记,表示假设i是素数
        for( j = 2; j < i ;j++) //用 2 到 i-1 之间的因子去试除i
        {
            if(i % j ==0)
            {
                flag = 0;若能整除,则说明一定不是素数,把flag置为0
                break; 
            }
                
        }
        //当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
        if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
        {
            count++;
            printf("%d ",i);//打印素数
        }
    }
    printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数

return 0;
}
# include <stdio.h>
# include <math.h>
int main()
{
    
    int i;
    //先求出100-200之间的所有的数
    //这里给出一个for循环
    int count = 0;
    for(i = 101; i < 200; i += 2) // 因为偶数一定不是素数,这里缩小范围,在奇数中去找素数
    {
        int j; //定义一个变量j用来表示因子
 
        int flag = 1;//此时定义一个flag标记,表示假设i是素数
        
        //假设一个数m= a*b,那么这个数m它的因子a和b中一定至少有一个因子小于等于m的开平方数
        //拿12这个数来说   它的因子所有表示如下: 12=1*12=2*6=3*4=4*3=6*2=12*1
        //12的开平方数是2√3(2倍的根3),  2√3是大于3小于4的,那么用1,2,3去试除12之后,那么4,6,12就没必要再去试除12了
        //所以这里的因子范围给到 3 到 sqrt(i) ,sqrt()是C语言的一个库函数,用来求给定值的平方根,需要引用头文件<math.h>
        for( j = 2; j <= sqrt(i) ;j++)  
        {
            if(i % j == 0)
            {
                flag = 0;若能整除,则说明一定不是素数,把flag置为0
                break; 
            }
                
        }
        //当上一个for循环任意一个数i都不能被j(2到i-1)整除,也即j==i时,跳出for循环
        if (flag == 1) //此时判断如果flag还是为1,则说明i是素数
        {
            count++;
            printf("%d ",i);//打印素数
        }
    }
    printf("\ncount = %d\n",count);//所有素数求出来之后,打印素数的个数

return 0;
}
  • 累加和运算

#include <stdio.h>

int main()

{

    int sum = 0; // 赋初值

    for(int i = 1; i <= 100; i++)
    {
        sum += i;
    }

    printf("total is %d\n", sum);

}
#include <stdio.h>
int main()
{
    int n,pow,num;
    pow=1;
    printf("输入一个正整数:");
    scanf("%d",&n);
    num=n;
    do
    {
        pow*=10;
        n/=10;
    }while(n!=0);
    pow/=10;
    printf("%d从高位开始逐位分离并输出的结果是",num);
    do
    {
        printf("%d,",num/pow);
        num%=pow;
        pow/=10;
    }while(pow!=0);
    putchar('\n');
    return 0;
}
  • 给出一个整数12345,计算该数的位数或它的最高位权

#include <stdio.h>
int main(void){
    int n,number,len=0;
    scanf("%d",&number);
    n=number;//保留原始数据

    if(0==n){
        len=1;
    }//对“0”进行特殊处理
    else if(n<0){
        n=-n;
    }//若是负数,先转换为正数后再处理

    while(n>0){
        len++;
        n=n/10;
    }//开始对原本非零的数计算位数

    printf("%d",len);

    return 0;
}
  • 递归求n的阶乘

#include<stdio.h>//头文件 
int main()//主函数 
{
  int factorial(int number);//自定义阶乘函数声明 
  int number,temp;//定义变量 
  printf("输入要求阶乘的数:");//提示语句 
  scanf("%d",&number);//键盘输入相求的数 
  temp=factorial(number);//调用阶乘函数 
  printf("%d!=%d",number,temp) ;//输出结果 
  return 0;//主函数返回值为0 
} 
int factorial(int number)//自定义阶乘函数 
{
  int temp;//定义整型变量 
  if(number<0)//如果这个数小于0 
  {
    printf("错误数据请,输入大于0的数!");//不符合条件,无法求 
  }
  else if(number==0||number==1)//0或者1本身的阶乘是1 
  {
    temp=1;
  }
  else
  {
    temp=factorial(number-1)*number;//否则求这个数与前一个数相乘的结果 
  } 
  return temp;//将temp返回到函数调用处 
}
  • 选择排序法

数组名是首元素的地址,指针变量接收地址

选择排序比冒泡排序效率高,只用循环n-1次,

假设第一个元素为最小值,从小到大依次排序

min=i ,外循环n-1次,

内循环遍历数组,逐一与a[min]比较,如果小就更新下标,

定义j变量j=i+1 , j<n ,

注意还有个条件是if(i!=min),交换变量

#include <stdio.h>
 
void arr_out(int a[8])//输出函数
{
    int i = 0;
    for(i = 0;i < 8;i++)
    {
        printf("%d ",a[i]);
    }
    printf("\n");
}
 
void arr_sort(int *p,int n)
{
    int i,j;
    int min = 0;
    for(i = 0;i < n - 1;i++)//排序次数
    {
        min = i;
        for(j = i + 1;j < n;j++)
        {
            if(p[j] < p[min])
            {
                min = j;//记录交换的元素下标值
            }
        }
        if(i != min)
        {
            int temp = p[i];
            p[i] = p[min];
            p[min] = temp;
        }  
    }
}
 
int main()
{
    int a[8] = {0};
    int i = 0;
    for(i = 0;i < 8;i++)
    {
        scanf("%d",&a[i]);
    }
 
    arr_sort(a,8);//排序函数
    arr_out(a);//输出函数
 
    return 0;
}
  • 冒泡排序

循环次数依旧是size-1

双重循环,内循环循环条件是size-1-i,初始变量j=0,i=0

大的往后放,在内层循环交换,遇到大的就交换

#include<stdio.h>
void Bubble_sort(int arr[], int size)
{
    int j,i,tem;
    for (i = 0; i < size-1;i ++)//size-1是因为不用与自己比较,所以比的数就少一个
    {
        int count = 0;
        for (j = 0; j < size-1 - i; j++)    //size-1-i是因为每一趟就会少一个数比较
        {
            if (arr[j] > arr[j+1])//这是升序排法,前一个数和后一个数比较,如果前数大则与后一个数换位置
            {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                count = 1;
                
            }
        }
        if (count == 0)            //如果某一趟没有交换位置,则说明已经排好序,直接退出循环
                break;    
    }
 
}
int main()
{
    int arr[10];
    int i;
    
    printf("请输入10个数\n");
    for (i = 0; i < 10; i++)        //接收用户的数值
    {
        scanf("%d", &arr[i]);
    }
    printf("排序前的数组>");
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
 
    printf("\n排序后的数组>");
    Bubble_sort(arr, 10);
    for (i = 0; i < 10; i++)
    {
        printf("%d ", arr[i]);
    }
 
    return 0;
}
  • 求数组最大值,最小值的位置

        int min = 0;   //假定最小值为a[min],即a[0]
        int max = 0;   假定最大值为a[max],即a[0]
        int i;
        for(i=1;i<10;i++)
        {
            if(a[i]>a[max])
            {
                max = i;       //max记录新的最大值的下标
            }
            if(a[i]<a[min])
            {
                min = i;       //min记录新的最小值的下标
            }
        }
  • 利用结构体设计学生成绩管理系统(输入输出,排序,调用函数实现)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值