栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
    • 第一题:P14
    • 第二题:P18
    • 第三题:P19
    • 第四题:P24
    • 第五题:P25
    • 第六题:P27
    • 第七题:P29
    • 第八题:P30
    • 第九题:P34
        • 提前小练习
        • 第九题习题
    • 第十题:P40
    • 第十一题:P37
    • 第十二题:P43
    • 第十三题:P43
    • 第十四题:P45
    • 第十五题:P46
    • 第十六题:P51

第一题:P14

1、加入我国国民生产总值的年增长率为7%,计算10年后我国国民生产总值与现在相比增长多少百分比。计算公式为p=(1+r)^n
其中:r为年增长率,n为年数,p为与想在相比的倍数

# include
# include
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; 
}
第二题:P18

2、用scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=‘A’,c2=‘a’

# include
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;
}
第三题:P19

3、密码规律是:用原来的字母后面第四个字母代替原来的字母。
请将China译成密码。

#include
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;
}
第四题: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为真,真&&真,结果为真 

在逻辑运算符操作中只有0,1之分,也就是false和true之分,负数对应的逻辑值是true

第五题:P25

5、从键盘输入一个小于1000的正数,要求输出它的平方根(如平方根不是整数,则输出其整数部分)。要求在输入数据后先对其进行检查是否为小于1000的正数。若不是,则要求重新输入。

#include
#include
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;
}
第六题:P27

6、有一个函数:

写程序,输入x的值,输出y相应的值。

#include
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;
}
第七题:P29

7、给出一百分制成绩(存在0.5分的情况),要求输出成绩等级为’A’,‘B’,‘C’,‘D’,‘E’。90分及以上为A,80 ~ 89分为B, 70 ~ 79分为C,60 ~ 69分为D,60分一下为E。

#include
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;
}
第八题:P30

8、给一个不多于5 位的正整数,要求:
① 求出它是几位数;
② 分别输出每一位数字
③ 按逆序输出各位数字,例如原数为123,输出应为321。

#include
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("每一位数字是:%dn",bit);
		       printf("逆序输出为:%dn",bit);break;
		case 2:printf("%d是一两位数n",i);
		       printf("每一位数字是:%d,%dn",ten,bit);
		       printf("逆序输出为:%d,%dn",bit,ten);break;
		case 3:printf("%d是三位数n",i);
		       printf("每一位数字是:%d,%d,%dn",hundred,ten,bit);
		       printf("逆序输出为:%d,%d,%dn",bit,ten,hundred);break;
		case 4:printf("%d是四位数n",i);
		       printf("每一位数字是:%d,%d,%d,%dn",thousand,hundred,ten,bit);
		       printf("逆序输出为:%d,%d,%d,%dn",bit,ten,hundred,thousand);break;       
		case 5:printf("%d是五位数n",i);
		       printf("每一位数字是:%d,%d,%d,%d,%dn",thousand_up,thousand,hundred,ten,bit);
		       printf("逆序输出为:%d,%d,%d,%d,%dn",bit,ten,hundred,thousand,thousand_up);break;
	}
	return 0;
 } 
第九题:P34 提前小练习

输入三个正整数,要求按由大到小的顺序输出。
方法一:

#include
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 

方法二:
在方法二之前,可以再先看一个小代码:

#include
int main()
{
	int i=17;
	int j=28;
	int k;
	
	k=i;
	i=j;
	j=k;
	
	printf("i=%dn",i);
	printf("j=%d",j);
	
	return 0;
}

这个小代码的输出结果为:

i=28
j=17

可以发现,借助一个变量k,将i和j的值进行了交换。方法二就是利用这个小技巧。

#include
int main()
{
	int i,j,k,t;
	printf("请输入三个数(中间用空格分开):");
	scanf("%d %d %d",&i,&j,&k);
	
	if(i 

为了更方便地查看过程,可以多打印几行

#include
int main()
{
	int i,j,k,t;
	printf("请输入三个数(中间用空格分开):");
	scanf("%d %d %d",&i,&j,&k);
	
	printf("i=%d,j=%d,k=%dn",i,j,k);
	if(i 

结果为:

请输入三个数(中间用空格分开):12 23 34
i=12,j=23,k=34
i=23,j=12,k=34
i=34,j=12,k=23
排序结果为:34 23 12
第九题习题

有了上面练习的铺垫,这题直接拿捏!
9、输入4个整数,要求按照由小到大的顺序输出。

#include
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;
}
第十题:P40

10、输入两个正整数m和n,求其最大公约数和最小公倍数。

拿到这题,是有点懵的,平时都用的短除法,这应用到程序里面,似乎不太行,我就百度了一下,如何求最大公约数。(两数乘积除以最大公约数就是最小公倍数)
百度结果如下:
求最大公约数
使用辗转相除法。

#include
int main()
{
	int a,b,t,p,r; 
	printf("请输入两个数(中间用空格隔开):");
	scanf("%d %d",&a,&b);
	if(a 
第十一题:P37 

11、输出一下4x5的矩阵。

1       2       3       4       5
6       7       8       9       10
11      12      13      14      15
16      17      18      19      20
#include
int main()
{
	int i,j,k;
	k=1;
	for(i=0;i<4;i++)
	{
		for(j=0;j<5;j++)
		{
			printf("%dt",k);//其中t的作用是将当前位置移到下一个tab位置
			k++;
		}
		printf("n");
	}
	return 0;
}
第十二题:P43

输出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如153是水仙花数,因为153=1^3 + 5^3 + 3^3。

#include
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("%dn",i);
		}
		i++;
	}
	return 0;
 } 
第十三题:P43

13、一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1,2,3,又6=1+2+3,所以6是完数。编程找出1000之内的所有完数,并按照以下格式输出其因子:
6 its factors are 1,2,3

#include
int main()
{
	int i,j,k;
	i=2;
	while(i<1000)
	{
		k=0;
		for(j=1;j 
第十四题:P45 

14、有一个分数序列:

求出这个数列的前20项之和。

#include
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=%fn",j);
//		printf("k=%fn",k);
//		printf("t=%fn",t);		
	}
	printf("前20项的和为:%f",t); 
	return 0;
 } 
第十五题:P46

15、一个球从100m高度自由落下,每次落地后反跳到原高度的一半,再落下,再反弹,求它在第10次落地时,共经过多少米,第10次反弹多高。

#include
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;
 } 
第十六题:P51

16、输出以下图案:

   *
  ***
 *****
*******
 *****
  ***
   *
#include
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;
 } 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429806.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号