c语言的两个程序 帮忙解析一下

c语言的两个程序 帮忙解析一下,第1张

第一个和第二个不是一模一样么? 你看看是不是搞错了。。。 charalp[]={"ABC","DEF","GHi"}; 这句话是定义了一个char型的指针数组,三个指针分别指向"ABC","DEF","GHi"; for(i=0;i<3;i++) puts(alp[i]); 这段就是将三个指针所指向的字符串显示出来。 还有什么问题尽管提,初学者对于指针和字符串方面都比较吃力的。

第 1 题:12

逗号运算符是顺序点,且其结合性为从左到右。所以,该表达式可按下面的顺序计算:

x=2。值为 2,且变量 x 被修改为 2。

y=x+3。值为 5,且变量 y 被修改为 5。

z=y+x。值为 7,且变量 z 被修改为 7。

z=y+z。值为 12,且变量 z 被修改为 12。

整个表达式的值(相当于)是最后一项的值,即 12。

逗号是双目运算符,所以上面的顺序只是等价表示,编译器采用的计算方式随实现而异,但结果总是 12。

第 2 题:0

7 的二进制是 111,~7 的末位就是 000,“~”的优先级又比“&”高,所以 ~7&3 的值是 0,整个 && 表达式的值也就是 0。

第 3 题:0 或 1(见下)

x&1 即 x 的最低位,对于普遍使用的补码表示法,无论 x 的正负,如果 x 是奇数,x&1 就等于 1;如果 x 是偶数,x&1 就等于 0。但 % 运算不同,当 x 是非负数时,x%1 和 x&1 相等;但当 x 是负数时,x%1 等于负的 x&1。这是 % 运算的定义导致的结果。所以如果 x 是非负数,或 x 是偶数,则该表达式的值为 1;否则(x%1 的值为-1)该表达式的值为 0。当然,如果这里的 x 就是第 1 题中的 x,那结果是 1。

第 4 题:编译错误

“2m”不是合法的 C 标识符,“m”也不是有效的数字后缀,所以这个表达式不符合语法。

第 5 题:1

12321 的二进制表示是 0011 0000 0010 0001,012321(八进制数)的二进制表示是 0001 0100 1101 0001,& 运算的优先级高于 || 运算,所以先计算出 12321&012321 的值为 4097(0001 0000 0000 0001),它和 0x1234 进行 || 运算,二者都不为 0,结果显然是 1。

#include <stdioh>

#include <timeh>

#include <windowsh>

int fun(intx,int n)//求长度为n+1的数组x[]的全部元素的和,使用了递归

{

if(n==0) //若只有x[0]一个元素,直接返回

return x[0];

else //若不止一个元素,递归长度为n的数组

return x[0]+fun(x+1,n-1);

}

main()

{

int a[]={1,2,3,4,5,6,7};//定义数组a

printf("%d\n",fun(a,3));//求a的前四的元素的和并打印

}

ch_upper=ch_lower-‘a’+‘A’;

‘b’ - 'a' = 1, 'a'-‘a’ = 0

A + 0 = A, A+1= B

这里的运算其实是拿字符对应的Ascii码参与的运算

ch_lower = ‘b’

ch_lower-‘a’ = ‘b’ - ‘a’ = 98 - 97 = 1

ch_lower-‘a’+‘A’ = 1+‘A’ = 1 + 65 = 66 = B

挺有意思的问题,简单谈一下看法

将你的需求分成两部分,一是让程序自行解析用户输入的函数解析式,二是绘制函数图像。

首先,关于第一个功能,最直接的思路就是字符串解析,按照数学知识定义不同的运算符号,按照使用习惯定义常用的变量和常量的符号字母,然后据此规则解析输入的字符串,再根据解析结果确定函数中基本运算的次数及运算顺序,最后将整个 *** 作流程以一定形式存储起来即可。

例如,对于y=log(x^2+x),包含三次基本运算,第一步是x^2,第二步是上一步的结果+x,第三步是上一步的结果求对数。注意到log有定义域的限制,这也是要在程序中实现的。

