C语言期末上机复习题

N的阶乘
#include<stdio.h> // 引入标准输入输出库
#include<math.h> // 引入数学库,用于计算阶乘
int main() // 主函数
{
    double i, sum = 1; // 定义变量i为double类型,sum初始化为1
    int n; // 定义整型变量n
    scanf("%d", &n); // 从标准输入读取一个整数并赋值给n
    for(i = 1; i <= n; i++) // 循环从1到n
    {
        sum *= i; // 将sum乘以i,即累乘阶乘
    }
    printf("product = %.0f", sum); // 输出结果,保留0位小数
    return 0; // 程序正常结束,返回0
}


查找整数
#include<stdio.h>
int main(){
    int n,i,x,temp,flag=0; // 定义变量n、i、x、temp和flag,其中n表示数组长度,i用于循环,x表示要查找的元素,temp用于临时存储输入的数组元素,flag用于标记是否找到目标元素
    scanf("%d %d",&n,&x); // 输入数组长度和要查找的元素
    for(i=0;i<n;i++){ // 循环遍历数组
        scanf("%d",&temp); // 输入数组元素并存储到temp中
        if(temp==x) {flag=1;printf("%d",i);} // 如果temp等于x,说明找到了目标元素,将flag设为1,并输出当前元素的索引
    }
    if(flag==0) printf("Not Found"); // 如果循环结束后flag仍为0,说明没有找到目标元素,输出"Not Found"
}
交换最小值 最大值
#include<stdio.h>

int main()
{
    int n, a[10], i, min = 0, max = 0; // 定义变量n、a数组、i、min和max

    scanf("%d", &n); // 输入数组长度n
    
    for (i = 0; i < n; i++) // 循环输入数组元素
    {
        scanf("%d",&a[i]);
    }

    for (i = 0; i < n; i++) // 寻找最小值的索引
    {
        if (a[min] > a[i])
        {
            min=i;
        }
    }
    int b = a[0]; // 交换最小值和第一个元素的位置
    
    a[0] = a[min];
    a[min] = b;        
    for (i = 0; i < n; i++) // 寻找最大值的索引
    {
        if (a[max] < a[i])
        {
            max = i;
        }
    }
    b = a[max]; // 交换最大值和最后一个元素的位置
    a[max] = a[n - 1];
    a[n - 1] = b;
    
    for(i = 0; i < n; i++) // 输出排序后的数组
    {
        printf("%d ", a[i]);
    }

    return 0;
}
分段计算居民水费
#include<stdio.h> // 引入标准输入输出库
main() // 主函数
{
    float x, y; // 定义两个浮点型变量x和y
    scanf("%f", &x); // 从标准输入读取一个浮点数并赋值给x
    if (x < 0) // 如果x小于0
    {
        y = 0; // 将y赋值为0
    }
    else if (x >= 0 && x <= 15) // 如果x大于等于0且小于等于15
    {
        y = (4 * x) / 3; // 计算y的值,公式为(4 * x) / 3
    }
    else if (x > 15) // 如果x大于15
    {
        y = 2.5 * x - 10.5; // 计算y的值,公式为2.5 * x - 10.5
    }
    printf("f(%.2f) = %.2f", x, y); // 输出结果,格式为"f(x) = y",保留两位小数
    return 0; // 返回0表示程序正常结束
}

求奇数分之一序列前N项和
#include<stdio.h>
int main( )
{    
    int i, d, n;    // 定义整型变量i、d、n
    double sum;    // 定义双精度浮点型变量sum
    scanf("%d", &n);    // 从标准输入读取一个整数,赋值给n
    sum=0;    // 将sum初始化为0
    i=1;    // 将i初始化为1
    d=1;    // 将d初始化为1
    for(i=1; i<=n; i++){        // 循环n次
        sum=sum+1.0/d;        // 计算1除以d的结果,累加到sum上
        d=d+2;        // 将d的值加2
        }    
        printf("sum = %.6f", sum);        // 输出sum的值,保留6位小数
        return 0;    // 返回0,表示程序正常结束
        }


