Skip to content

C语言代码片段

第二章

1.三数比较大小
c
#include<stdio.h>

/**
 * 编写一个C程序,输入a,b,c三个值,输出三个数中的较大者
*/
int main()
{
  //put your codes here.
  int a,b,c;
  scanf("%d %d %d",&a,&b,&c);
  printf("%d", a>b?(a>c?a:c):(b>c?b:c));
  return 0;
}1
2.键盘输入x的值,求方程y=xx+2x-10所对应的y值。
c
#include<stdio.h>
/**
 * 键盘输入x的值,求方程y=x*x+2*x-10所对应的y值。
*/
 int main(int argc, char const *argv[])
 {
    /* code */
    int x ;
    scanf("%d",&x);
    printf("%d",(x*x+2*x-10));
    return 0;
 }

第三章

1.计算将水从初始温度加热到最终温度所需的能量
c
#include<stdio.h>

/**
 * 计算将水从初始温度加热到最终温度所需的能量
 * 编写程序,计算将水从初始温度加热到最终温度所需的能量。程序应该提示用户输入水的重量(以千克为单位),以及水的初始温度和最终温度。计算能量的公式是:
 * Q = M ×(最终温度 – 初始温度)× 4184
 * 这里的M是以千克为单位的水的重量,温度以摄氏度为单位,而能量Q以焦耳为单位。
 *
*/
int main(int argc, char const *argv[])
{
    /* code */
    int weight,statrTemperature,endTemperature;
    scanf("%d %d %d",&weight,&statrTemperature,&endTemperature);
    float Q = weight*(endTemperature-statrTemperature)*4184;
    printf("%.2f焦耳",Q);
    return 0;
}
2.根据体重计算可以喝汽水的罐数
c
#include<stdio.h>

/**
 * 
 * 一个美国政府的研究实验室得出结论,认为在汽水中常用的人造甜味剂会导致实验室老鼠的死亡。
 * 你的一个朋友在拼命的减肥,但是他不能放弃汽水。你的朋友想知道能够喝多少汽水而不会导致死亡。
 * 请编写程序,帮他回答这个问题。已知实验时,杀死一只老鼠所用的人造甜味剂是5g,老鼠的重量为35g。
 * 假设老鼠的致死量(lethal dose)成比例对应于人的致死量。一罐汽水350g,其中所含的人造甜味剂占0.1%。
 * 输入你的朋友的体重(Kg),输出他最多可以喝的汽水的罐数。
 *
*/
int main(int argc, char const *argv[])
{
    /* code */
    int weight;
    scanf("%d",&weight);
    // 致死量
    float lethalDose =0.142857142857143*weight*1000;
    int number =lethalDose/(0.1 * 0.01 * 350);
    printf("喝%d罐汽水可杀死你!",number);
    return 0;
}
3.分解9位长整数
c
#include<stdio.h>
#include<string.h>
/**
 * 编写程序,输入一个9位的长整数,将其分解为三个三位的基本整数并输出,
 * 其中个、十、百位为一个整数,千、万、十万位为一个整数,百万、千万、亿位为一个整数。
 * 例如123456789分解为789、456和123。
 *
*/
int main(int argc, char const *argv[])
{
    /* code */
    char str [100] ;
   fgets(str, sizeof(str), stdin);
    int length = strlen(str);

    for (int i = length; i >0;)
    {
        if(i>=3){
            i-=3;
            int count = 0;
            for (int j=i; j<i+3; j++)
            {
   
               if(str[j] == '0'){
                count++;
               }
               
            }
            if(count==3){
                printf("0 ");
            }else{
                printf("%c%c%c ",str[i],str[i+1],str[i+2]);
            }
        } else if(i>=2){
             i-=2;
            printf("%c%c",str[i],str[i+1]);
        }else{
            i--;
            printf("%c",str[i]);
        }
    }
    
    return 0;
}

#第四章

