当前位置: 首页 > article >正文

C语言经典代码练习题

1.输入一个4位数:输出这个输的个位 十位 百位 千位

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a;
    printf("输入一个4位数:");
    scanf("%d",&a);
    printf("个位:%d\n",a%10);
    printf("十位:%d\n",a%100/10);
    printf("百位:%d\n",a/100%10);
    printf("千位:%d\n",a/1000);

    return 0;
}

2.从键盘读入两个整数,输出他们的和

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a,b;
    printf("输入第一个整数:");
    scanf("%d",&a);
    printf("输入第二个整数:");
    scanf("%d",&b);
    printf("它们的和:%d\n",a+b);
    return 0;
}

3.一个水分子的质量约为3.0*10^-23g,1夸脱水大约有950g,编写一个程序,要求输入水的夸脱数,然后显示这么多水中包含多少水分子。表示:3.0e-23 打印格式:%f或%e

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a;
    printf("输入水的夸脱数:");
    scanf("%d",&a);
    printf("%d夸脱水包含%f水分子\n",a,a*950/3.0e-23);
    return 0;
}

4.实现大小写转换(用getchar、putchar实现)即如果是大写字母转成小写输出如果是小写字母转为大写输出。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a=getchar();
    if(65<=a&&a<=90){
        putchar(a+32);
        putchar(10);
    }else if (a>=97&&a<=122)
    {
        putchar(a-32);
        putchar(10);
    }
    return 0;
}

5.从终端输入3个整数;从大到小输出。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a, b, c;
    printf("请输入三个整数:\n");
    scanf("%d%d%d", &a, &b, &c);
    if (a <= b)
    {
        int m;
        m = a;
        a = b;
        b = m;
    }
    if (b >= c)
        printf("%d %d %d\n", a, b, c);
    else if (a >= c && c >= b)
        printf("%d %d %d\n", a, c, b);
    else
        printf("%d %d %d\n", c, a, b);
    return 0;
}

6.输入任意两个数,输出两数之间(包括这两个数)偶数之和

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a, b, c;
    int sum = 0;
    printf("输入任意两个数:\n");
    scanf("%d%d", &a, &b);
    if (a > b)
    {
        c = a;
        a = b;
        b = c;
    }
    for (int i = a; i <= b; i++)
    {
        if (i % 2 == 0)
            sum += i;
    }
    printf("%d与%d偶数之和为%d\n", a, b, sum);
    return 0;
}

7.写程序实现功能:读入两个整数(data1和data2)和一个运算符(op),计算表达式data1 op data2 的值.其中op可以为+、-、*、/四个符号中的任一种(用switch语句实现)

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a, b;
    char c;
    printf("输入两个整数:\n");
    scanf("%d%d", &a, &b);
    getchar();
    printf("输入一个运算符(+、-、*、/):\n");
    scanf("%c", &c);
    switch (c)
    {
    case '+':
        printf("%d%c%d=%d\n", a, c, b, a + b);
        break;
    case '-':
        printf("%d%c%d=%d\n", a, c, b, a - b);
        break;
    case '*':
        printf("%d%c%d=%d\n", a, c, b, a * b);
        break;
    case '/':
        printf("%d%c%d=%d\n", a, c, b, a / b);
        break;
    }
    return 0;
}

8.终端输入十个数,去掉其中最大值和最小值,求平均值。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a[10];
    int max, min;
    int sum = 0;
    printf("输入十个数:\n");
    for (int i = 0; i < 10; i++)
    {
        scanf("%d", &a[i]);
        sum += a[i];
    }
    for (int i = 0; i < 10; i++)
    {
        max = a[0];
        min = a[0];
        if (a[i] > max)
            max = a[i];
        if (a[i] < min)
            min = a[i];
    }
    printf("sum=%d\n", sum);
    printf("max=%d\n", max);
    printf("min=%d\n", min);
    printf("去掉最大值和最小值,平均值为:%f\n", (float)(sum - max - min) / 8);
    return 0;
}

9.计算斐波那契数列前15项并逆序输出。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a[15] = {1, 1};
    for (int i = 2; i < 15; i++)
    {
        a[i] = a[i - 2] + a[i - 1];
    }
    for (int i = 14; i >= 0; i--)
        printf("%d\n", a[i]);
    return 0;
}

