rickyzcode / blog.github.io

0 stars 0 forks source link

programming practice #1

Open rickyzcode opened 4 years ago

rickyzcode commented 4 years ago

A typical file is composed of source file and header file.

Two versions of #include:

#include <file_name>

#include "file_name"

You can add information that can help you to locate the file.

#include "C:\cprogs\header.h"  /*DOS path*/

#include "\cprgs\header.h"       /*UNIX path*/
rickyzcode commented 4 years ago

题目描述

输入两个整数a和b,计算a+b的和 注意此题是多组测试数据

输入

输入两个整数A和B 范围不超过2^10

输出

求A+B

link

https://www.dotcpp.com/oj/problem1000.html

例子

#include<stdio.h>
int main()
{
    int a,b;
    while(~scanf("%d%d", &a, &b))printf("%d\n",a+b);
    return 0;
}

scanf()函数返回值分为3种:

(1)返回正整数。表示正确输入参数的个数。

(2)返回整数0。表示用户的输入不匹配,无法正确输入任何值。

(3)返回-1。表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复多次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。

关于~的作用解析:

1、在Windows下,用户按下CTRL+Z(会看到一个^Z字符),会停止输入流,scanf会返回-1。

2、-1的补码为11111111 11111111 11111111 11111111 一共4个字节。

3、\~是C语言中的按位取反,因\~(-1)结果为00000000 00000000 00000000 00000000刚好为整数0的补码。

4、因此当输入Ctrl+Z时,scanf会返回-1,while(~-1)==while(0),0为假,退出while循环。

rickyzcode commented 4 years ago

题目描述

请参照本章例题,编写一个C程序,输出以下信息:

****** Hello World! ******

Hello与World之间有一个空格

*也是输出的一部分,别光打印Hello World!

输入

无需输入

输出

****** Hello World! ******

link

https://www.dotcpp.com/oj/problem1001.html

#include<stdio.h>

int main()
{
    printf("**************************\n");
    printf("Hello World!\n");
    printf("**************************\n");
    return 0;
}
rickyzcode commented 4 years ago

题目描述

编写一个程序,输入a、b、c三个值,输出其中最大值。

输入

一行数组,分别为a b c

输出

a b c其中最大的数

link

https://www.dotcpp.com/oj/problem1002.html

#include<stdio.h>

main()
{
    int a=0,b=0,c=0,tmp=0;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b)
    tmp = a;
    else
    tmp = b;
    if(tmp<c)
    tmp = c;
    printf("%d",tmp);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

要将"China"译成密码,译码规律是:用原来字母后面的第4个字母代替原来的字母.

例如,字母"A"后面第4个字母是"E"."E"代替"A"。因此,"China"应译为"Glmre"。

请编一程序,用赋初值的方法使cl、c2、c3、c4、c5五个变量的值分别为,’C’、’h’、’i’、’n’、’a’,经过运算,使c1、c2、c3、c4、c5分别变为’G’、’l’、’m’、’r’、’e’,并输出。

输入

China

输出

加密后的China

#include<stdio.h>

