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);
}