10.循环输入一个5位数,判断它是不是回文数。当输入0时循环结束。即12321是回文数,个位与万位相同,十位与千位相同。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a;
    printf("输入一个5位数:");
    while (1)
    {
        scanf("%d", &a);
        if (a == 0)
            break;
        if ((a % 10 == a / 10000) && (a / 10 % 10 == a / 1000 % 10))
            printf("是回文数\n");
        else
            printf("不是回文数\n");
        printf("输入一个5位数:");
    }
    return 0;
}

11.输入一个字符串,大小写转换输出。

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    char a[33] = {};
    scanf("%s", a);
    int n = strlen(a);
    for (int i = 0; i < n; i++)
    {
        if (a[i] >= 'a' && a[i] <= 'z')
            printf("%c", a[i] - 32);
        else if (a[i] >= 'A' && a[i] <= 'Z')
            printf("%c", a[i] + 32);
    }
    return 0;
}

12.冒泡排序。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a[5] = {6, 5, 4, 2, 3};
    for (int i = 0; i < 4; i++)
    {
        for (int j = 0; j < 4 - i; j++)
        {
            if (a[j] > a[j + 1])
            {
                a[j] = a[j] ^ a[j + 1];
                a[j + 1] = a[j] ^ a[j + 1];
                a[j] = a[j] ^ a[j + 1];
            }
        }
    }
    for (int i = 0; i < 5; i++)
    {
        printf("%d", a[i]);
    }
    return 0;
}

13.选择排序。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    int a[5] = {5, 4, 6, 9, 7};
    int temp;
    for (int i = 0; i < 4; i++)
    {
        int min = i;
        for (int j = i + 1; j < 5; j++)
        {
            if (a[j] < a[min])
                min = j;
        }
        temp=a[i];
        a[i]=a[min];
        a[min]=temp;
    }
    for (int i = 0; i < 5; i++)
        printf("%d", a[i]);
    return 0;
}

14.字符串逆序输出(两种方法实现)。

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    // 字符串逆序输出
    // 法1
    // char a[] = "hello world";
    // char *p = a;
    // int n = strlen(a);
    // for (int i = n; i >= 0; i--)
    // {
    //     printf("%c ", p[i]);
    // }

    char a[] = "hello world";
    char *p = a + strlen(a) - 1;
    for (int i = 0; i < strlen(a); i++)
    {
        printf("%c", *p);
        p--;
    }

    // 法2
    // char a[] = "hello world";
    // char *p = a;
    // int n = strlen(a);
    // for (int i = 0; i < n / 2; i++)
    // {
    //     p[i] = p[i] ^ p[n - i - 1];
    //     p[n - i - 1] = p[i] ^ p[n - i - 1];
    //     p[i] = p[i] ^ p[n - i - 1];
    // }
    // printf("%s", p);
    // return 0;

    char a[66];
    gets(a);
    char *p = a;
    char *q = a + strlen(a) - 1;
    while (p < q)
    {
        *p = *p ^ *q;
        *q = *p ^ *q;
        *p = *p ^ *q;
        p++;
        q--;
    }
    printf("%s", a);
    return 0;
}

15.字符串转数字:"1234" -----> 1234(一千两百三十四)。

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    // 字符串转数字
    //法1
    // char a[33];
    // gets(a);
    // int n=strlen(a);
    // int sum=0;
    // int j;
    // for (int i = 1; i < n; i++)
    // {
    //     j*=10;
    // }   
    // for (int i = 0; i < n; i++)
    // {
    //     sum+=(a[i]-48)*j;
    //     j/=10;
    // }
    // printf("%d\n", sum);
    // return 0;

    //法2
    char a[33];
    gets(a);
    char *p=a;
    int n=0;
    while (*p!='\0')
    {
        n=n*10+(*p-48);
        p++;
    }
    printf("%d\n",n);
}

16.打印杨辉三角前十行(二维数组)。

