您的位置:首页 > 编程语言 > C语言/C++

第7次c语言练习(部分)

2017-12-01 22:53 375 查看
1.如输入:Z2009-AShanghaiZ 
则输出:lenth = 8; 
事例说明:从A到Z的子串为SHanghai,其长度是8.

#include<stdio.h>

int hanshu(char arr[])//定义一个函数

{

    int len = 0;//定义长度变量

    while(*arr){//循环到结束

        if(*arr == 'A'){//如果指针等于A

            arr++;//就让指针向右移动

            while(*arr != 'Z'){//如果指针,还没到Z,就继续循环

                len++;//长度加1

                arr++;//指针加1

            }

        }

        arr++;//指针加1

    }

    return len;//返回指针长度

}

int main(void)//定义主函数

{

    int shuzu = 0;//定义数组长度的变量

    char arr[] = {" Z2009-AShanghaiZ"};//定义要求的数组

    shuzu = hanshu(arr);//给数组长度变量赋函数求出的值

    printf("%d\n",shuzu);//输出数组长度值

}

3.实现整数n(n<=10)的算式:n!+(n-1)!+(n-2)!…+3!+2!+1! 
输入 n = 3:结果 3!+2!+1! = 9 
函数原型:int jiecheng_sum(int n);

 #include<stdio.h>

int jiecheng_sum(int n){

    int leijia = 0,int leicheng = 1,int i;

 
4000
  if(n <= 10 && n > 0)//如果n大于0,小于等于10

        for(i = 1; i <= n; i++, leicheng *= i)// 从i等于1开始,直到i大于n,每次i+1,累乘

            leijia += leicheng;//累加

    else

        printf("请正确输入1 ~ 10数。\n");

    return leijia;

}

void main(void){

    int n;

    printf("请输入1 ~ 10数:");

    scanf("%d", &n);

    printf("结果为:%d。\n", jiecheng_sum(n));

}

4.给出三个正整数a,
b, c,你可以在他们之间出入加号或者称乘号以及括号将其变成一个表达式。 
比如给出1,2和3,你可以构造出:1+(2*3) = 7 等等 
现在你需要构造一个值最大的表达式,输出这个值。 
输入:三个整数a, b, c. 大小为1~10。 
输出:表达式的值 
例如: 
输入:1,2,3。 
输出:9。

#include<stdio.h>

void qk_max(int a, int b, int c)

{

    int qk1, qk2, qk3, qk4, qk5, qk6, max;//定义了六种情况的变量和最大值的变量

    qk1 = a + b * c;
qk2 = a * b + c;
qk3 = a + b + c;

    qk4 = a * (b + c);

    qk5 = a * b * c;

    qk6 = (a + b) * c;

    if(qk1 > qk2)//比较两种情况值的大小

        max = qk1;

    max = qk2;

    if(qk3 > qk4)

        (max > qk3) ? (max = max) : (max = qk3);//如果前面的最大值大于情况三,最大值就是前面的最大值,不然最大值就是情况三

    (max > qk4) ? (max = max) : (max = qk4);
if(qk5 > qk6)

        (max > qk5) ? (max = max) : (max = qk5);

    (max > qk6) ? (max = max) : (max = qk6);

    printf("abc之间,在不改变顺序的情况下插入加号,乘号,括号后,得到的最大值为:%d\n",max);

}

int main()

{

    int a, b, c;
printf("请输入三个正整数a, b, c。\n");

    printf("请输入a:"); 

    scanf("%d",&a);
printf("请输入b:"); 

    scanf("%d",&b);
printf("请输入c:"); 

    scanf("%d",&c);

    qk_max(a,b,c);

}

5.一个数组有N个元素,使用冒泡排序进行排序输出。 
输入:整数n(1~100),表示n个元素,n个整数,范围在int类型范围内,以空格分开 
输出:排序后的数组,以空格分开,行末无空格

#include
<stdio.h>

void paixu(int kongjian[],int n)

{

    int j = 0, guodu = 0;

    do{

        for(j = 1; j < n; j++)

            //升序排序

            if(kongjian[j - 1] > kongjian[j])//如果前一个数比后一个数大

            {

                guodu = kongjian[j];//把后一个值给过度变量

                kongjian[j] = kongjian[j - 1];//把前一个值给后一个值

                kongjian[j - 1] = guodu;//把过渡变量给前一个值

                

            }

    }while( --n );

}

int main(void)

{

    int n = 0, i = 0;

    int kongjian[100]={0};//申请空间

    printf("请输入想要排序的元素个数(1~100):");

    scanf("%d", &n);

    printf("请输入%d个数: \n", n);

    for(i = 0; i < n; i++)

        scanf("%d", kongjian + i);

    paixu(kongjian, n);
printf("排序结果为:\n");

    for(i = 0; i < n; i++)

        printf(" %d", kongjian[i]);

    printf("\n");

    return 0;

}

6.找出一个整数数组中第二大的数, 
66,66,66,66 则没有第二大的数 
99,99,86,32 第二大的数为86

#include
<stdio.h>

int second_max_num(int kongjian[], int n)

{

    int secMax = 0, max = kongjian[0], flag = 1;

    int i = 0;

    for(i = 0; i < n; i++)
{

        if(kongjian[i] > max)
{

            secMax = max;

            max = kongjian[i];

        }
else if(kongjian[i] < max && kongjian[i] > secMax)
{

            secMax = kongjian[i];

            flag = 0;

        }

    }
if(flag=0)

        printf("没有第二大的数.\n");
else
printf("第二大数为:\n");
printf(" %d", secMax);

    return 0;

}

int main(void)

{

    int n = 0, i = 0;

    int kongjian[100]={0};//申请空间

    printf("请输入想要比较大小的元素个数(1~100):");

    scanf("%d", &n);

    printf("请输入%d个数: \n", n);

    for(i = 0; i < n; i++)

        scanf("%d", kongjian + i);

    second_max_num(kongjian, n);

    printf("\n");

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: