二、C语言算法题期末题

一、枚举题

1、用1元5角人民币兑换5分、2分、1分的硬币(每种都要有)共100枚,有多少种方案,每种方案的具体情况?

#include<stdio.h>
int main(){int money=150;  //1元5角等于150分int count=0;     //记录数量for(int i=1;i<99;i++){              //1分硬币数量for(int j=1;j<99;j++){          //2分硬币数量int k=100-i-j;             //5分硬币数量int sum=i+2*j+5*k;if(k>0&&sum==money&&(i+j+k)==100){      count++;printf("一分硬币%d个,二分硬币%d个,五分硬币%d个\n",i,j,k);}}}printf("一共有%d种方案",count);return 0;
}

2、如果一个正整数等于各个数字的立方和,则该数称为阿姆斯特朗数(亦称为自恋性数)。如 407 = 4 3 4^3 43 + 0 3 0^3 03 + 7 3 7^3 73 就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。

#include<stdio.h>
int main(){for(int i=0;i<10;i++){for(int j=0;j<10;j++){for(int k=0;k<10;k++){int sum=i*100+j*10+k;if(sum>0&&sum==i*i*i+j*j*j+k*k*k){printf("%d是一个阿姆斯特朗数\n",sum);}}}}return 0;
}

3、韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数。按从1到5 报数,最末一人报的数为1;按从1到6 报数,最末一人报的数为5;按从1到7 报数,最末一人报的数为4;按从1到11 报数,最末一人报的数为10。那么韩信至少有多少兵?

#include<stdio.h>
int main(){int peo=0;while(1){peo++;if(peo%5==1&&peo%6==5&&peo%7==4&&peo%11==10){printf("韩信至少有%d个兵",peo);break;}}return 0;
}

4、任何一个整数n的立方都可以表示成n个相邻奇数之和,编写程序,由键盘输入n,求n的立方是哪些奇数之和。

#include<stdio.h>
int main(){int n;      int num=1;    //第一个奇数scanf("%d",&n);while(1){num+=2;int temp=n,sum=0;while(temp--){     //n个奇数相加sum+=num;num+=2;   // 变成下一个奇数}if(n*n*n==sum){ while(n--){num-=2;printf("%d ",num);   //输出整数}  break;}}return 0;
}

5、有分数数列2/1+3/2+5/3+8/5+13/8+…… ,编写程序计算前20 项之和

#include<stdio.h>
int main(){int arr[30];arr[0]=1;arr[1]=2;for(int i=2;i<=20;i++){arr[i]=arr[i-1]+arr[i-2];}double sum=0;for(int i=0;i<20;i++){sum+=(double)arr[i+1]/arr[i];}printf("%f",sum);return 0;
}

6、一个素数,当它的数字位置对换以后仍为素数,这样的数称为绝对素数。编写一个程序求出所有的两位绝对素数

#include<stdio.h>
bool isprime(int num){     //判断是否为素数if(num==1){return false;}for(int i=2;i<num/2;i++){   if(num%i==0){return false;}}return true;
}int main(){for(int i=10;i<100;i++){int newi=(i/10)+(i%10)*10;if(isprime(i)&&isprime(newi)){printf("%d是一个绝对素数\n",i);}}return 0;
}

7、1988年世界人口数为50亿,按年增长率11‰计算,从哪一年开始世界人口数超过100亿。

#include<stdio.h>
int main(){double num=50;int year=1988;while(num<=100){num+=num*0.011;year++;}printf("%d年开始世界人口超过100亿",year);return 0;
}

8、甲、乙、丙三位球迷分别预测已进入半决赛的四支球队A、B、C、D的名次如下:
甲预测:A第1名,B第2名;
乙预测:C第1名,D第3名;
丙预测:D第2名,A第3名。
比赛结果,甲、乙、丙预测各对一半,试求A、B、C、D四队的实际名次。

#include<stdio.h>
int main(){for(int A=1;A<=4;A++){              //ABCD四队名次的排列组合for(int B=1;B<=4;B++){if(A==B)continue;for(int C=1;C<=4;C++){if(A==C||B==C)continue;for(int D=1;D<=4;D++){if(A==D||B==D||C==D)continue;if(A==1&&B!=2||A!=1&&B==2) {   //甲的预测if(C==1&&D!=3||C!=1&&D==3){         //乙的预测if(D==2&&A!=3||D!=2&&A==3){      //丙的预测printf("四队的实际名次是A=%d,B=%d,C=%d,D=%d",A,B,C,D);}}}                 }}}}return 0;
}

9、编程计算 1,1+2,1+2+3,…,1+2+…+9 各项值的积。

#include <stdio.h>int main() {long long sum = 0;long long product = 1;for (int i = 1; i <= 9; i++) {sum += i;product *= sum;}printf("结果: %lld\n", product);            //防止溢出return 0;
}

10、编程实现,输入一个实数,输出实数中的所有位之和。例如:输入 3.14,输出 3+1+4=8

在这里插入代码片

二、编写函数

1、编写函数实现指定要求的字符串连接功能。
要求:
①不得使用字符串操作库函数。
②主函数输入2个字符串和连接操作的位置与长度,并实现调用。
③子函数void strmid(char str1[],int m,int n,char str2[]),实现将字符串str1从第m个字符开始的n个字符连接到str2串尾。(从1计数)假设str1=“abcdefg”,str2=" 123", m=4,n=3,则通过子函数调用后,串str2变成"123def"
④子函数void print(char a[])实现对操作后的串的输出。


#include <stdio.h>
#include<string.h>
void strmid(char str1[], int m, int n, char str2[]) {int len=strlen(str2);int i, j;for (i = m - 1, j = len; i < m - 1 + n; i++, j++) {str2[j] = str1[i];}str2[j] = '\0'; // 在连接的末尾添加字符串结束标记
}void print(char a[]) {printf("%s", a);
}int main() {char str1[] = "abcdefg";char str2[20] = "123";int m = 4,n = 3;strmid(str1, m, n, str2); // 调用字符串连接函数print(str2); // 输出连接后的字符串return 0;
}

2、编写一个程序从键盘输入10个学生的总成绩,统计10名学生的最高分、最低分和平均分,并按照总成绩对10名学生由高到低排序,要求:
(1)主函数实现调用;
(2)子函数void input实现由键盘输入学生成绩并存入数组,并输出所有学生的最高分、最低分和平均分;
(3)子函数void sort实现对学生成绩由大到小排序,并将排序结果存于数组中。
(4)子函数void print实现对学生成绩数组的输出;

#include<stdio.h>
void input(int grade[]){int max=0,min=100000,avg=0;for(int i=0;i<10;i++){scanf("%d",&grade[i]);if(grade[i]>max)max=grade[i];if(grade[i]<min)min=grade[i];avg+=grade[i];}printf("最高分是%d,最低分是%d,平均分是%d\n",max,min,avg/10);
}
void sort(int grade[]){for(int i=0;i<9;i++){for(int j=0;j<9-i;j++){if(grade[j]<grade[j+1]){int temp=grade[j];grade[j]=grade[j+1];grade[j+1]=temp;}}}
}
void print(int grade[]){for(int i=0;i<10;i++){printf("%d ",grade[i]);}
}
int main(){int grade[10]; input(grade);sort(grade);print(grade);return 0;
}

3、编写两个函数,一个函数实现通过指针将一个字符串反向。例: 串“stude” 的反向串为“eduts” ;而另一个函数实现通过指针求字符串的长度。

在这里插入代码片

4、2.编写函数void f(int a[M][N],int b[N][T],int c[M][T])实现矩阵乘法。根据矩阵运算法则,矩阵元素的值由如下公式求得。
在这里插入图片描述

在这里插入代码片

5、输入10个整数,将这10个数按升序排列,并且奇数在前偶数在后。
若输入的10个数是10,9,8,7,6,5,4,3,2,1,则输出1,3,5,7,9,2,4,6,8,10。
要求:
①主函数输入10个数据,并实现调用。
②子函数 void sort(int a[ ])实现题目要求的排序。
③子函数void print(int a[])实现对操作后的数据的输出。

在这里插入代码片

6、求三个数的最小公倍数。
要求 1.主函数完成输入三个整数和实现调用与输出。
2.子函数 int f(int a,int b,int c) 求出最小公倍数

在这里插入代码片

7、子函数void replace(char *s)所实现的功能是:将s所指向的字符串中的每个is都替换成be。按如下要求编写程序:
(1)编程实现该子函数的功能;
(2)在主函数中由键盘输入一个字符串,调用该子函数,然后输出替换后的字符串。

在这里插入代码片

8、编写程序,输入一个小写字母,将该字符转换为大写字母输出。(用putchar()、getchar()函数编写程序)

在这里插入代码片

9、编写一个函数,求一个5×5整型矩阵的两条对角线元素之和。函数头部为double fun(double a[5][5])

在这里插入代码片

10、4.编写一个函数,交换两个数的值,要求用指针实现。
函数头部为: void fun(int *x,int *y)

在这里插入代码片

三、算法设计题

1、长度为L的升序序列S,处在第 L/2 个位置的数称为S的中位数。例如,若序列S1=(11,13,15,17,19),则S1的中位数是15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若序列S2=(2,4,6,8,20),则S1和S2的中位数是11。
用函数int median(int a[],int b[],int n)求两个等长序列的中位数。其中等长数组a和 b中的元素已按升序排列,n是等长数组的长度。