#include <stdio.h>
int main(int argc, char const *argv[])
{
    // 打印杨辉三角前十行
    // 法1
    //  int a[10][10] = {0};
    //  for (int i = 0; i < 10; i++)
    //  {
    //      for (int j = 0; j <= i; j++)
    //      {
    //          if (j - 1 >= 0)
    //              a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    //          else
    //              a[i][j] = 1;
    //      }
    //  }
    //  for (int i = 0; i < 10; i++)
    //  {
    //      for (int j = 0; j <= i; j++)
    //          printf("%-3d ", a[i][j]);
    //      printf("\n");
    //  }

    // 法2
    int a[10][10] = {};
    for (int i = 0; i < 10; i++)
    {
        a[i][0] = 1;
        a[i][i] = 1;
    }
    for (int i = 2; i < 10; i++)
    {
        for (int j = 1; j < 10; j++)
            a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
    }
    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j <= i; j++)
            printf("%d ", a[i][j]);
        putchar(10);
    }
}

17.已知字符数组a[10]和b[10]中元素的值递增有序,用指针实现将两个数组中元素按照递增顺序输出。如:char a[10]=”acdgjmno” ; char b[10]=”befhil”;->”abcdefghijlmno”

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    char a[10] = "acdgjmno";
    char b[10] = "befhil";
    char *p = a, *q = b;
    int i = 0, j = 0;
    while (i < strlen(a) && j < strlen(b))
    {
        if (p[i] < q[j])
        {
            printf("%c", p[i]);
            i++;
        }
        else
        {
            printf("%c", q[j]);
            j++;
        }
    }
    if (i < strlen(a))
    {
        for (int k = i; k < strlen(a); k++)
            printf("%c", a[k]);
    }
    if (j < strlen(b))
    {
        for (int k = j; k < strlen(b); k++)
            printf("%c", b[k]);
    }
    return 0;
}

18.给定一串字符"I love china",实现以单词为单位的逆序,如:"china love i"

#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
    char a[] = "i love china";
    char *p = a;
    int n = strlen(a);
    for (int i = 0; i < n / 2; i++)
    {
        p[i] = p[i] ^ p[n - i - 1];
        p[n - i - 1] = p[i] ^ p[n - i - 1];
        p[i] = p[i] ^ p[n - i - 1];
    }
    char *q;
    char *k=NULL, temp;
    p = q = a;
    while (*p != '\0')
    {
        while (*p == ' ' )
            p++;
        q = p;
        while (*q != ' ' && *q != '\0')
            q++;
        k = q;
        q = k - 1;
        while (p < q)
        {
            temp = *p;
            *p = *q;
            *q = temp;
            p++;
            q--;
        }
        p = k;
    }
    printf("%s\n", a);
    return 0;
}

19.定义求x的n次方值的函数( x是实数, n为正整数)。

#include <stdio.h>

int fun(int x, int n)
{
    int r = 1;

    for (int i = 0; i < n; i++)
        r *= x;
    printf("%d\n", r);
    return r;
}

int main(int argc, char const *argv[])
{

    // int r = 1;
    // int x = 2;
    // for (int i = 0; i < 4; i++)
    //     r *= x;
    // printf("%d\n", r);

    printf("%d\n", fun(2, 4));
}

20.编写一个函数,函数的2个参数,第一个是一个字符,第二个是一个char *,返回字符串中该字符的个数。

#include <stdio.h>

int fun(char ch, char *p)   //ch=a='a', p=s
{
    int n = 0;
    while (*p != '\0') //*p
    {
        if (*p == ch)
            n++;
        p++; //p=p+1
    }

    return n;
}

int main(int argc, char const *argv[])
{
    char a = 'a';
    char s[32] = "abbba";
    printf("%d\n", fun(a, s));
}

21.编程实现strlen函数的功能,strlen计算字符串实际长度,不包含'\0'

#include <stdio.h>

int fun(char *p)
{
    int n = 0;
    while (*p)
    {
        n++;
        p++;
    }
    return n;
}

int main(int argc, char const *argv[])
{
    char s[32] = "abbba";
    int len = 0;
    len = fun(s);
    printf("%d\n", len);

    //printf("%d\n", fun(s));
    //printf("%d\n", fun("6666666"));
}

22.字符串"123"转换成整型123

#include <stdio.h>

int fun(char *p)
{
    int sum = 0;
    while (*p != '\0')
    {
        sum = sum * 10 + (*p - 48);
        p++;
    }
    return sum;
}

int main(int argc, char const *argv[])
{
    char str[32] = "123";
    printf("%d\n", fun(str));
}

23.封装函数实现两数交换。

#include <stdio.h>
void fun(int *x, int *y)
{
    int tmp;
    tmp = *x;
    *x = *y;
    *y = tmp;
}