求简单交错序列前N项和
#include <stdio.h>

int main() {
    int N; // 定义一个整型变量N,用于存储输入的数值
    scanf("%d", &N); // 从标准输入读取一个整数,并将其存储在变量N中

    double sum = 0.0; // 定义一个双精度浮点型变量sum,用于存储计算结果
    int sign = 1; // 定义一个整型变量sign,用于表示当前项的符号(1或-1)
    int i; // 定义一个整型变量i,用于循环计数
    for (i = 1; i <= N; i++) { // 使用for循环,从1到N进行迭代
        double term = 1.0 / (2 * i - 1); // 计算当前项的值,即1除以(2*i-1)
        sum += sign * term; // 将当前项的值乘以其符号,并累加到sum中
        sign = -sign; // 更新符号,使其在每次迭代后交替为1和-1
    }
    
    printf("sum = %.6f\n", sum); // 输出计算结果,保留6位小数
    
    return 0; // 程序正常结束,返回0
}

整数四则运算
#include <stdio.h>

// 主函数
int main() {
    int A, B; // 定义两个整型变量A和B
    scanf("%d %d", &A, &B); // 从标准输入读取两个整数,并分别赋值给A和B

    printf("%d + %d = %d\n", A, B, A + B); // 输出A加B的结果
    printf("%d - %d = %d\n", A, B, A - B); // 输出A减B的结果
    printf("%d * %d = %d\n", A, B, A * B); // 输出A乘B的结果
    printf("%d / %d = %d\n", A, B, A / B); // 输出A除以B的结果,注意这里可能会产生整数除法的舍入误差

    return 0; // 程序正常结束,返回0
}


简单的猜数字游戏
#include<stdio.h> // 引入标准输入输出库
int main() // 主函数
{
    int a=38,b; // 定义整型变量a并赋值为38,定义整型变量b
    scanf("%d",&b); // 从标准输入读取一个整数并赋值给变量b
    if(a>b) // 如果a大于b
    {
        printf("Too small!"); // 输出"Too small!"
    }
    else if(a<b) // 如果a小于b
    {
        printf("Too big!"); // 输出"Too big!"
    }
    else // 如果a等于b
    {
        printf("Good Guess!"); // 输出"Good Guess!"
    }
    return 0; // 程序正常结束,返回0
}

奇偶分家
#include <stdio.h> // 引入标准输入输出库
#include <math.h> // 引入数学库

int main() // 主函数
{
    int n; // 定义整型变量n,用于存储输入的整数个数
    int a[1001]; // 定义整型数组a,用于存储输入的整数
    int i; // 定义整型变量i,用于循环计数
    int ji=0,ou=0; // 定义整型变量ji和ou,分别用于统计奇数和偶数的个数,初始值都为0

    scanf("%d",&n); // 从标准输入读取一个整数,赋值给n
    for(i=0;i<n;i++) // 循环n次,每次循环执行以下操作
        scanf("%d",&a[i]); // 从标准输入读取一个整数,赋值给数组a的第i个元素

    for(i=0;i<n;i++) // 再次循环n次,每次循环执行以下操作
    {
        if(a[i]%2==0) // 如果数组a的第i个元素是偶数
            ou++; // 将ou的值加1
        else // 否则
            ji++; // 将ji的值加1
    }

    printf("%d %d\n",ji,ou); // 输出ji和ou的值,中间用空格隔开
    return 0; // 程序正常结束,返回0
}

