① c语言 难题
#include<stdio.h>
double _a,_i;
void fun(char op,double a,double b,double c,double d)
{
if(op=='+'){
_a=a+c;
_i=b+d;
printf("(%.2lf+%.2lfi)%c(%.2lf+%.2lfi)=%.2lf+%.2lfi\n",a,b,op,c,d,_a,_i);
}
else if(op=='-'){
_a=a-c;
_i=b-d;
printf("(%.2lf+%.2lfi)%c(%.2lf+%.2lfi)=%.2lf+%.2lfi\n",a,b,op,c,d,_a,_i);
}
else if(op=='*'){
_a=a*c;
_i=b*d;
printf("(%.2lf+%.2lfi)%c(%.2lf+%.2lfi)=%.2lf+%.2lfi\n",a,b,op,c,d,_a,_i);
}
else if(op=='/'){
_a=a/c;
_i=b/d;
printf("(%.2lf+%.2lfi)%c(%.2lf+%.2lfi)=%.2lf+%.2lfi\n",a,b,op,c,d,_a,_i);
}
else printf("ERROE!\n");
}
int main()
{
char op;
double a,b,c,d;
while(1){
scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
getchar();
scanf("%c",&op);
fun(op,a,b,c,d);
}
return 0;
}
② C语言难题怎么做
#include <stdio.h>
int conv(int n)
{
int x[4]={1,1,1,1},h[6]={6,5,4,3,2,1},sum,i;
for(sum=0,i=0;i<4;++i)
{
sum+=x[i]*(n-i>=0&&n-i<=5?h[n-i]:0);
}
return sum;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d ",conv(n));
return 0;
}
③ c语言难题 请高手进来帮忙解决 在线等
#include <stdio.h>
int main()
{
char sex,sports,diet;
double faHeight,moHeight,yourHeight;
printf("输入你的性别(F女/M男):");
scanf("%c",&sex);
getchar();
printf("输入你父亲的身高(cm):");
scanf("%lf",&faHeight);
getchar();
printf("输入你母亲的身高(cm):");
scanf("%lf",&moHeight);
getchar();
printf("你喜爱体育运动吗?(y/n)");
scanf("%c",&sports);
getchar();
printf("你有有良好的饮食习惯吗?(y/n)");
scanf("%c",&diet);
getchar();
if (sex=='F')
yourHeight=(faHeight*0.923 + moHeight) / 2;
else if (sex=='M')
yourHeight=(faHeight + moHeight)*0.54;
else printf("性别错误\n");
if (sports=='y') yourHeight=yourHeight*1.02;
if (diet=='y') yourHeight=yourHeight*1.015;
printf("你的身高为:%lfcm",yourHeight);
return 0;
}
你把程序改成这样就可以了!就是double和float的类型转换!
④ C语言难题,求解决啊 只要编写子函数。
void findmax(int a[m][N], int n[m]){
for(int i=0;i<m;i++){
int max=a[i][0];
n[i]=0;
for(int j=0;j<N;j++){
if(a[i][j]>max){
n[i]=j;
max=a[i][j]
}
}
}
}
⑤ 如何解决c语言难题。 某餐厅有18个包厢,编号为1到18。其中a[i]存储第i个包厢的
a[19];//各个包厢的座位数
int GuestNum[4];//每组的客人数
bool UsedFlag[19]={false};//包厢已经使用标志
int AllocRoom(int GuestNum){//分配最合适包厢函数
int BestRoom=20;//初始设定为不存在的包厢号,用于后面判断是否有合适包厢
int Temp=20;//用于保存包厢座位数与客人数的差值
for(int i=0;i<19;i++)
{
if(a[i]>0&&//无预定的房间
a[i]-GuestNum>=0&&//确保每一位客人都能就座
Temp>=a[i]-GuestNum&&//判断有更合适的包厢
UsedFlag[i]==false)//判断包间处于空闲状态
{
Temp=a[i]-GuestNum;//保存差值用于下一次判断有更合适的包厢
BestRoom=i;//更新最合适包厢号
}
}
UsedFlag[BestRoom]=true;//最合适包厢找出,将该包厢标为已使用
return BestRoom+1;//输出包厢序号
}
main()
{
INPUT(GuestNum[4]);//获取每组客人数
int Number=0;//最合适包厢序号
for(int i=0;i<4;i++)
{
Number=AllocRoom(GuestNum[i]);
if(Number==21)
OUTPUT(第i组家庭 没有合适的包厢);//输出
else
OUTPUT(第i组家庭在Number号包厢就餐);//输出
}
}
这是一个想法骨架,你看着改。
⑥ C语言的问题怎么解决
第一条语句应该没问题,不清楚的可能是while循环开始。
首先while语句先执行条件里的赋值,即i=k-1;这时i=18。并且条件为真。只要是不为零,都为真。因为条件里的是赋值语句而不是关系语句(是=号,而不是==号)。
进入循环后执k=k-3,此时k=16.
然后是if语句。16%5=1,不等于0,因此执行else部分。
此时else中的if的条件是16<5,不成立。执行下面的语句i++。i的值为19.
进入下一次循环。
此时k=16,while条件中i=15,然后k=13,13%5=3,i=16,进入下一次循环。
此时k=13,while条件中i=12,然后k=10,10%5=0,条件成立,i=13,continue直接进入下一次循环。
此时k=10,while条件中i=9,然后k=7,7%5=2,i=10,进入下一次循环。
此时k=7,while条件中i=6,然后k=4,4%5=4,此时else中的if语句条件(k<5)成立,break语句跳出循环。
最后执行printf语句。
i=6,k=4
写这么多很辛苦,希望给予采纳!
⑦ C语言难题
typedef struct stu{
char * name,gender;
int score;
}STU;
void f(char *p)
{
//p=(char *)malloc(10);
strcpy(p,"Qian");
}
int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(b.name);
b.gender ='f';
b.score =350;
printf("%s,%c,%d
\n",a.name,a.gender,a.score);
printf("%s,%c,%d
\n",b.name,b.gender,b.score);
return 0;
}
为啥注释掉了以后的答案变成:Qian,m,290,Qian,f,
350,?
而不注释掉答案却是: Zhao,m,290,Zhao
,f,350?
你的目的是通过函数去修改另外一个结构体对象b中成员name
的值。
观察到成员中的gender和score基本上没有什么值得研究 ,
所以只研究第一个成员name。
在你执行了代码b=a的时候,b和a分别在内存条上占用
sizeof(stu)的空间大小。而且,这两个空间中的值都是一
模一样的。
当你执行了函数f()的时候,分两种情况。
第一没有注释:函数f会在栈上分配4个字节的内存(sizeof
(char*),因为p的类型就是char*)。那么p的值就是等于
b.name。
b.name的值我们假设是0x1234567,那么现在p的值也就是
0x1234567。没有注释的情况下,p的值马上被修改成malloc
的返回值,所以现在p的值一定不是0x1234567。
假如malloc的返回值是0x7654321,那么现在p的值也就是
0x7654321。你使用了strcpy,那么0x7654321首地址开始的
内容就变成了zhao。
所以,你没有改变0x1234567所指向的内容。结果就是
0x1234567指向的内容还是为zhao。
第二有注释:函数f会在栈上分配4个字节的内存(sizeof
(char*),因为p的类型就是char*)。那么p的值就是等于
b.name。
b.name的值我们假设是0x1234567,那么现在p的值也就是
0x1234567。有注释的时候。p的值没有被malloc改变,还是
0x1234567.你使用了strcpy,就修改了0x1234567所指向的
内存。
最开始的内存中值是zhao,你修改后就变成了qian.
你的这个例子错误很多,但是基于你是实验的目的,我就不指
正了。针对不注释的情况,如果你要改变的话,我认为比较正
确的做法应该是这样的。
typedef struct stu{
char * name,gender;
int score;
}STU;
void f(char **p)
{
*p=(char *)malloc(10);
strcpy(*p,"Qian");
}
int main(void)
{
STU a={NULL,'m',290},b;
a.name=(char *)malloc(10);
strcpy(a.name,"Zhao");
b = a;
f(&b.name);
free(a.name);
a.name=NULL:
return 0;
}
⑧ C语言学不会怎么办
C语言学不会怎么办?我大一的时候也需要学C语言,C语言学习方法有很多,下面是我的建议。
1.首先应该记住基础知识点,如数组,结构体,指针等相关内容,如果在编程过程中遇到想不起来的知识点,一定要及时去翻书或者上网搜索。
_
⑨ c语言中数据溢出的问题怎么解决
需要准备的材料分别有:电脑、C语言编译器。
1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp,输入问题基础代码。
⑩ C语言问题,求大神解决,谢谢啦,我是小白,最好能够解释下原因
已修改,看注释
#include<stdio.h>
int main()
{
char a[20],b[20],c[50],*p1,*p2,*p3;
p1=a,p2=b,p3=c;
gets(a);
while(*p1)
{
*p2 = (*p1)+3; //对字符串中的每个字符用加3的方法加密并存入数组b
p1++;
p2++;
}
*p2='\0'; //串结束符
p2=b ; //p2重新指向b的开始位置
while(*p2)
{
*p3 = (*p2)-3; //对b中的字符串解密存入数组c
p3++;
p2++;
}
*p3='\0';
puts(a); //puts是输出一个串
puts(b);
puts(c);
return 0;
}