int main(int argc, char const *argv[])
{
    int a = 10, b = 20;
    fun(&a, &b);
    printf("%d %d\n", a, b);
}

24.封装函数实现strcpy功能。

#include <stdio.h>

void fun(char *p, char *q)
{
    while (*q != '\0')
        *p++ = *q++;  //*p=*q; p++; q++;
    *p = '\0';
}

int main(int argc, char const *argv[])
{
    char a[32] = "";
    char b[32] = "hello";
    fun(a, b);
    printf("%s\n", a);
}

25.封装函数实现strcat功能。

#include <stdio.h>
#include <string.h>
void fun(char *p, char *q)
{
    while (*p)   //p=p+strlen(p);
        p++;
    while (*q)
        *p++ = *q++;
    *p = '\0';
}

int main(int argc, char const *argv[])
{
    char a[32] = "hello";
    char b[32] = "world";
    fun(a, b);
    printf("%s\n", a);
}

26.用递归函数求5的阶乘5!

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

int fac(int n)   //n=5  n=4 n=3 n=2 n=1
{
    if (n == 1)
        return 1;       //fac(1)=1
    if (n > 1)
        return n * fac(n - 1);  //递推阶段:5*fac(4)  fac(4)=4*fac(3) fac(3)=3*fac(2) fac(2)=2*fac(1)
                                                    //回归阶段:==> fac2(2)=2*1=2 ==>fac(3)=3*2=6 ==> fac(4)=4*6=24 ==>fac(5)=5*24=120
}

int main(int argc, char const *argv[])
{
    int n = 5;
    printf("%d\n", fac(n));
}

27.斐波那契数列:指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*) 求第五个数。

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

int fac(int n)   //5 4 
{
    if (n == 1 || n == 2)
        return 1;
    if (n > 2)
        return fac(n - 1) + fac(n - 2);   //fac(5)=fac(4)+fac(3)= fac(3)+fac(2) +fac(3) = 5
}

int main(int argc, char const *argv[])
{
    int n = 5;
    printf("%d\n", fac(n));
}

28.创建一个名为student的结构体,包含姓名,学号,班级,从终端输入学生的信息并打印。

#include <stdio.h>
#include <string.h>
struct student
{
    char name[32];
    int id;
    int class;
};

struct student s1;
int main(int argc, char const *argv[])
{
    scanf("%s %d %d", s1.name, &s1.id, &s1.class);
    printf("%s %d %d\n", s1.name, s1.id, s1.class);
}

29.typedef用法

#include <stdio.h>
#include <string.h>
//1.给普通变量重命名
typedef int size4;

//2. 给指针类型重命名
typedef int *int_p;

//3. 给数组类型重名
typedef int intArr5[5];

int main()
{
    size4 a = 10;                    //等同于int a=10;
    int_p p = &a;                    //等同于int *p=&a;
    intArr5 arr = {1, 2, 3, 4, 5}; //等同于int arr[5]={1,2,3,4,5};
    printf("%d\n", *p);     //10
    printf("%d\n", arr[3]);  //4
}

30.创建一个描述手机的结构体叫phone, 包含品牌,型号,颜色,价格。从终端输入你自己手机的信息并打印。(用typedef)。

#include <stdio.h>
#include <string.h>
typedef struct phone
{
    char brand[32];
    char type[32];
    char color[32];
    int price;
} ph;

ph my;
int main()
{
    scanf("%s %s %s %d", my.brand, my.color, my.type, &my.price);
    printf("%s %s %s %d\n", my.brand, my.color, my.type, my.price);
}

31.创建一个名为student的结构体数组,包含学号,姓名,成绩,(数据类型自己定义),从终端输入学生的信息并打印分数及格的学生信息(输入3人即可)。

#include <stdio.h>
typedef struct student
{
    char name[32];
    int number;
    int score;
} st;

int main(int argc, char const *argv[])
{
    st s[3];
    for (int i = 0; i < 3; i++)
        scanf("%s %d %d", s[i].name, &s[i].number, &s[i].score);

    for (int i = 0; i < 3; i++)
    {
        if (s[i].score >= 60)
            printf("%s %d %d\n", s[i].name, s[i].number, s[i].score);
    }
    return 0;
}

32.创建一个结构体数组,数组名为book,结构体成员包含编号,书名,售价(数据类型自己设定)。写一个函数,包含两个形参,分别接收结构体数组的首地址和一个指定的售价,函数的功能为打印结构体数组中售价大于指定售价的书的信息。

