C语言考试习题小合集

整理几道C语言的练习题,题目+注释+代码。


第一题:

题目
1.已知银行整存整取存款不同期限的月息利率(采用复利方式,即利滚利)分别为
            0.63%    期限一年
            0.66%    期限二年
月息利率=    0.69%    期限三年
            0.75%    期限五年
            0.85%    期限八年
要求输入存钱的本金和期限(以整数年为单位),求到期时能从银行得到的利息与本金的合计。
提示:可以用嵌套的if-else结构或switch结构实现,核心函数pow(1+月利率,月份)。
请思考年份是四、六、七或八年以上的情况。

#include <stdio.h>
#include <stdlib.h>

/*TODO 核心函数
* @函数名:pow
* @功能说明:根据利率(+100%)、存期,计算利息与本金的合计。
* @参数说明:r 利率,t 存期
* @备注:复利的本息计算公式是 F=P(1+i)^n
*/
double pow(double r,int t){
    double temp = r+1;
    int i;
    for(i=0;i<t;i++){
	temp *= r+1;
    }
    
    return temp;
    
}

/*TODO 计算年利率
* @函数名:rate
* @功能说明:根据存期返回响应的年利率
* @参数说明:y 年份
* @备注:原题中申明“以整数年为单位”,因此函数返回年利率
*/
double rate(int y){
    double r_m;				//月利率
    if(y==1)				//多分支判断利率
	r_m = 0.0063;
    else if(y==2)
	r_m = 0.0066;
    else if(y==3||y==4)
    	r_m = 0.0069;
    else if(y>=5&&y<=7)
    	r_m = 0.0075;
    else if(y>=8)
    	r_m = 0.0085;
    	
    return r_m;
}

/*TODO 主函数
* @函数名:main
* @功能说明:程序入口
* @参数说明:无
* @备注:无
*/
void main()
{
    double P;				//本金
    double R;				//总回报率
    double total;			//本息合计
    int year;				//存期(年)
    
    printf("请输入存入本金:");
    scanf("%lf",&P);
    printf("请输存期(单位:年):");
    scanf("%d",&year);
	
    R = pow(rate(year),year);
    total = P * R;
    printf("本息合计为:%.3lf\n",total);  
    system("pause");
}

第二题:

题目

简单计算器。用switch语句编写一个程序计算表达式:data1 op data2的值。其中op为运算符+、-、*、/。

#include <stdio.h>
#include <stdlib.h>

/*TODO 主函数
* @函数名:main
* @功能说明:程序入口
* @参数说明:无
* @备注:无
*/
void main()
{
    double data1,data2;				//参数
    double result;				//结果
    char op;					//运算符
    
    printf("请输入计算表达式(例:100 * 50):\n\n");
    scanf("%lf %c %lf",&data1,&op,&data2);
    
    switch(op){
    case '+':
		result = data1+data2;
		break;
    case '-':
		result = data1-data2;
		break;
    case '*':
    	result = data1*data2;
		break;
	case '/':
    	result = data1/data2;
		break;
    }
	printf("\n\n运算结果为:%.2lf\n\n",result);
    
    system("pause");
}

第三题:

题目

编写程序,给定一个整数i,请求出另一个整数j,使i和j在用8位二进制表示时互为逆序。例如:给定i=3时,应得到j=192(3的二进制为:00000011,192的二进制为11000000)。
提示:
①    十进制整数转换为二进制整数用“除2求余”法。
②    二进制整数转换为十进制整数用“按权相加”法。

#include <stdio.h>
#include <stdlib.h>
#define ArrMaxLength 8

/*TODO 十进制转二进制
* @函数名:DtoB
* @功能说明:十进制转二进制
* @参数说明:x 十进制整数, *a 长度为8的整型数组首地址
* @备注:函数为返回值,直接修改数组内容
*/
void DtoB(int x,int *a)
{
	int i=0,rem;
	do{
		rem=x%2;
		x=x/2;
		a[i]=rem;
		i++;
	}while(x!=0);
  
	return a;
}

/*TODO 二进制倒序后转十进制
* @函数名:BtoD_desc
* @功能说明:将二进制序列倒序,并转为十进制
* @参数说明:*a 长度为8的整型数组首地址
* @备注:返回十进制整数
*/
int BtoD_desc(int *a)
{
	int i; 					
 int sum = 0;							
 for(i=0;i<ArrMaxLength;i++){
		if(a[i]==1)
			sum += power(2,ArrMaxLength-i-1);
 }

	return sum;
}

/*TODO 求平方
* @函数名:power
* @功能说明:二进制转十进制
* @参数说明:a 底数, x 指数
* @备注:返回a的x次方
*/
int power(int a,int x)
{
	int s;
 for(s=1;x>0;x--){
		s *= a;
 }
 return s;
}