统计指定数量学生的平均成绩与不及格人数
#include<stdio.h> // 引入标准输入输出库
main() // 主函数
{
    int n, i, a, count = 0, sum = 0; // 定义整型变量n、i、a、count和sum,并初始化为0
    float average; // 定义浮点型变量average
    scanf("%d", &n); // 从标准输入读取一个整数,赋值给n
    if (n == 0) // 如果n等于0
    {
        printf("average = 0.00\n"); // 输出average的值为0.00
        printf("count = 0"); // 输出count的值为0
    }
    else // 否则
    {
        for (i = 0; i < n; i++) // 循环n次
        {
            scanf("%d", &a); // 从标准输入读取一个整数,赋值给a
            sum = sum + a; // 将a的值累加到sum上
            if (a < 60) // 如果a小于60
                count++; // 将count的值加1
        }
        average = (float)sum / (float)n; // 计算平均值,并将结果赋值给average
        printf("average = %.2f\n", average); // 输出average的值,保留两位小数
        printf("count = %d", count); // 输出count的值
    }
}
求整数的位数及各位数字之和
#include<stdio.h>
int main()
{
 int N,i=0,sum=0;
 scanf("%d",&N);
 while(N!=0)
 {
  sum+=N%10;
  i++;
  N=N/10;
 }
 printf("%d %d",i,sum);
 return 0;
}

判断素数
#include <stdio.h> // 引入标准输入输出库
#include <stdbool.h> // 引入布尔类型库
#include <math.h> // 引入数学库

// 判断一个数是否为质数的函数
bool isPrime(int n);

int main()
{
    int n;
    scanf("%d", &n); // 读取测试用例的数量

    for (int i = 0; i < n; i++) {
        int x;
        scanf("%d", &x); // 读取每个测试用例的值

        if (isPrime(x)) { // 如果该值是质数
            printf("Yes\n"); // 输出 Yes
        } else {
            printf("No\n"); // 否则输出 No
        }
    }

    return 0; // 程序正常结束
}

// 判断一个数是否为质数的函数实现
bool isPrime(int n)
{
    if (n <= 1) return false; // 如果 n 小于等于 1,则不是质数

    int sqr = (int)sqrt(n); // 计算 n 的平方根并向下取整
    for (int i = 2; i <= sqr; i++) { // 从 2 到平方根遍历
        if (n % i == 0) { // 如果 n 能被 i 整除,则不是质数
            return false;
        }
    }

    return true; // 否则是质数
}

}计算阶乘和
#include<stdio.h>
int main()
{
    int n=0,sum=0,t=1;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        t*=i;
        sum+=t;
    }
    printf("%d",sum);
    return 0;
}

找出一批学生的最高分
#include <stdio.h> // 引入标准输入输出库

int main(){
    int MaxGrade = -1; // 初始化最大成绩为-1
    int Grade; // 定义一个整型变量Grade用于存储输入的成绩
    scanf("%d",&Grade); // 从标准输入读取一个整数赋值给Grade
    while(Grade >= 0) { // 当Grade大于等于0时,执行循环
        if(MaxGrade < Grade) // 如果当前成绩大于最大成绩
            MaxGrade = Grade; // 更新最大成绩
        scanf("%d",&Grade); // 继续从标准输入读取一个整数赋值给Grade
    }
    printf("%d",MaxGrade); // 输出最大成绩
    return 0; // 返回0表示程序正常结束
}
将数组中的数逆序存放
#include <stdio.h> // 引入标准输入输出库

int main()
{
    int n; // 定义一个整型变量n,用于存储输入的数组长度
    scanf("%d", &n); // 从标准输入读取一个整数赋值给n
    int arr[10]; // 定义一个整型数组arr,长度为10
    int i = 0; // 定义一个整型变量i,初始值为0
    for (i=0; i < n; i++) // 循环n次,将输入的n个整数存储到数组arr中
        scanf("%d", &arr[i]);
    i--; // 将i减1,使其指向数组arr的最后一个元素
    for (int j = 0; j < n / 2; j++) // 循环n/2次,交换数组arr的前半部分和后半部分的元素
    {
        int temp = arr[j]; // 定义一个整型变量temp,用于存储arr[j]的值
        arr[j] = arr[i]; // 将arr[i]的值赋给arr[j]
        arr[i] = temp; // 将temp的值赋给arr[i]
        i--; // 将i减1,使其指向数组arr的前一个元素
    }
    for (i = 0; i < n; i++) // 循环n次,输出数组arr的所有元素
    {
        if (i == n - 1) // 如果i等于n-1,表示当前元素是数组arr的最后一个元素
            printf("%d", arr[i]); // 直接输出该元素
        else // 否则
            printf("%d ", arr[i]); // 输出该元素并在其后添加一个空格
    }
}


