C语言练习题1
- 
<span style="font-size:18px;">1.有三个数a、b、c,由键盘输入,输出其中最大的数。
- 
</span>#include <stdio.h>
- 
int main()
- 
{
- 
int a,b,c;
- 
printf("请输入三个数:\n");
- 
scanf("%d%d%d",&a,&b,&c);
- 
if(a>b && a>c) printf("max=%d",a);
- 
else if(b>a && b>c) printf("max=%d",b);
- 
else printf("max=%d",c);
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">2.任意十个数,打印出它们中的最大数、最小数。
- 
</span> #include <stdio.h>
- 
int main()
- 
{
- 
int max,min;
- 
int x[10]={1,3,32,0,321,4532,523,5,436,45};
- 
min=max=x[0];
- 
for(int i =1;i<10;i++)
- 
{
- 
if(max<x[i]) max = x[i];
- 
if(min >x[i]) min = x[i];
- 
}
- 
printf("max=%d min=%d\n",max,min);
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">3. 有一个数组,内放10个整数。要求找出最小的数和它的下标,然后把它和数组中最前面的元素对换位置。
- 
</span>
- 
int main()
- 
{
- 
int min,index=0;
- 
int x[10]={9,8,7,6,5,4,3,2,1,0};
- 
min = x[0];
- 
for(int i=1;i<10;i++)
- 
{
- 
if(min>x[i])
- 
{
- 
min =x[i];
- 
index=i;
- 
}
- 
}
- 
printf("min= %d index= %d\n",min,index);
- 
x[index] = x[0];
- 
x[0] = min;
- 
for(int i = 0;i<10;i++)
- 
{
- 
printf("%d ",x[i]);
- 
}
- 
return 0
- 
- 
}
- 
- 
<span style="font-size:18px;">4. 有一个二维数组整型数组中,每一行都有一个最大值,编程求出这些最大值以及它们的和。</span>
- 
- 
- 
- 
int main()
- 
{
- 
int x[N][M],y[N];
- 
printf("请输入%d个数\n",N*M);
- 
int max,sum=0;
- 
for(int i=0;i<N;i++)
- 
{
- 
for(int j=0;j<M;j++)
- 
{
- 
scanf("%d",&x[i][j]);
- 
}
- 
}
- 
for(int i =0;i<N;i++)
- 
{
- 
max = x[i][0];
- 
for(int j=0;j<M;j++)
- 
{
- 
if( max <x[i][j]) max = x[i][j];
- 
}
- 
y[i]=max;
- 
sum+=max;
- 
}
- 
for(int i=0;i<N;i++)
- 
{
- 
printf("第%d行的最大值为:%d \n",i+1,y[i]);
- 
}
- 
printf("最大值总和为:%d\n",sum);
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">5. 输入一个数,判断它能否被 3或者被 5整除, 如至少能被这两个数中的一个整除则将此数打印出来,否则不打印,编出程序。
- 
</span>#include <stdio.h>
- 
int main()
- 
{
- 
int x;
- 
printf("请输入一个数:\n");
- 
scanf("%d",&x);
- 
if(x%3==0 || x%5==0)
- 
{
- 
printf("%d能被3或者5整除\n",x);
- 
}
- 
else printf("%d不能被3或者5整除\n",x);
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">6. 读入1到7之间的某个数,输出表示一星期中相应的某一天的单词:Monday、 Tuesday等等,用switch语句做。</span>
- 
#include<stdio.h>
- 
int main()
- 
{ int x;
- 
printf("请输入一个数(1-7):\n");
- 
scanf("%d",&x);
- 
switch (x)
- 
{
- 
case 1:printf("Monday\n");
- 
break;
- 
case 2:printf("Tuesday\n");
- 
break;
- 
case 3:printf("Wednesday\n");
- 
break;
- 
case 4:printf("Thursday\n");
- 
break;
- 
case 5:printf("Friday\n");
- 
break;
- 
case 6:printf("Saturday\n");
- 
break;
- 
case 7:printf("Sunday\n");
- 
break;
- 
default:printf("输入错误!\n");
- 
break;
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">7. 求 1到 100之间的奇数之和、偶数之和。
- 
</span>#include <stdio.h>
- 
int main()
- 
{
- 
int sum1=0,sum2=0;
- 
for(int i=1;i<=100;i++)
- 
{
- 
if(i%2 == 0)
- 
{
- 
sum1+=i;
- 
}
- 
else sum2+=i;
- 
}
- 
printf("偶数和为:%d 奇数和为:%d",sum1,sum2);
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">8. 编程实现求n的阶乘</span>
- 
#include <stdio.h>
- 
double a(int n)
- 
{
- 
if(n == 1) return 1;
- 
if(n>1)return n*a(n-1);
- 
}
- 
int main()
- 
{
- 
int n;
- 
printf("请输入一个数\n");
- 
scanf("%d",&n);
- 
printf("%d的阶乘为:%f\n",n,a(n));
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">9. 3025这个数具有一种独特的性质:将它平分为两段,即30和25,使之相加后求平方,即(30+25),恰好等于3025本身。请求出具有这样性质的全部四位数。</span>
- 
- 
int main()
- 
{
- 
int x,y;
- 
for(int i=1000;i<10000;i++)
- 
{
- 
x=i/100;
- 
y=i%100;
- 
if((x+y)*(x+y) == i) printf("%d ",i);
- 
}
- 
return 0;
- 
]
- 
- 
<span style="font-size:18px;">10. 从键盘中输入一个数字(不限位数),用循环语句编程判断并输出这个数字的位数。</span>
- 
#include<stdio.h>
- 
int main()
- 
{
- 
int x,m,y=0;
- 
printf("请输入一个数\n");
- 
scanf("%d",&x);
- 
m=x;
- 
while(x)
- 
{
- 
x/=10;
- 
y++;
- 
}
- 
printf("%d为%d位数\n",m,y);
- 
return 0;
- 
}
- 
- 
<span style="font-size:24px;">11. 青年歌手参加歌曲大奖赛,有10个评委打分,试编 程求选手的平均得分(去掉一个最高分和一个最低分</span>
- 
#include <stdio.h>
- 
#define a 10
- 
int main()
- 
{
- 
- 
int x[a];
- 
double max,min,avg,sum=0;
- 
printf("请输入10个数:\n");
- 
for(int i =0;i<a;i++)
- 
{
- 
scanf("%d",&x[i]);
- 
sum+=x[i];
- 
}
- 
max = x[0];
- 
min = x[0];
- 
for(int i=1;i<a;i++)
- 
{
- 
if(max < x[i]) max = x[i];
- 
if(min > x[i]) min = x[i];
- 
}
- 
sum = sum-max-min;
- 
avg = sum/(a-2);
- 
printf("平均得分为:%.2f\n",avg);
- 
return 0
- 
}
- 
- 
<span style="font-size:18px;">12.任意输入N个数,统计其中的正数个数和负数个数。</span>
- 
#include <stdio.h>
- 
int main()
- 
{
- 
int n[5];
- 
int plus=0,minus=0;
- 
printf("输入5个数字:\n");
- 
for(int i = 0;i<5;i++)
- 
{
- 
scanf("%d",&n[i]);
- 
if(n[i] < 0) {minus++;}
- 
else if(n[i] > 0) {plus++;}
- 
- 
}
- 
printf("正数有%d个 负数有%d个\n",plus,minus);
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">13. 任意输入a[N][N]个数,找出并输出其中的最大数和 最小数,以及它们的下标。</span>
- 
#include <stdio.h>
- 
#define M 2
- 
#define N 3
- 
int main()
- 
{
- 
int x[M][N];
- 
int max,min;
- 
int a1=0,a2=0;
- 
int b1=0,b2=0;
- 
printf("请输入%d个数\n",M*N);
- 
for(int i=0;i<M;i++)
- 
{
- 
for(int j =0;j<N;j++)
- 
{
- 
scanf("%d",&x[i][j]);
- 
}
- 
}
- 
max=min=x[0][0];
- 
for(int i=0;i<M;i++)
- 
{
- 
for(int j=0;j<N;j++)
- 
{
- 
if(max <x[i][j]) {max = x[i][j];a1=i;a2=j;}
- 
if(min >x[i][j]) {min = x[i][j];b1=i;b2=j;}
- 
}
- 
}
- 
printf("max=%d[%d][%d] min=%d[%d][%d]\n",max,a1,a2,min,b1,b2);
- 
return 0;
- 
}
- 
<span style="font-size:18px;">
- 
14.打印出100-999中所有的“水仙花数”,所谓“水仙 花数”是指一个三位数,其各位数字立方和等于该数。</span>
- 
#include <stdio,h>
- 
int main()
- 
{
- 
int x,y,z;
- 
for(int i = 100;i<1000;i++)
- 
{
- 
x=i/100;//百位数
- 
y=(i/10)%10;//十位数
- 
z=i%10;//个位数
- 
if((x*x*x + y*y*y +z*z*z) ==i )
- 
printf("%d \n",i);
- 
}
- 
return 0
- 
]
- 
- 
<span style="font-size:18px;">15.输入一行字符,分别统计出其中英文字母、空格、 数字和其它字符的个数。</span>
- 
#include <stdio.h>
- 
int main()
- 
{
- 
printf("请输入一行字符:\n");
- 
char c[50];
- 
scanf("%d",&c);
- 
char *p;
- 
p=c;//使指针指向数组c,通过p来改变数组c的值。
- 
int z=0;//字母
- 
int n=0;//数字
- 
int s=0;//空格
- 
int q=0;//其他
- 
while (*p!='\0')
- 
{
- 
if((*p >='a' && *p<='z') || (*p>='A' && *p<='Z') ) z++;
- 
else if(*p>='0' && *p<='9')n++;
- 
else if(*p == ' ')s++;
- 
else q++;
- 
p++;
- 
}
- 
printf("字母:%d 数字:%d 空格:%d 其它:%d\n",z,n,s,q);
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">
- 
16.编写一个函数,将两个字符串连接起来。(不能用strcat函数)。</span>
- 
#include <stdio.h>
- 
void stcat(char *x,char *y);
- 
int main()
- 
{
- 
char x1[20],x2[20];
- 
gets(x1);
- 
gets(x2);
- 
stcat(x1,x2);
- 
return 0;
- 
}
- 
- 
void stcat(char *x,char *y)
- 
{
- 
int m=0;
- 
char z[20];
- 
for(int i=0;x[i]!='\0';i++)
- 
{
- 
z[m++] = x[i];
- 
}
- 
- 
for(int i= 0;y[i]!='\0';i++)
- 
{
- 
z[m++] = y[i];
- 
}
- 
for(int i=0;i<m;i++)
- 
{
- 
printf("%c",z[i]);
- 
}
- 
printf("\n");
- 
}
- 
<span style="font-size:18px;">
- 
17.从键盘中输入一个不超过40个字符的字符串,再输 入一个位数,删除对应 位数的字符,然后输出删除 指定字符后的字符串。</span>
- 
#include <stdio.h>
- 
void dele(char *x,int n);
- 
int main()
- 
{
- 
char x[40];
- 
int num;
- 
printf("请输入不超过40个字符的字符串:\n");
- 
scanf("%s",&x);
- 
printf("请输入一个要删除的位数\n");
- 
scanf("%d",&num);
- 
dele(x,num);
- 
return 0;
- 
}
- 
- 
void dele(char *x,int n)
- 
{
- 
for(int i=n-1;i<40;i++)
- 
{
- 
x[i] = x[i+1];
- 
}
- 
printf("删除后字符串为;\n");
- 
for(int i=0;x[i]!='\0';i++)
- 
{
- 
printf("%c",x[i]);
- 
}
- 
printf("\n");
- 
}
- 
- 
<span style="font-size:18px;">18.. 函数void dele(char *s)的功能是删除字符串s中 的所有数字字符和非字母字符,并将字符串压缩。 例如原字符串为:abc12ef5ghij8#%%yz,处理后的 字符串为:abcefghijyz。
- 
</span>#include <stdio.h>
- 
#include <string.h>
- 
void dele(char *s);
- 
int main()
- 
{
- 
char x[100];
- 
scanf("%s",&x);
- 
dele(x);
- 
return 0;
- 
}
- 
void dele(char *s)
- 
{
- 
int len=strlen(s);
- 
for(int i=0;i<len;i++)
- 
{
- 
if((s[i] >='a' && s[i]<='z') || (s[i] >= 'A' && s[i]<='Z' ))
- 
{
- 
}
- 
else
- 
{
- 
for(int j=i;j<len;j++ )
- 
{
- 
s[j] = s[j+1];//如果找到的不是字母,则把非字母删除
- 
}
- 
len--;//删除一次非字母,总长度-1;
- 
i--;//因为移除了非字母,为保证i的指向为下一个时,必须先i--,然后执行for的i++
- 
}
- 
}
- 
for(int i=0;i<len;i++)
- 
{
- 
printf("%c",s[i]);
- 
}
- 
printf("\n");
- 
}
- 
- 
<span style="font-size:18px;">19. 输入一个字符,判断它如果是小写字母输出其对应大写字母;如果是大写字母输出其对应小写字母;如果是数字输出数字本身;如果是空格,输出“space”;如果不是上述情况,输出“other”</span>
- 
- 
int main()
- 
{
- 
char c;
- 
printf("请输入一个字符:\n");
- 
scanf("%c",&c);
- 
if(c>='a' && c<='z')printf("%c\n",c-32);
- 
else if(c>='A' && c<='Z')printf("%c\n",c+32);
- 
else if(c>='0' && c<='9')printf("%c\n",c);
- 
else if(c==' ')printf("space\n");
- 
else printf("other\n");
- 
return 0;
- 
}
- 
- 
<span style="font-size:18px;">20. 写一函数,求一字符串长度,即编写一strlen函数。
- 
</span>#include <stdio.h>
- 
#include <malloc.h>
- 
int str(char *x)
- 
{
- 
int l=0;
- 
while (*x++!=0)
- 
{
- 
l+=1;
- 
}
- 
return l;
- 
}
- 
int main()
- 
{
- 
char x[100];
- 
printf("请输入一个字符串:\n");
- 
scanf("%s",x);
- 
printf("该字符串的长度为:%d\n",str(x));
- 
return 0;
- 
}
- 
<span style="font-size:18px;">
- 
21. 输入某年某月某日,判断这一天是这一年的第几天。</span>
- 
#include <stdio.h>
- 
int main()
- 
{
- 
int year,month,day,sum=0;
- 
printf("请输入年月日:\n");
- 
scanf("%d%d%d",&year,&month,&day);
- 
int mon[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
- 
for(int i=0;i<month-1;i++)
- 
sum+=mon[i];
- 
sum+=day;
- 
if( (year%4 == 0) && (year%100!=0))
- 
{
- 
if(month>2)
- 
sum+=1;
- 
}
- 
printf("%d年的%d月%d日是这一年的%d天\n",year,month,day,sum);
- 
return 0;
- 
}
- 实现一个函数,打印乘法口诀表,口诀表的行数和列数自己指定, 输入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);
}

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号