1.函数求解
c
#include<stdio.h>
#include<string.h>
/**
 * 分段函数
 * f(x):
 * x, x<1
 * 2x-1, 10>x>=1
 * 3x-11, x>=10
 *
*/
int main(int argc, char const *argv[])
{
    int x;
    scanf("%d",&x);
    if((10 > x) && (x >= 1)){
        printf("y=2*x-1=%d",(2*x-1));
        return 0;
    }
     if(x>=10){
        printf("y=3*x-11=%d",(3*x-11));
        return 0;
    }
    if(x<1){
         printf("y=x=%d",x);
    }
    return 0;
}
2.计算成绩分数所在等级
c
#include<stdio.h>
#include<string.h>
/**
 * 给出一百分制成绩,要求输出成绩等级’A’、’B’、’C’、’D’、’E’。
 * 90分以上为‘A’,
 * 80~89为‘B’,
 * 70~79为‘C’,
 * 60~69为‘D’,
 * 60分以下为‘E’。
 *
*/
typedef struct  Grade

{
    int topNum;
    int lowNum;
    char grade;
} Grade;

int main(int argc, char const *argv[])
{
    int num;
    scanf("%d",&num);
    Grade grades [5] ={
        {100,90,'A'},
        {89,80,'B'},
        {79,70,'C'},
        {69,60,'D'},
        {59,0,'E'}
    };
    for (int i = 0; i < 5; i++)
    {
        /* code */
        Grade item = grades[i];
        if((num>=item.lowNum)&&(num<=item.topNum)){
            printf("%c",item.grade);
            return 0;
        }
    }
    
    return 0;
}
3.输出ISBN中所包含的出版地区的信息
c
#include <stdio.h>
#include <string.h>
/**
每本书的封底都有一串号码,比如978-7-111-34081-2,它叫做"国际标准书号"(International Standard Book Number,缩写为ISBN)。
它是全世界图书的编码,用来唯一代表一本书。目前ISBN是13位。从组成上看,13位的ISBN可以分为5个区:
第一区 EAN-UCC前缀 、第二区 组区号、第三区 出版者号、第四区 出版序号、第五区 校验码。
其中第二区 组区号从第4位数字开始。
这部分表明这本书是哪个国家或地区出版的。
0或1表示英语国家,2表示法语国家,3表示德语国家,4表示日本,5表示俄语国家,6表示伊朗,7表示中国大陆,89表示韩国,
957和986表示台湾,962和988表示香港,99936表示不丹。
输入一个13位ISBN。输入格式:978-7-111-34081-2
输入之后,输出ISBN中所包含的出版地区的信息。
比如:组区号为7,则输出” China”。
这里我们最低要求识别的地区包括:
0 English Region
1 English Region
2 French Region
4 Japan
7 China
89 South Korea
957 Taiwan
986 Taiwan
962 Hong Kong
988 Hong Kong
 *
*/

typedef struct Group
{
    /* data */
    int flag;
    int index;
} Group;

int main(int argc, char const *argv[])
{
    char *groupCodes[] = {
        "English Region", // 0 组区号为0
        "English Region", // 1 组区号为1
        "French Region",  // 2 组区号为2
        "Japan",          // 3 组区号为4
        "China",          // 4 组区号为6
        "China",          // 5 组区号为7
        "South Korea",    // 6 组区号为89
        "Taiwan",         // 7 组区号为957
        "Taiwan",         // 8 组区号为986
        "Hong Kong",      // 9 组区号为962
        "Hong Kong"       // 10 组区号为988
    };
    // 组
    Group groups [] = {
        {0, 0},
        {1, 1},
        {2, 2},
        {4, 3},
        {6, 4},
        {7, 5},
        {89, 6},
        {957, 7},
        {986, 8},
        {962, 9},
        {988, 10},
        };
    // 提取组区号
    char isbn[9];
    fgets(isbn, sizeof(isbn), stdin);
    int groupCode;
    sscanf(isbn, "%*d-%d", &groupCode);

    
    for (int i = 0; i < 12; i++)
    {
        if(groupCode == groups[i].flag){
          char *name = groupCodes[i];
          printf("%s",name);
          return 0;
        }
    }
    
    return 0;
}

