C语言改错题系列整理-非常容易0x1
1 求2/1,3/2,5/3,8/5,13/8,21/13,…前20项之和。
请改正程序中的错误,使它能得出正确的结果。
#include <stdio.h>main()
{int i, s1 = 2, s2 = 1;float x, sum = 0;for (i = 1; i <= 20; i++){sum += s1 / s2;x = s1;s1 += s2;s2 = x;}printf("sum = %9.6f\n", sum);
}
答案
- 很简单 s1,s2都是int类型,int类型的除法是整除得到还是int类型
- 我们只需要使用强转即可
#include <stdio.h>main()
{int i, s1 = 2, s2 = 1;float x, sum = 0;for (i = 1; i <= 20; i++){sum += (float)s1 / s2; //错误1x = s1;s1 += s2;s2 = x;}printf("sum = %9.6f\n", sum);
}
2 奥运参赛国出场次序:
输入奥运会参赛国国名,并按照字典序对其进行排序。
要求:参赛国数量不超过150个,每个国家的名字不超过9个字符。
提示:‘\0’占一个字符。
要求:请找出下面程序的错误并改正。
#include <string.h>
#include <stdio.h>#define N 150
#define MAX_LEN 10
void SortString(char str[][MAX_LEN], int n);int main()
{int i, n;char name[N][MAX_LEN]; printf("How many countries?");scanf("%d",&n); getchar();printf("Input their names\n");for(i=0;i<n;i++)gets(name[i]); void SortString(name[N][MAX_LEN], n); printf("Sorted results:\n");for(i=0;i<n;i++){puts(name[i]); }return 0;}void SortString(char str[][MAX_LEN], int n)
{int i,j;char temp[MAX_LEN];for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(str[j]<str[i]) {strcpy(temp,str[i]);strcpy(str[i],str[j]);strcpy(str[j],temp);}}}
}
答案
- 一开始以为错是 数组
char str[][MAX_LEN]
,但其实并不是
https://blog.csdn.net/jeffscott/article/details/79017571
可以用二维数组名作为实参或者形参,在被调用函数中对形参数组定义时可以指定所有维数的大小,也可以省略第一维的大小说明,但不可以省略第二位或更高维如:
void Func(int array[ ][ ]) 错误
void Func(int array[3][10]) 正确
void Func(int array[][10]) 正确
- 后面是字符串对比上面出了问题,不能简单的相减比较
#include <string.h>
#include <stdio.h>#define N 150
#define MAX_LEN 10
void SortString(char str[][MAX_LEN], int n);int main()
{int i, n;char name[N][MAX_LEN]; printf("How many countries?");scanf("%d",&n); getchar();printf("Input their names\n");for(i=0;i<n;i++)gets(name[i] ); SortString(name, n); printf("Sorted results:\n");for(i=0;i<n;i++){puts(name[i]); }return 0;}void SortString(char str[][MAX_LEN], int n)
{int i,j;char temp[MAX_LEN];for(i=0;i<n;i++){for(j=i+1;j<n;j++){if(strcmp(str[i],str[j]) > 0) //错误 字符串比较{strcpy(temp,str[i]);strcpy(str[i],str[j]);strcpy(str[j],temp);}}}
}
3 下面程序的功能是将数组元素逆序输出 ,找出其中的错误并改正之。
#include "stdio.h"
#define M 5
int main()
{ int a[M]={1,2,3,4,5};int i;for(i=M;i>=1;i--)printf("%d ",(a+i));return 0;
}
答案
- 三处地方
- 一、循环部分发生了越界
- 二、数组
a[M]
里面,a
表示数组a地址,a+i
代表a[i]
的地址,我们要输出a[i]
,就得在地址前面加*
访问地址得到数据 - 三、差点漏了
#include "stdio.h"
#include <stdio.h> //错误3
#define M 5
int main()
{int a[M] = {1, 2, 3, 4, 5};int i;for (i = M - 1; i >= 0; i--) //错误1printf("%d ", *(a + i)); //错误2return 0;
}
4 下面程序的功能是删除字符串中第一次出现的a字符。
其中有两处错误,请改正并使程序正确执行。
#include <stdio.h>
#include <string.h>
void fun(char *s,int n,int *t)
{int i,k=0;s[n]='a';s[n+1]='\0';while(s[k]!='a') k++;if(k==n){*t=0;}else{for(i=k;i<n;i++)s[i]=s[i+1];s[i]='\0';}
}
main()
{char s[20];int len,t;printf("Input a string:");gets(s);len=strlen(s);fun(s,len,t);if(t==0) printf("Not exist!\n");else printf("Result is:%s\n",s);
}
答案
- 一、看函数
void fun(char *s,int n,int *t)
注意参数t
是指针,我们需要把int类型的数据的地址传给指针 - 二、循环越界问题,长度为n的字符串经过函数有可能变成长度为n-1的字符串,所以要注意越界的问题
#include <stdio.h>
#include <string.h>
void fun(char *s,int n,int *t)
{int i,k=0;s[n]='a';s[n+1]='\0';while(s[k]!='a') k++;if(k==n){*t=0;}else{for(i=k;i<n-1;i++)//错误2s[i]=s[i+1]; s[i]='\0';}
}
main()
{char s[20];int len,t;printf("Input a string:");gets(s);len=strlen(s);fun(s,len,&t); //错误1if(t==0) printf("Not exist!\n");else printf("Result is:%s\n",s);
}
5 判断输入的三个数是否相等。
算法如下,请改正程序中的错误,使它能得出正确的结果。
#include <stdio.h>main()
{int a, b, c;scanf("%d,%d,%d", a, b, c);if (a = = b = = c)printf("The three number is equal!!!");elseprintf("The three number isn't equal!!!");
}
答案
- 一、
scanf
注意后面参数是赋给地址 - 二、不存在三元符
== ==
,需要分开 利用上逻辑符号&&
#include <stdio.h>main()
{int a, b, c;scanf("%d,%d,%d", &a, &b, &c); //错误1if (a == b && b == c) //错误2printf("The three number is equal!!!");elseprintf("The three number isn't equal!!!");
}
C语言改错题系列整理-非常容易0x1相关推荐
- c语言分支编程改错题,二级C语言改错 二级C语言编程题 汇总整理篇.doc
二级C语言改错 二级C语言编程题 汇总整理篇 360教育在线 宇创IT培训07年9月内部资料 内部资料,请勿公开传播 二.改错题 考试做题要求: 1.在/**********found******** ...
- C语言字母升序排列,C语言改错题,题目:实现n个字符串的升序排列
C语言改错题,题目:实现n个字符串的升序排列 #include #include #define ROW 5 #define COL 30 void fun(char s[][COL],int n) ...
- c二级语言程序编程题,二级C语言编程题 汇总整理篇.doc
二级C语言编程题 汇总整理篇 360教育在线 宇创IT培训07年9月内部资料 内部资料,请勿公开传播 三.编程题 考试做题要求: 1.按题目要求编写部分代码,不要改动已经有的代码. 2.在运行时如果遇 ...
- c语言求解一元二次方程的两相等实根,c语言改错题 有关求一元二次方程ax2+bx+c=0的两个实根...
c语言改错题 有关求一元二次方程ax2+bx+c=0的两个实根0 麻烦帮忙看看下面三个程序的区别~~谢谢啦 下列是用于求一元二次方程ax2+bx+c=0的两个实根的三个c程序,分别采用不同的方法或使用 ...
- c语言改错题字符串a放在b后面,C语言程序改错题汇总.doc
程序改错题汇总 1.用"起泡法"对连续输入的十个字符排序后按从小到大的次序输出.分别统计字符串中大写字母和小写字母的个数.求1到10的阶乘的和判断m是否为素数,若是返回1,否则返回 ...
- 国二c语言改错题答案,c语言国二考试编程题答案
<c语言国二考试编程题答案>由会员分享,可在线阅读,更多相关<c语言国二考试编程题答案(65页珍藏版)>请在人人文库网上搜索. 1.1m个人的成绩存放在score数组中,请编写 ...
- c语言刷题系列(一)
本系列随着我的C语言系列而更新,我会讲解我在学习中碰到的问题,都是基础,都是干货.非常适用于新手,还请各位看官支持一下吧! 1.判断一个数是否为奇数 int main() {int n = 0;sca ...
- C语言刷题系列——14.(结构)计算两个复数之积15.按等级统计学生成绩16.根据成绩高低将学生记录排序
几个与结构体相关的题 14.计算两个复数之积
- c语言程序的改错题答案,C语言改错题以及参考答案..doc
改错参考答案: (3)将字符串yy在屏幕上输出 #include void main() { /*********Found************/ char yy[100] = "ok? ...
最新文章
- idea提交git差件_多人合作使用git,推送代码、和并分支
- windows ftp服务器_ftp客户端软件,推荐6个流行的FTP客户端软件
- Ubuntu18.04安装常用软件
- javascript --- 属性描述符
- pb 打印html页面,用PB开发WEB应用
- mysql 查询语句属性值_MySQL学习——SQL查询语句(一)
- CSS基础——盒子模型【学习笔记】
- 从0开始写一个基于Flutter的开源中国客户端(7)——App网络请求和数据存储
- 小度独立融资,百度上演“大象跳舞”
- poodle attack
- 语音识别论文:Comparing the Benefit of Synthetic Training Data for Various Automatic Speech Recognition Arc
- 漂亮,这张 动态可视化 交互大屏图,也是用Python实现的!
- RHEL 7安装的步骤
- Direct3D中的纹理映射
- Hbase葱岭探秘--JavaApi实践
- IDEA跳至行首行末快捷键
- 适合大学生浏览的网站
- 广州工商学院计算机答辩,电子信息工程系2019届毕业生论文答辩新闻稿
- 敏捷开发大家谈(三)--敏捷开发技术在电子商务软件中的应用(2)
- 离散余弦变换(C++实现)
热门文章
- Git分支 查看branch 创建 切换checkout 合并merge(先切回主分支) 删除branch -d 推送push
- Java培训出来什么水平?
- element-ui中tree组件双击事件的实现
- debian基本设置以及配置XManager远程登录桌面、命令行设置、Xftp上传下载文件
- oracle vba 数组_vba 数据库目录
- 如何判断是否适合学编程?
- linux系统命令打不出字,常用的命令 linux
- docker创建容器相关命令【详细版】
- GT性能测试Android版使用说明
- 2022图灵奖出炉!以太网之父鲍勃·梅特卡夫获奖,76岁进入新领域再出发