C语言练习题1

  1.  
    <span style="font-size:18px;">1.有三个数a、b、c,由键盘输入,输出其中最大的数。
  2.  
    </span>#include <stdio.h>
  3.  
    int main()
  4.  
    {
  5.  
    int a,b,c;
  6.  
    printf("请输入三个数:\n");
  7.  
    scanf("%d%d%d",&a,&b,&c);
  8.  
    if(a>b && a>c) printf("max=%d",a);
  9.  
    else if(b>a && b>c) printf("max=%d",b);
  10.  
    else printf("max=%d",c);
  11.  
    return 0;
  12.  
    }
  13.  
     
  14.  
    <span style="font-size:18px;">2.任意十个数,打印出它们中的最大数、最小数。
  15.  
    </span> #include <stdio.h>
  16.  
    int main()
  17.  
    {
  18.  
    int max,min;
  19.  
    int x[10]={1,3,32,0,321,4532,523,5,436,45};
  20.  
    min=max=x[0];
  21.  
    for(int i =1;i<10;i++)
  22.  
    {
  23.  
    if(max<x[i]) max = x[i];
  24.  
    if(min >x[i]) min = x[i];
  25.  
    }
  26.  
    printf("max=%d min=%d\n",max,min);
  27.  
    return 0;
  28.  
    }
  1.  
     
  2.  
    <span style="font-size:18px;">3. 有一个数组,内放10个整数。要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换位置。
  3.  
    </span>#include <stdio.h>
  4.  
    int main()
  5.  
    {
  6.  
    int min,index=0;
  7.  
    int x[10]={9,8,7,6,5,4,3,2,1,0};
  8.  
    min = x[0];
  9.  
    for(int i=1;i<10;i++)
  10.  
    {
  11.  
    if(min>x[i])
  12.  
    {
  13.  
    min =x[i];
  14.  
    index=i;
  15.  
    }
  16.  
    }
  17.  
    printf("min= %d index= %d\n",min,index);
  18.  
    x[index] = x[0];
  19.  
    x[0] = min;
  20.  
    for(int i = 0;i<10;i++)
  21.  
    {
  22.  
    printf("%d ",x[i]);
  23.  
    }
  24.  
    return 0
  25.  
     
  26.  
    }
  1.  
     
  2.  
    <span style="font-size:18px;">4. 有一个二维数组整型数组中,每一行都有一个最大值,编程求出这些最大值以及它们的和。</span>
  3.  
    #include <stdio.h>
  4.  
    #define N 3
  5.  
    #define M 3
  6.  
    int main()
  7.  
    {
  8.  
    int x[N][M],y[N];
  9.  
    printf("请输入%d个数\n",N*M);
  10.  
    int max,sum=0;
  11.  
    for(int i=0;i<N;i++)
  12.  
    {
  13.  
    for(int j=0;j<M;j++)
  14.  
    {
  15.  
    scanf("%d",&x[i][j]);
  16.  
    }
  17.  
    }
  18.  
    for(int i =0;i<N;i++)
  19.  
    {
  20.  
    max = x[i][0];
  21.  
    for(int j=0;j<M;j++)
  22.  
    {
  23.  
    if( max <x[i][j]) max = x[i][j];
  24.  
    }
  25.  
    y[i]=max;
  26.  
    sum+=max;
  27.  
    }
  28.  
    for(int i=0;i<N;i++)
  29.  
    {
  30.  
    printf("第%d行的最大值为:%d \n",i+1,y[i]);
  31.  
    }
  32.  
    printf("最大值总和为:%d\n",sum);
  33.  
    return 0;
  34.  
    }
  1.  
     
  2.  
    <span style="font-size:18px;">5. 输入一个数,判断它能否被 3或者被 5整除, 如至少能被这两个数中的一个整除则将此数打印出来,否则不打印,编出程序。
  3.  
    </span>#include <stdio.h>
  4.  
    int main()
  5.  
    {
  6.  
    int x;
  7.  
    printf("请输入一个数:\n");
  8.  
    scanf("%d",&x);
  9.  
    if(x%3==0 || x%5==0)
  10.  
    {
  11.  
    printf("%d能被3或者5整除\n",x);
  12.  
    }
  13.  
    else printf("%d不能被3或者5整除\n",x);
  14.  
    return 0;
  15.  
    }
  1.  
     
  2.  
    <span style="font-size:18px;">6. 读入1到7之间的某个数,输出表示一星期中相应的某一天的单词:Monday、 Tuesday等等,用switch语句做。</span>
  3.  
    #include<stdio.h>
  4.  
    int main()
  5.  
    { int x;
  6.  
    printf("请输入一个数(1-7):\n");
  7.  
    scanf("%d",&x);
  8.  
    switch (x)
  9.  
    {
  10.  
    case 1:printf("Monday\n");
  11.  
    break;
  12.  
    case 2:printf("Tuesday\n");
  13.  
    break;
  14.  
    case 3:printf("Wednesday\n");
  15.  
    break;
  16.  
    case 4:printf("Thursday\n");
  17.  
    break;
  18.  
    case 5:printf("Friday\n");
  19.  
    break;
  20.  
    case 6:printf("Saturday\n");
  21.  
    break;
  22.  
    case 7:printf("Sunday\n");
  23.  
    break;
  24.  
    default:printf("输入错误!\n");
  25.  
    break;
  26.  
    return 0;
  27.  
    }
  28.  
     
  29.  
    <span style="font-size:18px;">7. 求 1到 100之间的奇数之和、偶数之和。
  30.  
    </span>#include <stdio.h>
  31.  
    int main()
  32.  
    {
  33.  
    int sum1=0,sum2=0;
  34.  
    for(int i=1;i<=100;i++)
  35.  
    {
  36.  
    if(i%2 == 0)
  37.  
    {
  38.  
    sum1+=i;
  39.  
    }
  40.  
    else sum2+=i;
  41.  
    }
  42.  
    printf("偶数和为:%d 奇数和为:%d",sum1,sum2);
  43.  
    return 0;
  44.  
    }
  1.  
     
  2.  
    <span style="font-size:18px;">8. 编程实现求n的阶乘</span>
  3.  
    #include <stdio.h>
  4.  
    double a(int n)
  5.  
    {
  6.  
    if(n == 1) return 1;
  7.  
    if(n>1)return n*a(n-1);
  8.  
    }
  9.  
    int main()
  10.  
    {
  11.  
    int n;
  12.  
    printf("请输入一个数\n");
  13.  
    scanf("%d",&n);
  14.  
    printf("%d的阶乘为:%f\n",n,a(n));
  15.  
    return 0;
  16.  
    }
  1.  
     
  2.  
    <span style="font-size:18px;">9. 3025这个数具有一种独特的性质:将它平分为两段,即30和25,使之相加后求平方,即(30+25),恰好等于3025本身。请求出具有这样性质的全部四位数。</span>
  3.  
    #include <stdio.h>
  4.  
    int main()
  5.  
    {
  6.  
    int x,y;
  7.  
    for(int i=1000;i<10000;i++)
  8.  
    {
  9.  
    x=i/100;
  10.  
    y=i%100;
  11.  
    if((x+y)*(x+y) == i) printf("%d ",i);
  12.  
    }
  13.  
    return 0;
  14.  
    ]
  1.  
     
  2.  
    <span style="font-size:18px;">10. 从键盘中输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数。</span>
  3.  
    #include<stdio.h>
  4.  
    int main()
  5.  
    {
  6.  
    int x,m,y=0;
  7.  
    printf("请输入一个数\n");
  8.  
    scanf("%d",&x);
  9.  
    m=x;
  10.  
    while(x)
  11.  
    {
  12.  
    x/=10;
  13.  
    y++;
  14.  
    }
  15.  
    printf("%d为%d位数\n",m,y);
  16.  
    return 0;
  17.  
    }
  1.  
     
  2.  
    <span style="font-size:24px;">11. 青年歌手参加歌曲大奖赛,有10个评委打分,试编 程求选手的平均得分(去掉一个最高分和一个最低分</span>
  3.  
    #include <stdio.h>
  4.  
    #define a 10
  5.  
    int main()
  6.  
    {
  7.  
     
  8.  
    int x[a];
  9.  
    double max,min,avg,sum=0;
  10.  
    printf("请输入10个数:\n");
  11.  
    for(int i =0;i<a;i++)
  12.  
    {
  13.  
    scanf("%d",&x[i]);
  14.  
    sum+=x[i];
  15.  
    }
  16.  
    max = x[0];
  17.  
    min = x[0];
  18.  
    for(int i=1;i<a;i++)
  19.  
    {
  20.  
    if(max < x[i]) max = x[i];
  21.  
    if(min > x[i]) min = x[i];
  22.  
    }
  23.  
    sum = sum-max-min;
  24.  
    avg = sum/(a-2);
  25.  
    printf("平均得分为:%.2f\n",avg);
  26.  
    return 0
  27.  
    }
  1.  
     
  2.  
    <span style="font-size:18px;">12.任意输入N个数,统计其中的正数个数和负数个数。</span>
  3.  
    #include <stdio.h>
  4.  
    int main()
  5.  
    {
  6.  
    int n[5];
  7.  
    int plus=0,minus=0;
  8.  
    printf("输入5个数字:\n");
  9.  
    for(int i = 0;i<5;i++)
  10.  
    {
  11.  
    scanf("%d",&n[i]);
  12.  
    if(n[i] < 0) {minus++;}
  13.  
    else if(n[i] > 0) {plus++;}
  14.  
     
  15.  
    }
  16.  
    printf("正数有%d个 负数有%d个\n",plus,minus);
  17.  
    return 0;
  18.  
    }
  19.  
     
  20.  
    <span style="font-size:18px;">13. 任意输入a[N][N]个数,找出并输出其中的最大数和 最小数,以及它们的下标。</span>
  21.  
    #include <stdio.h>
  22.  
    #define M 2
  23.  
    #define N 3
  24.  
    int main()
  25.  
    {
  26.  
    int x[M][N];
  27.  
    int max,min;
  28.  
    int a1=0,a2=0;
  29.  
    int b1=0,b2=0;
  30.  
    printf("请输入%d个数\n",M*N);
  31.  
    for(int i=0;i<M;i++)
  32.  
    {
  33.  
    for(int j =0;j<N;j++)
  34.  
    {
  35.  
    scanf("%d",&x[i][j]);
  36.  
    }
  37.  
    }
  38.  
    max=min=x[0][0];
  39.  
    for(int i=0;i<M;i++)
  40.  
    {
  41.  
    for(int j=0;j<N;j++)
  42.  
    {
  43.  
    if(max <x[i][j]) {max = x[i][j];a1=i;a2=j;}
  44.  
    if(min >x[i][j]) {min = x[i][j];b1=i;b2=j;}
  45.  
    }
  46.  
    }
  47.  
    printf("max=%d[%d][%d] min=%d[%d][%d]\n",max,a1,a2,min,b1,b2);
  48.  
    return 0;
  49.  
    }
  50.  
    <span style="font-size:18px;">
  51.  
    14.打印出100-999中所有的“水仙花数”,所谓“水仙 花数”是指一个三位数,其各位数字立方和等于该数。</span>
  52.  
    #include <stdio,h>
  53.  
    int main()
  54.  
    {
  55.  
    int x,y,z;
  56.  
    for(int i = 100;i<1000;i++)
  57.  
    {
  58.  
    x=i/100;//百位数
  59.  
    y=(i/10)%10;//十位数
  60.  
    z=i%10;//个位数
  61.  
    if((x*x*x + y*y*y +z*z*z) ==i )
  62.  
    printf("%d \n",i);
  63.  
    }
  64.  
    return 0
  65.  
    ]
  66.  
     
  67.  
    <span style="font-size:18px;">15.输入一行字符,分别统计出其中英文字母、空格、 数字和其它字符的个数。</span>
  68.  
    #include <stdio.h>
  69.  
    int main()
  70.  
    {
  71.  
    printf("请输入一行字符:\n");
  72.  
    char c[50];
  73.  
    scanf("%d",&c);
  74.  
    char *p;
  75.  
    p=c;//使指针指向数组c,通过p来改变数组c的值。
  76.  
    int z=0;//字母
  77.  
    int n=0;//数字
  78.  
    int s=0;//空格
  79.  
    int q=0;//其他
  80.  
    while (*p!='\0')
  81.  
    {
  82.  
    if((*p >='a' && *p<='z') || (*p>='A' && *p<='Z') ) z++;
  83.  
    else if(*p>='0' && *p<='9')n++;
  84.  
    else if(*p == ' ')s++;
  85.  
    else q++;
  86.  
    p++;
  87.  
    }
  88.  
    printf("字母:%d 数字:%d 空格:%d 其它:%d\n",z,n,s,q);
  89.  
    return 0;
  90.  
    }
  91.  
     
  92.  
    <span style="font-size:18px;">
  93.  
    16.编写一个函数,将两个字符串连接起来。(不能用strcat函数)。</span>
  94.  
    #include <stdio.h>
  95.  
    void stcat(char *x,char *y);
  96.  
    int main()
  97.  
    {
  98.  
    char x1[20],x2[20];
  99.  
    gets(x1);
  100.  
    gets(x2);
  101.  
    stcat(x1,x2);
  102.  
    return 0;
  103.  
    }
  104.  
     
  105.  
    void stcat(char *x,char *y)
  106.  
    {
  107.  
    int m=0;
  108.  
    char z[20];
  109.  
    for(int i=0;x[i]!='\0';i++)
  110.  
    {
  111.  
    z[m++] = x[i];
  112.  
    }
  113.  
     
  114.  
    for(int i= 0;y[i]!='\0';i++)
  115.  
    {
  116.  
    z[m++] = y[i];
  117.  
    }
  118.  
    for(int i=0;i<m;i++)
  119.  
    {
  120.  
    printf("%c",z[i]);
  121.  
    }
  122.  
    printf("\n");
  123.  
    }
  124.  
    <span style="font-size:18px;">
  125.  
    17.从键盘中输入一个不超过40个字符的字符串,再输 入一个位数,删除对应 位数的字符,然后输出删除 指定字符后的字符串。</span>
  126.  
    #include <stdio.h>
  127.  
    void dele(char *x,int n);
  128.  
    int main()
  129.  
    {
  130.  
    char x[40];
  131.  
    int num;
  132.  
    printf("请输入不超过40个字符的字符串:\n");
  133.  
    scanf("%s",&x);
  134.  
    printf("请输入一个要删除的位数\n");
  135.  
    scanf("%d",&num);
  136.  
    dele(x,num);
  137.  
    return 0;
  138.  
    }
  139.  
     
  140.  
    void dele(char *x,int n)
  141.  
    {
  142.  
    for(int i=n-1;i<40;i++)
  143.  
    {
  144.  
    x[i] = x[i+1];
  145.  
    }
  146.  
    printf("删除后字符串为;\n");
  147.  
    for(int i=0;x[i]!='\0';i++)
  148.  
    {
  149.  
    printf("%c",x[i]);
  150.  
    }
  151.  
    printf("\n");
  152.  
    }
  1.  
     
  2.  
    <span style="font-size:18px;">18.. 函数void dele(char *s)的功能是删除字符串s中 的所有数字字符和非字母字符,并将字符串压缩。 例如原字符串为:abc12ef5ghij8#%%yz,处理后的 字符串为:abcefghijyz。
  3.  
    </span>#include <stdio.h>
  4.  
    #include <string.h>
  5.  
    void dele(char *s);
  6.  
    int main()
  7.  
    {
  8.  
    char x[100];
  9.  
    scanf("%s",&x);
  10.  
    dele(x);
  11.  
    return 0;
  12.  
    }
  13.  
    void dele(char *s)
  14.  
    {
  15.  
    int len=strlen(s);
  16.  
    for(int i=0;i<len;i++)
  17.  
    {
  18.  
    if((s[i] >='a' && s[i]<='z') || (s[i] >= 'A' && s[i]<='Z' ))
  19.  
    {
  20.  
    }
  21.  
    else
  22.  
    {
  23.  
    for(int j=i;j<len;j++ )
  24.  
    {
  25.  
    s[j] = s[j+1];//如果找到的不是字母,则把非字母删除
  26.  
    }
  27.  
    len--;//删除一次非字母,总长度-1;
  28.  
    i--;//因为移除了非字母,为保证i的指向为下一个时,必须先i--,然后执行for的i++
  29.  
    }
  30.  
    }
  31.  
    for(int i=0;i<len;i++)
  32.  
    {
  33.  
    printf("%c",s[i]);
  34.  
    }
  35.  
    printf("\n");
  36.  
    }
  37.  
     
  38.  
    <span style="font-size:18px;">19. 输入一个字符,判断它如果是小写字母输出其对应大写字母;如果是大写字母输出其对应小写字母;如果是数字输出数字本身;如果是空格,输出“space”;如果不是上述情况,输出“other”</span>
  39.  
    #include <stdio.h>
  40.  
    int main()
  41.  
    {
  42.  
    char c;
  43.  
    printf("请输入一个字符:\n");
  44.  
    scanf("%c",&c);
  45.  
    if(c>='a' && c<='z')printf("%c\n",c-32);
  46.  
    else if(c>='A' && c<='Z')printf("%c\n",c+32);
  47.  
    else if(c>='0' && c<='9')printf("%c\n",c);
  48.  
    else if(c==' ')printf("space\n");
  49.  
    else printf("other\n");
  50.  
    return 0;
  51.  
    }
  1.  
     
  2.  
    <span style="font-size:18px;">20. 写一函数,求一字符串长度,即编写一strlen函数。
  3.  
    </span>#include <stdio.h>
  4.  
    #include <malloc.h>
  5.  
    int str(char *x)
  6.  
    {
  7.  
    int l=0;
  8.  
    while (*x++!=0)
  9.  
    {
  10.  
    l+=1;
  11.  
    }
  12.  
    return l;
  13.  
    }
  14.  
    int main()
  15.  
    {
  16.  
    char x[100];
  17.  
    printf("请输入一个字符串:\n");
  18.  
    scanf("%s",x);
  19.  
    printf("该字符串的长度为:%d\n",str(x));
  20.  
    return 0;
  21.  
    }
  22.  
    <span style="font-size:18px;">
  23.  
    21. 输入某年某月某日,判断这一天是这一年的第几天。</span>
  24.  
    #include <stdio.h>
  25.  
    int main()
  26.  
    {
  27.  
    int year,month,day,sum=0;
  28.  
    printf("请输入年月日:\n");
  29.  
    scanf("%d%d%d",&year,&month,&day);
  30.  
    int mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  31.  
    for(int i=0;i<month-1;i++)
  32.  
    sum+=mon[i];
  33.  
    sum+=day;
  34.  
    if( (year%4 == 0) && (year%100!=0))
  35.  
    {
  36.  
    if(month>2)
  37.  
    sum+=1;
  38.  
    }
  39.  
    printf("%d年的%d月%d日是这一年的%d天\n",year,month,day,sum);
  40.  
    return 0;
  41.  
    }

 

 

  1. 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表
#include <stdio.h>
void print(int row){
    int i = 0;
    int j = 0;
    for(i = 1;i <= row;i++){
        for(j = 1;j <=i;j++){

            printf("%d*%d=%d\t",i,j,i*j);
        } 
        printf("\n");
    }

}
int main(){
    int n = 0;
    scanf("%d",&n);
    print(n);
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2 . 使用函数实现两个数的交换。

#include <stdio.h>
void swap(int *a,int *b){
    int tmp = 0;
    tmp = *a;
    *a = *b;
    *b = tmp;
}
int main(){
    int a = 10;
    int b = 20;
    swap(&a,&b);
    printf("%d %d",a,b);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

3 . 实现一个函数判断year是不是润年。

#include <stdio.h>
void is_leap_year(n){
    if((n%4==0&&n%100!=0)||n%400==0){
        printf("是闰年!");
    }
    else{
        printf("不是闰年");
    }
}
int main(){
    int n = 0;
    scanf("%d",&n);
    is_leap_year(n);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

4 . 创建一个数组,
实现函数init()初始化数组、
实现empty()清空数组、
实现reverse()函数完成数组元素的逆置。
要求:自己设计函数的参数,返回值。

#include <stdio.h>

void init(int a[],int lenth){
    int i = 0;
    for(i = 0;i < lenth;i++){
        a[i] = i ;
    }
}
void print(int a[],int lenth){
    int i = 0;
    for(i = 0;i < lenth;i++){
        printf("%d ",a[i]);
    }
    printf("\n"); 
}
void empty(int a[],int lenth){
    int i = 0;
    for(i = 0;i < lenth;i++){
        a[i] = 0 ;
    }
}
void reverse(int a[],int length){
    int i = 0;
    int tmp = 0;
    for(i = 0;i < length/2;i++){
        tmp = a[i];
        a[i] = a[length-i-1];
        a[length-i-1] = tmp;
    }
}
int main(){
    int a[10]={0};
    int size = sizeof(a)/sizeof(a[0]);

    init(a,size);
    print(a,size);

    reverse(a,size);
    print(a,size);
    empty(a,size);
    print(a,size);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

5.实现一个函数,判断一个数是不是素数。

#include <stdio.h>
typedef enum __bool {
    false = 0,
    true = 1
}bool;
void is_prime(int n){
    bool prime[1000]={false};
    int i = 0;
    int j = 0;
    prime[1] = true;
    prime[2] = false;
    for(i = 2;i<=n;i++){
        if(!prime[i]){
            for(j = i*i;j<=n;j+=i){
                prime[j] = true;
            }
        }
    }
    if(!prime[n]){
        printf("是素数");
    }
    else{
        printf("不是");
    }
}
int main(){
    int n = 0;
    scanf("%d",&n);
    is_prime(n);
}

 

posted @ 2018-10-08 06:23  代码缔造的帝国  阅读(814)  评论(0编辑  收藏  举报