/*TODO 主函数
* @函数名:main
* @功能说明:程序入口
* @参数说明:无
* @备注:无
*/
void main()
{
	int a[ArrMaxLength]={0};		//存放二进制的数组
	int D;							//十进制变量
   
	printf("请输入整数:");
	scanf("%d",&D);
 
        DtoB(D,a);						//十进制转二进制
	D = BtoD_desc(a);				//二进制倒序后转十进制
 
	printf("\n输出结果为:%d\n",D);
 
	system("pause");
}

第四题:

题目

编写程序,抓交通肇事犯。
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件,但都没有记住车D号,只记下车号的一些特征。
甲说:牌照的前两位数字是相同的;
乙说:牌照的后两位数字是相同的,但与前两位不同;
丙是位数学家,他说:四位的车号刚好是一个整数的平方。根据以上线索求出车号。
提示:
①    按照题目的要求,造出一个前两位数相同、后两位数相同且相互间又不同的整数,然后判断该整数是否是另一个整数的平方。
②    用穷举法解此题。穷举法是最简单、最常见的一种程序设计方法,它充分利用了计算机处理的高速特征。穷举法的关键是要确定穷举的范围,既不能过分扩大穷举的范围,也不能过分缩小穷举的范围,否则程序的运行效率会很低,或有可能遗漏正确的结果而产生错误。

#include <stdio.h>
#include <stdlib.h>

/*TODO 主函数
* @函数名:main
* @功能说明:程序入口
* @参数说明:无
* @备注:无
*/
void main()

{
	int i, j, k, c;

	for (i = 1; i <= 9; i++)	//i:车号前二位的取值
	for (j = 0; j <= 9; j++) 	//j:车号后二位的取值
	if (i != j)			//判断二位数字是否相异
	{
		k = i * 1000 + i * 100 + j * 10 + j; 	//计算出可能的整数
		for (c = 31; c < 100; c++) 	//循环判断该数是否为另一整数的平方,c的取值范围 31-99 之间
		if (c*c == k) 			//是否等于c的平方
			printf("%d\n", k);
	}


	system("pause");
}

第五题:

题目

用递推法求ex=1+x+x2/2!+x3/3!+…+xn/n!的值。

#include <stdio.h>
#include <stdlib.h>

/*TODO 求乘阶
* @函数名:f
* @功能说明:求1 - n 之间的乘积
* @参数说明:n为最大项数
* @备注:无
*/
double factorial(int n) {
	int i;						//循环变量
	int fact = 1;				//阶乘结果

	for (i = 1; i <= n; i++)			//计算阶乘 
		fact *= i;

	return (double)fact;
}

/*TODO 求平方
* @函数名:power
* @功能说明:二进制转十进制
* @参数说明:a 底数, x 指数
* @备注:返回a的x次方
*/
double power(int a, int x)
{
	double s;
	for (s = 1; x > 0; x--){
		s *= a;
	}
	return s;
}


/*TODO 主函数
* @函数名:main
* @功能说明:程序入口
* @参数说明:无
* @备注:无
*/
void main() {
	int x;						//底数
	int n;						//项数
	double sum = 1.0;			//总和
	int i;						//循环变量
	printf("请输入底数x:");
	scanf("%d", &x);
	printf("请输入项数n:");
	scanf("%d", &n);

	for (i = 1; i <= n; i++){
		sum += (power(x, i) / factorial(i));

		//这行代码用于测试,可以保留也可删除
		//printf("当i=%d时:power=%lf,factorial=%lf,sum=%lf\n",i,power(x,i),factorial(i),sum);
	}

	printf("\n最后结果为(保留2位小数):%.2lf\n\n", sum);

	system("pause");
}

第六题:

题目

打印出以下的杨辉三角形(要求打印出10行)。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…… …… ……
提示:用二维数组实现。关键语句:a[i][j]=a[i-1][j-1]+a[i-1][j]

#include <stdio.h>
#include <stdlib.h>
#define N 11 

/*TODO 主函数
* @函数名:main
* @功能说明:程序入口
* @参数说明:无
* @备注:无
*/
void main()
{
	int i, j, a[N][N] = { 0 };

	for (i = 1; i < N; i++){
		a[i][1] = 1;
		a[i][i] = 1;
	}
	for (i = 3; i < N; i++)
	for (j = 2; j < i; j++)
		a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
	for (i = 1; i < N; i++){
		for (j = 1; j <= i; j++)
			printf("%6d", a[i][j]);
		printf("\n");
	}

	system("pause");
}

第七题:

题目

某班期终考试科目为高数MT、英语EN和物理PH,有30个人参加考试。
为评定奖学金,要求统计并输出一个表格,
表格内容包括学好、各科分属、总分和平均分,并标出3门课均在90分以上者(该栏标志输出为Y,否则为N),
表格形式如下:
NO  MT    EN    PH    SUM   V    >90
1     97      87     92     276    92    N
2     92      91     90     273    91    Y
3     90      81     82     253    84    N
......        ......        ......        ......

#include <stdio.h>
#include <stdlib.h>