简单的插入排序
#include<stdio.h>
int main(){
    int n,i,j;
    scanf("%d",&n); // 输入数组长度
    int a[n+1]; // 定义一个长度为n+1的整型数组a
    for(i=0;i<=n;i++) // 循环读取数组元素
        scanf("%d",&a[i]);

    for(i=0;i<n;i++) { // 遍历数组,将大于最后一个元素的元素与最后一个元素交换位置
        if(a[i]>a[n]) {
            a[i]=a[i]+a[n];
            a[n]=a[i]-a[n];
            a[i]=a[i]-a[n];
        }
    }

    for(i=0;i<=n;i++) // 输出交换后的数组元素
        printf("%d ",a[i]);
    return 0;
}


利用数组计算斐波那契数列
#include<stdio.h>
int main(){
    int i, N[47] = {1}, j = 2, m = 1; // 定义变量i、N数组、j和m,并初始化
    scanf("%d", &i); // 输入一个整数i
    if(i > 0){ // 如果i大于0
        while(i--){ // 循环i次
            N[j] = N[j-2] + N[j-1]; // 计算斐波那契数列的第j项
            printf("%11d", N[j]); // 输出第j项,占11个字符宽度
            if(m % 5 == 0) printf("\n"); // 如果m是5的倍数,换行
            j++; // j自增
            m++; // m自增
        }
    } else printf("Invalid."); // 如果i小于等于0,输出"Invalid."
    return 0; // 返回0
}
输出数组元素
#include <stdio.h>
int main()
{
    int n; // 定义一个整型变量n,用于存储输入的数组长度
    scanf("%d", &n); // 从标准输入读取一个整数,并将其赋值给n
    int i; // 定义一个整型变量i,用于循环计数
    int a[n]; // 定义一个整型数组a,长度为n
    for (i = 0; i < n; i++) // 使用for循环遍历数组a
    {
        scanf("%d", &a[i]); // 从标准输入读取一个整数,并将其赋值给数组a的第i个元素
        /* code */
    }
    for (i = 1; i < n; i++) // 使用for循环遍历数组a(从第二个元素开始)
    {
        if (i % 3 == 1) // 如果i是3的倍数加1,即第2、5、8...个元素
            printf("%d", a[i] - a[i - 1]); // 输出当前元素与前一个元素的差值
        else // 否则
        {
            printf(" %d", a[i] - a[i - 1]); // 输出当前元素与前一个元素的差值,前面加上一个空格
        }
        if (i % 3 == 0) // 如果i是3的倍数,即第3、6、9...个元素
        {
            printf("\n"); // 输出一个换行符,使输出结果更美观
        }
    }
    return 0; // 程序正常结束,返回0
}
方阵转置
#include<stdio.h>
int main(){
    //输入
    int n,a[6][6],tmp,i,j;
    scanf("%d",&n); // 读取矩阵的大小
    for(int i=0;i<n;i++) // 遍历行
    {
        for(int j=0;j<n;j++) // 遍历列
        {
            scanf("%d",&a[i][j]); // 读取矩阵元素
        }
    }
 
    //打印
        for(int i=0;i<n;i++) // 遍历行
    {
        for(int j=0;j<n;j++) // 遍历列
        {
            printf("%4d",a[j][i]); // 打印转置后的矩阵元素,注意行列顺序交换
        }
            printf("\n"); // 换行
    }
    return 0;
}


