c语言题集-综合提高(部分答案)

本文是一篇C语言编程题集,涵盖了多个编程题目,包括数字处理、字符串加密、选举模拟、四则运算等多个方面。题目涉及条件判断、循环、排序算法和随机数生成等内容,旨在提升编程技巧和逻辑思维能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//
//  main.c
//  12.12
//
//  Created by lanqs on 14/12/12.
//  Copyright (c) 2014年 . All rights reserved.
//

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int he(int *a,int *b);
int ti12(int year,int month,int day);
float ti15(float *a,char *c,float *b);
int main(int argc, const char * argv[]) {
    
    //做题做得发吐。。。
    //未完成的题 5,7,8,9,10,11,12(没做完,没考虑全面),17没有找出规律,18(可以输出有几个单词但是和题意要求不符合),19,20(我晕以前做过的都会忘记,真的是不行啊)
    
    
    
#pragma mark - 1、1-100之间含有7的数 &
//    for  (int i = 1;i <= 100;i ++) {
//            //个位是7或者10位是7
//        if ( ((i+3) % 10 == 0 )|| i / 10 == 7) {
//            printf("%d ", i);
//        }
//        
//    }
#pragma mark - 2、编程实现对键盘输入的英文名句子进行加密。用加密方法为,当内容为英文字母时其在26字母中的其后三个字母代替该字母,若为其它字符时不变。
//    char a[]={0};
//    scanf("%s",a);
//    for (int i = 0; a[i]!='\0'; i++) {
//        if (( a[i] > 'A' && a[i] <= 'Z')||( a[i] >= 'a' && a[i] <= 'z' )) {
//            a[i]+=1;
//            printf("%c",a[i]);
//            printf("%c",a[i]+1);
//            printf("%c",a[i]+2);
//        }
//    }
#pragma mark - 3、模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A、B、C、D表示,当选某候选人时直接输入其编号(编号由计算机随机产生),若输入的不是A、B、C、D则视为无效票,选举结束后按得票数从高到低输出候选人编号和所得票数。
//    int n = 100,A=0,B=0,C=0,D=0;
//    for (int i = 0; i < n; i ++) {
//        int a=arc4random() % 100;
//        if (a >= 3 * n/5 && a < 4 * n /5) {
//            A ++;
//        }else if (a >= 2*n/5 && a < 3 * n/5) {
//            B ++;
//        }
//        else if (a >= n / 5 && a < 2*n/5) {
//            C ++;
//        }
//        else if (a < n / 5) {
//            D ++;
//        }
//    }
//    printf("%d %d %d %d\n",A,B,C,D);
//    int a[4];
//    a[0]=A;
//    a[1]=B;
//    a[2]=C;
//    a[3]=D;
//    for (int i =0; i <4; i ++) {
//        for (int j =0; j <4; j ++) {
//            if (a[i]>a[j]) {
//                int temp =a[i];
//                a[i]=a[j];
//                a[j]=temp;
//            }
//        }
//    }
//    for (int i = 0; i< 4; i++) {
//         printf("%d ",a[i]);
//    }
    // insert code here...
#pragma mark - 4、编制一个完成两个数的四则运算程序。如:用户输入34+56则输出结果90.00。要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。
    
//    float a,b;
//    char c;
//    float sum=0;
//    printf("请输入四则运算:");
//    scanf("%f%c%f",&a,&c,&b);
//    if (c == '+') {
//        sum = a + b;
//        printf("%.2f\n",sum);
//    }else if(c == '-'){
//        sum = a - b;
//        printf("%.2f\n",sum);
//    }else if(c == '*'){
//        sum = a * b;
//        printf("%.2f\n",sum);
//    }else if(c == '/'){
//        sum = a / b;
//        printf("%.2f\n",sum);
//    }
//    else{
//        printf("你的输入不正确!\n");
//    }
#pragma mark - 5、题目:企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高 于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于 100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?
    //这道题看起来就烦。。暂时不且做它
//    int a,i;
//    if (i <= 10 && i >= 0) {
//        a=a+0.1*a;
//    }else if(10 < i && i< 20){
//        
//    }else if(20 <= i && i<= 40){
//        
//    }else if(40 < i && i< 60){
//        
//    } else if(600 < i && i< 100){
//        
//    }
#pragma mark - 6、任何一个自然数m的立方均可写成m个连续奇数之和。例如: 1^3=1 2^3=3+5 3^3=7+9+11 4^3=13+15+17+19 编程实现:输入一自然数n,求组成n的3次方的n个连续奇数。
    //纯粹数学题。。。
//    int n=4, a=0;
//    for (int i = 0; i < n; i ++) {
//        a=(n*n-(n-1))+2*i;
//        printf("%d ",a);
//    }
#pragma mark - 7、写出浮点数的高精度算法,精确计算浮点数(小数点后12位,假定浮点数均小于1),0.000001 * 0.00001打印出:0.00000000001    
    //(这题没做起)
//    double a=0.000001;
//    double a1 = 0.00001;
//    double c=a1;
//    double d=0.0;
//    int number = 0,number1 = 0;
//    while (a < 1) {
//        a = a * 10;
//        number ++;
//        a1 = a1 * 10;
//    }
//    while (c < 1) {
//       c = c * 10;
//        number1 ++;
//    }
//    
////    printf("%d %d ",number,number1);
//    int b=(int)(a*a1);
//    printf("%lf", d);
//    for (int i = 0; i < number1-1; i++) {
//        printf("0");
//    }
//    printf("%d",b);
#pragma mark - 8、一人岁数的3次方是四位数,四次方是六位数,并知道此人岁数的3次方和4次方用遍了0~9十个数字。编写一程序求此人的岁数。
    
#pragma mark - 9、至少写出2中方法,求10000个浮点数中最大的100个,按比较他们的运算量。
    //生成10000个随机数
//    float a[10000]={0};
//    for (int i = 0; i < 10000; i ++) {
//        a[i] =arc4random() %10000;
//    }
//    //排序后取前100项
//    for (int i = 0; i <10000; i ++) {
//        for (int j = i; j < 10000; j ++) {
//            if (a[i] < a[j]) {
//                int temp = a[i];
//                a[i] = a[j];
//                a[j] = temp;
//            }
//        }
//    }
//    for (int i = 0; i < 100; i ++) {
//         printf("%.2f\t",a[i]);
//    }
    //直接比较
#pragma mark - 10、写一个函数,将输入的2个字符串完全相同且长度大于2个部分全部去掉。
    
//    char a[]="hello";
//    char b[]="llo1";
//    int n=0;
//    for (int i = 0 ; a[i] != 0; i ++) {
//        for (int j = 0; a[j] != 0; j ++) {
//            if (a[i] == a[j] && a[i+1] == b[j+1] && a[i+2] == b[j+2]) {
//                for (int n = 0; n <strlen(a);  n ++) {
//                                   }
//            }
//        }
//
//    }
#pragma mark - 11、求一个函数,返回一个整形数组中,出现次数最多的数字(每个数的每一位上的数字)。
//    int a[]={1,2,3,4,5,6,7,8,9,2,1,2,2};
////    int b[]={0};
//    int number=0;
//    for (int i =0; i < 11; i ++) {
//        for (int j = i; j <11; j ++) {
//            if (a[i] == a[j] && i !=j) {
//                //这里是求的两个数
//            }
//        }
//    }
//    printf("%d",number);
    
#pragma mark - 12、日期问题:1、求任意2个人出生日期的天数差 2、已知2013年8月12日星期一,求任意一天星期几。 3、任意一个时间,求其到3个月后的第一个星期天要经过多少天。
    //我晕,就算同一年的天数差算了,太难算了啊。。。(以后有兴趣再算吧。)
//    int year1,month,day,year2;
//    int a1,a2,a3,a4;
//    //第一小问、、
////    printf("请输入两个认得出生日期:");
////    scanf("%d%d%d",&year1,&month,&day);
////    a1=ti12(year1, month, day);
////    scanf("%d%d%d",&year2,&month,&day);
////    a2=ti12(year2, month, day);
////
////    printf("%d",a3);
//    
//    //第二小问(一样的只算了2013年的)
//        //2013 8 12 号是那年的224天
//    scanf("%d%d%d",&year1,&month,&day);
//    a1=ti12(year1, month, day);
//    a4=a1-224;
//    switch (a4 % 7) {
//        case 0:
//            printf("星期一");
//            break;
//        case 1:
//            printf("星期二");
//            break;
//        case 2:
//            printf("星期三");
//            break;
//        case 3:
//            printf("星期四");
//            break;
//        case 4:
//            printf("星期五");
//            break;
//        case 5:
//            printf("星期六");
//            break;
//        case 6:
//            printf("星期日");
//            break;
//    }
//    //第三问,好嘛,不想写了。。
    
#pragma mark - 13、编制一个完成两个数的四则运算程序。如:用户输入34+56则输出结果90.00。要求运算结果保留两位小数,用户输入时一次将两个数和操作符输入。
//    printf("请输入四则运算:");
//    float a,b;
//    float sum = 0;
//    char c;
//    scanf("%f%c%f",&a,&c,&b);
//    if (c == '+') {
//        sum = a + b;
//        printf("%.2f",sum);
//    }else if (c == '-'){
//        sum = a - b;
//        printf("%.2f",sum);
//    }else if (c == '*'){
//        sum = a * b;
//        printf("%.2f",sum);
//    }else if (c == '/'){
//        sum = a / b;
//        printf("%.2f",sum);
//    }else{
//        printf("你的输入不正确!");
//    }
#pragma mark - 14、输入一个五位以内的正整数,(1)判断它是一个几位数;(2)请按序输出其各位数字;(3)逆序输出其各位数字。 如输入:56439,输出:5位数           5,6,4,3,9      9,3,4,6,5
//    char a[]={};
//    scanf("%s",a);
//    printf("%lu\n",strlen(a));
//    puts(a);
//    for (int i = 0; a[i] != '\0'; i++) {
//
//        //就直接倒着输出就行了,,还用什么转换。
//        printf("%c",a[strlen(a)-i-1]);
//    }
#pragma mark - 15、使用函数实现数值字符串的加减乘除运算。
//    printf("请输入四则运算:");
//    float a,b;
//    char c;
//    scanf("%f%c%f", &a,&c,&b);
//    ti15(&a, &c, &b);
//    printf("%.2f",ti15(&a, &c, &b));
    
#pragma mark - 16、编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排列,然后将这两个数组合并成一个升序数组。
//    int a[] = {4,3,2,1,5};
//    int b[] = {0,13,8,3,5};
//    int a1;
//    //输入两个数
//    for (int i = 0; i < 5; i ++) {
//        scanf("%d",&a1);
//        a[i]=a1;
//    }
//    printf("请输入另外5个数:");
//    for (int i = 0; i < 5; i ++) {
//        scanf("%d",&a1);
//        b[i]=a1;
//    }
//    //////
//    int c[] = {0};
//    //第一个数组排序
//    for (int i = 0; i < 5; i ++) {
//        for (int j = i; j < 5; j ++) {
//            if (a[i] > a[j]) {
//                int temp = a[i];
//                a[i] = a[j];
//                a[j] = temp;
//            }
//        }
//        printf("%d ",a[i]);
//    }
//    printf("\n");
//    //第二个数组排序
//    for (int i = 0; i < 5; i ++) {
//        for (int j = i; j < 5; j ++) {
//            if (b[i] > b[j]) {
//                int temp = b[i];
//                b[i] = b[j];
//                b[j] = temp;
//            }
//        }
//        printf("%d ",b[i]);
//    }
//    printf("\n");
//    for (int i = 0; i < 5; i ++) {
//        c[i] = a[i];
//        c[i+5] = b[i];
//       
//    }
//    //排序
//    
//    for (int i = 0; i < 10; i ++) {
//        for (int j = i; j < 10; j ++) {
//            if (c[i] > c[j]) {
//                int temp = c[i];
//                c[i] = c[j];
//                c[j] =temp;
//            }
//        }
//        
//         printf("%d ", c[i]);
//    }
#pragma mark - 17、耶稣有13个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:13人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就是出卖耶稣的叛徒,请找出它原来的序号。
//    //(没有找出规律)
//    int s[13]={0,0,0,0,0,0,0,0,0,0,0,0,0};
//    int count=1,i;
//    //n为什么会等于6?
//    //第几次的意思,但是为什么是第6次呢?(手算得话是运行了7*13次,第6次只有两个了)
//    for (int n = 0;n < 7; n++){
//        for(i = 0;i < 13;i ++)
//            //如果等于第一个 and 每次循环加1余3等于0
//            if(s[i] == 0 && count ++ % 3 == 0)
//                //确定报了3的数设定标识
//                s[i] = 1;
//    }
//    
//
//    
//    for(i=0;i<13;i++)
//        if(s[i]==0)
//            printf("叛徒的序号是%d\n",i+1);
#pragma mark - 18、编程在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
//    char a[]="hhaa adad   sdasdasdsa";
//    int flag = 1;
//    int number =0;
//    for (int i = 0; a[i] !='\0'; i ++) {
//        if (a[i] == ' ') {
//            flag = 1;
//        }else if(flag == 1){
////            if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) {
////                flag = 2;
////            }
//            number++;
//            flag = 0;
//        }
//        
//    }
//    printf("%d\n",number);
    
    
#pragma mark - 19、已知一个标准随机数函数返回0-5,求一个标准随机数函数返回0-7(只使用加减乘除运算)。
    //看起来简单。。。晕了
//    int a=arc4random() % 6;
//    
//    
//    
//    printf("%d",a);
  
#pragma mark - 20、数学等式问题:1、有一个数学等式:AB*CD=BA*DC,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。  2、有一个数学等式:ABCD*E= DCBA,式中的一个字母代表一位数字,试找出所有符合上述要求的乘积式并打印输出。
    
//    int a,b;
//    for (int i = 11 ; i < 100; i ++) {
//        for (int j = 11; j < 100; j ++) {
//            a = (i / 10) + (i % 10) * 10;
//            b = (j / 10) + (j % 10) * 10;
//            
//            if (i * j == a * b  && (j / 10) != (j % 10) &&  (i / 10) != (i % 10) && i <j) {
//                printf("%d %d     ", i ,j);
//            }
//        }
//    }
    //⊙﹏⊙b汗哪天想做了再做=-=晕了
    
    
    
    
    
    
    
    
//    21、平面问题:
//    1、已知平面上三个点:(7,1)、(4,6)、(5,8),判断这三点组成的三角形是何种三角形(锐角,直角,钝角)
//    2、对(1)问中的三角形,给出它的外接圆半径;
//    3、已知平面上6个点的坐标为:(7,1)、(4,6)、(5,8)、(6,2)、(3,9)、(2,7),试求覆盖这6个点的覆盖圆最小半径。
//    
//    
//    
//    
//    21、编程求1000!尾部有多少个0.
//    
//    22、随机产生20个[10,50]的正整数存放到数组中,并求数组中的所有元素最大值、最小值、平均值及各元素之和。
//    
//    23、定义一个结构体变量(包括年、月、日),计算该日在本年中为第几天?(注意考虑闰年问题),要求写一个函数days,实现上面的计算。由主函数将年月日传递给days函数,计算后将日子传递回主函数输出。
//    23A、建立一个链表,每个结点包括:学号、姓名、性别、年龄,输入一个学号,如果链表中的结点包括该学号,则输出该结点内容后,并将其结点删去。
//    
//    24、实现一个构建双向链表的函数。假定一个双向链表某个方向有一个指向产生错误,实现一个函数,快速将其改正。
//    
//    25、建立描述颜色(Red、Green、Blue、Alpha),并实现3个函数,红->蓝,任意色->白,任意色->黑或白。
//    
//    26、实现一个二维数组的冒泡法排序函数。
//    
//    27、实现一个函数,将一个二维数组对角线的右上部分置为0。
//    
//    28、编程解决如下数学问题:有12升水,怎样利用一个8升和一个5升的容器将水分为两个6升?要求以如下格式打印出分水步骤。
//    a12  b8   c5
//    12   0    0
//    *    *    * (“*”表示当前状态下每个容器的盛水量)
//    ......
//    6    6    0
//    
//    
//    29、编写一个人机猜数游戏,游戏玩法如下:
//    由计算机“想”一个四位数(不含重复数字),请人猜这个四位数是多少。人输入四位数字后,计算机首先判断这四位数字中有几位是猜对了,并且在对的数字中又有几位位置也是对的,将结果显示出来,给人以提示,请人再猜,直到人猜出计算机所想的四位数是多少为止。
//    例如:计算机“想”了一个“1234”请人猜,可能的提示如下:
//    人猜的整数          计算机判断有几个数字正确          有几个位置正确
//    1122                       2                        1
//    3344                       2                        1
//    3312                       3                        0
//    4123                       4                        0
//    1243                       4                        2
//    1234                       4                        4  
//    
    
    
    
    
    
    

    return 0;
}









int ti12(int year,int month,int day){
    int days=0;
    int a[12]={0,0,31,30,31,30,31,31,30,31,30,31};
    a[0]=day;
    if ((year %4 == 0 && year % 100 == 0) || year % 400 == 0) {
        a[1]=29;
    }else{
        a[1]=28;
    }
    if (month == 2) {
        a[1]=31;
    }
    for (int i = 0; i < month; i ++) {
        days +=a[i];
    }
    return days;
}
float ti15(float *a,char *c,float *b){
    float sum = 0;
    if (*c == '+') {
        sum = *a + *b;
         return sum;
    }else if (*c == '-'){
        sum = *a - *b;
         return sum;
    }else if (*c == '*'){
        sum = *a * *b;
         return sum;
    }else if (*c == '/'){
        sum = *a / *b;
         return sum;
    }
    return sum;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值