C语言期末小练习

C期末复习

题目概览

  1. 输入两个正整数,m和n,求其最大公约数和最小公倍数。
  2. 输入一个正整数n,计算下列算式的前n项之和。s=1-1/3+1/5-1/7+…
  3. 为鼓励居民节约用水,自来水公司采取按月用水量分段计费的办法,居民应交水费y(元)
    与月用水量x(吨)的函数关系式如下(设x≥0)。
    y= x/3 0≤x≤15
    y= 2.5x-10.5 x>15
    输入用户的月用水量x(吨),计算并输出该用户应支付的水费y(元)(保留2位小数)。
  4. 要求用switch语句编程设计一个简单的计算器程序。要求根据用户从键盘输入的表达式:
    操作数1 运算符op 操作数2
    计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。
  5. 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前10项之和。
  6. 给定10个整数,求最大值。
  7. 输入4个整数,要求按由大到小的顺序输出。
  8. 求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字。
    例如:2+22+222+2222+22222(n=5),n由键盘输入。
  9. 求1!+2!+3!+4!+5!+…+10!要求利用递归函数完成。
  10. 打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。例如:153是一个水仙花数,因为153=13+53+3^3。
  11. 一球从100米高度自由下落,每次落地后返回原高度的一半,再落下。求它在第10次落地时共经过多少米?第10次反弹多高?
  12. 猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。
  13. 求100之内的素数。
  14. 用选择法对10个整数从小到大排序。
  15. 求一个3×3矩阵对角线元素之和。
  16. 已有一个已排序的数组,如{1,7,8,17,23,24,59,62,101},现从键盘输入一个数,要求按原来排序的规律将它插入数组中
  17. 打印出以下杨辉三角形(要求打印出10行)。
    1
    1  1
    1  2  1
    1  3  3  1
    1  4  6  4  1
    1  5  10 10  5  1

  18. 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点。
    例如,下列二维数组中8为鞍点
    8 1 6
    13 5 7
    24 9 2
  19. 编一程序,将两个字符串连接起来,不要strcat函数。
  20. 使给定的一个二维数组(3×3)转置,即行列互换。
  21. 写一函数用冒泡法对输入的10个数按由小到大的顺序排列。
  22. 回文数的判断:输入一个5位数,判断它是不是回文数,即个位与万位、十位与千位是否分别相同。如:12321是一个回文数。
  23. 兔子问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问前20个月每个月的兔子总数为多少?
  24. 有10位同学,参加了3门课程的考试,他们的成绩存放在数组score[3][10]中,数组每一行存放的是一门课程所有同学的成绩。编写一个程序,找出每门课程的最高分,并输出。
  25. 打印乘法九九表。
  26. 从键盘输入10个数,求出他们的平均值及比平均值大的数。要求编写自定义函数完成。

1.最大公约和最小公倍

#include <stdio.h>
#include <string.h>

void find(int x,int y){
    int min = x * y;;
    int temp;
    if(x<y){               
        temp = x;
        x = y;
        y = temp;
    }
    do{                     //辗转相除 do while防止x为y倍数
        temp = x % y;
        x = y;
        y = temp;
    }while(temp!=0);

    printf("最大公约数为:%d\n",x);
    printf("最小公倍数为:%d",min/x);  //x*y 为最大公约乘以最小公倍
}
int main(int argc, const char * argv[]) {
    printf("请输入两个正整数\n");
    int x,y;
    scanf("%d %d",&x,&y);
    find(x,y);
    return 0;
};


2.计算(-1)^(n+1) * (1/2n-1)数列求和

#include <stdio.h>
#include <string.h>

void sum(int n){
    double sum=0,an;
    for(int i=1;i<=n;i++){
        an =2*i-1;
        an =1/an;
        if(i%2!=0){
            sum +=an;
        }else{
            sum -=an;
        }
    }  
    printf("前%d项和为%.4lf\n",n,sum);
}