在这里插入代码片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/14787.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机通信地址【图解TCP/IP(笔记六)】

文章目录 地址地址的唯一性地址的层次性 地址 通信传输中&#xff0c;发送端和接收端可以被视为通信主体。它们都能由一个所谓“地址”的信息加以标识出来。当人们使用电话时&#xff0c;电话号码就相当于“地址”。当人们选择写信时&#xff0c;通信地址加上姓名就相当于“地…

cmake include命令

目录 cmake include命令 CMAKE_CURRENT_LIST_DIR: CMAKE_CURRENT_LIST_FILE: CMAKE_CUEERNT_LIST_LINE: demo top CMakeLists.txt test.cmake subDir下的 CMakeLists.txt 结果: cmake include命令 include()命令也是将一个新的cmake内容引入当前cmake内容中. 格式: …

速成版-带您一天学完vue2框架

vue是一个前端js框架&#xff0c;可以简化Dom操作&#xff0c;实现响应式数据驱动。前面全是废话&#xff0c;哈哈&#xff0c;接下来一起学习吧。 目录 一、vue基础 1.1、vue简介 1.2、第一个Vue程序 1.3、vue基础-el挂载点 1.4、data数据对象 二、本地应用-指令篇 2.…

树和二叉树的概念以及结构

目录 一、树概念及结构 1.1 树的概念 1.2 树的相关概念 1.3 树的表示 1.4 树在实际中的应用 二、二叉树概念及结构 2.1 概念 2.2 特殊的二叉树 2.3 二叉树的性质 2.4 二叉树的存储结构 梦想就是梦里想做的事&#xff0c;醒来后努力去实现。 一、树概念及结构 1.1 树…

高阶组件/react组件复用

也可以用children模式 优化 高阶组件 组件名称相同设置组件名字 效果 解决props丢失 setstate是异步更新的 推荐语法 页面更新完后的回调函数 组件性能优化 1. 2.

Github下载Failed to connect to github.com port 443: Timed out

方法一&#xff1a; 使用ssh下载的方式 方法二 使用github加速网站 https://gitclone.com ,用命令行&#xff1a; git clone https://http://gitclone.com/http://github.com/xxx/yyy 参考链接 github克隆失败提示“443&#xff1a;Timed out”怎么解决&#xff1f; - 知乎

mysql练习---多表连接查询

-- 创建部门表 create table if not exists dept3( deptno varchar(20) primary key , -- 部门号 name varchar(20) -- 部门名字 ); -- 创建员工表 create table if not exists emp3( eid varchar(20) primary key , -- 员工编号 ename varchar(20), -- 员工名字 age int, -- 员…

redis操作问题

使用redisTemplate 往set集合中批量添加值 # 第一种办法就是for循环&#xff0c;每次进行setfor (int i 0; i < 1000000; i) {redisTemplate.opsForSet().add("key",i);} # 第二中办法就是使用HashSet批量添加数据Set set new HashSet<>();for (int i 1…

计算机网络概述(三)

常见的计算机网络体系结构 OSI体系结构&#xff1a; 物理层→数据链路层→网络层→运输层→会话层→表示层→应用层 TCP/IP体系结构&#xff1a; 网络接口层→网际层→运输层→应用层 一般用户的设备都有TCP/IP协议用于连接因特网&#xff0c;TCP/IP的网络接口层并没有规定使用…

培训报名小程序实战开发

目录 1 需求描述2 原型绘制2.1 首页2.2 报名列表页2.3 报名页2.4 支付页面2.5 支付成功页面2.6 我的页面2.7 我的报名页面2.8 报名详情页面 3 数据源设计4 数据源开发5 创建模型应用6 录入测试数据7 创建自定义应用8 创建页面总结 经常有人问&#xff0c;低代码学习容易么&…

HarmonyOS学习路之开发篇—数据管理(融合搜索)

融合搜索概述 HarmonyOS融合搜索为开发者提供搜索引擎级的全文搜索能力&#xff0c;可支持应用内搜索和系统全局搜索&#xff0c;为用户提供更加准确、高效的搜索体验。 基本概念 全文索引 记录字或词的位置和次数等属性&#xff0c;建立的倒排索引。 全文搜索 通过全文索引进…

微服务之服务器缓存

Informal Essay By English In the difficult employment situation, we need to set a good goal and then do our own thing 参考书籍&#xff1a;“凤凰架构” 进程缓存&#xff08;Cache&#xff09; 缓存在分布式系统是可选&#xff0c;在使用缓存之前需要确认你的系统…