第五章

1.九九乘法表
c
#include <stdio.h>
/**
九九乘法表
*/

int main(int argc, char const *argv[])
{
    for (int i = 1; i < 10; i++)
    {
        /* code */
        for (int j = 1; j<=i; j++)
        {
            /* code */
            printf("%d*%d=%d ",j,i,i*j);
        }
        printf("\n");
        
    }
    
    return 0;
}
2.亲密数
c
#include <stdio.h>
/**
两个不同的自然数A和B,如果整数A的全部因子(包括1,不包括A本身)之和等于B;
且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。
输入某数,求某数以内(包括这个数)的全部亲密数。
*/

/**
 * 获取因子之和
 * @param number 需要获取因子之和的数
 * @return sum 因子之和
 */
int getDivisorSum(int number){
    int sum = 0;
    for (int i = 0; i <=number/2; i++)
    {
        if(number%i == 0){
             sum+=i;
        }
    }
    return sum;
};

/**
 * 获取亲密数
 * @param limit 亲密数范围
*/
void getIntimacyNumber(int limit){
    for (int i = 1; i < limit; i++)
    {
        /* code */
        int numberB = getDivisorSum(i);
        int sumB = getDivisorSum(numberB);
        if(sumB == i && i!=numberB && i<numberB ){
            printf("(%d,%d)",i,numberB);
        }
    }
}

int main(int argc, char const *argv[])
{
    int num =0;
    scanf("%d",&num);
    getIntimacyNumber(num);
    return 0;
}
3.求阶乘
c
#include <stdio.h>
int main(int argc, char const *argv[])
{
    int number;
    scanf("%d", &number);
    long sum =0;
    for (int i = 1; i <= number; i++)
    {
        long product =1;
        for (int j = 1; j<=i; j++)
        {
            product= product*j;
        }
        sum+=product;
    }
    printf("%ld",sum);
    
    return 0;
}
4.水仙花数
c
#include <stdio.h>
#include <math.h>
/**
 * 水仙花数
*/
int main(int argc, char const *argv[])
{
    for (int i = 100; i < 1000; i++)
    {
        int  single = i%10;
        int tens = (i/10)%10;
        int hundreds = i/100;
        int sum = (int)( pow(single, 3)+ pow(tens, 3)+ pow(hundreds, 3));
        if(sum == i){
            printf("%d ",sum);
        }
    }
    return 0;
}
5.韩信点兵
c
#include <stdio.h>
#include <math.h>

int main(int argc, char const *argv[])
{
   int i = 7;
   while (1)
   {
    /* code */
    if(i%5 == 1 && i%6 ==5 && i%7==4 && i%11 == 10){
        printf("%d",i);
        return 0;
    }
    i++;
   }
    return 0;
}

#第六章

1.约瑟夫问题
c
#include<stdio.h>

#include<stdlib.h>
/**
 * 循环链表
*/
typedef struct LinkNode
{
    int data;
     struct LinkNode* pre;
    struct LinkNode* next;
} LinkNode;

// 人数
#define PEOPLE_NUMBER 30

/**
 * 初始化一个三十个节点的循环链表并且返回头节点
*/
LinkNode* initLinkNode(){
    // 初始化头节点
    LinkNode *headerNode = (LinkNode*)malloc(sizeof(LinkNode));
    headerNode->data =1;
     // 中继节点
     LinkNode * relayNode =(LinkNode*)malloc(sizeof(LinkNode));;
  for (int  i = 2; i <=PEOPLE_NUMBER; i++)
  {
    // 创建节点
     LinkNode *node = (LinkNode*)malloc(sizeof(LinkNode));
     node->data=i;
     node->next = NULL;
     if(i==2){
        headerNode->next = node;
        node->pre =headerNode;
     }
     // 中继节点后移
    if(relayNode !=NULL){
        node->pre =relayNode;
        relayNode->next = node;
    }
    relayNode=node;
  }
  relayNode->next =headerNode;
  headerNode->pre = relayNode;
  return headerNode;
}