int main(int argc, const char * argv[]) {
    printf("请输入一个正整数\n");
    int x;
    scanf("%d",&x);
    sum(x);
    return 0;
};

3.自来水计费

void cul(int n){
    double price;
    if(n<=15){
        price = n / 3;
    }else{
        price = 2.5*n - 10.5;
    }
    printf("应支付水费%.2lf元\n",price);
}
int main(int argc, const char * argv[]) {
    printf("请输入用水量\n");
    int x;
    scanf("%d",&x);
    cul(x);
    return 0;
};

4.switch 写计算器

#include <stdio.h>
#include <string.h>

float cul(float x ,char op ,float y){
    switch(op){
        case '+': return x+y; break;
        case '-': return x-y; break;
        case '*': return x*y; break;
        case '/': if(y==0) printf("算式不符合要求");
                  return x/y; break;
    };
    return 0;
}

int main(int argc, const char * argv[]) {
    printf("请输入算式(逗号间隔)\n");
    float x,y,res;
    char op;
    scanf("%f %c %f",&x,&op,&y);
    res = cul(x,op,y);
    printf("结果为%.2f",res);
    return 0;
};

5.求Fibonacci分数列前10项和

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    double x=1.0,y=2.0;
    double temp,an,sum = 0.0;
    for(int i = 0;i<10;i++){
        an = y / x;
        sum += an;
        temp = y;
        y = x+y;
        x =temp;
    }
    printf("斐波那契分数数列前十项和为:%.4lf\n",sum);
};

6.输入10个找最大数

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    int count=0;
    int i,max=0;
    while(count!=10){
        scanf("%d",&i);
        if(max<i) max = i;
        count++;
    }
    printf("最大数为:%d",max);
};

7.输入4个整数,正序输出

#include <stdio.h>
#include <string.h>
void sort(int a[]){
    int temp = 0;
    for (int i=0; i<=3; i++) {
        for (int j=0; j<=3-i; j++) {
            if(a[j+1]<a[j]){
                temp = a[j+1];
                a[j+1] = a[j];
                a[j] = temp;
            }
        }
    }
}
int main(){
    printf("输入四个整数\n");
    int a[4];
    scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3]);
    sort(a);
    printf("%d %d %d %d",a[0],a[1],a[2],a[3]);
};

8.对数列a^n求和

#include <stdio.h>
#include <string.h>
#include <math.h>
void sum(int n){
    int sum=0,an;
    for(int i=1;i<=n;i++){
        an = (pow(10,i)-1)/9*2;
        sum += an;
    }
    printf("和为%d",sum);
}
int main(){
    int a=2,n;
    printf("输入n的值\n");
    scanf("%d",&n);
    sum(n);
};

9.递归求阶乘的和

#include <stdio.h>
#include <string.h>
int jiecheng(int n){
    if(n==1){
        return 1;
    }else{
        return n*jiecheng(n-1);
    }
}
int main(){
    int n =10,an,sum=0;
    for (int i=1; i<=10; i++) {
        an = jiecheng(i);
        sum+=an;
    }
    printf("1~10的阶乘和为:%d\n",sum);
};

10.水仙花数

#include <stdio.h>
#include <string.h>

int main(){
    for(int i=100;i<=999;i++){
        int x,y,z;
        x = i%10;
        y = i/10%10;
        z = i/100;
        if(x*x*x+y*y*y+z*z*z==i) printf("水仙花数为%d\n",i);
    }
};

11.球落地问题

#include <stdio.h>
#include <string.h>

int main(){
    double sum = 100.0;
    double len = 100.0;
    for (int i = 1; i <= 9; i++){
        len /= 2;
        sum += len*2;
    }
    printf("共经过%.3lf米\n第十天反弹为%.3lf米\n",sum,len);
    return 0;
};

12.猴吃桃问题

#include <stdio.h>
#include <string.h>