字符串转换成十进制整数
#include <stdio.h>
int main(){    
    char s[100],c;    // 定义字符数组s和字符变量c
    int n=0,i=0,flag=1;    // 定义整型变量n、i和flag,分别表示字符个数、当前字符位置和负号标志
    do{        
        scanf("%c",&c);        // 读取一个字符
        if((c>='a' && c<='f') || (c>='A' && c<='F') || (c>='0' && c<='9')){            // 如果字符是十六进制数或十进制数
            s[i++]=c;            // 将字符存入数组s
            n++;        // 字符个数加1
        }else if(c=='-' && n==0){            // 如果字符是负号且前面没有数字
            flag=0;        // 设置负号标志为0
        }    
    }while(c!='#');    // 当读取到井号时结束循环
    int j=1,sum=0;;    // 定义整型变量j和sum,分别表示权重和十六进制数的值
    for(i=n-1;i>=0;i--){        // 从后往前遍历字符数组s
        if(s[i]>='a' && s[i]<='f') sum+=j*(s[i]-'a'+10);  // 如果字符是小写字母,计算其对应的十进制值并累加到sum中
        else if(s[i]>='A' && s[i]<='F') sum+=j*(s[i]-'A'+10);    // 如果字符是大写字母,计算其对应的十进制值并累加到sum中
        else if(s[i]>='0' && s[i]<='9') sum+=j*(s[i]-'0');  // 如果字符是数字,计算其对应的十进制值并累加到sum中
        j*=16;    // 权重乘以16
    }    
    if(sum==0) printf("0\n");    // 如果sum为0,输出0
    else if(flag==0) printf("-%d",sum);    // 如果负号标志为0,输出负号和sum
    else printf("%d",sum);        // 否则输出sum
    return 0;
}

查找指定字符
#include <stdio.h>
int main () {
    int i = 0, max = -1; // 初始化计数器i和最大值max,初始值为-1
    char c1,c2; // 定义两个字符变量c1和c2
    scanf("%c\n", &c1); // 读取一个字符并存储到c1中,然后换行
    c2 = getchar(); // 读取一个字符并存储到c2中
    // scanf("%c", &c2);
    while (c2 != '\n') { // 当c2不等于换行符时执行循环
        if (c2 == c1) max = i; // 如果c2等于c1,则将当前计数器i的值赋给max
        c2 = getchar(); // 读取下一个字符并存储到c2中
        // scanf("%c", &c2);
        i++; // 计数器i加1
    }
    printf(max==-1?"Not Found":"index = %d",max); // 根据max的值输出结果,如果max为-1,则输出"Not Found",否则输出"index = "加上max的值
    return 0; // 返回0表示程序正常结束
}
字符串逆序
#include<stdio.h> // 引入标准输入输出库
#include<string.h> // 引入字符串处理库
#define N 81 // 定义一个宏,表示数组的最大长度为81

int main() // 主函数
{
    char a[N],i; // 定义一个字符数组a和一个字符变量i
    int m; // 定义一个整型变量m
    gets(a); // 从标准输入读取一行字符串并存储到数组a中
    m=strlen(a); // 计算字符串a的长度,并将结果存储到变量m中
    for(i=m-1;i>=0;i--){ // 从字符串的最后一个字符开始循环
        printf("%c",a[i]); // 输出当前字符
    }
    return 0; // 程序正常结束,返回0
}

统计大写辅音字母
#include <stdio.h>
int main()
{
    int i, count = 0; // 定义计数器count并初始化为0
    char ch, str[80]; // 定义字符变量ch和字符串数组str
    ch = getchar(); // 从标准输入读取一个字符并赋值给ch
    for (i = 0; ch != '\n'; i++) { // 当ch不等于换行符时,执行循环
        if (ch >= 'B' && ch <= 'Z' && ch != 'E' && ch != 'I' && ch != 'O' && ch != 'U') { // 如果ch是大写字母且不是元音字母(A、E、I、O、U)
            count++; // 计数器count加1
        }
        ch = getchar(); // 继续从标准输入读取一个字符并赋值给ch
    }
    printf("%d", count); // 输出计数器count的值
    return 0; // 程序正常结束,返回0
}