/**
 * 初始化排序数组
*/
int* initPeopleArray() {
    int* array = malloc(PEOPLE_NUMBER * sizeof(int)); // 使用动态内存分配
    // 初始化数组,设置所有人都标记为0,表示教徒
    for (int i = 0; i < PEOPLE_NUMBER; i++) {
        array[i] = 0;
    }
    return array;
}

/**
 * 移除链表
 * @param pretNode 前驱节点
 * @param node 需要删除的节点
*/
int removePoint(LinkNode *node){
    int index = node->data;
    node->next->pre = node->pre;
    node->pre->next = node->next;
    return index-1;
}

/**
 * 约瑟夫问题
 * @param node 循环列表
 * @param peopleArray 排序列表
*/
void josephProblem(LinkNode *node, int *peopleArray){
  int i=1, num =30;
    while (num>15)
    {
         node = node->next;
         i++;
        // 入海
        if(i==9){
          int index = removePoint(node);
            peopleArray[index] = 1;
             node = node->next;
          i=1;
          num--;
        }
    }
}

int main(int argc, char const *argv[])
{
    LinkNode *node =initLinkNode();
    int *peopleArray = initPeopleArray();
    josephProblem(node, peopleArray);
    for (int i = 0; i <PEOPLE_NUMBER; i++)
    {
        if(i==14){
             printf("%d:%d\n",i+1,peopleArray[i]);
        }else if(i==29){
            printf("%d:%d",i+1,peopleArray[i]);
        }  
        else{
             printf("%d:%d ",i+1,peopleArray[i]);
        }
    }

    return 0;
}
2.求整型矩阵主对角线元素之和
c
#include <stdio.h>

int main() {
    int matrix[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
    int i, sum = 0;

    // 计算主对角线元素之和
    for (i = 0; i < 3; i++) {
        sum += matrix[i][i];
    }

    // 输出主对角线元素之和
    printf("%d", sum);

    return 0;
}
3.密码翻译
c
#include <stdio.h>
#include <string.h>

#define MAX_LEN 100

void decode_password(char* text, int len) {
    int i;
    for (i = 0; i < len; i++) {
        if ('A' <= text[i] && text[i] <= 'Z') {
            text[i] = 'Z' - (text[i] - 'A');
        } else if ('a' <= text[i] && text[i] <= 'z') {
            text[i] = 'z' - (text[i] - 'a');
        }
    }
}

int main() {
    char text[MAX_LEN];
    int len;
    fgets(text, MAX_LEN, stdin);
    len = strlen(text);

    if (text[len-1] == '\n') {
        text[len-1] = '\0';
        len--;
    }

    decode_password(text, len);
    printf("%s\n", text);

    return 0;
}
4.杨辉三角形
c
#include <stdio.h>

int main() {
    const int ROWS = 10;
    int triangle[ROWS][ROWS];

    // 初始化第一列和对角线为1
    for (int i = 0; i < ROWS; i++) {
        triangle[i][0] = 1;
        triangle[i][i] = 1;
    }

    // 计算其它位置的值
    for (int i = 2; i < ROWS; i++) {
        for (int j = 1; j < i; j++) {
            triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
        }
    }

    // 输出杨辉三角形
    for (int i = 0; i < ROWS; i++) {
        for (int j = 0; j <= i; j++) {
            printf("%d ", triangle[i][j]);
        }
        printf("\n");
    }

    return 0;
}

第七章作业

1.计算函数
c
#include <stdio.h>

int getFactorial(int n){
    int data = 1;
    for (int i = 1; i <=n; i++)
    {
        /* code */
        data=data*i;
    }
    return data;
}

double cmk(int m, int k){
    double data= getFactorial(m)/(getFactorial(k)*getFactorial((m-k)));
    return data;
}

int main(int argc, char const *argv[])
{
    /* code */
    int oneNumber,twoNumber;
    scanf("%d %d", &oneNumber, &twoNumber);
    printf("%0.f",cmk(oneNumber,twoNumber));
    return 0;
}
2.求两个整数的最大公约数和最小公倍数
c
#include <stdio.h>

// 求两个整数的最大公约数
int gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}