main()
{
    char ch1,ch2,ch3,ch4,ch5;
    scanf("%c",&ch1);
    scanf("%c",&ch2);
    scanf("%c",&ch3);
    scanf("%c",&ch4);
    scanf("%c",&ch5);
    printf("%c%c%c%c%c",ch1+4,ch2+4,ch3+4,ch4+4,ch5+4);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

输入

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。

输出

对于每个测试实例,输出在第n年的时候母牛的数量。 每个输出占一行。

#include<stdio.h>
int n;
int cow(n);
int main()
{
    while(~scanf("%d",&n)){
        if(n == 0)
        break;
    printf("%d\n",cow(n));
    }
    return 0;
}
int cow(n){
    if (n<=4)
    return n;
    else
    return cow(n-1)+cow(n-3);
}
rickyzcode commented 4 years ago

菲波那切数列

#include <stdio.h>

int main()
{
    int i, n, t1 = 0, t2 = 1, nextTerm;

    printf("输出几项: ");
    scanf("%d", &n);

    printf("斐波那契数列: ");

    for (i = 1; i <= n; ++i)
    {
        printf("%d, ", t1);
        nextTerm = t1 + t2;
        t1 = t2;
        t2 = nextTerm;
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

输入一个华氏温度,要求输出摄氏温度。公式为 c=5(F-32)/9,取位2小数。

输入

一个华氏温度,浮点数

输出

摄氏温度,浮点两位小数

#include<stdio.h>
int main()
{
    float f;
    scanf("%f", &f);
    printf("c=%.2f\n",5*(f-32)/9);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

有三个整数a b c,由键盘输入,输出其中的最大的数。

输入

一行数组,分别为a b c

输出

a b c其中最大的数

#include<stdio.h>
int main()
{
    int a,b,c,x;
    scanf("%d %d %d",&a,&b,&c);
    if(a>b){
        x = a;
    }
    else
    x = b;
    if (x<c){
        x = c;
    }
    printf("%d",x);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

有一个函数 y={ x x<1 | 2x-1 1<=x<10 \ 3x-11 x>=10

写一段程序,输入x,输出y

输入

一个数x

输出

一个数y

#include<stdio.h>
int fun();
int main()
{
    int n;
    scanf("%d",&n);
    printf("%d",fun(n));
    return 0;
}

int fun(n)
{
    if(n<1){
        return n;
    }
    else if((1<=n)&&(n<10)){
        return (2*n-1);
    }
    else
    return(3*n-11);
}
rickyzcode commented 4 years ago

题目描述

给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以及90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。

输入

一个整数0-100以内

输出

一个字符,表示成绩等级

#include<stdio.h>
int main()
{
    int a;
    char b;
    scanf("%d",&a);
    if(90<=a<=100){
        b='A';
    }
    else if(80<=a<=89)
    {
        b='B';
    }
        else if(70<=a<=79)
    {
        b='C';
    }
        else if(60<=a<=69)
    {
        b='D';
    }
    else if(0<=a<=60)
    {
        b='E';
    }
    printf("%c",b);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

给出一百分制成绩,要求输出成绩等级‘A’、‘B’、‘C’、‘D’、‘E’。 90分以及90分以上为A,80-89分为B,70-79分为C,60-69分为D,60分以下为E。

输入

一个整数0-100以内

输出

一个字符,表示成绩等级

正确解法

#include <stdio.h>
int main()
{
    int i,count=0,x[5];             //count统计位数,x[5]储存数字
    for (i=0;i<5;i++)
    {
        int temp=0;
        temp=getchar();             //temp临时储存数字字符的ASCII码
        if (temp==10) break;      //输入换行\n后跳出for循环
        count++;
        x[i]=temp-48;               //字符0的ASCII码是48
    }
    printf("%d\n",count);
    for (i=0;i<=count-2;i++) printf("%d ",x[i]);
    printf("%d\n",x[i]);
    for (i=count-1;i>=0;i--) printf("%d",x[i]);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%; 利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%; 200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成; 400000<I≤600000元时,高于400000元的部分按3%提成;

600000<I≤1000000时,高于600000元的部分按1.5%提成; I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。

输入

一个整数,当月利润。

输出

一个整数,奖金。

#include<stdio.h>
int main()
{
    int profit,money;
    scanf("%d",&profit);
    switch (profit/100000){
        case 0:
        money = 0.1*profit;
        break;
        case 1:
        money = 0.1*100000+(profit-100000)*0.075;
        break;
        case 2: case 3:
        money = 0.1*100000+100000*0.075+(profit-200000)*0.05;
        break;
        case 4: case 5:
        money = 0.1*100000+100000*0.075+200000*0.05+(profit-400000)*0.03;
        break;
        case 6: case 7: case 8: case 9:
        money = 0.1*100000+100000*0.075+200000*0.05+200000*0.03+(profit-600000)*0.015;
        break;
        default:
        money = 0.1*100000+100000*0.075+200000*0.05+200000*0.03+400000*0.015+(profit-1000000)*0.01;
        break;
    }
    printf("%d",money);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

输入两个正整数m和n,求其最大公约数和最小公倍数。

输入

两个整数

输出

最大公约数,最小公倍数

Tips:此处使用了迭代加欧几里得算法求最大公约数,而最小公倍数与最大公约数的乘积为两数的乘积

#include<stdio.h>
int big(int m, int n);
int main()
{
    int m,n;
    scanf("%d %d",&m,&n);
    printf("%d %d",big(m,n),m*n/big(m,n));
    return 0;
}

int big(int m,int n){
    if(n==0)
    return m;
    return big(n,m%n);
}
rickyzcode commented 4 years ago

题目描述

输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。

输入

一行字符

输出

统计值

Tips:
常用式

while((ch=getchar())!='\n')
#include<stdio.h>
#include<ctype.h>
int main()
{
    int number=0,others=0,space=0,letter=0,ch;
    while((ch=getchar())!='\n'){
        if(isalpha(ch))
        letter++;
        else if(isdigit(ch))
        number++;
        else if(ch==' ')
        space++;
        else
        others++;
    }
    printf("%d %d %d %d", letter, number, space, others);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

求Sn=a+aa+aaa+…+aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n=5时=2+22+222+2222+22222,n由键盘输入。

输入

n

输出

Sn的值

/*使用pow()会时间超限*/
#include<stdio.h>
int main(){
    int n, i, sum = 0;
    scanf("%d", &n);
    for(i = 0; i < n; i++){
        sum *= 10;
        sum += 2 * (i+1);
    }
    printf("%d", sum);
    return 0;
} 
rickyzcode commented 4 years ago

题目描述

求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。

输入

n

输出

Sn的值

#include<stdio.h>
long int n;
long int cycle(long int n) {
    long int f;
    if(n==0) return 1;
    f = n * cycle(n - 1);
    return f;
}

int main()
{
    int i;
    long int result = 0;
    scanf("%d", &n);
    for (i = 1; i <= n; i++) {
        result += cycle(i);
    }
    printf("%ld", result);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和

输入

a b c

输出

1+2+...+a + 1^2+2^2+...+b^2 + 1/1+1/2+...+1/c

Tips: use 0.0 not 0

#include<stdio.h>
int main()
{
    float a,b,c,sum=0.0;
    int i;
    scanf("%f %f %f",&a,&b,&c);
    for(i=1;i<=a;i++){
        sum += i;
    }
        for(i=1;i<=b;i++){
        sum += i*i;
    }
    for(i=1;i<=c;i++){
        sum += 1.0/i;
    }
    printf("%.2f",sum);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

打印出所有"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该本身。 例如:153是一个水仙花数,因为153=1^3+5^3+3^3。

输入

输出

输出每一个水仙花数,一个数占一行 Tips: a should start from 1 not 0.

#include<stdio.h>
int main()
{
int a,b,c; 
    for(a=1;a<10;a++){
        for(b=0;b<10;b++){
            for(c=0;c<10;c++){
               if((a*100+b*10+c)==(a*a*a+b*b*b+c*c*c)) printf("%d\n",a*100+b*10+c);
            }
        }
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

一个数如果恰好等于不包含它本身所有因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出N之内的所有完数,并按下面格式输出其因子

输入

N

输出

? its factors are ? ? ?

Tips: take sum == nout of the for cycle. Or 24(the wrong answer) will appear.

#include<stdio.h>
int Isdigit(int n);
void printnum(int n);
int n,i,m,N,sum=0;
int main()
{
    scanf("%d",&N);
    for(n=2;n<=N;n++){
    if(Isdigit(n)){
        printf("%d its factors are ",n);
        printnum(n);
        printf("\n");
    }
    sum = 0;
    }
    return 0;
}

int Isdigit(int n){
    int sum=0,i;
    for(i=1;i<n;i++){
        if(n%i==0){
        sum += i;
        }

        }
        if (sum == n){
            return 1;
        }
        return 0;
        }

void printnum(int n){
    for(m=1;m<n;m++){
        if(n%m == 0){
            printf("%d ",m);
        }
    }
}
rickyzcode commented 4 years ago

题目描述

有一分数序列: 2/1 3/2 5/3 8/5 13/8 21/13...... 求出这个数列的前N项之和,保留两位小数。

输入

N

输出

数列前N项和 Tips:

#include<stdio.h>
#define MAX 100
int main()
{
    int a[MAX]={1,2};
    int n,i,m;
    float sum = 0.0;
    scanf("%d",&n);
    for(i=2;i<=n;i++){
        m=a[i-1]+a[i-2];
        a[i]=m;
    }
    for(i=1;i<=n;i++){
        sum += (float)a[i]/(float)a[i-1];
    }
    printf("%.2f",sum);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

一球从M米高度自由下落,每次落地后返回原高度的一半,再落下。 它在第N次落地时反弹多高?共经过多少米? 保留两位小数

输入

M N

输出

它在第N次落地时反弹多高?共经过多少米? 保留两位小数,空格隔开,放在一行

#include <stdio.h> 
#include <math.h>
int main()
{
    double M,N;
    double Lushang,Luxia;//分别用来计算上升/下降的总路程 
    scanf("%lf %lf",&M,&N);
    Lushang=M*(1-pow(1.0/2.0,N-1));        //计算上升的总路程 
    Luxia=2*M*(1-pow(1.0/2.0,N));        //计算下降的总路程 
    printf("%.2lf %.2lf\n",M*pow(1.0/2.0,N),Lushang+Luxia);
                                    //pow是幂次函数
    return 0;
}
rickyzcode commented 4 years ago

题目描述

猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃一个。以后每天早上都吃了前一天剩下的一半零一个。 到第N天早上想再吃时,见只剩下一个桃子了。求第一天共摘多少桃子。

输入

N

输出

桃子总数


#include<stdio.h>
int main()
{
    int a,i,sum = 1;
    scanf("%d",&a);
    for(i=1;i<a;i++){
        sum = 2*(sum+1);
    }
    printf("%d",sum);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

用迭代法求 平方根

公式:求a的平方根的迭代公式为: X[n+1]=(X[n]+a/X[n])/2 要求前后两次求出的差的绝对值少于0.00001。 输出保留3位小数

输入

X

输出

X的平方根 平方根迭代公式: https://blog.csdn.net/junbujianwpl/article/details/78024852

#include"stdio.h"
#include"math.h"                      //包含fabs()函数的头文件,别忘了加
int main()
{
    int a;
    double x=1.0,x1;
    scanf("%d",&a);
    while(fabs(x-x1)>1E-5){
        x1=x;
        x=(x1+a/x1)/2;
    }          
    printf("%.3lf",x);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

用简单素数筛选法求N以内的素数。

输入

N

输出

2~N的素数

#include<stdio.h>
int n,m;
int Isnum(int n);
int main()
{
    int a,i;
    scanf("%d",&a);
    for(i=2;i<=a;i++){
                if(Isnum(i)){
                printf("%d\n",i);
        }

    }
    return 0;
}

int Isnum(int n){
    for(int m=2;m<n;m++){
        if(n%m==0) return 0;
    }
    return 1;
}
rickyzcode commented 4 years ago

题目描述

用选择法对10个整数从小到大排序。

输入

输入10个无序的数字

输出

排序好的10个整数

选择排序法

#include<stdio.h> //头文件
#define s 10      //定义一个宏参数
int main()
{
    int a[s]={4,5,6,3,2,1,0,9,8,7};  //初始化数组;
    int i,j;
    int b=-1;  //用来获取数组中最小的数,初始化时尽量不要与数组中的数字重合。
    int c=-1;  //用来获取a[]数组中的下标。
    int M;   //交换时临时变量。

for(i=0;i<s;i++)    //给数组赋于新值,获取新的十个数。
{
    scanf("%d",&a[i]);
}

for(j=0;j<s;j++)  // 外层循环,从a[0]开始遍历。
{
    b=a[j];//初始化b的值。
for(i=j;i<s;i++)  //找出数组中最小的数和它的下标。
        {
          if(b>a[i])
          {
            b=a[i];
            c=i;
          }          
        }

           if(c!=-1)//交换最小的数,不等于-1是为了防止出现b<a[i]时,数据停止执行。
           {
            M=a[j];
           a[j]=a[c];
           a[c]=M;
           }

           c=-1;  //遍历时,每遍历一次,将下标初始化,注意初始化时尽量不要与数组中的下标重合。
}

    for(i=0;i<s;i++)//输出。
    {
        printf("%d\n",a[i]);
    }

    return 0;
}
rickyzcode commented 4 years ago

题目描述

求一个3×3矩阵对角线元素之和。

输入

矩阵

输出

主对角线 副对角线 元素和

#include<stdio.h>
#define MAX 3
int main()
{
    int x,y,sum1=0,sum2=0,a[MAX][MAX];
    for(x=0;x<MAX;x++){
        for(y=0;y<MAX;y++){
            scanf("%d ",&a[x][y]);
            if(x==y){
                sum1 += a[x][y];
            }
            if(x+y==2){
                sum2 += a[x][y];
            }
        }
    }
    printf("%d ",sum1);
        printf("%d",sum2);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

已有一个已正序排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。

输入

第一行,原始数列。 第二行,需要插入的数字。

输出

排序后的数列

#include<stdio.h>
//直接调整数组中数字的位置,使得排列有序
int main(int argc, char* argv[])
{
    int num[10];
    int i;
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &num[i]);
    }
    /*
    **从最大的一个数开始比,如果比最大的数小,二者就交换位置,一旦碰到比它还小的数就跳出循环
    */
    for (i = 8; i >= 0; i--)
    {
        int temp;
        if (num[i + 1] > num[i])
        {
            break;
        }
        else 
        {
            temp = num[i + 1];
            num[i + 1] = num[i];
            num[i] = temp;
        }
    }
    /*
    **遍历数组,循环输出
    */
    for (i = 0; i < 10; i++)
    {
        printf("%d\n", num[i]);
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

输10个数字,然后逆序输出。

输入

十个整数

输出

逆序输出,空格分开

#include<stdio.h>
#define MAX 10
int main()
{
    int i,a[MAX];
    for(i=0;i<MAX;i++){
        scanf("%d",&a[i]);
    }
    for(i=MAX-1;i>=0;i--){
        printf("%d ",a[i]);
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。

输入

两个数

输出

最大公约数 最小公倍数 Tips: greatest common divisor should be got by division by rolling.

#include<stdio.h>
int gongyueshumax(int a,int b)
{
int t;
while(b!=0){
t=a%b;
a=b;
b=t;
}
return a;
}
int gongbeishumin(int a,int b)
{
int t;
t=(a*b)/gongyueshumax(a,b);
return t;
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d %d",gongyueshumax(a,b),gongbeishumin(a,b));
return 0;
}
rickyzcode commented 4 years ago

题目描述

求方程 的根,用三个函数分别求当b^2-4ac大于0、等于0、和小于0时的根,并输出结果。从主函数输入a、b、c的值。

输入

a b c

输出

x1=? x2=?

Tips: 一元二次方程 ax²+bx+c=0 (a≠0)

其求根依据判定式△的取值为三种   ( △=b²-4ac )

    1. △>0,方程有两个不相等的实数根;

        x1=[-b+√(△)]/2a;   //( △=b²-4ac )
        x2=[-b-√(△)]/2a;

    2. △=0,方程有两个相等的实数根;
        x1=x2=[-b+√(△)]/2a= -b/2a ;

    3. △<0,方程无实数根,但有2个共轭复根。
        x1=[-b+√(△)*i]/2a;   //( △=b²-4ac )
        x2=[-b-√(△)*i]/2a;
#include<stdio.h>
#include<math.h>
int main()
{
    double a,b,c,delta;
    scanf("%lf %lf %lf",&a,&b,&c);
    delta = (b*b-4*a*c);
    if(delta>0){
        printf("x1=%.3lf ",(-b+sqrt(delta))/2/a);
        printf("x2=%.3lf",(-b-sqrt(delta))/2/a);
        printf("\n");
    }
    else if(delta==0){
        printf("x1=%.3lf ",(-b)/2/a);
        printf("x2=%.3lf",(-b)/2/a);
        printf("\n");
    }
    else{
        printf("x1=%.3lf+%.3lfi ",(-b)/2/a,sqrt(-delta)/2/a);
        printf("x2=%.3lf-%.3lfi",(-b)/2/a,sqrt(-delta)/2/a);
        printf("\n");
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的消息。

输入

一个数

输出

如果是素数输出prime 如果不是输出not prime

#include<stdio.h>
int prime(int a){
    int i;
    for(i=2;i<a;i++){
        if(a%i==0) return 0;
    }
    return 1;
}
int main()
{
    int a;
    scanf("%d",&a);
    if(prime(a)){
        printf("prime");
    }
    else{
        printf("not prime");
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

写一个函数,使给定的一个二维数组(3×3)转置,即行列互换。

输入

一个3x3的矩阵

输出

#include<stdio.h>
int main()
{
    int a[3][3],b,i,j;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            scanf("%d",&a[i][j]);
    }
    }
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            if(i<j){
            b = a[i][j];
            a[i][j]=a[j][i];
            a[j][i] = b;
            }
    }
    }
    for(i=0;i<3;i++){
        printf("%d %d %d\n",a[i][0] ,a[i][1] ,a[i][2]);
    }

    return 0;
}
rickyzcode commented 4 years ago

题目描述

写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串(不包含空格)。

输入

一行字符

输出

逆序后的字符串

#include<stdio.h>
#include<string.h>
int main()
{
    char a[20];
    int i;
    scanf("%s",a);
    for(i = (strlen(a)-1);i>=0;i--){
        printf("%c",a[i]);
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

写一函数,将两个字符串连接

输入

两行字符串

输出

链接后的字符串

#include<stdio.h>
#include<string.h>
#define MAX 10
int main()
{
    char a[MAX],b[MAX];
    scanf("%s",a);
    scanf("%s",b);
    for(int i=0;i<strlen(a);i++){
        printf("%c",a[i]);
    }
        for(int i=0;i<strlen(b);i++){
        printf("%c",b[i]);
    }
    return 0;
}
#include<stdio.h>
#include<string.h>
void mystrcat(char s1[],char s2[]);
int main(void)
{
    char s1[100];
    char s2[100];
    scanf("%s%s",s1,s2);
    mystrcat(s1,s2);
    printf("%s",s1);
    return 0;
}
void mystrcat(char s1[],char s2[])
{
    while(*s1)s1++;
    while(*s1++=*s2++);
}
rickyzcode commented 4 years ago

题目描述

写一函数,将一个字符串中的元音字母复制到另一个字符串,然后输出。

输入

一行字符串

输出

顺序输出其中的元音字母(aeiou)

#include<stdio.h>
#include<string.h>
#define N 1000
int main(){
    char *vowel(char *str1,const char *str2);
    char s1[N],s2[N];
    gets(s2);//输入字符串
    puts(vowel(s1,s2));//找到元音字母并输出
    return 0;
}
char *vowel(char *str1,const char *str2){
    int i,j,len;
    char v[256];//ASCII码表
    memset(v,'\0',sizeof(v));//初始化
    v['a']=v['e']=v['i']=v['o']=v['u']=' ';//特殊位置为非零
    len=strlen(str2);
    for(i=0,j=0;i<len;i++)
        if(v[str2[i]])//用str2[i]查表找到元音字母
            str1[j++]=str2[i];//存入另一字符串
    str1[j]='\0';//字符串结尾
    return str1;
}
rickyzcode commented 4 years ago

题目描述

写一函数,输入一个四位数字,要求输出这四个数字字符,但每两个数字间空格。如输入1990,应输出"1 9 9 0"。

输入

一个四位数

输出

增加空格输出

#include<stdio.h>
#include<string.h>
int main()
{
    int i;
    char a[20];
    scanf("%s",a);
    for(i=0;i<strlen(a);i++){
        printf("%c ",a[i]);
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。

输入

一行字符串

输出

统计数据,4个数字,空格分开。 Tips: other characters should not include \n.

#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
    char a[100];
    int i,alpha=0,num=0,space=0,others=0;
    scanf("%[^\n]%*c",a);
    for(i=0;i<strlen(a);i++){
        if(isalpha(a[i])) alpha++;
        else if(isdigit(a[i])) num++;
        else if(a[i]==' ') space++;
        else others++;
    }
    printf("%d %d %d %d",alpha,num,space, others);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。

输入

两个数,空格隔开

输出

交换后的两个数,空格隔开

//宏定义写出swap(x,y)交换函数
#define swap(x, y)\
x = x + y;\
y = x - y;\
x = x - y;
#include<stdio.h>
#define exchange(a,b) c = a;\
    a = b;\
    b = c;
int main()
{
    int a,b,c;
    scanf("%d %d",&a,&b);
    exchange(a,b);
    printf("%d %d",a,b);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

输入两个整数,求他们相除的余数。用带参的宏来实现,编程序。

输入

a b两个数

输出

a/b的余数

#include<stdio.h>
#define num(a,b) a%b
int main()
{
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d",num(a,b));
    return 0;
}
rickyzcode commented 4 years ago

题目描述

三角形面积=SQRT(S(S-a)(S-b)*(S-c)) 其中S=(a+b+c)/2,a、b、c为三角形的三边。 定义两个带参的宏,一个用来求area, 另一个宏用来求S。 写程序,在程序中用带实参的宏名来求面积area。

输入

a b c三角形的三条边,可以是小数。

输出

三角形面积,保留3位小数

#include<stdio.h>
#include<math.h>
#define S (a+b+c)/2
#define area sqrt(S*(S-a)*(S-b)*(S-c))
int main()
{
    float a,b,c;
    scanf("%f %f %f",&a,&b,&c);
    printf("%.3f",area);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

给年份year,定义一个宏,以判别该年份是否闰年。提示:宏名可以定义为LEAP_YEAR,形参为y,既定义宏的形式为 #define LEAP_YEAR(y) (读者设计的字符串)

输入

一个年份

输出

根据是否闰年输出,是输出"L",否输出"N"

Tips: 闰年的概念 能被4整除但不能被100整除或者能被400整除

#include<stdio.h>
#define LEAP_YEAR(y) ( (y%4==0 && y%100!=0 ) || y%400==0 )
int main()
{
    int y;
    scanf("%d",&y);
    if(LEAP_YEAR(y)){
        printf("L");
    }
    else{
        printf("N");
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

请设计输出实数的格式,包括:⑴一行输出一个实数;⑵一行内输出两个实数;⑶一行内输出三个实数。实数用"6.2f"格式输出。

输入

一个实数,float范围

输出

输出3行,第一行打印一遍输入的数,第二行打印两遍,第三行打印三遍。 第二行和第三行,用空格分隔同一行的数字。 实数用"6.2f"格式输出。

#include<stdio.h>
int main()
{
    float a;
    scanf("%f",&a);
    printf("%6.2f\n",a);
    printf("%6.2f %6.2f\n",a,a);
    printf("%6.2f %6.2f %6.2f\n",a,a,a);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

分别用函数和带参的宏,从三个数中找出最大的数。

输入

3个实数

输出

最大的数,输出两遍,先用函数,再用宏。 保留3位小数。

#include<stdio.h>
#define MAX(a,b,c) (a>b?a:b)>c?(a>b?a:b):c
int main()
{
    float a,b,c;
    scanf("%f %f %f",&a,&b,&c);
    float max=MAX(a,b,c);
    printf("%.3f\n",max);
    printf("%.3f",((a>b?a:b)>c?(a>b?a:b):c));
    return 0;
}
rickyzcode commented 4 years ago

题目描述

输入一行电报文字,将字母变成其下一字母(如’a’变成’b’……’z’变成’a’其它字符不变)。

输入

一行字符

输出

加密处理后的字符

#include <stdio.h>
#include <ctype.h>
int main(void)
{
    char str[100];
    int i = 0;
    gets(str);
    while(str[i] != '\0')
    {
        if(islower(str[i])) //如果是小写字母 
        {
            printf("%c", str[i]+1);
        }
        else
        {
            putchar(str[i]);
        }
        i++;
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

输入三个整数,按由小到大的顺序输出。

输入

三个整数

输出

由小到大输出成一行,每个数字后面跟一个空格

#include<stdio.h>
int main()
{
    int a[3],b[3],i,temp;
    scanf("%d %d %d",&a[0],&a[1],&a[2]);
    if (a[0]>a[1]){
        temp = a[1];
        a[1]= a[0];
        a[0] = temp;
    }

    if(a[2]<=a[0]){
        b[0] = a[2];
        b[1] = a[0];
        b[2] = a[1];
    }
    else if(a[2]>=a[1]){
        b[0] = a[0];
        b[1] = a[1];
        b[2] = a[2];
    }
    else{
        b[0] = a[0];
        b[1] = a[2];
        b[2] = a[1];
    }
    for(i=0;i<3;i++){
        printf("%d ",b[i]);
    }
    return 0;
}
rickyzcode commented 4 years ago

冒泡算法

#include<stdio.h>
#include<stdlib.h>
#define N 8
void bubble_sort(int a[],int n);
//一般实现
void bubble_sort(int a[],int n)//n为数组a的元素个数
{
    //一定进行N-1轮比较
    for(int i=0; i<n-1; i++)
    {
        //每一轮比较前n-1-i个,即已排序好的最后i个不用比较
        for(int j=0; j<n-1-i; j++)
        {
            if(a[j] > a[j+1])
            {
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1]=temp;
            }
        }
    }
}
//优化实现
void bubble_sort_better(int a[],int n)//n为数组a的元素个数
{
    //最多进行N-1轮比较
    for(int i=0; i<n-1; i++)
    {
        bool isSorted = true;
        //每一轮比较前n-1-i个,即已排序好的最后i个不用比较
        for(int j=0; j<n-1-i; j++)
        {
            if(a[j] > a[j+1])
            {
                isSorted = false;
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1]=temp;
            }
        }
        if(isSorted) break; //如果没有发生交换,说明数组已经排序好了
    }
}
int  main()
{
    int num[N] = {89, 38, 11, 78, 96, 44, 19, 25};
    bubble_sort(num, N); //或者使用bubble_sort_better(num, N);
    for(int i=0; i<N; i++)
        printf("%d  ", num[i]);
    printf("\n");
    system("pause");
    return 0;
}
rickyzcode commented 4 years ago

题目描述

输入三个字符串,按由小到大的顺序输出

输入

3行字符串

输出

按照从小到大输出成3行

#include<stdio.h>
#include<string.h>
int main()
{
    char a[3][32],temp[32];
    int i,j;
    for(i=0;i<3;i++){
        scanf("%s",a[i]);
    }
    for(i=0;i<3;i++){                              /*冒泡算法*/
        for(j=i+1;j<3;j++){
            if(strcmp(a[i],a[j])>0){      /*字符串比较*/
                strcpy(temp,a[i]);               /*字符串拷贝*/
                strcpy(a[i] ,a[j]);
                strcpy(a[j] ,temp);
            }
        }
    }
    for(i=0;i<3;i++){
        printf("%s\n",a[i]);
    }
    return 0;
}
rickyzcode commented 4 years ago

题目描述

输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。

输入

10个整数

输出

整理后的十个数,每个数后跟一个空格(注意最后一个数后也有空格)

#include <stdio.h>

void deal( int a[] );

int main()
{
    int x[10];
    for ( int i = 0; i < 10; i++ )
        scanf( "%d", &x[i] );

    deal( x );

    return(0);
}

void deal( int a[] )
{
    int max = 0, x, team, l, min = a[0];

    for ( int i = 0; i < 10; i++ )    //找最小数,交换
    {
        if ( a[i] < min )
        {
            min = a[i]; l = i;
        }
    }
    team    = a[0];
    a[0]    = min;
    a[l]    = team;
    for ( int k = 0; k < 10; k++ )     //找最大数,交换
    {
        if ( a[k] > max )
        {
            max = a[k]; x = k;
        }
    }
    team    = a[9];
    a[9]    = max;
    a[x]    = team;

    for ( int j = 0; j < 10; j++ )  //输出
        printf( "%d ", a[j] );
}
rickyzcode commented 4 years ago

题目描述

有n个整数,使前面各数顺序向后移m个位置,最后m个数变成前面m个数。写一函数:实现以上功能,在主函数中输入n个数和输出调整后的n个数。

输入

输入数据的个数n n个整数 移动的位置m

输出

移动后的n个数

#include<stdio.h>
#include <malloc.h>

int main(){
    int n,i,*b,*c,m;
    scanf("%d",&n);
    b = (int *) malloc( n * sizeof(int) );

    for(i=0;i<n;i++){
        scanf("%d",&b[i]);
    }
    scanf("%d",&m);
    c = (int *) malloc( m * sizeof(int) );

    for(i=n-m;i<n;i++){
        c[i-n+m]=b[i];
    }

    for(i=n-m-1;i>=0;i--){
        b[i+m]=b[i];
    }

    for(i=n-m;i<n;i++){
        b[i+m-n]=c[i-n+m];
    }

    for(i=0;i<n;i++){
        printf("%d ",b[i]);
    }
free(b);
free(c);
    return 0;
}
rickyzcode commented 4 years ago

题目描述

有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

输入

初始人数n

输出

最后一人的初始编号

Tips; 约瑟夫环问题 递推公式: f(N,M)=(f(N−1,M)+M)%N f(N,M)表示,N个人报数,每报到M时杀掉那个人,最终胜利者的编号

#include <stdio.h>
#define N 100
int main()
{
    int a[N]={0};
    int i,n,k=0,m=0;
    scanf("%d",&n);
    a[0]=n;    //数组第0个存放第n位置,从第1个开始数 
    for(i=1;i<n;i++) 
        a[i]=i;  //存放位置,a[1]就是存放1,a[2]存放2等等 
    for(i=1;m<n-1;i++) //做n-1次即可,m统计出圈次数 
    {
        if(a[i%n]==0) //等于0,表示已经出圈 
            continue;
        k++;
        if(k==3)  //计数到3,则对应的出圈 
        {
            a[i%n]=0;  //出圈 
            m++;       //出圈加1 
            k=0;  
        }
    }
    for(i=0;i<n;i++)  //看看最后留下的是原来的第几号 
    {
        if(a[i]!=0)
            printf("%d",a[i]);
    }
    return 0;
}