#include <stdio.h>
#define N 3
typedef struct book
{
    char name[32];
    int id;
    int price;
} BOOK; //BOOK等同于struct book

BOOK b[N] = {
    {"shuihu", 1, 40},
    {"zyj zhuan", 2, 200},
    {"tuling zhuan", 3, 0}};

void bookPri(BOOK *p, int n)
{
    for (int i = 0; i < N; i++)
    {
        if (p->price > n)
            printf("%s %d %d\n", p->name, p->id, p->price);
        p++;
    }
}

int main(int argc, char const *argv[])
{
    bookPri(b, 6);
    return 0;
}

33.创建一个游戏英雄的结构体数组(5个元素), 结构体成员包含名称, 血量和价格。给出每个英雄信息,封装函数实现按价格从低到高打印英雄信息,(用冒泡排序)。封装函数实现修改英雄信息功能。

#include <stdio.h>

typedef struct hero
{
    char name[32];
    int hp;
    int price;
} HERO;

void sort(HERO *p, int n)
{
    HERO tmp;
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - i - 1; j++)
        {
            if (p[j].price > p[j + 1].price)
            {
                tmp = p[j];
                p[j] = p[j + 1];
                p[j + 1] = tmp;
            }
        }
    }
}

void change(HERO *p, int n)
{
    if (n <= 3)
        scanf("%s %d %d", p[n - 1].name, &p[n - 1].hp, &p[n - 1].price);
    else
        printf("err\n");
}

int main(int argc, char const *argv[])
{
    HERO a[3] = {
        {"zdl", 1, 50},
        {"zyj", 999, 100},
        {"xyb", 10000, 2}};

    change(a, 1);
    sort(a, 3);

    for (int i = 0; i < 3; i++)
        printf("%s %d %d\n", a[i].name, a[i].hp, a[i].price);

    return 0;
}

34.封装函数实现冒泡排序。

#include <stdio.h>

void fun(int *a, int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        for (int j = 0; j < n - 1 - i; j++)
        {
            if (a[j + 1] > a[j])
            {
                int temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }

    for (int i = 0; i < 10; i++)
        printf("%d ", a[i]);
    printf("\n");
}

int main(int argc, char const *argv[])
{
    int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    fun(a, 10);

    return 0;
}

35.封装函数实现如下功能:输入任意两个数,返回两数之间(包括这两个数)偶数之和。

#include <stdio.h>

int fun(int a, int b)
{
    int sum = 0;
    if (a >= b)
    {
        int t = a;
        a = b;
        b = t;
    }
    for (int i = a; i <= b; i++)
    {
        if (i % 2 == 0)
            sum += i;
    }
    return sum;
}

int main(int argc, char const *argv[])
{
    int a, b, sum;
    scanf("%d %d", &a, &b);
    sum = fun(a, b);
    printf("%d\n", sum);

    return 0;
}

http://www.kler.cn/a/592472.html

相关文章:

  • 【论文阅读】CARES:医学视觉语言模型可信度的综合基准
  • 布谷视频直播系统源码开发:深度剖析从架构设计到实现
  • 若依分离版整合多数据源——Phoenix+HBase
  • LiteratureReading:[2017] Attention Is All You Need
  • MSys2统一开发环境,快速搭建windows opencv环境
  • jmeter定时器-Constant Throughput Timer
  • 【从零开始学习计算机】计算机网络(二)物理层
  • Web3到底解决了什么问题?
  • 隐私权案件如何办理?公众人物隐私权为何受限?
  • 【Linux】Windows 客户端访问 Linux 服务器
  • 《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》
  • 数据库GreenDao的使用、升级、以及相关常用注释说明
  • 如何为预训练模型进行领域适配:全参数微调、LoRA 还是 Prompt Tuning?
  • 3.数据探索与可视化基本图形(直方图、箱线图、散点图)——Python数据挖掘代码实践
  • Java 中 LinkedList 的底层数据结构及相关分析
  • kubectl describe pod 命令以及输出详情讲解
  • 基于Flask的自闭症患者诊断辅助系统:助力自闭症诊断
  • 【Golang那些事】go1.22和1.23 更新重点及测评
  • 从技术角度看交互作用分析
  • 【C# 上位机UDP通讯】