c语言难题

作者&投稿:齐蚀 (若有异议请与网页底部的电邮联系)
一道C语言难题~

#include #include "string.h"void ChangeChar(char *p){int i;for(i=0;p[i];i++)if(p[i]>='a' && p[i]='A' && p[i]='a' && p[i]='A' && p[i]0;i--,j--)p[j--]=p[i],p[j]=' ';}void DeleteSpace(char *p){int i=1,j=0;p[strlen(p)+1]='\0';while(p[i++]=p[j+=2]);}char *EncodeContent(char *p){ChangeChar(p);InsertSpace(p);return p;}char *DecodeContent(char *p){DisChangeChar(p);DeleteSpace(p);return p;}int main(int argc,char *argv[]){char text[1002];printf("Please enter a text...
");scanf("%500s",text);printf("After the encryption:
");printf("%s
",EncodeContent(text));printf("After decryption:
");printf("%s
",DecodeContent(text));return 0;}

首先我们计算mpll_val的值。这里涉及两个操作符<<(左移)和|(异或),都是二进制运算符。具体定义这里就不说了,可以自己查下。
mpll_val = (92<<12)|(1<<4)|(1);
92转换成二进制为01011100,将此数左移12位,也就是后面加12个0,变成01011100000000000000,转换成十进制为2^14+2^15+2^16+2^18 = 376832,
同理,1<<4转换成十进制为16,上面mpll_val = 376832|16|1,这个其实就相当于
376832+16+1(很简单,知道了异或的规则用二进制计算就知道了)。因此:
mpll_val = 376849

