C语言经典编程

// 经典1
    //随机产生20个[10,50]的正整数存到数组中,并求出数组中的所有元素最大值,最小值,平均值以及个元素之和,及第二大值
    int a[20] = {0};
    printf("随机产生的元素:\n");
    for (int i = 0; i < 20; i++) {
        a[i] = arc4random() % (50 - 10 +1) + 10;
        printf("%d  ",a[i]);
    }
    printf("\n");
    //求所有元素的最大值
    int max = 0;
    for (int i = 0; i < 20; i++) {
        if (a[i] > max) {
            max = a[i];
        }
    }
    printf("max = %d\n", max);
    //求所有元素的最小值
    int min = a[0];
    for (int i = 1; i < 20; i++) {
        if (min > a[i]) {
            min = a[i];
       }
    }
    printf("min = %d\n", min);
    //求所有元素的和
    int sum = 0;
    for (int i = 0; i < 20; i++) {
        sum += a[i];
    }
    printf("sum = %d\n", sum);
    //求所有元素的平均值
    float mid = 0;
    mid = sum / 20;
    printf("mid = %.2f\n", mid);
    //求第二大值
    int smax = 0;
    for (int i = 0; i < 20; i++) {
        if (smax < a[i] && a[i] < max) {
            smax = a[i];
        }
    }
    printf("smax = %d", smax);
    // 经典2
    //编程在一个已知的字符串中查找最长单词,假定字符串只含字母和空格,用空格来分隔单词
    //思路:
    //主要是判断单词,连续的字母,就假定为一个单词,从读取到第一个字母开始计数,然后直接遇到空格,为一个单词的长度,用一个变量记录,最长单词的长度,如果要输出最长的单词,一般是放在数组里面,记住下标.
    char targetString[] = "I come china";
    int maxLength = 0;//最长长度
    int currentLength = 0;//当前得到的单词的长度
    int maxIndex = 0;//当前最长单词的起始下标
    int tempArray[200] = {0};
    for (int i = 0; i <= strlen(targetString); i++) {
        if (targetString[i] != ‘ ‘ && targetString[i] != ‘\0‘) {
            currentLength++;
        } else {
            if (maxLength <= currentLength) {
                maxLength = currentLength;
                maxIndex = i - currentLength;  //记录当前最长单词的起始下标
                tempArray[maxIndex] = maxLength;
            }
            currentLength = 0;//同时给记录单词长度的currentlength做清零操作
        }
    }
    for (int i = 0 ; i < 200; i++) {
        if (tempArray[i] == maxLength) {
            for (int j = i; j < i + maxLength; j++) {
                printf("%c", targetString[j]);
            }
            printf("\n");
        }
    }
  
 
    // 经典3
    //耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3...凡是报到‘3‘就退出圈子,最后留在圈子内的人就是出卖耶稣的叛徒.请找出它原来的序号
    int  array[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};//模拟报数,0表示未退出圈子,1表示退出圈子
    int  numbers=13;//表示剩余人数
    int  count = 0;//表示报数
    int   i =0;// 表示下标的循环变量
    while (numbers > 1) {
        if (array[i]!=0) {//如果当前得到的数组元素不为0,表示没有退出圈子,则count++表示报数
            count++;
        }
        if (count == 3) {
            printf("%d号退出圈子\n",array[i]);
            array[i] = 0;//表示当前报数的人报的数为3,则通过数组元素赋值为0来表示他退出圈子
            count = 0;//报数归0
            numbers --;//表示退出圈子后剩余的人数
        }
        i++;
        i = i %13;// 如果i为13时,让i重新从0开始
    }
    for ( int i =0; i < 13; i++) {
        if (array[i] > 0) {
            printf("%d号是叛徒",array[i]);
        }
    }
    
    
    // 经典4
    //将两个排好序的数组,合并到另一个数组中,并且合并之后的数组也是有序的
    int i = 0, m = 5, a[5] = {1, 3, 7, 9, 13};
    int j = 0, n = 6, b[6] = {2, 4, 8, 16, 20, 24};
    int k = 0, c[11];
    while(i + j < m + n)
    {
        if(j >= n) {
            c[k++] = a[i++];
        }
        else if(i >= m) {
            c[k++] = b[j++];
        }
        else if(a[i] < b[j]){
            c[k++] = a[i++];
        }
        else {
            c[k++] = b[j++];
        }
    }
    for(i = 0;i < k;i++){
        printf("%d  ",c[i]);
    }
    
    
    // 经典5
    //有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。
    float sum = 0;
    float x = 2, y = 1, temp = 0;
    for (int i = 0; i < 20; i++) {
        sum = sum + x / y;
        temp = x;
        x = x + y;
        y = temp;
    }
    printf("%.3f", sum);
    
    //给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
    //方法一:
    long a=0,b=0;
    int t=0;
    printf("请输入不多于5位的正整数:\n");
    scanf("%ld",&a);
    if (a >= 100000) {
        printf("请输入不多于5位的正整数\n");
    }else {
        for(t=0;a>0;a/=10,t++)
        {
            b=(b*10)+a%10;
        }
        printf("这个数是%d位的,逆序数=%ld\n",t,b);
    }
    //方法二:
    int a = 0, b = 0, c = 0, d = 0, e = 0, x = 0;
    printf("请输入不多于5位的整数:\n");
    scanf("%d", &x);
    if (x > 100000) {
        printf("请输入不多于5位的整数");
    }else{
    a = x / 10000;//分解出万位
    b = x % 10000 / 1000;//分解出千位
    c = x % 1000 / 100;//分解出百位
    d = x % 100 / 10;//分解出十位
    e = x % 10;//分解出个位
    if (a !=0 ) {
        printf("这个数是5位的, 逆序数 = %d%d%d%d%d\n",e, d, c, b, a);
    }else if (b!=0){
         printf("这个数是4位的, 逆序数 = %d%d%d%d\n",e,d,c,b);
    }else if (c!=0){
         printf("这个数是3位的, 逆序数 = %d%d%d\n",e,d,c);
    }else if (d!=0){
         printf("这个数是2位的, 逆序数 = %d%d\n",e,d);
    }else if (e!=0){
         printf("这个数是1位的, 逆序数 = %d\n",e);
    }
    }
    // 方法三
    int num = 0, temp = 0, i = 0;
    printf("请输入一个数字\n");
    scanf("%d", &num);
    while(num > 0)
    {
        temp = num % 10;
        ++i;
        printf("%d", temp);
        num = num / 10;
    }
    printf("\n这个数是%d位数", i);

    // 经典6
    //一个5位数,判断它是不是回文数.即12321是回文数,个位与万位相同,十位与千位相同.
    long w = 0, q = 0, s = 0, g = 0 , x = 0;
    printf("请输入一个5位数:\n");
    scanf("%ld", &x);
   if (x > 100000 || x < 10000) {
        printf("请输入一个5位数:\n");
    }else{
    w = x / 10000;//求万位的数字
    q = (x % 10000) / 1000; //求千位的数字
    s = x % 100 / 10;//求十位的数字
    g = x % 10;//求个位数字
    if (g == w && q == s) {
        printf("是回文数");
    }
    else{
        printf("不是回文数");
    }
    }
    
     //经典7
    //星期一   Monday
    //星期二   Tuesday
    //星期三   Wednesday
    //星期四   Thursday
    //星期五   Friday
    //星期六   Saturday
    //星期日   sunday
    //请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母
    char week1;
    char week2;
    printf("星期一   Monday \n星期二   Tuesday \n星期三   
Wednesday  \n星期四   Thursday  \n星期五   Friday  \n星期六   Saturday   \n星期日   
sunday\nplease enter a letter\n");
    scanf("%c",&week1);
    switch(week1)
    {
        case(‘M‘ | ‘m‘):printf("the answer is Monday\n");
            break;
        case‘W‘:printf("the answer is Wednesday\n");
            break;
        case(‘F‘ | ‘f‘):printf("the answer is Friday\n");
            break;
       case(‘S‘ | ‘s‘):
        {
            printf("please enter the second letter\n");
            scanf("%c",&week2);
            getchar();
            if(week2 == (‘a‘ | ‘A‘))
                printf("the answer is Saturday\n");
            else
                if(week2 == (‘u‘ | ‘U‘))
                    printf("the answer is Sunday\n");
                else
                    printf("there is no answer\n");
        }
            break;
        case(‘T‘ | ‘t‘):
        {
            printf("please enter the second letter\n");
            scanf("%c",&week2);
            getchar();
            if(week2 == (‘U‘ | ‘u‘))               printf("the answer is Tuesday\n");
            else               if(week2 == (‘H‘ | ‘h‘))
                printf("the answer is Thursday\n");
            else
              printf("there is no answer\n");
        }
            break;
        default:
            printf("there is no correct answer\n");
            break;
    }
    
    // 经典8
    //有1000000个数,每个数取值范围是0-999999找出其中重复的数,重复次数
    int a[1000000] = {0}, b[1000000] = {0}, count = 0;
    for(int i = 0 ; i < 1000000 ; i ++){
        a[i] = arc4random()%1000000;
        b[a[i]]++;
    }
    for (int j = 0 ; j < 1000000; j++) {
        if(b[j] > 1){
            count++;
            printf("重复数是%d \n",j);
        }
    }
时间: 2024-08-10 02:05:41

C语言经典编程的相关文章

为备考二级C语言做的代码练习---辅导资料《C语言经典编程282例》--(1)

因为二级考试的时候用的C语言编译器是VC++6.0 真是日了狗了 用这个编译器 这是我第2个C编译器吧,第一个用的是啊哈C编译器..第二个是VS++6.0 然后在win下用VS2013感觉挺不错的 毕竟是做大开发的软件 代码补全,和格式,字体,还可以换代码的背景,各种功能,就是对新手来说,你用scanf它不让你用,让你用scanf_s,因为它觉得这样比较安全,避免一些XX溢出云云的,还有gets要写成gets_s() 之类的,我在想要是我一直用VS2013 那考试的时候写的代码也是这种格式的..

C语言经典编程之数组

1.元素互换 定义一个整型数组num[10],随机初始化数组中元素值,然后将头尾元素两两互换,将交换后的数组值输出. [代码] #include <stdio.h> int main(void) { int num[10] = {}; int i = 0; int temp; for(i = 0; i < 10; i++) { scanf("%d", &num[i]); } for(i = 0; i < 10 / 2; i++) { temp = num

C语言经典编程之字符串

1.按特定顺序输出压缩 输入一段字符串,把相同的字符按出现顺序,归在一起,并压缩. 例如: 输入:SamSameCome 输出: SSaammmeeCo S2a2m3e2C1o1 [难度系数] ▲ ▲ ▲ ▲ [分析] [代码] #include <stdio.h> #include <string.h> int main(void) { char ch[100]; char str[100]; char s; int i = 0; int j = 0; int count = 1

Javascript基础练习之实现C语言经典程序题

前言: 最近在学习Javascript语言,看到网上很多都是在介绍Javascript如何解决网页上问题的代码,所以想另辟蹊径,用Javascript代码来实现C语言经典程序题.当然,这些C语言程序题也是比较简单,主要想通过Javascript语言实现,起到语法练习作用,也想来对比一下C语言和Javascript语言实现的相同点和不同点,从而巩固记忆,加强学习效果!!! 一.C语言经典程序题1 1. 题目描述: 马克思的手稿中有这样一道有趣的数学题:有30个人,其中有男人,女人,小孩.他们在一家

C语言的编程风格

C语言的编程风格:第一:缩进格式 Tab是8个字符,于是缩进也是8个字符.有很多怪异的风格,他们将缩进格式定义为4个字符(设置为2个字符!)的深度,这就象试图将PI定义为3一样让人难以接受. 理由是:缩进的大小是为了清楚的定义一个块的开始和结束.特别是当你已经在计算机前面呆了20多个小时了以后,你会发现一个大的缩进格式使得你对程序的理解更容易. 现在,有一些人说,使用8个字符的缩进使得代码离右边很近,在80个字符宽度的终端屏幕上看程序很难受.回答是,但你的程序有3个以上的缩进的时候,你就应该修改

110本经典编程技术书_程序员必备_菜鸟窝 资源收藏

下载总目录列表如下: [.NET]108<深入理解C#(中文第三版)>.pdf:  下载[.NET]109<NET CLR via C#(第4版)>.pdf: 下载[.NET]110<精通C#(第6版)>附源代码.zip: 下载[Android]1<Android编程权威指南第二版(英文版)>含源码.zip: 下载[Android]1<Android编程权威指南(第2版)>.pdf: 下载 https://itdocs.pipipan.com/f

嵌入式 Linux C语言(十一)——C语言模块化编程

嵌入式 Linux C语言(十一)--C语言模块化编程 一.C语言模块化编程 所谓模块化编程,就是指一个程序包含多个源文件(.c 文件和 .h 文件),每个模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明.C语言模块化编程中对.c..h文件的潜规则: 1..c 文件主要负责实现,也就是定义函数:.h 文件主要负责声明,比如函数声明.宏定义等,结构的定义.自定义数据类型一般也放在头文件中,不能在.h文件中定义变量.将一个功能模块的代码单独编写成一个.c文件,然后把该

【转载】经典10道c/c++语言经典笔试题(含全部所有参考答案)

经典10道c/c++语言经典笔试题(含全部所有参考答案) 1. 下面这段代码的输出是多少(在32位机上). char *p; char *q[20]; char *m[20][20]; int (*n)[10]; struct MyStruct { char dda; double dda1; int type ; }; MyStruct k; printf("%d %d %d %d %d",sizeof(p),sizeof(q),sizeof(m),sizeof(n),sizeof(

c语言基础编程

作业: 1.二进制,八进制,十进制之间的相互转换 2.测试转义字符 3.测试强制类型转换 4.测试赋值运算符  = += -= *= /= %= <<= >>= ^= |= &= number += 2; 5.测试不同类型数字的运算(+ - * /)结果 6.从键盘输入一个实数,求其绝对值. 7.从键盘输入三个数,按升序输出. 8.已知方程 ax*x + bx + c = 0,输入a.b,求方程的根. 9.从键盘输入x,求y的值: y = 1  若 x > 0  0