/*TODO 是否三门成绩90分以上
* @函数名:Grade
* @功能说明:三门成绩是否都大于等于90
* @参数说明:三门成绩
* @备注:是 返回 Y, 否 返回 N
*/
char Grade(int a, int b, int c){
	if (a >= 90 && b >= 90 && c >= 90)
		return 'Y';
	else
		return 'N';
}

/*TODO 主函数
* @函数名:main
* @功能说明:程序入口
* @参数说明:无
* @备注:无
*/
void main()
{
	int a[30][5] = { 0 };								//成绩单数组
	int p = 0;										//人数
	int i;											//循环变量

	printf("请输入人数(最大30人):");
	scanf("%d", &p);

	for (i = 0; i < p; i++){								//录入成绩

		system("cls");								//清屏
		printf("请输入第%d名同学的成绩:\n", i + 1);

		printf("高数:");
		scanf("%d", &a[i][0]);
		printf("英语:");
		scanf("%d", &a[i][1]);
		printf("物理:");
		scanf("%d", &a[i][2]);
		a[i][3] = a[i][0] + a[i][1] + a[i][2];
		a[i][4] = a[i][3] / 3;
	}

	system("cls");
	printf("NO\tMT\tEN\tPH\tSUM\tV\t>90\n");
	for (i = 0; i < p; i++){
		printf("%d\t%d\t%d\t%d\t%d\t%d\t%c\n", i + 1, a[i][0], a[i][1], a[i][2], a[i][3], a[i][4], Grade(a[i][0], a[i][1], a[i][2]));
	}

	printf("\n\n");
	system("pause");
}

第八题:

题目

实现螺旋矩阵(这道题常在学生竞赛或者企业笔试时出现)

输出形式如下:

    1    2    3    4   5
  16  17  18  19   6
  15  24  25  20   7
  14  23  22  21   8
  13  12  11  10   9

#include <stdio.h>
#include <stdlib.h>

#define Lenght 9	//螺旋矩阵的阶数

/*TODO 主函数
* @函数名:main
* @功能说明:程序入口
* @参数说明:无
* @备注:无
*/
void main(){

	int arr[Lenght][Lenght] = { 0 };
	int l = 0, r = 0;
	int i = 1;
	int mode = 1;

	while (mode){

		mode = 0;

		if (arr[l][r + 1] == 0 && r<Lenght - 1)
			mode = 1;
		else if (arr[l + 1][r] == 0 && l<Lenght - 1)
			mode = 2;
		else if (arr[l][r - 1] == 0 && r>0)
			mode = 3;
		else if (arr[l - 1][r] == 0 && l>0)
			mode = 4;


		if (mode)
			switch (mode){
			case 1:										//向右
				while (arr[l][r + 1] == 0 && r + 1 < Lenght){
					arr[l][r] = i++;
					r++;
				}
				break;
			case 2:										//向下
				while (arr[l + 1][r] == 0 && l + 1 < Lenght){
					arr[l][r] = i++;
					l++;
				}
				break;
			case 3:										//向左
				while (arr[l][r - 1] == 0 && r >= 0){
					arr[l][r] = i++;
					r--;
				}
				break;
			case 4:										//向上
				while (arr[l - 1][r] == 0 && l >= 0){
					arr[l][r] = i++;
					l--;
				}
				break;
		}
	}

	if (arr[l][r] == 0)
		arr[l][r] = i++;

	for (l = 0; l < Lenght; l++){
		for (r = 0; r < Lenght; r++)
			printf("%4d", arr[l][r]);
		printf("\n");
	}

	system("pause");
}





  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
强化C语言编程能力的练习题可以包括以下几个方面: 1. 数的输入和输出:这个题目要求你编写程序,实现从键盘输入一个整数,然后再输出该整数。[1-第1题] 2. 计算表达式的值:这个题目要求你编写程序,计算一个表达式的值。例如给定a、b、c三个数,计算(a/b)*c的结果。[1-第2题] 3. 字符判断:这个题目要求你编写程序,判断一个字符是否为大写字母。如果是大写字母,则输出"Yes",否则输出"No"。[1-第3题] 4. 求和运算:这个题目要求你编写程序,计算一组特殊数列的和。具体的数列规则可以根据题目给出的要求来实现。[1-第4题] 5. 硬币翻转游戏:这个题目要求你编写程序,模拟一个硬币翻转游戏。根据题目给出的要求和规则,计算翻转硬币的结果。[1-第5题] 以上是一些常见的强化C语言编程能力的练习题,通过解决这些题目,你可以提高自己的编程技能,并加深对C语言的理解。同时,你也可以尝试编写一些更复杂的程序,来挑战自己的编程能力。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [电子学会青少年软件编程(C语言一级)等级考试试卷(2021年6月)-含答案和解题思路.pdf](https://download.csdn.net/download/gozhuyinglong/88230811)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [C语言之条件语句强化练习题](https://blog.csdn.net/m0_70469414/article/details/127388140)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [C语言循环语句强化练习题](https://blog.csdn.net/m0_70469414/article/details/127506522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿长大人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值