int main(){
    int p =1;
    for(int i=2;i<=10;i++){
        p = (p+1)*2;
    }
    printf("第一天摘了%d个桃\n",p);
};

13.100内素数

#include <stdio.h>
#include <string.h>

int main(){
    int key = 1;
    for(int i=2;i<=100;i++){
        for(int j=2;j<i;j++){
            if(i%j==0){
                key = 0;
                break;
            };
        }
        if(key==1){
            printf("素数为%d\n",i);
        }
        key = 1;
    }
};

14.选择法排序

#include <stdio.h>
#include <string.h>

void sort(int arr[]){
    int temp;
    for (int i=0;i<9;i++){
        int min = i;
        for (int j=i+1;j<=9; j++)
        if (arr[j] < arr[min]) min = j;
        temp = arr[min];
        arr[min] = arr[i];
        arr[i] = temp;
    }
}
int main(){
    int a[10];
    printf("请输入10个数\n");
    for(int i=0;i<=9;i++){
        scanf("%d",&a[i]);
    }
    sort(a);
    for(int i=0;i<=9;i++){
        printf("%d",a[i]);
    }
};

15.3*3矩阵对角和

#include <stdio.h>
#include <string.h>
void sum(int arr[3][3]){
    int sum = 0;
    for (int i=0; i<=2; i++) {
        for (int j=0; j<=2; j++) {
            if((i+j)==2||i==j){   //两个对角线
                sum += arr[i][j];
            }
        }
    }
    printf("对角和为:%d",sum);
}

int main(int argc, const char * argv[]){
    int arr[3][3] ={{8,1,6},{13,5,7},{24,9,2}};
    sum(arr);
};

16.已排序数组的插入

#include <stdio.h>
#include <string.h>
void add(int a[],int len,int m){
    int b[len+1],temp=1;
    for (int i=0; i<len; i++) {
        if(a[i]<m){
            b[i] = a[i];
        }else if (a[i] > m&&temp == 1){
            b[i] = m;
            temp ++;
        }
        b[i+1] = a[i];
        printf("%d ",b[i]);
    }
}
int main(){
    int a[]={1,7,8,17,23,24,59,62,101};
    int len = sizeof(a)/sizeof(a[0]);
    int m = 42;
    add(a,len,m);

};

17.杨辉三角

#include <stdio.h>
#include <string.h>
void yanghui(int n){
    int a[n][n];
    for(int i=0;i<=n-1;i++){
        for(int j=0;j<=n-1;j++){
            if(i<j){
                break;
            }else if (i==j||j==0){
                a[i][j]=1;
            }else{
                a[i][j] = a[i-1][j] + a[i-1][j-1];
            }
            printf("%-4d  ",a[i][j]);
        }
        printf("\n");
    }
}
int main(){
    int n=10;
    yanghui(n);
};

18.找鞍点

#include <stdio.h>
#include <string.h>

void FindSaddlePoint(int a[3][3]){
    int count =0;
    for (int i=0; i<=2; i++) {
        int max=0;
        int min=999;
        int MaxR=0,MaxC=0,MinC=0,MinR=0;
        for (int j=0;j<=2; j++) {
            if(a[i][j]>max){
                max = a[i][j];
                MaxC = j;
                MaxR = i;
            };
        };
        for (int t=0; t<=2; t++) {
            if(a[t][MaxC]<min){
                min = a[t][MaxC];
                MinC = MaxC;
                MinR = t;
            };
        }
        if(max==min&&MinR==MaxR){
            printf("存在鞍点。值为:%d 位于第%d行 第%d列",a[MaxR][MaxC],MaxR+1,MaxC+1);
            count++;
        }
    }
    if(count==0){
        printf("不存在鞍点");
    }
    printf("\n");
}
int main(int argc, const char * argv[]) {
    int arr1[3][3] ={{8,1,6},{13,5,7},{24,9,2}};
    FindSaddlePoint(arr1);

};

19.不用strcat完成字符连接