// 求两个整数的最小公倍数
int lcm(int a, int b) {
    return a * b / gcd(a, b);
}

int main() {
    int num1, num2;
    scanf("%d %d", &num1, &num2);

    int greatestCommonDivisor = gcd(num1, num2);
    int leastCommonMultiple = lcm(num1, num2);

    printf("hcf=%d\n", greatestCommonDivisor);
    printf("lcd=%d\n", leastCommonMultiple);

    return 0;
}
3.数组行列转换
c
#include <stdio.h>

// 将3*3的二维整型数组进行转置
void transpose(int arr[][3]) {
    for (int i = 0; i < 3; i++) {
        for (int j = i; j < 3; j++) {
            int temp = arr[i][j];
            arr[i][j] = arr[j][i];
            arr[j][i] = temp;
        }
    }
}

int main() {
    int arr[3][3] = {{1, 2, 3}, {3, 4, 5}, {4, 5, 6}};

    transpose(arr);
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}
4.字符反序输出
c
#include <stdio.h>
#include <string.h>

// 将输入的一个字符串按反序存放
void reverse(char str[]) {
    int len = strlen(str);
    for (int i = 0; i < len / 2; i++) {
        char temp = str[i];
        str[i] = str[len - i - 1];
        str[len - i - 1] = temp;
    }
}

int main() {
    char str[100];

    scanf("%s", str);

    reverse(str);

    printf("%s", str);

    return 0;
}
5.冒泡算法实现
c
#include <stdio.h>
#include <string.h>

// 使用冒泡排序算法对输入的10个字符按由小到大顺序排列
void bubbleSort(char arr[], int n) {
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                char temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

int main() {
    char arr[] = {'1', 'a', '3', 'x', 'v', '6', 'w', '8', '9', 'z'};
    int n = sizeof(arr) / sizeof(arr[0]);


    bubbleSort(arr, n);

    for (int i = 0; i < n; i++) {
        printf("%c ", arr[i]);
    }
    printf("\n");

    return 0;
}
6.回文数
c
#include <stdio.h>

// 判断n是否回文数,是返回1,否则返回0
int huiwen(long n) {
    long rev = 0;
    long temp = n;

    while (temp != 0) {
        rev = rev * 10 + temp % 10;
        temp /= 10;
    }

    if (rev == n) {
        return 1;
    } else {
        return 0;
    }
}

int main() {
    for (long i = 1; i <= 300; i++) {
        long square = i * i;
        if (huiwen(i) && huiwen(square)) {
            printf("%ld ", i);
        }
    }

    return 0;
}
7.求学生年龄
c
#include <stdio.h>

int main() {
    int age = 10;

    for (int i = 2; i <= 5; i++) {
        age += 2;
    }

    printf("%d", age);

    return 0;
}
8.求n!用递归法求n!
c
#include <stdio.h>

// 递归函数求解阶乘
long factorial(long n) {
    if (n == 0 || n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

int main() {
    int n = 1;
    scanf("%d",&n);
    long result = factorial(n);
    printf("%ld",result);
    return 0;
}
9.阶乘
c
#include <stdio.h>

// 递归函数计算阶乘
int factorial(int n) {
    if (n == 0 || n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);
    }
}

int main() {
    int sum = 0;

    for (int i = 1; i <= 10; i++) {
        int fact = factorial(i);
        sum += fact;
    }

    printf("%d\n", sum);
    return 0;
}
最近更新