利用指针返回多个函数值
#include<stdio.h>
int main()
{
    int *pmax,*pmin;                            //定义指针
    int n,a[10],min,max,i;
    pmax=&max;                                 //将最大值的地址给指针
    pmin=&min;                                  //将最小值的地址给指针
    scanf("%d",&n);
    //依次输入n个数并存放在数组a中
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);
    }
  *pmax=a[0];                                   //令最大值等于数组第一个数
  *pmin=a[0];                                    //令最小值等于数组第一个数           
  //依次用数组后面的每个数作比较      
  for(i=1;i<n;i++){
      if(a[i]>*pmax){                          //当数组后面的数大于*pmax时,则取代                  
          *pmax=a[i];
      }
      if(a[i]<*pmin){
          *pmin=a[i];                               //当数组后面的数小于*pmin时,则取代
        }
    }
    printf("max = %d\n",max);           //按照题目要求的格式输出最大最小值
    printf("min = %d",min);
    return 0;
}

删除字符串中指定字母
#include<stdio.h> // 引入标准输入输出库
#include<string.h> // 引入字符串处理库
void main() // 主函数
{
    char a[100],*p; // 定义字符数组a和指针p
    int v,i,u; // 定义整型变量v、i、u
    scanf("%s",a); // 从标准输入读取一个字符串并存储到数组a中
    p=a; // 将指针p指向数组a的首地址
    v=strlen(p); // 计算字符串a的长度,并将结果存储到变量v中
    for(i=0;i<v;i++) // 遍历字符串a中的每个字符
        if(*(p+i)=='a') // 如果当前字符是'a'
        {
            u=i; // 将变量u的值设置为当前字符的位置
            while(*(p+u+1)!='\0') // 当当前字符后面的字符不是字符串结束符时
            {
                *(p+u)=*(p+u+1); // 将当前字符后面的字符复制到当前字符的位置
                u++; // u自增1,指向下一个字符
            }
            *(p+u)='\0'; // 将当前字符后面的字符替换为字符串结束符
            i--; // i自减1,以便下一次循环时重新检查当前位置的字符
        }
    printf("%s\n",p); // 输出处理后的字符串a
}

选择法排序
#include<stdio.h> // 引入标准输入输出库
#define N h // 定义宏N为h
int main() // 主函数
{
    int h; // 定义整型变量h
    scanf("%d",&h); // 从标准输入读取一个整数并赋值给h
    int a[N],i,j,temp; // 定义整型数组a,整型变量i、j和temp
    for(i=0;i<N;i++) // 循环遍历数组a
    {
        scanf("%d",&a[i]); // 从标准输入读取一个整数并赋值给数组a的第i个元素
    }
    for(i=0;i<N-1;i++) // 外层循环,遍历数组a的前N-1个元素
    {
        for(j=i+1;j<N;j++) // 内层循环,遍历数组a的第i+1个元素到最后一个元素
        {
            if(a[i]<a[j]) // 如果数组a的第i个元素小于第j个元素
            {
                temp=a[i]; // 将数组a的第i个元素赋值给临时变量temp
                a[i]=a[j]; // 将数组a的第j个元素赋值给数组a的第i个元素
                a[j]=temp; // 将临时变量temp的值赋值给数组a的第j个元素
            }
        }
    }
    for(i=0;i<N;i++) // 循环遍历数组a
    {
        if(i==0) // 如果当前索引i等于0
            printf("%d",a[i]); // 输出数组a的第i个元素
        else printf(" %d",a[i]); // 否则输出一个空格和数组a的第i个元素
    }
}
整数152的各位数字
#include<stdio.h>
int main()
{
    int a,b,c; // 定义三个整型变量a、b、c
    a=152%10; // 计算152除以10的余数,赋值给a
    b=152/10%10; // 计算152除以10的商再除以10的余数,赋值给b
    c=152/100; // 计算152除以100的商,赋值给c
    printf("152 = %d + %d*10 + %d*100",a,b,c); // 输出结果
    return 0; // 返回0表示程序正常结束
}
 

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值