下面的rMPLLCON的值计算需要理解三个概念:函数,参数,异与操作符
函数指的的就是void ChangeMPllValue(int mdiv,int pdiv,int sdiv);
参数指的是这个函数中定义的三个整型参数,在下面的具体声明中,也是这三个参数:
void ChangeMPllValue(int mdiv,int pdiv,int sdiv){rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;}
最后实现过程ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);这三个参数分别对应(mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3这三个值。
这里我们只将第一个参数的值(mpll_val>>12)&0xff是多少:
mpll_val我们刚才已经计算为376849,现在mpll_val>>12就是右移,与左移相反,等于我们又将mpll_val打回原形变成了92,那么下面我们计算92&0xff,这里我们需要知道0xff是一个十六进制数。
以0x开始的数据表示16进制,0xff换成十进制为255。A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。16进制变十进制:f表示15。第n位的权值为16的n次方,由右到左从0位起。 0xff = 15*16^1 + 15*16^0 = 25516进制变二进制再变十进制: 0xff = 1111 1111 = 2^8 - 1 = 255
也就是92&255,用二进制表示就是
01011100
&11111111
=01011100
因此(mpll_val>>12)&0xff的值就是92,同理可以得出后面两个参数的值。最后代入
rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;(计算得知mdiv = 92,pdiv = 1, sdiv = 1)
最后计算rMPLLCON,你一定以为是376849,但是不是的,结果应该是没办法写入的,因为
#define rMPLLCON (*(volatile unsigned *)0x4c000004)//MPLL Control
简单来说这句话就是定义rMPLLCON为一个指向固定地址的常量,不是变量,具体参考http://blog.sina.com.cn/s/blog_65861d3f0100xsz0.html
最后,提供一个验证程序,自己调试看看吧:
#include#includevoid ChangeMPllValue(int mdiv,int pdiv,int sdiv);#define rMPLLCON (*(volatile unsigned *)0x4c000004)//MPLL Controlint main(){unsigned int mpll_val =0;mpll_val = (92>12)&0xff;ChangeMPllValue((mpll_val>>12)&0xff, (mpll_val>>4)&0x3f, mpll_val&3);getch();return 0;}void ChangeMPllValue(int mdiv,int pdiv,int sdiv){rMPLLCON = (mdiv<<12) | (pdiv<<4) | sdiv;}

给你个完整代码:

#include<stdio.h>
int sum(int s, int e)
{
int su = 0;
while (s <= e)
{
su += s;
++s;
}
return su;
}
int fc(int n)
{
int i;
int su=0;
for (i = 1; i <= n; i++)
{
su += sum(i, 2 * i);
}
return su;
}
int main()
{
int n;
printf("输入n:");
scanf("%d", &n);
printf("sum=%d
", fc(n));
return 0;
}



为什么说中文非常难学?
教学资源和环境:相比于英语等全球通用语言,中文的学习资源可能不那么丰富,特别是在非中文为官方语言的国家。此外,缺乏语言环境也是一个难题,因为在日常生活中很少有机会听说中文,这对语言学习是一个不利因素。尽管中文难学,但并非不可逾越。随着科技的发展和全球化的推进,越来越多的学习资源变得可用...

阳光语言矫正专家说:儿童语言发育迟缓与智商的关系是哪样的?
当面对这些孩子时,有些人会婉转地指脑壳,猜疑是不是因为智力发育迟缓造成,也是有人会十分毫无疑问的说孩子智商有什么问题。那是否是智商原因造成的呢?今日,我们就来看看太阳语言矫正权威专家是怎么说的。当孩子不愿意说话、不会聊天时,坚信没有任何一个父母想要承认自己的孩子存有智力难题。因此当...

孩子学习不好可能是有语言障碍?如何判断孩子是否有语言障碍呢?_百度...
孩子学习不好不可能是有语言障碍,判断孩子是否有语言障碍:大部分少年儿童都存在着听觉系统键入(听语了解)的难题,能够体现为字词语句的听语了解艰难及其认知功能障碍。一般儿童在一岁上下逐渐有目的讲话或是逐渐叫人如“父亲、母亲”等,逐渐可以这么说一些词句,可是语言障碍的青少年大部分超过这个年纪,...

宝宝3岁了还不会说话,这是语言障碍还是发育迟缓?
所以我们一定要改进传统式的教育方式,如何才能让这种办法获得更快的执行。危害孩子语言生长的缘故有许多。最立即的的原因是英语听力难题,假如孩子有听力方面难题,那么就直接关系了孩子对语言的培训,进而造成孩子的语言发展趋势。发音人体器官的的生理变病。发音人体器官包含唇、舌、喉、口腔内部运动器官和...

如何让自闭症孩子启口说话,听听首批口肌训练师怎么说?
对于自闭症孩子来说,语言障碍是自闭症儿童突出的特征之一,对其他特殊儿童来讲,语言问题也是孩子成长中的难题。因此语言训练是十分重要的康复内容。家长最关心的是如何让孩子启口说话,如何正确发音,从而产生言语;老师们关心的则是如何让孩子早日开口,圆家长的梦想!那么,如何让孩子启口说话?家长和特教...

移民葡萄牙语言不通怎么办
近些年以来,由于在购房移民的热潮引领之下,加上葡萄牙2012年推出了“黄金居留计划”,需投资50万元买房,就能得到居留权。因此,许多中国的申请者便选择葡萄牙移民,特别是葡萄牙买房移民。可一些人对此有很大担心,葡萄牙移民后的语言不通的难题。今天我就告诉你如何解决语言不通的问题。针对葡萄牙...

杜克大学教授:自闭症孩子错过语言关键期,就不能再说话了吗?_百度知 ...
“如果错过了6岁的语言发展关键期,那么孩子以后就不会再张口说话了!”想必很多家长都听到过这样善意的警告吧?确实,自闭症孩子的语言问题,总是很多家长最揪心的难题。语言作为孩子和外界接触的重要工具,如果孩子不能发展出语言,将会对未来的生活带来很大的障碍。在这种迫切心情下,很多家长为了逼迫孩子...

汉语为什么被称为“世界最难学的语言”?
在我们小时候都要学习英语,那个时候就觉得英语真难学啊,还是语文比较简单,如果问世界上最难的语言我们也会很快的说出是英语,但是如果随机问一个老外这个问题,那么答案十有八九是中文。随着中国的国际影响力越来越大,很多外国年轻人都开始学习中文,但是很大一部分都被其巨大的学习难度给劝退了,能够...

怎样提高自己的语言表达能力?
详情请查看视频回答

对于美国留学生而言,最困难的是哪些方面?
对于美国留学生而言,面临的挑战和困难是多方面的,包括但不限于以下几个方面:语言障碍:对于非英语母语的留学生来说,语言是最大的障碍之一。即便是托福或雅思成绩很高的学生,实际生活中与美国人的交流、课堂上的讨论、专业术语的理解等都可能成为难题。语言的不熟练会影响到学习效率,也可能导致社交上...

神木县18895271154: 学C语言时的遇到的难题 -
军荣中鑫: total=i++; 这个式子中 i 在 ++的前面,所以先返回 i 的值赋给 total ,然后 i 再自加为 101; 如果 total=++i; ++ 在 i 的前面的话,那么就是 i 先自加为 101 然后把自加后的值返回赋给 total

神木县18895271154: 我自学C语言可是现在遇到一个很大的难题啊!! -
军荣中鑫: 1*2*3*4*5 int s=1; int i; for(i=1;i<5;i++) { s=s*i; } 这个就解决了.至于其他的,我也遇见过你同样的问题.我现在基本上已经解决这些问题了.可能当时我看不进去,心里很烦躁,很郁闷.这时候,我就适当休息,然后再第二次再来看,我会发...

神木县18895271154: 两道c语言难题(对我而言)
军荣中鑫: #include &lt;stdio.h&gt; #include &lt;math.h&gt; int main() { int n,i,j; char c; scanf("%d %c",&amp;n,&amp;c); if(c&lt;'A'||c&gt;'Z') { return 0; } for(i=-(n/2);i&lt;=n/2;++i) { for(j=0;j&lt;n;++j) { if(j&lt;n/2-abs(i)||j&gt;n/2+abs(i)) { putchar('\040'); } else { putchar...

神木县18895271154: C语言编程超级大难题,高分求 -
军荣中鑫: #include<stdio.h> int min,max; //全局变量 void fun(int a,int b,int *min_c,int *max_d) { int temp,t; if(a<b) //大小数换位置 { temp=a; a=b; b=temp; } temp=a*b; //保存二数的积 while(b!=0) //求最大公约数 { t=a%b; a=b; b=t; } *min_c=a; *max_d=temp/(...

神木县18895271154: C语言难题高手请进.在小于10的素数中有3、5、7组成的等差数列,在小于30的素数中有11、17、23、29组成的等差数列.试找出区间[100,1000]内的素数构... -
军荣中鑫:[答案] 算法: 先求出100-1000之内所有素数的个数,记录下最大max和最小的值min,其中间的差值 是最大等差用于for循环for(int i=0;i

神木县18895271154: c语言难题?
军荣中鑫: #include <stdio.h> #include <stdlib.h> int main() { long l; scanf("%x",&l); int a=l&0x0000FFFF;//低16位 if((a&0x0001)==0) printf("低16位是偶数!"); else printf("低16位是奇数!"); int x=a&0x00FF; int y=(a&0xFF00)>>8; a=((x<<8)...

神木县18895271154: c语言难题 -
军荣中鑫: 就是把数据倒过来的程序,{1,2,3,4,5,6,7,8,};输出{9,8,7,6,5,4,3,2,1}

神木县18895271154: C语言难题 -
军荣中鑫: #include <stdio.h> main() { FILE *fp; //新建一个文件指针 int i, a[6]={1,2,3,4,5,6}, k; //新建整型变量i和k,以有一个长度为6的整型数组并作初始化 fp = fopen("data.dat", "w+b");//打开文件data.dat,打开方式为二进制可写,若无则创建该文...

神木县18895271154: C语言小难题 -
军荣中鑫: c语言的字符串是在读到'\0'后就结束了所以呢,你只要ttp[0] = '\0' 就可以了,这样就得到一个长度为1的字符串,不管后面的内容是什么,都没问题.如果你是希望让ttp里面的内容全部清0呢,有一个好用的函数,叫memset, 需要include<memory.h>你只要memset(ttp, 0, 20), 就行了, 第一个参数是目标地址,第二个参数是你要用来set的值,第三个参数是长度.顺便说一下,“扌明少”的方法是有问题的,那样子得到的是长度为1,内容为"0"的字符串,我估计这不是楼主要的结果吧:)

神木县18895271154: 有关c语言难题
军荣中鑫: 楼上似乎太简略了一点喔··· #include <stdio.h> void main() { int year; printf ("请输入一个年份: "); scanf ("%d",&year); if ( year %4 == 0 && year % 100 != 0 || year % 400 == 0 ) printf ("%d是闰年\n",year); else printf ("%d不是闰年\n",year); }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网