(自用笔记,慎点)C语言程序设计习题(一)

举报
爱打瞌睡的CV君 发表于 2022/07/07 22:14:14 2022/07/07
【摘要】 文章目录 第一题:P14第二题:P18第三题:P19第四题:P24第五题:P25第六题:P27第七题:P29第八题:P30第九题:P34提前小练习第九题习题 第十题:P40第十一题:...

第一题: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

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。