C基础的练习集及测试答案(40-50)
40、(课堂)打印杨辉三角型前10行
#if 0
40、(课堂)打印杨辉三角型前10行
思路分析:
一。打印十行杨辉三角得第十行长度为十,所以建立一个长度为十的数组,作为每行的数据存储
二。按 0-9循环,代表行号,每次循环按行号递减遍历操作数组,
三。行号位元素置一,递减遍历 元素(n)=元素(n)+元素(n-1),首位不运算。
四。对一行操作完成可得到对应的杨慧三角值。输出。
错误分析:
没有将完整的杨慧三角记录。
#endif
#include<stdio.h>
#include<stdlib.h>
int main(){
int row;
int *yang=NULL;
int i=; printf("打印几行杨辉三角:\n");
scanf("%d",&row);
yang=(int *)malloc(sizeof(int)*row);
if(NULL==yang){
perror("cannot malloc");
return ;
}
for(i=;i<row;i++){
yang[i]=;
int j;
for(j=i-;j>;j--){
yang[j]+=yang[j-];
//printf("4444444444");
}
int k=;
for(k=;k<=i;k++){
printf("%d\t",yang[k]);
}
printf("\n"); } return ;
}
41、给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。
例如,我们从6767开始,将得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...
现给定任意4位正整数,请编写程序演示到达黑洞的过程。
#if 0
、给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,
将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。
例如,我们从6767开始,将得到
- =
- =
- =
- =
- =
... ...
现给定任意4位正整数,请编写程序演示到达黑洞的过程。
思路分析:
一。利用循环结束条件为结果等于6174
二。接收数据,
三。对数据排序,得到递增递减两数的差值,判断是否为6174,否则继续循环。
#endif
#include<stdio.h>
void bubblesort(int a[],int len){
int i,j;
for(i=;i<len-;i++){
for(j=;j<len--i;j++){
if(a[j]>a[j+]){
a[j]^=a[j+];
a[j+]^=a[j];
a[j]^=a[j+];
}
}
} } int dijian(int danwei[],int len){
int sum=;
bubblesort(danwei,len);
int i=;
for(i=len-;i>=;i--){
sum=sum*;
sum+=danwei[i];
}
return sum;
}
int dizeng(int danwei[],int len){
int sum=;
bubblesort(danwei,len);
int i=;
for(i=;i<len;i++){
sum=sum*;
sum+=danwei[i];
}
return sum;
} int main(){ //获得一个数
int num=;
printf("请输入一个四位数:");
scanf("%d",&num);
while(num!=){
//分解数值 int danwei[];
danwei[]=num/;
danwei[]=(num%)/;
danwei[]=(num%)/;
danwei[]=num%;
//排序成两个新数据
int jian=dijian(danwei,);
int zeng=dizeng(danwei,);
//相减得到新数据
num=jian-zeng;
printf("%d-%d=%d\t",jian,zeng,num); }
return ;
}
42、(课堂)自定义2个字符数组,不使用系统提供的strcat()函数,实现strcat()函数功能。
43、(课堂)自定义2个字符数组,不使用系统提供的strcpy()函数,实现strcpy()函数功能。
44、(课堂)自定义2个字符数组,不使用系统提供的strcmp()函数,实现strcmp()函数功能。
45、(课堂)自定义1个字符数组,不使用系统提供的strlen()函数,实现strlen()函数功能。
46、输出以下图案。要求每行的字符数与每次偏移几个字符由用户输入。结束条件为最后一行开头与第一行末尾对齐或在其之后
**********
**********
**********
**********
**********
**********
//结束条件:最后一行开头与第一行末尾对齐或在其之后
#if 0
、输出以下图案。要求每行的字符数与每次偏移几个字符由用户输入。结束条件为最后一行开头与第一行末尾对齐或在其之后
**********
**********
**********
**********
**********
**********
思路分析:
一。分三种情况,偏移大于行数,偏移量和字符数等比且偏移量不为一,偏移量和字符数不等比;
偏移大于字符:第一行字符,第二行偏移空格加上字符;
偏移量和字符数等比且偏移量不为一;字符数除偏移量的值加二
偏移量和字符数不等比;
错误分析;
再次看代码感觉这样有问题写个新算法
#endif #include<stdio.h> int main(){
int zifu,pianyi;
printf("每行的字符数");
scanf("%d",&zifu);
printf("每次偏移几个字符");
scanf("%d",&pianyi);
int i=;
if(pianyi>zifu){
int i;
for(i=;i<zifu;i++){
printf("*");
}
printf("\n");
for(i=;i<pianyi;i++){
printf(" ");
} for(i=;i<zifu;i++){
printf("*");
} return ; }
/*
if(zifu%pianyi==0)
i=0;
else i=-1;
*/
//if(zifu%pianyi!=0)zifu+=pianyi;
int num=zifu/pianyi;
if(zifu%pianyi!= && pianyi!=)num=num+;
for(i=;i<num;i++){
int k=;
for(k=;k<pianyi*i;k++){
printf(" ");
} int j=;
for(j=;j<zifu;j++){
printf("*");
}
printf("\n"); } return ;
}
改版一:
#if 0
、输出以下图案。要求每行的字符数与每次偏移几个字符由用户输入。结束条件为最后一行开头与第一行末尾对齐或在其之后
**********
**********
**********
**********
**********
********** 思路分析:
一。空格数=++kong * 偏移量
二。循环执行条件 空格数小于字符数 #endif #include<stdio.h> int main(){
int zifu,pianyi;
printf("每行的字符数");
scanf("%d",&zifu);
printf("每次偏移几个字符");
scanf("%d",&pianyi);
int kongge=;
int kong=;
while(kongge<zifu){
int k=;
kongge=kong*pianyi;
for(k=;k<kongge;k++){
printf(" ");
}
kong++; int j=;
for(j=;j<zifu;j++){
printf("*");
}
printf("\n"); }
return ;
}
47、按以下规律加密一段文字。
A->Z a->z
B->Y b->y
C->X c->x
……
Z->A z->a
其中不是字母的部分不加密。
#if 0
、按以下规律加密一段文字。
A->Z a->z
B->Y b->y
C->X c->x
……
Z->A z->a
其中不是字母的部分不加密。 解题思路:
一。利用字母对应的ASCII码表的数值进行运算,达到加密的目的。
二。B-A=Z-Y; C-A=Z-X ==》X=Z-(C-A)=Z-C+A
#endif #include<stdio.h> int main(){
int i=;
char encryption[]={'','A','a','','B','b','','Z','z','','','Q','q',''};
for(i=;i<;i++){
printf("%c",encryption[i]);
}
printf("\n加密结果:\n");
for(i=;i<;i++){
if((encryption[i]>='A')&&(encryption[i]<='Z')){
encryption[i]='Z'-encryption[i]+'A';
}
if((encryption[i]>='a')&&(encryption[i]<='z')){
encryption[i]='z'-encryption[i]+'a';
} }
for(i=;i<;i++){
printf("%c",encryption[i]);
}
return ;
}
48、规定一句话中以空格作为分词符。输入一句话,求一句话中最长单词的长度。例如:
I love China!
则最长单词是China!,最长单词长度是6
#if 0
、规定一句话中以空格作为分词符。输入一句话,求一句话中最长单词的长度。例如:
I love China!
则最长单词是China!,最长单词长度是6 解题思路:
一。因为不需要对数组本身进行修改,所以直接操作字符串常量
二。四个变量,
最高值 最高值单词首地址
每个单词的长度 单词首地址
三。输出最高值的结果。 错误分析:
如果以空格为判断标志则最后一个单词无法判断
解决在循环结束后再判断一次; 如果要用scanf()输入需要知道语句长度
scanf("%s",p);这样写并不是在代码区p的值使stdin的地址; #endif #include<stdio.h> void my_printf(char p[]){
while((*p!='\0'&&(*p!=' '))){
printf("%c",*p++);
}
} int main(){
char *p="I love China!";
int max=;
int len=; char *plen=p; //scanf("%s",p);||(*p!=' ') printf("%s\n",p); char *pmax=p;
while(*p!='\0'){
if(*p!=' '){
++len; }else{ if(len>max){
max=len;
pmax=plen; }
plen=p+;
len=;
} p++;
}
if(len>max){
max=len;
pmax=plen;
}
printf("最大长度:%d,单词:",max);
my_printf(pmax); //printf("最大长度:%s\n",pmax); //printf("最大长度:%p\n",plen);
//printf("最大长度:%p\n",p); return ;
}
49、读以下程序,猜想程序的运行结果,然后上机验证
#include<stdio.h>
int main()
{
int i;
int lh,rh,le,re,m;
char *lefthand[] = {"╮","o","<","~\\"};
char *righthand[]= {"╭","o",">","/~"};
char *lefteye[] = {"╯","^","-","=",">","@","⊙"};
char *righteye[]= {"╰","^","-","=","<","@","⊙"};
char *mouth[] = {"Д","▽","_","ε","^"};
printf("请选择左手:\n");
for(i=0;i<=3;i++)
{
printf("%d.[%s] ",i+1,lefthand[i]);
}
printf("\n");
scanf("%d",&lh);
lh--;
printf("请选择右手:\n");
printf("推荐:%d.[%s]\n其他:",lh+1,righthand[lh]);
for(i=0;i<=3;i++)
{
if(i==lh)
continue;
printf("%d.[%s] ",i+1,righthand[i]);
}
printf("\n");
scanf("%d",&rh);
rh--;
printf("请选择左眼:\n");
for(i=0;i<=6;i++)
{
printf("%d.[%s] ",i+1,lefteye[i]);
}
printf("\n");
scanf("%d",&le);
le--;
printf("请选择右眼:\n");
printf("推荐:%d.[%s]\n其他:",le+1,righteye[le]);
for(i=0;i<=6;i++)
{
if(i==le)
continue;
printf("%d.[%s] ",i+1,righteye[i]);
}
printf("\n");
scanf("%d",&re);
re--;
printf("请选择嘴:\n");
for(i=0;i<=4;i++)
{
printf("%d.[%s] ",i+1,mouth[i]);
}
printf("\n");
scanf("%d",&m);
m--;
printf("%s(%s%s%s)%s\n",lefthand[lh],lefteye[le],mouth[m],righteye[re],righthand[rh]);
return 0;
}
//49、读以下程序,猜想程序的运行结果,然后上机验证
#include<stdio.h>
int main()
{
int i;
int lh,rh,le,re,m;
char *lefthand[] = {"╮","o","<","~\\"};
char *righthand[]= {"╭","o",">","/~"};
char *lefteye[] = {"╯","^","-","=",">","@","⊙"};
char *righteye[]= {"╰","^","-","=","<","@","⊙"};
char *mouth[] = {"Д","▽","_","ε","^"};
printf("请选择左手:\n");
for(i=;i<=;i++)
{
printf("%d.[%s] ",i+,lefthand[i]);
}
printf("\n");
scanf("%d",&lh);
lh--;
printf("请选择右手:\n");
printf("推荐:%d.[%s]\n其他:",lh+,righthand[lh]);
for(i=;i<=;i++)
{
if(i==lh)
continue;
printf("%d.[%s] ",i+,righthand[i]);
}
printf("\n");
scanf("%d",&rh);
rh--;
printf("请选择左眼:\n");
for(i=;i<=;i++)
{
printf("%d.[%s] ",i+,lefteye[i]);
}
printf("\n");
scanf("%d",&le);
le--;
printf("请选择右眼:\n");
printf("推荐:%d.[%s]\n其他:",le+,righteye[le]);
for(i=;i<=;i++)
{
if(i==le)
continue;
printf("%d.[%s] ",i+,righteye[i]);
}
printf("\n");
scanf("%d",&re);
re--;
printf("请选择嘴:\n");
for(i=;i<=;i++)
{
printf("%d.[%s] ",i+,mouth[i]);
}
printf("\n");
scanf("%d",&m);
m--;
printf("%s(%s%s%s)%s\n",lefthand[lh],lefteye[le],mouth[m],righteye[re],righthand[rh]);
return ;
}
50、围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:“可以,但必须先找到我,我就藏身于这十个洞中的某个洞。你从1号洞找,下次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,再隔3个…以后在这个圆圈中如此类推,次数不限。”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。
问:兔子可能藏身于哪(几)个洞中?
#if 0
、围绕着山顶有10个圆形排列的洞,狐狸要吃兔子,兔子说:“可以,但必须先找到我,我就藏身于这十个洞中的某个洞。
你从1号洞找,下次隔1个洞(即3号洞)找,第三次隔2个洞(即6号洞)找,再隔3个…以后在这个圆圈中如此类推,次数不限。
”但狐狸从早到晚进进出出了1000次,仍没有找到兔子。
问:兔子可能藏身于哪(几)个洞中?
思路分析:
一。创建一个十一个元素数组,元素角标对应山洞。
二。
第几次寻找 对应的洞号 相应洞号的差值
1 1 1
2 3 2
3 6 3
三。根据洞号差来确定每次的洞号,山洞对应的元素自增;
四。输出每个元素的值为零即使没有找过的。
#endif #include<stdio.h> int main(){
int i=;
int sum=;
int fp[]={};
int j;
for(i=;i<=;i++){
sum+=i;
j=sum%;
if(j==)j=;
fp[j]++;
}
int k=;
for(k=;k<;k++){ printf("%d号洞被找%d次\n",k,fp[k]);
} return ;
}
C基础的练习集及测试答案(40-50)的更多相关文章
- C基础的练习集及测试答案(提高题)
提高题:1.编写程序,随机生成一个1~10内的数,让对方猜3次.如果3次内能猜中则输出“恭喜你”:若3次内猜不中则输出正确答案.C语言中提供生成随机数的函数rand()用法:①所需头文件:#inclu ...
- C基础的练习集及测试答案(1-15)
练习题:注:标有(课堂)字样的为课上练习,其他为课下练习基础题(50题)1.(课堂)编写程序,输出“XXX欢迎来到动物园!”(XXX是自己的名字). //1.(课堂)编写程序,输出“XXX欢迎来到动物 ...
- C基础的练习集及测试答案(31-39)
31.读懂以下程序,说明程序的功能#include<stdio.h>int main(){ int m,n,r,m1,m2; printf("请输入2个正整数:"); ...
- C基础的练习集及测试答案(16-30)
16.(课堂)输入一个年份(正整数),判断这年是否是闰年.闰年判断标准:年份能被4整除:如若遇到100的倍数,则需判断年份能否被400整除.(逢4一闰,逢百不闰,逢400又闰) #if 0 .(课堂) ...
- ML基础 : 训练集,验证集,测试集关系及划分 Relation and Devision among training set, validation set and testing set
首先三个概念存在于 有监督学习的范畴 Training set: A set of examples used for learning, which is to fit the parameters ...
- Python sklearn拆分训练集、测试集及预测导出评分 决策树
机器学习入门 (注:无基础可快速入门,想提高准确率还得多下功夫,文中各名词不做过多解释) Python语言.pandas包.sklearn包 建议在Jupyter环境操作 操作步骤 1.panda ...
- zookeeper部署及集群测试
zookeeper部署及集群测试 环境 三台测试机 操作系统: centos7 ; hostname: c1 ; ip: 192.168.1.80 操作系统: centos7 ; hostname: ...
- hdu 1829 基础并查集,查同性恋
A Bug's Life Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) To ...
- Dubbo入门实例 本地伪集群测试Demo
1. 概述 Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案 Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提 ...
随机推荐
- 对各种lca算法的理解
1.RMQ+ST 首先注意这个算法的要素:结点编号,dfs序,结点深度. 首先dfs,求出dfs序,同时求出每个结点的深度.然后st算法,维护深度最小的结点编号(dfs序也可以,因为他们俩可以互相转换 ...
- Gradle用户使用指南
转载请事先沟通,未经允许,谢绝转载. 1. 新工具介绍(Introduction) 能够复用代码和资源能够构建几种不同版本参数的应用能够配置.扩展.自定义构建过程1.1 为什么选择Gradle(Why ...
- web综合案例04
web综合案例02 web综合案例02 web综合案例04 待补充 ... ...
- 1、kubernetes系统基础190622
1.容器编排工具 docker编排工具三剑客:docker compose, docker swarm, docker machine IDC的操作系统:mesos 提供容器编排框架:marathon ...
- ie-"此更新不适应于此电脑"
cmd-dos命令 expand –F:* C:\update\Windows6.1-KB2533623-x64.msu C:\update\ dism.exe /online /Add-Packag ...
- 策略模式(Strategy
Strategy 无论什么程序,其目的都是解决问题.而为了解决问题,我们又需要编写特定的算法.使用Strategy模式可以整体地替换算法的实现部分.能够整体地替换算法,能让我们轻松地以不同的算法去解决 ...
- DSL与GPL
一.DSL 与 GPL DSL(Domain-Specified Language 领域特定语言),而与 DSL 相对的就是 GPL,最常见的 DSL 包括 Regex 以及 HTML & C ...
- Sharepoint JSCOM 列表操作
SP.SOD.executeFunc('sp.js', 'SP.ClientContext', retrieveListItemsInclude); //确保js文件加载,再执行方法 function ...
- python入门之os模块
import os os.getcwd() 同Linux的pwd os.chdir("/opt") 同Linux的cd os.curdir 返回当前目录 os.pardir 获取上 ...
- JadClipse
JadClipse 介绍:JadClipse是一个Eclipse插件,无缝地集成了Jad(快速Java反编译器)与Eclipse.通常,当打开一个类文件,类文件查看器将显示一个简短的API类的轮廓.如 ...