#include <stdio.h>
#include <string.h>
void stradd(char a[],char b[],char c[100]){
    int temp=0;
    for(int i=0;a[i]!='\0';i++){
        c[temp++] = a[i];
    }
    for(int j=0;b[j]!='\0';j++){
        c[temp++] = b[j];
    }
}
int main(){
    char a[] = "test_";
    char b[] = "demo1115";
    char c[100];
    stradd(a,b,c);
    puts(c);
};

20.矩阵转置

#include <stdio.h>
#include <string.h>
void matrixTranspose(int arr[3][3]){
    int b[3][3];
    for(int i=0;i<=2;i++){
        for(int j=0;j<=2;j++){
            b[j][i] = arr[i][j];
        }
    }
    for(int i=0;i<=2;i++){
        for(int j=0;j<=2;j++){
            arr[i][j] = b[i][j];
        }
    }
}

int main(int argc, const char * argv[]){
    int arr[3][3] ={{8,1,6},{13,5,7},{24,9,2}};
    matrixTranspose(arr);
    for(int i=0;i<=2;i++){
        for(int j=0;j<=2;j++){
            printf("%-3d",arr[i][j]);
        }
        printf("\n");
    }
};

21.冒泡排序

#include <stdio.h>
#include <string.h>
void sort(a[]){
    int temp = 0;
    for (int i=0; i<=9; i++) {
        for (int j=0; j<=9-i; j++) {
            if(a[j+1]<a[j]){
                temp = a[j+1];
                a[j+1] = a[j];
                a[j] = temp;
            }
        }
    }
}
int main(){
    int a[10];
    printf("请输入10个数\n");
    for(int i=0;i<=9;i++){
        scanf("%d",&a[i]);
    }
    sort(a);
    for(int i=0;i<=9;i++){
        printf("%d",a[i]);
    }
};

22.回文数

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    int i;
    printf("输入一个五位数\n");
    scanf("%d",&i);
    if(i/10000==i%10&&(i/10%10)==(i/1000%10)){
        printf("是一个回文数");
    }else{
        printf("不是一个回文数");
    }
};

23.兔子问题

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    int a[20]={1,1};
    int sum = 2;
    for(int i=2;i<=19;i++){
        a[i] = a[i-1]+a[i-2];
        sum += a[i];
    };
    printf("前20个月,每个月总数和为%d\n",sum*2); //一对兔子 *2
};

24.找课程最高分

#include <stdio.h>
#include <string.h>
void findmax(int a[3][20]){
    int max = 0;
    for(int i=0;i<=2;i++){
        for(int j=0;j<=9;j++){
            if(max< a[i][j]) max = a[i][j];
        }
        printf("第%d门课的最高分为%d\n",i+1,max);
        max = 0;
    }
}
int main() {
    int score[3][20] = {{78,79,45,65,34,92,65,46,22,44},
                           {88,79,45,65,34,65,32,46,22,44},
                           {98,79,45,65,34,99,65,46,22,44}};
    findmax(score);
};

25.九九乘法表

#include <stdio.h>
#include <string.h>

int main(int argc, const char * argv[]) {
    for(int i=1;i<=9;i++){
        for(int j=1;j<=9;j++){
            printf("%d * %d =%2d   ",i,j,i*j);
        }
        printf("\n");
    }
};

26.求平均数(自定义函数)

#include <stdio.h>
#include <string.h>
void avg(double a[]){
    double avg = 0;
    for(int i=0;i<=9;i++){
        avg += (a[i]/10);
    }
    printf("平均值为%f\n大于平均值的为:\n",avg);
    for(int i=0;i<=9;i++){
        if(avg < a[i])
        printf("%.1lf  ",a[i]);
    }
}
int main() {
    int count =0,i=0;
    double a[10];
    printf("输入十个数\n");
    while (count!=10) {
        scanf("%lf",&a[i++]);
        count++;
    }
    avg(a);
};

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值