C语言经典题目(三)

简介: C语言经典题目(三)

大家好,今天给大家分享的是C语言经典题目第三部作品。


一.计算一个数是否可以等于两个素数之和


素数定义:除1和这个数本身之外,不能被其它数整除的数。


#include <stdio.h>
 // 判断素数
int checkPrime(int n)
{
    int i, isPrime = 1;
    for(i = 2; i <= n/2; ++i)
    {
        if(n % i == 0)
        {
            isPrime = 0;
            break;
        }  
    }
    return isPrime;
}
int main()
{
    int n, i, flag = 0;
    printf("输入正整数: ");
    scanf("%d", &n);
    for(i = 2; i <= n/2; ++i)
    {
        // 检测判断
        if (checkPrime(i) == 1)
        {
            if (checkPrime(n-i) == 1)
            {
                printf("%d = %d + %d\n", n, i, n - i);
                flag = 1;
            }
        }
    }
    if (flag == 0)
        printf("%d 不能分解为两个素数。", n);
    return 0;
}


输出结果如下:


输入正整数: 34
34 = 3 + 31
34 = 5 + 29
34 = 11 + 23
34 = 17 + 17


注意:这里判断素数的上限是n/2是因为这里的运算符是取模运算符,从n/2开始往后到n的数就相当于从1开始到n/2的数,它们取模之后的值是一一对应的,这是我的理解。


二.二进制转化为十进制


#include <stdio.h>
#include <math.h>
int convertBinaryToDecimal(long long n);
int main()
{
    long long n;
    printf("输入一个二进制数: ");
    scanf("%lld", &n);
    printf("二进制数 %lld 转换为十进制为 %d", n, convertBinaryToDecimal(n));
    return 0;
}
int convertBinaryToDecimal(long long n)
{
    int decimalNumber = 0, i = 0, remainder;
    while (n!=0)
    {
        remainder = n%10;
        n /= 10;
        decimalNumber += remainder*pow(2,i);
        ++i;
    }
    return decimalNumber;
}

输出结果如下:


输入一个二进制数: 110110111
二进制数 110110111 转换为十进制为 439


三.十进制转化为二进制


#include <stdio.h>
#include <math.h>
long long convertDecimalToBinary(int n);
int main()
{
    int n;
    printf("输入一个十进制数: ");
    scanf("%d", &n);
    printf("十进制数 %d 转换为二进制位 %lld", n, convertDecimalToBinary(n));
    return 0;
}
long long convertDecimalToBinary(int n)
{
    long long binaryNumber = 0;
    int remainder, i = 1, step = 1;
    while (n!=0)
    {
        remainder = n%2;
        printf("Step %d: %d/2, 余数 = %d, 商 = %d\n", step++, n, remainder, n/2);
        n /= 2;
        binaryNumber += remainder*i;
        i *= 10;
    }
    return binaryNumber;
}


输出结果如下:


输入一个十进制数: 100
Step 1: 100/2, 余数 = 0, 商 = 50
Step 2: 50/2, 余数 = 0, 商 = 25
Step 3: 25/2, 余数 = 1, 商 = 12
Step 4: 12/2, 余数 = 0, 商 = 6
Step 5: 6/2, 余数 = 0, 商 = 3
Step 6: 3/2, 余数 = 1, 商 = 1
Step 7: 1/2, 余数 = 1, 商 = 0
十进制数 100 转换为二进制位 1100100


四.字符串翻转


1.使用递归


#include <stdio.h>
void reverseSentence();
int main()
{
    printf("输入一个字符串: ");
    reverseSentence();
    return 0;
}
void reverseSentence()
{
    char c;
    scanf("%c", &c);
    if( c != '\n')
    {
        reverseSentence();
        printf("%c",c);
    }
}


输出结果如下:

输入一个字符串: guoxize
ezixoug


五.计算数组的平均值

1.使用for循环

#include <stdio.h>
int main() {
   int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
   int sum, loop;
   float avg;
   sum = avg = 0;
   for(loop = 0; loop < 10; loop++) {
      sum = sum + array[loop];
   }
   avg = (float)sum / loop;
   printf("平均值为 %.2f", avg);   
   return 0;
}



2.使用scanf来控制


#include <stdio.h>
int main(void)
{
    float x;
    printf("请输入数字:(输入q退出)");
    int i=0;
    float status;
    float sum=0;
    float avg=0;
    status=scanf("%f", &x);
    while ( status==1 ) {
        sum+=x;
        printf("请输入数字:(输入q退出)");
        status=scanf("%f", &x);
        i++;
    }
    avg=sum/(i);
    printf("%.2f",avg);
    return 0;
}


