C语言编程问题(麻烦各位高手给我解答,有重金悬赏)
(1)指出下面程序错误并改正。然后执行程序,分别写出当输入字符为g、a、M、Z时的程序运行结果。#include<stdio.h>main(){charch,c1,c2;...
(1)指出下面程序错误并改正。然后执行程序,分别写出当输入字符为g、a、M、Z时的程序运行结果。
#include <stdio.h>
main()
{ char ch,c1,c2;
printf("Enter a character:");
ch=getchar();
if((ch>='a')||(ch<='z')) /*如果是小写字母,则转换成大写字母*/
ch-=32;
c1=ch-1;
c2=ch+1;
if(ch='A') c1=ch+25;
else if(ch='Z') c2=ch-25;
putchar(c1);
putchar(ch);
putchar(c2);
putchar('\n');
}
(2)程序中错误,请改正
程序的功能是:输入一个华氏温度,要求输出摄氏温度。公式为:C= ,输出取2位小数。
源程序:
#include <stdio.h>
main()
{
float c,f;
printf("请输入一个华氏温度:\n");
scanf("%f",f);
c==(5/9)*(f-32);
printf("摄氏温度为:%5.2f\n"c);
}
(3)程序的功能是:按下列公式计算并输出s的值。其中a和b的值由键盘输入。
s=2ab/(a+b)2
待调试的源程序:
#include <stdio.h>
main()
{ int a,b;
float x;
scanf("%d,%d",a,b);
x=2ab/(a+b)(a+b);
printf("x=%d\n",x);
}
第一题是大小写转换 展开
#include <stdio.h>
main()
{ char ch,c1,c2;
printf("Enter a character:");
ch=getchar();
if((ch>='a')||(ch<='z')) /*如果是小写字母,则转换成大写字母*/
ch-=32;
c1=ch-1;
c2=ch+1;
if(ch='A') c1=ch+25;
else if(ch='Z') c2=ch-25;
putchar(c1);
putchar(ch);
putchar(c2);
putchar('\n');
}
(2)程序中错误,请改正
程序的功能是:输入一个华氏温度,要求输出摄氏温度。公式为:C= ,输出取2位小数。
源程序:
#include <stdio.h>
main()
{
float c,f;
printf("请输入一个华氏温度:\n");
scanf("%f",f);
c==(5/9)*(f-32);
printf("摄氏温度为:%5.2f\n"c);
}
(3)程序的功能是:按下列公式计算并输出s的值。其中a和b的值由键盘输入。
s=2ab/(a+b)2
待调试的源程序:
#include <stdio.h>
main()
{ int a,b;
float x;
scanf("%d,%d",a,b);
x=2ab/(a+b)(a+b);
printf("x=%d\n",x);
}
第一题是大小写转换 展开
4个回答
展开全部
三段程序都在 VS2010 编译通过
先集中说下问题
1. LZ 很多符号用的中文版本的标点符号,编译认不出来,所以出现很多怪提示。写代码的时候一定要关闭中文输入法
2. scanf() 中提供的应该是变量的地址 &a 而不是 a 本身,这和 printf 不同
3. 在写 if 判断是很容易用 = 表示“等于”判断,这样会出很多怪问题。“'A'==ch” 把变量写在 == 的右边,养成这样的习惯,有助于避免出错
4. 写复杂的算术表达式时,勤加()可以避免优先级混乱的问题,注意不同类型变量计算结果的转换,int 到 float 之类的转换常常丢失结果精度
======= 第一段程序 ========
#include <stdio.h>
int main()
{
char ch,c1,c2;
printf("Enter a character:");
ch=getchar();
if((ch>='a')&&(ch<='z')) // 这里应该用 &&
ch-=32;
c1=ch-1;
c2=ch+1;
if('A'==ch) c1=ch+25; // =是赋值,应用该 ==
if('Z'==ch) c2=ch-25; // 同上
putchar(c1);
putchar(ch);
putchar(c2);
putchar('\n');
return 0;
}
VS 2008 编译通过
Enter a character:g
FGH
请按任意键继续. . .
Enter a character:a
ZAB
请按任意键继续. . .
Enter a character:M
LMN
请按任意键继续. . .
Enter a character:Z
YZA
请按任意键继续. . .
======= 第二段程序 ========
#include <stdio.h>
// 发现LZ用的分号和逗号‘;,’都是中文的符号,应该关闭中文输入法用英文的分号和逗号‘;,’
int main()
{
float c,f = 0;
printf("请输入一个华氏温度:\n");
// scanf() 编译提示函数已不安全,使用scanf_s()代替
// 最关键的, 这里要提供变量 f 的地址 &f,而不是 f 本身
scanf_s("%f",&f);
// 这里 5/9 会导致结果 * 运算的结果转换成 int
c=(5.0/9.0)*(f-32);
printf("摄氏温度为:%5.2f\n",c); // 这里少了一个分隔的‘,’
return 0;
}
// 发现LZ用的分号和逗号‘;,’都是中文的符号,应该关闭中文输入法用英文的分号和逗号‘;,’
======= 第三段程序 ========
#include <stdio.h>
int main()
// LZ 的 {} 又用的中文版本 ……
{
int a,b; // 为了保证精度,建议a , b 最好定义为和结果 f 一样的类型
float x;
// 和上面同样的问题,使用 scanf() 的安全版本 scanf_s()
// 和上面同样的问题,应该是地址 &a,&b,而不是变量本身
scanf_s("%d,%d",&a,&b);
printf("a=%d\n",a);
printf("b=%d\n",b);
// 少了两个运算符 *
// + 号用的中文版本,编译器无法识别
// 由于 计算式返回 int 型结果,所以编译器提示可能需要类型转换,但是不影响使用结果可以编译通过
// 由于 a,b 都是 int 所以左边计算结果会被截掉小数部分,导致精度的丢失
// 所以必须对最后的‘/’加一个强制类型转化 (float) 或者 将 2 改成 2.0
/* 可以这么改 x = (float)(2*a*b)/((a+b)*(a+b)); */
x = (2.0*a*b)/((a+b)*(a+b));
//‘\’ 使用的中文版本, “\n” 会直接输出
// x 是 float 类型,应该使用 %f 格式控制符输出
printf("x=%5.2f",x);
return 0;
}
先集中说下问题
1. LZ 很多符号用的中文版本的标点符号,编译认不出来,所以出现很多怪提示。写代码的时候一定要关闭中文输入法
2. scanf() 中提供的应该是变量的地址 &a 而不是 a 本身,这和 printf 不同
3. 在写 if 判断是很容易用 = 表示“等于”判断,这样会出很多怪问题。“'A'==ch” 把变量写在 == 的右边,养成这样的习惯,有助于避免出错
4. 写复杂的算术表达式时,勤加()可以避免优先级混乱的问题,注意不同类型变量计算结果的转换,int 到 float 之类的转换常常丢失结果精度
======= 第一段程序 ========
#include <stdio.h>
int main()
{
char ch,c1,c2;
printf("Enter a character:");
ch=getchar();
if((ch>='a')&&(ch<='z')) // 这里应该用 &&
ch-=32;
c1=ch-1;
c2=ch+1;
if('A'==ch) c1=ch+25; // =是赋值,应用该 ==
if('Z'==ch) c2=ch-25; // 同上
putchar(c1);
putchar(ch);
putchar(c2);
putchar('\n');
return 0;
}
VS 2008 编译通过
Enter a character:g
FGH
请按任意键继续. . .
Enter a character:a
ZAB
请按任意键继续. . .
Enter a character:M
LMN
请按任意键继续. . .
Enter a character:Z
YZA
请按任意键继续. . .
======= 第二段程序 ========
#include <stdio.h>
// 发现LZ用的分号和逗号‘;,’都是中文的符号,应该关闭中文输入法用英文的分号和逗号‘;,’
int main()
{
float c,f = 0;
printf("请输入一个华氏温度:\n");
// scanf() 编译提示函数已不安全,使用scanf_s()代替
// 最关键的, 这里要提供变量 f 的地址 &f,而不是 f 本身
scanf_s("%f",&f);
// 这里 5/9 会导致结果 * 运算的结果转换成 int
c=(5.0/9.0)*(f-32);
printf("摄氏温度为:%5.2f\n",c); // 这里少了一个分隔的‘,’
return 0;
}
// 发现LZ用的分号和逗号‘;,’都是中文的符号,应该关闭中文输入法用英文的分号和逗号‘;,’
======= 第三段程序 ========
#include <stdio.h>
int main()
// LZ 的 {} 又用的中文版本 ……
{
int a,b; // 为了保证精度,建议a , b 最好定义为和结果 f 一样的类型
float x;
// 和上面同样的问题,使用 scanf() 的安全版本 scanf_s()
// 和上面同样的问题,应该是地址 &a,&b,而不是变量本身
scanf_s("%d,%d",&a,&b);
printf("a=%d\n",a);
printf("b=%d\n",b);
// 少了两个运算符 *
// + 号用的中文版本,编译器无法识别
// 由于 计算式返回 int 型结果,所以编译器提示可能需要类型转换,但是不影响使用结果可以编译通过
// 由于 a,b 都是 int 所以左边计算结果会被截掉小数部分,导致精度的丢失
// 所以必须对最后的‘/’加一个强制类型转化 (float) 或者 将 2 改成 2.0
/* 可以这么改 x = (float)(2*a*b)/((a+b)*(a+b)); */
x = (2.0*a*b)/((a+b)*(a+b));
//‘\’ 使用的中文版本, “\n” 会直接输出
// x 是 float 类型,应该使用 %f 格式控制符输出
printf("x=%5.2f",x);
return 0;
}
展开全部
(1)错3处 1. if((ch>='a')&&(ch<='z')) /*如果是小写字母,则转换成大写字母*/
2. if(ch=='A') c1=ch+25;
3. else if(ch=='Z') c2=ch-25;
(2) 错3处,改为 :scanf("%f",&f);
c=(5/9)*(f-32);
printf("摄氏温度为:%5.2f\n",c);
(3) 改为:{
int a,b;
float x;
scanf("%d,%d",&a,&b);
x=(float)(2*a*b)/(float)((a+b)*(a+b));
printf("x=%f\n",x);
}
2. if(ch=='A') c1=ch+25;
3. else if(ch=='Z') c2=ch-25;
(2) 错3处,改为 :scanf("%f",&f);
c=(5/9)*(f-32);
printf("摄氏温度为:%5.2f\n",c);
(3) 改为:{
int a,b;
float x;
scanf("%d,%d",&a,&b);
x=(float)(2*a*b)/(float)((a+b)*(a+b));
printf("x=%f\n",x);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
以下是我调试过的:
1.
#include <stdio.h>
void main()
{ char ch,c1,c2;
printf("Enter a character:");
ch=getchar();
if((ch>='a')||(ch<='z'))
ch-=32;
switch (ch)
{
case 'A': {c1=ch+25;c2=ch+1;break;}
case 'Z':
{c2=ch-25;c1=ch-1;break;}
default:
{c1=ch-1;c2=ch+1;}
}
putchar(c1);
putchar(ch);
putchar(c2);
putchar('\n');
}
2.
#include <stdio.h>
void main()
{
float c,f;
printf("请输入一个华氏温度:\n");
scanf("%f",&f);
c=5*(f-32)/9;\*这里不能先5/9,会得到0*\
printf("摄氏温度是%5.2f\n",c);
}
3.
#include <stdio.h>
void main()
{
float a,b;
float x;
scanf("%d,%d",&a,&b);
x=2*a*b/((a+b)*(a+b));\*用整型数除出来的会是整型,所以这里最好不要用整型,而且后面要打个在括号*\
printf("x=%f\n",x);
}
1.
#include <stdio.h>
void main()
{ char ch,c1,c2;
printf("Enter a character:");
ch=getchar();
if((ch>='a')||(ch<='z'))
ch-=32;
switch (ch)
{
case 'A': {c1=ch+25;c2=ch+1;break;}
case 'Z':
{c2=ch-25;c1=ch-1;break;}
default:
{c1=ch-1;c2=ch+1;}
}
putchar(c1);
putchar(ch);
putchar(c2);
putchar('\n');
}
2.
#include <stdio.h>
void main()
{
float c,f;
printf("请输入一个华氏温度:\n");
scanf("%f",&f);
c=5*(f-32)/9;\*这里不能先5/9,会得到0*\
printf("摄氏温度是%5.2f\n",c);
}
3.
#include <stdio.h>
void main()
{
float a,b;
float x;
scanf("%d,%d",&a,&b);
x=2*a*b/((a+b)*(a+b));\*用整型数除出来的会是整型,所以这里最好不要用整型,而且后面要打个在括号*\
printf("x=%f\n",x);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(1)
ZAH
ZAB
ZA.
ZA;
上面是程序的输出结果,不知道错没错,因为没有程序的设计意图的信息,如果不对的话可能是算法设计与预期实现不同,程序本身没错
(2)以下是第二题我经过调试成功后的程序
#include <stdio.h>
#include<math.h>
int main()//加一个INT
{
float c,f;
printf("请输入一个华氏温度:\n");
scanf("%f",&f);//这儿少了个取地址&
c=(5/9)*(f-32);//这应该是=而不是==
printf("摄氏温度为:%5.2f\n",c);
}
同时在调试时出现多个;,的输入法格式问题
请你自己检查。
(3)
#include <stdio.h>
#include <math.h>
int main()
{ int a,b;
double x;
scanf("%d,%d",a,b);
x=2*a*b/(a+b)*(a+b);//算法也有很多问题(a+b)*(a+b)也可写成(a+b)^2
printf("x=%f\n",x);//输出格式改为%f
return 0;
}
ZAH
ZAB
ZA.
ZA;
上面是程序的输出结果,不知道错没错,因为没有程序的设计意图的信息,如果不对的话可能是算法设计与预期实现不同,程序本身没错
(2)以下是第二题我经过调试成功后的程序
#include <stdio.h>
#include<math.h>
int main()//加一个INT
{
float c,f;
printf("请输入一个华氏温度:\n");
scanf("%f",&f);//这儿少了个取地址&
c=(5/9)*(f-32);//这应该是=而不是==
printf("摄氏温度为:%5.2f\n",c);
}
同时在调试时出现多个;,的输入法格式问题
请你自己检查。
(3)
#include <stdio.h>
#include <math.h>
int main()
{ int a,b;
double x;
scanf("%d,%d",a,b);
x=2*a*b/(a+b)*(a+b);//算法也有很多问题(a+b)*(a+b)也可写成(a+b)^2
printf("x=%f\n",x);//输出格式改为%f
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询