谁能看懂这个c语言的题目?
1. while循环里面不是到d=a;这句就结束了,这个理解是正确的,你的代码完全可以写成:
#include
main()
{
int a=1,b=2,c=3,d=4;
while(a++==b--<c)
{
d=a;
}
a=b,c=d;
c--;
printf("%d,%d,%d,%d",a,b,c,d);
}
2. a=b,c=d;这个只是一个逗号表达式,一般不影响我们的结果;只要不使用表达式的结果,这个语句完全可以理解为:a=b; c=d;。如果要使用表达式结果,具体可以看逗号表达式的规则。
3. 整个程序的关键是while的条件。加上括号可以帮助理解,while(a++ == (b--<c))
具体处理过程是:
第一次循环:
先计算b<c比较,表达式的值为1,执行b = b-1
比较a==1,这里的1是b<c的结果,执行a = a+1
由于a==1成立,所以进入循环体执行,即:d=a;
这时:a=2, b=1,c=3,d=2
第二次循环:
先计算b<c比较,表达式的值为1,执行b = b-1
比较a==1,这里的1是b<c的结果,执行a = a+1
由于经过上次循环后a=2,所以a==1不成立,直接退出循环
这时:a=3, b=0,c=3,d=2
再执行:a=b,c=d;
这时:a=0, b=0,c=2,d=2
再执行:c--;
这时:a=0, b=0,c=1,d=2
因为题目里的cnt和sum是全局变量,cnt=0和sum=0只是给它们去赋值,要是写成那种错误的形式,就是重新定义局部变量cnt和sum了,屏蔽了全局变量cnt和sum,这样在void countValue()函数里的操作就不能改变全局变量了。而其后的
程序中很多地方都用到了全局变量:
printf("满足条件的整数的个数=%d
",cnt);
printf("满足条件的整数的和值=%d
",sum);
writeDAT();
显然就不能这样做了啦。
#include <stdio.h>//以n=5,m=4,k=3为例
struct num
{
int a;
int b;
};
//f函数的主要作用是按s.b的升序将s排序(额,可能是巧合,但我还是感到出题人些许的恶意)
void f(struct num s[],int n)
{
int index,j,k;
struct num temp;
for(k=0;k<n-1;k++)
{
index=k;
for(j=k+1;j<n;j++)
if(s[j].b<s[index].b)index=j;
temp=s[index];
s[index]=s[k];
s[k]=temp;
}
}
main() //从这里开始运行函数
{
int count ,i,k,m,n,no;
//结构数组,书上应该有
struct num s[100],*p;
scanf("%d%d%d",&n,&m,&k);
//for循环:给数组赋值,s.b都是0(。。。)
for(i=0;i<n;i++) // s0,s1,s2,s3,s4
{ //a 1, 2, 3, 4, 5
s[i].a=i+1; //b 0, 0, 0, 0, 0
s[i].b=0;
}
p=s;
count=no=0;
//while循环:打乱数组,改变s.b的值(。。。)
//当no=5时,while循环结束
//p=s,所以p->b即s.b
while(no<n) //no =0 0 0 0 1 1 1 1 2 2 2 ......
{ // ......
if(p->b==0) // 不成立 ......
count++; //count=1 2 3 4 1 2 3 4 1 ......
if(count==m) // 成立 成立 ......
{ // ......
no++; //no = 1 2 ......
p->b=no; // s3.b=1 s2.b=2 ......
count=0; //count= 0 0 ......
} // ......
p++; //p =s1 s2 s3 s4 s5 s1 s2 s3 s4 s5 ......
if(p==s+n) // 成立 成立 ......
p=s; //p = s0 s0 ......
}
//最终得到 // s0,s1,s2,s3,s4
//a 1, 2, 3, 4, 5
//b 5, 4, 2, 1, 3
f(s,n);
//调用f函数的
// s0,s1,s2,s3,s4
//a 4, 3, 5, 2, 1
//b 1, 2, 3, 4, 5
printf("%d:%d\n",s[k-1].b,s[k-1].a);
}
望采纳!
#include <stdio.h>
struct num //定义一个结构体num,包含a,b两个整型量
{
int a;
int b;
};
void f(struct num s[],int n) //定义一个由小到大排序函数,输入参数为结构体数组s[],和数组中元素 { //个数n
int index,j,k;
struct num temp;
for(k=0;k<n-1;k++)
{
index=k;
for(j=k+1;j<n;j++)
if(s[j].b<s[index].b)index=j;
temp=s[index];
s[index]=s[k];
s[k]=temp;
}
}
main()
{
int count ,i,k,m,n,no;
struct num s[100],*p;
scanf("%d%d%d",&n,&m,&k); //输入数组元素个数n,输入循环间隔m,输入要输出的第k个数.
for(i=0;i<n;i++) // 按次序为这n个元素赋值,a 为从1开始到n,b为0
{
s[i].a=i+1;
s[i].b=0;
}
p=s;
count=no=0;
while(no<n) //从数组第一个数开始一次向后计数,每遇到b==0,计数加1,计到m就
{ //将no加1,并将相应元素值赋为no;依次循环下去,知道no=n-1为止
if(p->b==0)count++;
if(count==m)
{
no++;
p->b=no;
count=0;
}
p++;
if(p==s+n)
p=s;
}
f(s,n);
printf("%d:%d\n",s[k-1].b,s[k-1].a);
}
元素个数为5,计满4,输出第3个数;
结果应是:
1 2 3 4 5
-----------
0 0 0 1 0
0 0 2 1 0
0 0 2 1 3
0 0 2 1 3
0 4 2 1 3
在排序 为 0 1 2 3 4
所以,应是 第三个元素为(3,2),答案为(2,3)
其他的依此
学习C语言看例子能够看懂~但是自己写程序却老写不出来.
程序刚开始学习的时候要多看,要理解程序所要表达的思想,但是不能一直看,更多的情况下,只有通过自己不断的联系才可以发现自己容易犯的错误,从而加以改进,其实有很多哪怕是最简单的语法规则如果是自己来编的话都有可能犯错。所以一句话,看程序要一句句地分析,但不要以为自己看懂了就会了,还要拿来...
c语言看得懂不会写怎么办
1)多敲代码,不要光看,要多动手;2)写代码的时候不要看例题,要自己看题目自己动手编写;3)自己写的代码正确与错误不重要,重要的是,你能看懂错误信息,并且修改正确。
哪个大神能给我解释一下 这个c语言程序怎么翻译
这个数是素数{printf("%5d",m); \/\/输出m的值,右对齐,占5位n++; \/\/计数器n增加1}if(n%10==0) \/\/如果n能被10整除printf("\\n"); \/\/换行}printf("\\n"); \/\/换行getch(); \/\/程序执行后,等待输入任意字符结束} ...
自学c语言 零基础 看什么书 该怎么学
《《啊哈C语言:小学生坐在马桶上都可以读懂的C语言编程入门书》.zip》百度网盘资源免费下载 链接:https:\/\/pan.baidu.com\/s\/1aEXrb1oxnRmMWUlafELpfQ 提取码:pusr啊哈C语言:小学生坐在马桶上都可以读懂的C语言编程入门书
C语言自学能看懂吗???
1.你要对它产生兴趣,并且在学习的过程中自己编写一些小程序,不会写抄书上的也行,调试通过,用这些小的成就感来保持你继续学习的兴趣 2.要有恒心和信心,第一次看不懂可以再看一次,甚至可以看多次,我当初就是这样的,有些程序看了很多次才看懂 3.程序语言是相通的,学好了C语言,以后学其他...
很多C语言开源软件的源代码很难懂,要快速理解有什么技巧吗?
1,编程技巧。这种比较容易弄懂,如果你对编程语言熟悉的话,一步一步展开来就知道作者想表达的意思了。(这个就像小时候学语文的语法,“把”字句改成“被”字句,意思没变,写法变了)2,算法。这个就算你一步一步展开都不一定能看懂,这个要有一定的数学知识,比如向量积,线性回归,微分方程,卷积...
c语言 将两个数组合并(一个升序,一个降序)再升序输出,新手,简单的 能...
\/\/ 将升序后的a 和 降序后的b 合并到c,并且 结果为升序 void combie_ascend(int* a, int len_a, int* b, int len_b,int*c, int len_c){ int cur_index_c = 0;int cur_index_a = 0;\/\/a 为升序,最小的元素下标是0 int cur_index_b = len_b-1;\/\/b 为降序,最小的...
学的C++语言能看懂纯C语言的代码吗?
C++ 语言是鉴于 C语言的基础之上 学C语言主要是学习逻辑思维 而在C++ 语言上 除了格式的差别 其他的规律 像 循环体 之类的 都能看到 C语言的 影子 所以LZ 只要看看 C语言的 格式 和 关键字 熟悉一下 就能看懂了
对C语言有一些基本认识了,能看懂代码和写一些基本代码,但是遇到题目...
出现你这种问题的现象不在少数。通常来说,要学习编程语言,方法归纳起来,一共有四多:a,多学!指基本的语法要学会;b,多练!指自己要多写代码联系;c,多看!指有目的的看过来人写的代码,特别是某些开源项目的代码;d,多思考分析!指的是在面对一个实际项目的时候,需要先对其进行分析,使用...
求C语言大神讲解一下这个程序算法的意思,就是为什么要这样算??我能看...
首先在你提供的函数中求两个数a和b的最大公约数用的是辗转相除法,这个算法可以从数学分析入手去理解它:1、如果a除以b的余数为r,商为q,则可以表示成 a = q*b + r,下面证明:(a,b) = (b,r)如果d为a和b的最大公约数,则由a = q*b + r 知,d能整除等式的左侧,那么也必然能...
骆舍盐酸: 源文件就有问题. 最后结果是abcbcc程序改为如下,在VS2005下可以运行#include <string.h> //包含string,所以就可以用strcpy这个字符串复制函数 #include <stdio.h> //包含stdio.h,这样就可以用printf void main() {char ch[]="abc",x[3][4];...
岳阳楼区14750818239: C语言中的一道例题,谁能帮忙详细解释一下每一步的含义? - ?
骆舍盐酸: 输出为: bcdefgha解释:char *ss( char *s) 函数ss 返回一个指向字符串的指针;函数参数 s 是一个指向字符串的指针这样,在main 中调用 ss(str)后,s指向了s...
岳阳楼区14750818239: 各位高手,各位同行,谁来帮我看看这道C语言题 - ?
骆舍盐酸: 直接给你程序:#include <stdio.h> void print(int* a) { int i=0; for(i=0;i<10;++i) printf("%d ",a[i]); } void backMove1(int a[10],int m) { int i=0; int b[10]; for(i=0;i<10;++i) b[i] = a[i]; for(i=m;i<10+m;++i) { a[i%10] = b[i-m]; } print(a); } void backMove2(int* a,...
岳阳楼区14750818239: 谁能帮我分析这道c语言程序题吗? - ?
骆舍盐酸: 5,6,7,8,9,0,1,2,3,4.仔细看函数就行,无非就是个交换函数,先0-3交换,...
岳阳楼区14750818239: 谁能帮我看下这个C语言题??
骆舍盐酸: (1): 2进制:1010 补码为:1010 (一个正整数的补码和该数的原码相同) (2): 二进制:10010001 补码是:11101111
岳阳楼区14750818239: 急!!急!!!请大家帮小弟看一下这个C程序题. - ?
骆舍盐酸: #include int a=1; //这里的a是全局变量,谁都可以访问它int f(int c) { static int a=2; //这里的a是静态变量,也是全局变量,但只有本函...
岳阳楼区14750818239: 谁来帮我分析下这个C语言题 请详细解释下??
骆舍盐酸: main() {long s=0,t=2; int n,i=1; scanf("%d",&n); while(i++<=n){ s+=t;t=t*10+2;} printf("%ld",s); } 用n来控制你想输出的2 的个数,可以从键盘上输入任意数,这样就不单纯求(n=5)了,s来表示和,i控制循环次数,最后输出求和结果
岳阳楼区14750818239: 一道c程序题目,我看不懂,求高手指点 - ?
骆舍盐酸: 45=0,然后float型的数据都是用2的多少次方来表示的int8_t代表8位带符号整数.0(11100)循环,至于uint8_t的范围就是0~255了,0xd3=16*13+3=211,所以0,范围就是-128~127了
岳阳楼区14750818239: 谁能给我解释下这个c语言题目?
骆舍盐酸: SQR(X)是个宏,也就是预定义的式子,SQR(x)就代表x*x,但宏只是简单的代码代换,不做优先级等运算处理,所以a=++SQR(k+1);就是a=++k+1*k+1;然后先运算++k,得到k=4,之后4+4+1=9因此a是9
岳阳楼区14750818239: 哪位高手给我讲一下这个基础的C语言题目?我没搞明白,谢谢!!! - ?
骆舍盐酸: #include<stdio.h>#define N 5main(){ int a[N]={9,6,5,4,1},temp,i; printf("\n orininal array:\n"); \\这里\n表示换行 for(i=0;i<N;i++) printf("%4d",a[i]); //输出,每个数据占用4个字符位 for(i=0;i<N/2;i++) { //下面的代码表示交换,就像交换两个杯子...