注意:scanf的返回值是参数的个数,也即在while里面scanf函数返回值是1

六.找出数组元素最大值

1.for循环

#include <stdio.h>
int main() {
   int array[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
   int loop, largest;
   largest = array[0];
   for(loop = 1; loop < 10; loop++) {
      if( largest < array[loop] ) 
         largest = array[loop];
   }
   printf("最大元素为 %d", largest);   
   return 0;
}


2.巧妙运用三目运算符

1.#include <stdio.h>
int main(){
    int n[]={3,2,1,4,7,6,5,8,0,9};
    int largest,i,num;
    num= sizeof(n)/sizeof(n[0]);
    for(i=0;i<num;i++) largest=(n[i] > largest)? n[i] : largest;
        printf("Largest Number is:%d",largest);
}


七.数组的拆分

1.将一个数组分为奇数数组与偶数数组

#include <stdio.h>
int main() {
   int array[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   int even[10], odd[10];
   int loop, e, d;
   e = d = 0;
   for(loop = 0; loop < 10; loop++) {
      if(array[loop]%2 == 0) {
         even[e] = array[loop];
         e++;
      }else {
         odd[d] = array[loop];
         d++;
      }
   }
   printf(" 原始数组 -> ");
   for(loop = 0; loop < 10; loop++)
      printf(" %d", array[loop]);
   printf("\n 偶数 -> ");
   for(loop = 0; loop < e; loop++)
      printf(" %d", even[loop]);   
   printf("\n 奇数 -> ");
   for(loop = 0; loop < d; loop++)
      printf(" %d", odd[loop]);   
   return 0;
}


输出结果如下:

 原始数组 ->  0 1 2 3 4 5 6 7 8 9
 偶数 ->  0 2 4 6 8
 奇数 ->  1 3 5 7 9


2.将一奇一偶的数组合并成一个数组

#include <stdio.h>
int main() {
   int array[10];
   int even[5] = {0, 2, 4, 6, 8};
   int odd[5]  = {1, 3, 5, 7, 9};
   int loop, index, e_len, o_len;
   e_len = o_len = 5;
   index = 0;
   for(loop = 0; loop < e_len; loop++) {
      array[index] = even[loop];
      index++;
   }
   for(loop = 0; loop < o_len; loop++) {
      array[index] = odd[loop];
      index++;
   }
   printf("\n偶数 -> ");
   for(loop = 0; loop < e_len; loop++)
      printf(" %d", even[loop]);
   printf("\n奇数  -> ");
   for(loop = 0; loop < o_len; loop++)
      printf(" %d", odd[loop]);
   printf("\n合并后 -> ");
   for(loop = 0; loop < 10; loop++)
      printf(" %d", array[loop]);
   return 0;
}

输出结果如下:

偶数 ->  0 2 4 6 8
奇数  ->  1 3 5 7 9
合并后 ->  0 2 4 6 8 1 3 5 7 9


八.将一个数组拷贝到另一个数组里面

#include <stdio.h>
int main() {
   int original[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
   int copied[10];
   int loop;
   for(loop = 0; loop < 10; loop++) {
      copied[loop] = original[loop];
   }
   printf("元素数组 -> 拷贝后的数组 \n");
   for(loop = 0; loop < 10; loop++) {
      printf("   %2d        %2d\n", original[loop], copied[loop]);
   }
   return 0;
}


输出结果如下:

元素数组 -> 拷贝后的数组 
    1         1
    2         2
    3         3
    4         4
    5         5
    6         6
    7         7
    8         8
    9         9
    0         0


相关文章
|
7月前
|
C语言
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
C语言:数组和指针笔试题解析(包括一些容易混淆的指针题目)
|
7月前
|
存储 C语言 C++
C语言------------指针笔试题目深度剖析
C语言------------指针笔试题目深度剖析
47 1
2.C语言题目---字符串左旋
2.C语言题目---字符串左旋
79 1
|
2月前
|
程序员 C语言
【C语言】LeetCode(力扣)上经典题目
【C语言】LeetCode(力扣)上经典题目
|
存储
1.C语言题目---指针类(基础)
1.C语言题目---指针类(基础)
63 1
|
4月前
|
存储 编译器 C语言
【C语言】指针练习题目
【C语言】指针练习题目
|
6月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
48 1
|
7月前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
6月前
|
C语言
c语言循环题目
c语言循环题目
|
7月前
|
C语言
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)
PTA 浙大版《C语言程序设计(第3版)》题目集 习题8-4 报数 (20分)