(自用笔记,慎点)C语言程序设计习题(一)
第一题:P14
1、加入我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为p=(1+r)^n
其中:r为年增长率,n为年数,p为与想在相比的倍数
# include<stdio.h>
# include<math.h>
int main()
{
float p,r,n;
r=0.07;
n=10;
p=pow(1+r,n);//pow函数:pow(a,b)与a的b次方是等价的
printf("增长为%f",p);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
第二题:P18
2、用scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=‘A’,c2=‘a’
# include<stdio.h>
int main()
{
int a,b;
float x,y;
char c1,c2;
scanf("%d %d %f %f %c %c",&a,&b,&x,&y,&c1,&c2);
//scanf函数的作用是获取键盘上输入的内容
//在键盘上输入的内容应该是:3 7 8.5 71.82 A a
//因为第七行,%和%之间有空格,所以输入的时候也要加空格
printf("a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c",a,b,x,y,c1,c2);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
第三题:P19
3、密码规律是:用原来的字母后面第四个字母代替原来的字母。
请将China译成密码。
#include<stdio.h>
int main()
{
char c1='C',c2='h',c3='i',c4='n',c5='a';
c1=c1+4;
c2=c2+4;
c3=c3+4;
c4=c4+4;
c5=c5+4;
printf("密码是:%c%c%c%c%c",c1,c2,c3,c4,c5);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
第四题:P24
4、判断下列逻辑表达式的结果为真还是假。设a=3,b=4,c=5.
a+b>c&&b==c
//a+b=7>5为真,4=5为假,真&&假,结果为假
a||b+c&&b-c
//a=1 为真,b+c=9为真,b-c=-1为真,真&&真为真,真||真为真,结果为真
!(a>b)&&!c||1
//a=3>b=4为假,!(a>b)就为真,c=5为真,!c为假,1为真,真&&假为假,假||真为真,结果为真
!(x=a)&&(y=b)&&0
//x=a=3为真,!(x=a)为假,y=b=4为真,0为假,假&&真为假,假&&假为假,结果为假
!(a+b)+c-1&&b+c/2
//!(a+b)=0,0+c=5,5-1=4为真,b+c/2=4+2.5=6.5为真,真&&真,结果为真
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
在逻辑运算符操作中只有0,1之分,也就是false和true之分,负数对应的逻辑值是true
第五题:P25
5、从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000的正数。若不是,则要求重新输入。
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;
printf("请输入小于1000的正数:");
scanf("%d",&i);
while(i>1000)
{
printf("输入的数不满足要求,请重新输入:");
scanf("%d",&i);
}
j=sqrt(i);
printf("平方根的整数部分为:%d",j);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
第六题:P27
6、有一个函数:
写程序,输入x的值,输出y相应的值。
#include<stdio.h>
int main()
{
int x,y;
printf("请输入一个数:");
scanf("%d",&x);
if(x<1)
{
y=x;
}
else if(x>=1&&x<10)
{
y=2*x-1;
}
else if(x>=10)
{
y=3*x-11;
}
printf("y=%d",y);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
第七题:P29
7、给出一百分制成绩(存在0.5分的情况),要求输出成绩等级为’A’,‘B’,‘C’,‘D’,‘E’。90分及以上为A,80 ~ 89分为B, 70 ~ 79分为C,60 ~ 69分为D,60分一下为E。
#include<stdio.h>
int main()
{
float i;
char j;
printf("请输入一个成绩:");
scanf("%f",&i);
while(i>100) //使用循环,直到输入一个小于100的数,停止循环
{
printf("超出总分范围,请重新输入:");
scanf("%f",&i);
}
if(i>=90)
{
j='A';
}
else if(i>=80&&i<90)
{
j='B';
}
else if(i>=70&&i<80)
{
j='C';
}
else if(i>=60&&i<70)
{
j='D';
}
else
{
j='E';
}
printf("成绩等级为:%c",j);
return 0;
}
- 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
第八题:P30
8、给一个不多于5 位的正整数,要求:
① 求出它是几位数;
② 分别输出每一位数字
③ 按逆序输出各位数字,例如原数为123,输出应为321。
#include<stdio.h>
int main()
{
int i,num,bit,ten,hundred,thousand,thousand_up;
printf("请输入一个不多于5位数的正整数:");
scanf("%d",&i);
while(i>100000)
{
printf("数字超过100000,请重新输入:");
scanf("%d",&i);
}
if(i>=10000&&i<99999)
{
num=5;
}
else if(i>=1000&&i<9999)
{
num=4;
}
else if(i>=100&&i<999)
{
num=3;
}
else if(i>=10&&i<99)
{
num=2;
}
else
{
num=1;
}
thousand_up=i/10000;
thousand=(int)(i-10000*thousand_up)/1000;
hundred=(int)(i-10000*thousand_up-1000*thousand)/100;
ten=(int)(i-10000*thousand_up-1000*thousand-100*hundred)/10;
bit=(int)(i-10000*thousand_up-1000*thousand-100*hundred)%10;
switch(num)
{
case 1:printf("%d是一位数\n",i);
printf("每一位数字是:%d\n",bit);
printf("逆序输出为:%d\n",bit);break;
case 2:printf("%d是一两位数\n",i);
printf("每一位数字是:%d,%d\n",ten,bit);
printf("逆序输出为:%d,%d\n",bit,ten);break;
case 3:printf("%d是三位数\n",i);
printf("每一位数字是:%d,%d,%d\n",hundred,ten,bit);
printf("逆序输出为:%d,%d,%d\n",bit,ten,hundred);break;
case 4:printf("%d是四位数\n",i);
printf("每一位数字是:%d,%d,%d,%d\n",thousand,hundred,ten,bit);
printf("逆序输出为:%d,%d,%d,%d\n",bit,ten,hundred,thousand);break;
case 5:printf("%d是五位数\n",i);
printf("每一位数字是:%d,%d,%d,%d,%d\n",thousand_up,thousand,hundred,ten,bit);
printf("逆序输出为:%d,%d,%d,%d,%d\n",bit,ten,hundred,thousand,thousand_up);break;
}
return 0;
}
- 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
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
第九题:P34
提前小练习
输入三个正整数,要求按由大到小的顺序输出。
方法一:
#include<stdio.h>
int main()
{
int a,b,c,t;
printf("请输入三个数字(中间用空格分开):");
scanf("%d %d %d",&a,&b,&c);
if(a>b)
{
if(a>c)
{
if(b>c)
printf("%d %d %d",a,b,c);
else
printf("%d %d %d",a,c,b);
}
else
printf("%d %d %d",c,a,b);
}
else
{
if(a<c)
{
if(b<c)
printf("%d %d %d",c,b,a);
else
printf("%d %d %d",b,c,a);
}
else
printf("%d %d %d",b,a,c);
}
return 0;
}
- 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
方法二:
在方法二之前,可以再先看一个小代码:
#include<stdio.h>
int main()
{
int i=17;
int j=28;
int k;
k=i;
i=j;
j=k;
printf("i=%d\n",i);
printf("j=%d",j);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
这个小代码的输出结果为:
i=28
j=17
- 1
- 2
可以发现,借助一个变量k,将i和j的值进行了交换。方法二就是利用这个小技巧。
#include<stdio.h>
int main()
{
int i,j,k,t;
printf("请输入三个数(中间用空格分开):");
scanf("%d %d %d",&i,&j,&k);
if(i<j)
{
t=i;
i=j;
j=t;
}
if(i<k)
{
t=i;i=k;k=t;
}
if(j<k)
{
t=j;j=k;k=t;
}
printf("排序结果为:%d %d %d",i,j,k);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
为了更方便地查看过程,可以多打印几行
#include<stdio.h>
int main()
{
int i,j,k,t;
printf("请输入三个数(中间用空格分开):");
scanf("%d %d %d",&i,&j,&k);
printf("i=%d,j=%d,k=%d\n",i,j,k);
if(i<j)
{
t=i;
i=j;
j=t;
}
printf("i=%d,j=%d,k=%d\n",i,j,k);
if(i<k)
{
t=i;i=k;k=t;
}
printf("i=%d,j=%d,k=%d\n",i,j,k);
if(j<k)
{
t=j;j=k;k=t;
}
printf("排序结果为:%d %d %d",i,j,k);
return 0;
}
- 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
结果为:
请输入三个数(中间用空格分开):12 23 34
i=12,j=23,k=34
i=23,j=12,k=34
i=34,j=12,k=23
排序结果为:34 23 12
- 1
- 2
- 3
- 4
- 5
第九题习题
有了上面练习的铺垫,这题直接拿捏!
9、输入4个整数,要求按照由小到大的顺序输出。
#include<stdio.h>
int main()
{
int a,b,c,d,t;
printf("请输入4个整数(中间用空格隔开):");
scanf("%d %d %d %d",&a,&b,&c,&d);
if(a>b)
{
t=a;a=b;b=t;
}
if(a>c)
{
t=a;a=c;c=t;
}
if(a>d)
{
t=a;a=d;d=t;
}
if(b>c)
{
t=b;b=c;c=t;
}
if(b>d)
{
t=b;b=d;d=t;
}
if(c>d)
{
t=c;c=d;d=t;
}
printf("排序结果为:%d %d %d %d",a,b,c,d);
return 0;
}
- 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
第十题:P40
10、输入两个正整数m和n,求其最大公约数和最小公倍数。
拿到这题,是有点懵的,平时都用的短除法,这应用到程序里面,似乎不太行,我就百度了一下,如何求最大公约数。(两数乘积除以最大公约数就是最小公倍数)
百度结果如下:
求最大公约数
使用辗转相除法。
#include<stdio.h>
int main()
{
int a,b,t,p,r;
printf("请输入两个数(中间用空格隔开):");
scanf("%d %d",&a,&b);
if(a<b)
{
t=a;a=b;b=t;
}//结果为a为a、b中较大的那个数
p=a*b;//a与b之积
while(b!=0)//当b为0时终止循环
{
r=a%b;//取余
a=b;//将除数部分赋给a
b=r;//将余数赋给b
}
printf("两数最大公约数为%d\n",a);
printf("两数最小公倍数为%d",p/a);//两数之积除以两数最大公约数即为最小公倍数
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
第十一题:P37
11、输出一下4x5的矩阵。
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
- 1
- 2
- 3
- 4
#include<stdio.h>
int main()
{
int i,j,k;
k=1;
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
printf("%d\t",k);//其中\t的作用是将当前位置移到下一个tab位置
k++;
}
printf("\n");
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
第十二题:P43
输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如153是水仙花数,因为153=1^3 + 5^3 + 3^3。
#include<stdio.h>
int main()
{
int i,a,b,c;
i=100;
while(i<=999)
{
a=i/100;
b=(i-a*100)/10;
c=(i-a*100)%10;
if(i==a*a*a+b*b*b+c*c*c)
{
printf("%d\n",i);
}
i++;
}
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
第十三题:P43
13、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1,2,3,又6=1+2+3,所以6是完数。编程找出1000之内的所有完数,并按照以下格式输出其因子:
6 its factors are 1,2,3
#include<stdio.h>
int main()
{
int i,j,k;
i=2;
while(i<1000)
{
k=0;
for(j=1;j<i;j++)//用i除以j(1<j<i)
{
if(i%j==0)//余数为0,则判定为因子
{
k+=j;//将所求因子累加
}
}
if(i==k)//将累加结果与i进行比较,若相等,则判定为完数,进行打印
{
printf("%d its factors are ",i);
for(j=1;j<i;j++)//再次循环,打印出因子
{
if(i%j==0)
{
printf("%d ",j);
}
}
printf("\n");
}
i++;
}
}
- 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
第十四题:P45
14、有一个分数序列:
求出这个数列的前20项之和。
#include<stdio.h>
int main()
{
int i=1;
float m,t=0.0,j=2.0,k=1.0;//需要一起计算的变量,最好统一
while(i<21)
{
t=t+j/k;//分数 累加
m=j;//将旧的分子j暂存在m中
j=j+k;//新的分子为旧的分子加分母
k=m;//新的分母为旧的分子
i++;
// printf("j=%f\n",j);
// printf("k=%f\n",k);
// printf("t=%f\n",t);
}
printf("前20项的和为:%f",t);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
第十五题:P46
15、一个球从100m高度自由落下,每次落地后反跳到原高度的一半,再落下,再反弹,求它在第10次落地时,共经过多少米,第10次反弹多高。
#include<stdio.h>
int main()
{
float s=100,h=s/2;
int i;
for(i=2;i<=10;i++)
{
s=s+2*h;//经过的米数
h=h/2;//反弹的高度
}
printf("共经过%f米,第十次反弹%f米",s,h);
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
第十六题:P51
16、输出以下图案:
*
***
*****
*******
*****
***
*
- 1
- 2
- 3
- 4
- 5
- 6
- 7
#include<stdio.h>
int main()
{
int i,j,k;
for(i=1;i<=4;i++)//打印上4行
{
for(j=1;j<=4-i;j++)//每行需要打印的空格
printf(" ");
for(k=1;k<=2*i-1;k++)//每行需要打印的*
{
printf("*");
}
printf("\n");
}
for(i=1;i<=3;i++)//打印下三行
{
for(j=1;j<=i;j++)
printf(" ");
for(k=1;k<=7-2*i;k++)
{
printf("*");
}
printf("\n");
}
return 0;
}
- 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
文章来源: luckystar.blog.csdn.net,作者:爱打瞌睡的CV君,版权归原作者所有,如需转载,请联系作者。
原文链接:luckystar.blog.csdn.net/article/details/121017467
- 点赞
- 收藏
- 关注作者
评论(0)