⑴ C语言编程题目求助
这里考虑你所学内容,尽可能用最基本的知识写,没有使用指针,结构,链表等内容。只用了基本知识和循环结构。其中strcpy函数只是字符串复制函数,如果没用过也可以自己写循环实现字符串复制。
(以后如果考虑多组数据的存储,建议数据定义结构体,可以用malloc动态申请内存,字符串交换初始化可以使用string.h下的memset以及相关函数,或使用链表)
#include<stdio.h>
#include<string.h>
intinx=1;
voidoutput(intn);
intmain()
{
intn;
while(1)
{
printf("Input%d:
",inx);
scanf("%d",&n);
output(n);
}
}
voidoutput(intn)
{
charname[n][20],nameSave[20]={0};
floath[n];
inti,j;
for(i=0;i<n;i++)
scanf("%s%f",name[i],&h[i]);
for(i=0;i<n;i++)//升序排序
for(j=i+1;j<n;j++)
if(h[j]<h[i])
{
nameSave[0]=0;
strcpy(nameSave,name[i]);
name[i][0]=0;
strcpy(name[i],name[j]);
name[j][0]=0;
strcpy(name[j],nameSave);
}
printf("Output%d:
",inx++);
for(i=0;i<n;i++)//打印
printf("%s",name[i]);
printf("
");
}
⑵ C语言求助,题目有图,希望过程详细一些 。。。。
第一:对二维数组进行剖析
inta[8][8]是一个两维数组:a[行数][列数]就是8行,8列,
inta[8][8]={20,30,32,50,52,68,52,88,72,78,61,89,1,4,101,24,11,14,97,83};
inta[8][8]={{20,30,32,50,52,68,52,88},{72,78,61,89,1,4,101,24},{11,14,97,83}};
上面两行等效,第0、1行被完完整初始化,第2行部分初始化,没有被初始化的元素默认值为0.
第二:程序执行过程剖析
#include<stdio.h>
voidmain(void)
{
inti;
inta[8][8]={20,30,32,50,52,68,52,88,72,78,61,89,1,4,101,24,11,14,97,83};
for(i=0;i<6;i++)
{
printf("%d",a[i++][1+i]);
}
}
1).第一次执行
首先执行for(i=0;i<6;i++),i=0,判断i<6结果为TRUE然后执行下面一行
printf("%d",a[i++][1+i])时i=0,输出的是a[0][1]=30(0行,1列)
执行printf("%d",a[i++][1+i])后i++,i=1
最后执行for(i=0;i<6;i++)中的i++,i=2
2)第二次循环
首先执行for(i=0;i<6;i++),中的i<6结果为TRUE(此时i=2)
printf("%d",a[i++][1+i])时输出的是a[2][3]=83(2行,3列)
输出完毕后再执行完毕i++,i=3
最后执行for(i=0;i<6;i++)中的i++,i=4
3)第三次循环
首先执行for(i=0;i<6;i++)中的i<6结果为TRUE(此时i=4)
printf("%d",a[i++][1+i])时输出的是a[4][5]=0(4行,5列)
输出完毕后再执行i++,i=5
最后执行for(i=0;i<6;i++)中的i++,i=6
4)第四次循环
首先执行for(i=0;i<6;i++)中的i<6结果为FALSE(此时i=6)
循环结束
所以最终的输出结果为:30830
测试 验证结果
⑶ C语言求助,题目有图,希望过程详细一些!
A 、do循环先执行再判断,所以至少执行一次
B、continue语句是结束当前这一次代码的执行,继续下一次的判断及执行
C、break可以用在switch和所有循环中
D、break直接中断自身所在的循环,continue中断当前这一次
所以 A 是对的
⑷ C语言的题目,求助!!!
你好!!
#include<stdio.h>
voidmain()
{
unsignedchar*p1;
unsignedlong*p2;
p1=(unsignedchar*)0x801000;
p2=(unsignedlong*)0x810000;
printf("p1=%x\n",p1);
printf("p2=%x\n",p2);
p1=p1+5;
p2=p2+5;
printf("p1+5=%x\n",p1);
printf("p2+5=%x\n",p2);
}
结果:
p1=801000
p2=810000
p1+5=801005
p2+5=810014
Pressanykeytocontinue
解释:
p1=(unsignedchar*)0x801000;
是给指针变量赋值,即把十六进制0x801000放到字符指针变量中,即指针变量p1的值就是0x801000
p2=(unsignedlong*)0x810000;也是给指针变量赋值,同上
输出结果p1+5的值是801005,因为指针变量指向的值字符,加一表示指针向后移动一个字节,那么加5代表向后移动5个字节,所以输入801005
p5+5的值是801016,因为指针变量指向的长整形的,加一表示指针向后移动4个字节,那么加5代表向后移动20个字节,所以输入810014,(输出时十六进制)要是十进制就是810020了
⑸ C语言求助,题目
选D。
分析如下:
因为Line line();只是声明了一个函数叫line,这个函数会返回一个Line类的对象。
这只是一个函数声明而已,此语句并不会创建Line类的对象,因此不会调用构造函数,也不会调用析构函数。
但因为这里只有函数声明而没有定义函数,因此可能有警告,也可能报错。
⑹ C语言求助题目有图,希望过程详细一些
if(++a<9) 因为++a是先加(也就是先进行自加1再做判断),所以a自加1后变为10,再判断10<9,因为不成立,所以会输出下面的a--,而a--是后减,也就是先用a的值,在这一行结束后a才自减1,所以printf的时候a还是10不变,所以结果即为C
另外,图上两行printf都有语法错误,但是题目本身理解没有影响