然后,对于第二个功能,根据给定函数绘制图像并不难,对于一元和二元函数来说很容易实现,难点在于多元函数应如何绘制直观易懂的函数图像?不过这一点超出编程语言的范畴了,而且二元函数可以满足大部分应用场景了。

绘制函数图像的程序只需在定义域上按指定的步长求出不同自变量对应的函数值,然后将点连成线,即可绘制出函数图像。例如对于logx,定义域为x>0。假设步长为01,则可求出01,02,03,,999,1000的函数值,然后绘制出点,再连点成线,即可得到函数图像。

另外,这里还有很多细节没有讨论,例如输入数据是字符串还是图像;是否可以用其他方法解析输入,例如神经网络。这些就很复杂了,不再深入。

回答中可能有考虑不周的地方,希望上述内容对你有参考意义

#include<stdioh>

#include<stringh>

#include<stdlibh>

main()

{

void sc(char fp,char key,int Flen,int Klen);

FILE fp; //定义文件指针

char pBuf,filename[20],key[20],ch; //定义一个缓冲区指针,文件名字符数组,加密字符数组,一个字符

printf("请输入选择:A、加密 B、解密 C退出\n"); //提示输入A/B/C

ch=getchar(); //获取键盘输入

while(ch!='c'&&ch!='C') //判断键盘输入,如果输入的不是C

{

if(ch=='a'||ch=='A'||ch=='b'||ch=='B') //如果输入的是a/A/bB

{

printf("请输入要打开的文件名:\n"); //提示输入要打开的文件名

scanf("%s",filename); //取得输入的文件名

if((fp=fopen(filename,"rb"))==NULL) //打开文件

{printf("无法打开文件,请注意输入后缀!\n"); //如果无法打开文件则提示

exit(0);

}

fseek(fp,0,SEEK_END); //将位置指针移到文件末尾

int len=ftell(fp); //取得指针相对于文件头的位移量

pBuf=new char[len+1]; //pBuf指向一个长度为len+1的缓冲区

rewind(fp); //位置指针置于文件开头

fread(pBuf,1,len,fp); //读入fp指向的文件,每次读入1字节,读入len次,放入pBuf指向的缓冲区

pBuf[len]=0; //缓冲区末尾置0作为结束标记

printf("%s\n",pBuf); //显示读入的内容

fclose(fp); //关闭文件

printf("请输入加密/解密的密码:\n"); //提示输入密码

scanf("%s",key); //输入字符

sc(pBuf,key,len,strlen(key)); //调用加解密函数

printf("请输入保存加密文件的文件名:\n"); //提示输入文件名

scanf("%s",filename); //输入字符

if((fp=fopen(filename,"wb"))==NULL) //打开文件

{printf("无法保存文件,请注意磁盘是否已满!\n"); //提示无法保存文件

exit(0);

}

else

fwrite(pBuf,1,len,fp); //可以打开文件则将pBuf指向的缓冲区中的内容保存

fclose(fp); //关闭文件

printf("请输入选择:A、加密 B、解密 C退出\n"); //提示选择A/B/C

}

else {

printf("输入错误,请重新输入\n");

}

ch=getchar();

ch=getchar();

}

}

void sc(char fp,char key,int Flen,int Klen)

{int i,j,k; //定义三个整形变量

for(i=0;i<Flen;i+=Klen) //控制异或运算次数

for(j=i,k=0;k<Klen;j++,k++) //key与数据进行等长运算,每次处理长度为Klen的数据

fp[j]^=key[k]; //key相应字节与文件相应字节运算

fp[i]='\0'; //文件缓冲区末尾置0标记

printf("%s\n",fp); //显示加密/解密后的内容

}

以上就是关于c语言的两个程序 帮忙解析一下全部的内容,包括:c语言的两个程序 帮忙解析一下、C语言 程序设计 求解析、c语言(要解析)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9311136.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存