zoukankan      html  css  js  c++  java
  • C程序练习

    1.编程从键盘任意输入两个时间(例如4时55分和1时25分),计算并输出这两个时间之间的间隔。要求不输出时间差的负号。

    #include<stdio.h>
    int main()
    {
        int hour1,minute1,hour2,minute2,hour3,minute3,time,time1,time2;
        printf("Input time one(hour, minute):");
        scanf("%d,%d",&hour1,&minute1);
        printf("Input time two(hour, minute):");
        scanf("%d,%d",&hour2,&minute2);
    
        time1=hour1*60+minute1;
        time2=hour2*60+minute2;
        if(time1>time2)
            time=time1-time2;
        else
            time=time2-time1;
        hour3=time/60;
        minute3=time%60;
    
        printf("%d hour %d minute
    ",hour3,minute3);
        return 0;
    }
    View Code

     2.

    设capital是最初的存款总额(即本金),rate是整存整取的存款年利率,n 是储蓄的年份,deposit是第n年年底账号里的存款总额。已知如下两种本利之和的计算方式:

    • 按复利方式计息的本利之和计算公式为:deposit  =  capital * (1 + rate) n

    • 按普通计息方式计算本利之和的公式为:deposit  =  capital  * (1 + rate * n)

    已知银行整存整取不同期限存款的年息利率分别为:

    存期1年,利率为 0.0225

    存期2年,利率为 0.0243

    存期3年,利率为 0.0270

    存期5年,利率为 0.0288

    存期8年,利率为 0.0300

    若输入其他年份,则输出"Error year!"

    #include<stdio.h>
    #include<math.h>
    int main()
    {
        int flag=1;
        int year;
        double capital,rate,deposit;
        char interest;
        printf("Input capital, year:");
        scanf("%lf,%d,&capital",&capital,&year);
        switch(year)
        {
        case 1:rate=0.0225;
                break;
        case 2:rate=0.0243;
                break;
        case 3:rate=0.0270;
                break;
        case 5:rate=0.0288;
                break;
        case 8:rate=0.0300;
                break;
        default:flag=0;
    
        }
        printf("Compound interest (Y/N)?");
        scanf(" %c",&interest);
        if((interest=='y'||interest=='Y')&&flag)
        {
            deposit=capital*pow(1+rate,year);
            printf("rate = %.4f, deposit = %.4f
    ",rate,deposit);
        }
        else if((interest=='n'||interest=='N')&&flag)
        {
            deposit=capital*(1+rate*year);
            printf("rate = %.4f, deposit = %.4f
    ",rate,deposit);
        }
        else
        {
            printf("Error year!
    ");
        }
    
        return 0;
    }
    View Code

     3.

    美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是一个4位数。我年龄的4次方是一个6位数。这=10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你编程算出他当时到底有多年轻。

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
     
    int tenBit(int n,int *a);
     
    int main()
    {
        for(int x=10;x<=22;++x)
        {
            int a[10]={0,1,2,3,4,5,6,7,8,9};
            int d = tenBit(x*x*x,a)+tenBit(x*x*x*x,a);
            if(d==10){
                printf("age=%d
    ",x);
                break;
            }
        }
        return 0;
    }
     
    int tenBit(int n,int *a){
        int cnt =0;
        while(n){
            for(int i=0;i<10;++i){
                if(n%10==a[i]){
                    a[i]=-1;
                    cnt++;
                }
            }
            n/=10;
        }
        return cnt;
    }
    View Code

     4.

    化简分数的最简分数(寻找分子分母的最大公约数)

    #include<stdio.h>
    int Gcd(int a,int b);
    int main()
    {   int a;
        int b;
        printf("Input m,n:");
        scanf("%d,%d",&a,&b);
    
        if (a<1||a>10000||b<1||b>10000)
        {
            printf("Input error!
    ");
        }
        else
            printf("%d/%d
    ",a/Gcd(a,b),b/Gcd(a,b));
        getchar();
        getchar();
        return 0;
    }
    
    int Gcd(int a,int b)
    {
        int max=1;
        int i;
        int n = a < b ? a : b;
        for (i = 1; i <= n; ++i)
        {
            if (a % i == 0 && b % i == 0 )
            {
                if(max < i)
                {
                    max = i;
                }
            }
        }
    
        return max;
    }
    最简分式化简

     5.

    从键盘任意输入一个整数n,编程计算并输出1~n之间的所有素数之和。

    函数原型:int IsPrime(int x);

    函数功能:判断x是否是素数,若函数返回0,则表示不是素数,若返回1,则代表是素数

    #include<stdio.h>
    int IsPrime(int x);
    int main()
    {
        int x,i;
        int sum=0;
        printf("Input n:");
        scanf("%d",&x);
        if(x<2)
        {
            printf("sum=%d
    ",sum);
        }
        else
        {
            for(i=2;i<=x;i++)
            {
                if(!IsPrime(i))
                {
                    sum+=i;
                }
            }
            printf("sum=%d
    ",sum);
        }
    
        getchar();
        getchar();
        return 0;
    }
    
    int IsPrime(int x)
    {
        int i;
        for (i=2;i<x;i++)
        {
            if(x%i==0)
            {
                 return 1;
                 break;
            }
    
        }
        return 0;
    
    }
    素数和

     6.

    已知一个集合A,对A中任意两个不同的元素求和,若求得的和仍在A内,则称其为好数对。例如,集合A={1 2 3 4},1+2=3,1+3=4,则1,2和1,3 是两个好数对。编写程序求给定集合中好数对的个数。

    #include<stdio.h>
    
    #define SIZE 1000
    int Good(int a[], int m,int n);
    
    int main()
    {
        int i;
        int a[SIZE];
        int n;
        int m=0;
        scanf("%d",&n);
        for (i=0;i<n;i++)
        {
            scanf("%d",&a[i]);
        }
        printf("%d",Good(a,m,n));
        return 0;
    
    }
    
    int Good(int a[], int m,int n)
    {
        int i,j,k;
    
        for(i=0;i<n-1;++i)
        {
            for (j=i+1;j<n;j++)
            {
                for(k=0;k<n;k++)
                {
                    if(a[i]+a[j]==a[k])
                        m++;
                }
            }
        }
        return m;
    }
    好对数

     7.

    猴子吃桃问题,反向递归

    法一:

    #include<stdio.h>
    int Monkey(int n, int x);
    int main()
    {
        int n,x=1;
        printf("Input days n:");
        scanf("%d",&n);
        printf("x=%d
    ",Monkey(n,x));
    
    
    }
    
    int Monkey(int n, int x)
    {
        if(n==1)
        {
            return x;
        }
        else
        {
            return Monkey((n-1),2*(x+1));
        }
    }
    View Code

    法二:

    #include <stdio.h>
    int getPeachNumber(n)
    {
        int num;    //定义所剩桃子数
        if(n==10)
        {
        return 1;    //递归结束条件
        } 
        else
        {
        num =(getPeachNumber(n+1)+1)*2;//这里是不应该用递归呢?
        printf("第%d天所剩桃子%d个
    ", n, num); //天数,所剩桃子个数
        }
        return num;
    }
    int main()
    {
        int num = getPeachNumber(1);
        printf("猴子第一天摘了:%d个桃子。
    ", num);
        return 0;
    }
    View Code

     8.

    据说,鲁智深一天中午匆匆来到开封府大相国寺,想蹭顿饭吃,当时大相国寺有99个和尚,只做了99个馒头。智清长老不愿得罪鲁智深,便把他安排在一个特定位置,之后对所有人说: 从我开始报数(围成一圈),第5个人可以吃到馒头(并退下) ,按此方法,所有和尚都吃到了馒头,唯独鲁智深没有吃上。请问他在那个位置? 能否借鉴筛法求出剩下的最后一个人的位置?

    #include <stdio.h>
    int main()
    {
        int a[100]={0};
        int bread;
        int cnt=0;int i=0;
        for (bread=99; bread>0; ++i,i%=100)
        {
            if(a[i]==0)
            {
                cnt++;
            }
            if (cnt==5)
            {
                bread--;
                cnt=0;
                a[i]=-1;//改变已经分到的状态
    
            }
        }
    
        for(i=0;i<100;i++)
        {
            if (a[i]==0)
                printf("The result is %d: ",i+1);
        }
    
     return 0;
    }
    鲁智深吃馒头

     9.

    Squeeze函数的功能是删除字符串s中所出现的与变量c相同的字符。例如,输入为:abcdef↙c↙输出为:abdef

    #include <stdio.h>
    #include <string.h>
    void Squeeze(char *s, char c);
    int main()
    {
        char  a[80], c, *s;
        s = a;
        gets(a);
        scanf("%c",&c);
        Squeeze(s, c);
        printf("%s
    ", s);
        return 0;
        }
         
     void  Squeeze(char *s, char c)
        {
            int i, j;
            for (i = j = 0; s[i] != ''; i++)
                {
                    if (__________)
                    {
                        __________;
                        j++;
                    }
                }
            _____________; /* 在字符串t2的末尾添加字符串结束标志 */
         }
    code

     10.

    从键盘输入一串字符(假设字符数少于8个),以回车表示输入结束,编程将其中的数字部分转换为整型数并以整型的形式输出。   

    函数原型为 int Myatoi(char str[]);其中,形参数组str[]对应用户输入的字符串,函数返回值为转换后的整型数。

    (str[i]-'0');   //将字符数字转化为相应的数字

    #include<stdio.h>
    #include<string.h>
    #define LENGTH  8
    int Myatoi(char str[]);
    
    int main()
    {
        char str[LENGTH+1];
        printf("Input a string:");
        scanf("%7s",str);
        printf("%d
    ",Myatoi(str));
    
        return 0;
    }
    
    int Myatoi(char str[])
    {
        int i;
        int result=0;
        for(i=0;str[i]!='';i++)
        {
            if(str[i]>='0'&&str[i]<='9')
            {
                result=result*10+(str[i]-'0');   //将字符数字转化为相应的数字
            }
        }
        return result;
    }
    View Code

     11.编程计算n(n<=500)以内的10个最大素数及其和,分别输出这最大的10个素数及其和。n的值要求从键盘输入。要求10个素数按从大到小的顺序输出。

    #include<stdio.h>
    #include<math.h>
    int Isprime(int n);
    int main()
    {
        int i,n,cnt=0;
        int a[10]={0};
        int sum=0;
        printf("Input n(n<=500):");
        scanf("%d",&n);
    
        for (i=n;i>=2;--i)
        {
    
            if(Isprime(i))
            {
             a[cnt]=Isprime(i);
            sum+=a[cnt];
            printf("%6d",a[cnt]);
             if(cnt==9)
                break;
                cnt++;//严格注意位置
            }
        }
           printf("
    sum=%d
    ",sum);
        getchar();
        getchar();
    
    
    
        return 0;
    }
    
    int Isprime(int n)
    {
        int i,flag=1;
        for (i=2;i<=sqrt(n);i++)
        {
            if(n%i==0)
            {
            flag=0;
             break;
            }
        }
        if(flag==1)
        {
            return n;
        }
        else
            return 0;
    
    }
    View Code

     12.

    星期判断

    题目内容:请输入星期几的第一个字母(不区分大小写)来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母(小写),否则输出“data error”。

    #include<stdio.h>   
    int main()  
    {  
        char i,j;  
        printf("please input the first letter of someday:
    ");  
        scanf("%c",&i);  
        switch(i)  
        {
            case 'M':
            case 'm':  
                printf("monday
    ");  
                break;  
            case 'w':  
            case 'W':
                printf("wednesday
    ");  
                break;  
            case 'f': 
            case 'F':
                printf("friday
    ");  
                break;  
            case 't':  
            case 'T':
                printf("please input second letter:
    ");  
                scanf(" %c",&j);  
                if (j=='u')//||j=='U')   
                {  
                    printf("tuesday
    ");  
                    break;  
                }  
                else if (j=='h')//||j=='H')   
                {  
                    printf("thursday
    ");  
                    break;  
                }  
                else printf("data error
    "); break;  
            case 's': 
            case 'S':
                printf("please input second letter:
    ");  
                scanf(" %c",&j);  
                if (j=='a')//||j=='A')   
                {  
                    printf("saturday
    ");break;  
                }  
                if (j=='u')//||j=='U')   
                {  
                    printf("sunday
    ");   
                    break;  
                }  
                else printf("data error
    "); break; 
            default :  
                printf("data error
    "); break;  
        }  
        return 0;  
    }
    View Code

    13.奖学金发放

    题目内容:

    某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,每项奖学金获取的条件分别如下:

    1) 院士奖学金:期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生每人均可获得8000元;

    2) 五四奖学金:期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生每人均可获得4000元;

    3) 成绩优秀奖:期末平均成绩高于90分(>90)的学生每人均可获得2000元;

    4) 西部奖学金:期末平均成绩高于85分(>85)的西部省份学生每人均可获得1000元;

    5) 班级贡献奖:班级评议成绩高于80分(>80)的学生干部每人均可获得850元;

    只要符合上述条件就可获得相应的奖项,每项奖学金的获奖人数没有限制,每名学生也可以同时获得多项奖学金。例如姚明的期末平均成绩是87分,班级评议成绩82分,同时他还是一位学生干部,那么他可以同时获得五四奖学金和班级贡献奖,奖金总数是4850元。

    #include<stdio.h>
    typedef struct winners
    {
        char name[20];
        int finalScore;
        int classScore;
        char work;
        char west;
        int paper;
        int scholarship;
    }WIN;
    
     void Addup(WIN stu[],int n);
      int FindMax(WIN student[],int n);
    
     int main()
     {
         int n;
         WIN stu[10];
         printf("Input n:");
         scanf("%d",&n);
         Addup(stu,n);
         FindMax(stu,n);
         printf("%s get the highest scholarship %d
    ",stu[FindMax(stu,n)].name,stu[FindMax(stu,n)].scholarship);
         getchar();
         getchar();
         return 0;
     }
    
     void Addup(WIN stu[],int n)
     {
         int i;
         for (i=0;i<n;++i)
         {
             stu[i].scholarship=0;
             printf("Input name:");
             scanf("%s",stu[i].name);
             printf("Input final score:");
             scanf("%d",&stu[i].finalScore);
             printf("Input class score:");
             scanf("%d",&stu[i].classScore);
             printf("Class cadre or not?(Y/N):");
             scanf(" %c",&stu[i].work);
             printf("Students from the West or not?(Y/N):");
             scanf(" %c",&stu[i].west);
             printf("Input the number of published papers:");
             scanf("%d",&stu[i].paper);
             if(stu[i].finalScore>80&&stu[i].paper>0)
             {
                 stu[i].scholarship+=8000;
             }
             if(stu[i].finalScore>85&&stu[i].classScore>80)
             {
                 stu[i].scholarship+=4000;
             }
             if(stu[i].finalScore>90)
             {
                 stu[i].scholarship+=2000;
             }
             if(stu[i].finalScore>85&&stu[i].west=='Y')
             {
                 stu[i].scholarship+=1000;
             }
             if(stu[i].classScore>80&&stu[i].work=='Y')
             {
                 stu[i].scholarship+=850;
             }
             printf( "name:%s,scholarship:%d
    ",stu[i].name,stu[i].scholarship);
    
         }
    
    
     }
    
     int FindMax(WIN student[],int n)
     {
         int i,k=0;
         int max=student[k].scholarship;
         for (i=1;i<n;i++)
         {
             if(student[i].scholarship>max)
             {
                 max=student[i].scholarship;
                 k=i;
             }
         }
         return k;
    
     }
    View Code

    14.评选最牛群主

    现在要评选最牛群主,已知有3名最牛群主的候选人(分别是tom,jack和rose),有不超过1000人参与投票,最后要通过投票评选出一名最牛群主,从键盘输入每位参与投票的人的投票结果,即其投票的候选人的名字,请你编程统计并输出每位候选人的得票数,以及得票数最多的候选人的名字。候选人的名字中间不允许出现空格,并且必须小写。若候选人名字输入错误,则按废票处理。

    #include<stdio.h>
    #include<string.h>
    typedef  struct
    {
        char name[10];
        int m;
    }Vote;
    
    
    int main()
    {
        Vote a[3];
        int j;
        for (j=0;j<3;j++)
        {
            a[j].m=0;
        }
        char *pName[]={"tom","jack","rose"};
        int i,n;
        char str[10];
        printf("Input the number of electorates:");
        scanf("%d",&n);
        for (i=0;i<n;i++)
        {
            printf("Input vote %d:",i+1);
            scanf("%s",str);
            if(strcmp(str,pName[0])==0)
            {
                (a[0].m)++;
            }
            if(strcmp(str,pName[1])==0)
            {
                a[1].m++;
            }
            if(strcmp(str,pName[2])==0)
            {
                a[2].m++;
            }
    
    
        }
        printf("Election results:
    ");
        for (i=0;i<3;i++)
        {
        printf("%s:%d
    ",pName[i],a[i].m);
        }
    
        int k=0;
        int max=a[k].m;
        for (i=1;i<3;i++)
        {
            if(max<a[i].m)
            {
                max=a[i].m;
                k=i;
            }
        }
        printf("%s wins
    ",pName[k]);
    
        getchar();
        getchar();
        return 0;
    }
    View Code
  • 相关阅读:
    线性代数基础知识的复习
    第一个机器学习算法:线性回归与梯度下降
    初识机器学习
    VScode中LeetCode插件无法登录的情况
    内存管理-内存管理功能
    分组密码
    Linux进程调度
    进程调度
    死锁
    临界区和缩
  • 原文地址:https://www.cnblogs.com/sunshine88/p/8719372.html
Copyright © 2011-2022 走看看