c语言编程问题! C语言编程问题

C\u8bed\u8a00\u7f16\u7a0b\u95ee\u9898\uff01

#include\u53ea\u5728C\u8bed\u8a00\u673a\u8bd5\u4e2d\u51fa\u73b0\uff0c\u53ef\u4ee5\u4e0d\u7ba1\u4ed6\u662f\u5e72\u4ec0\u4e48\u7684\u3002\u4e0d\u8fc7\u4f60\u52e4\u4e8e\u601d\u8003\u662f\u597d\u7684\u3002
#define
\u8fd9\u4e2a\u4e1c\u897f\u7684\u7528\u6cd5
\u5e94\u8be5\u4e0d\u96be\u5427\u3002\u5c31\u662f\u4e00\u4e2a\u7f6e\u6362\u800c\u5df2
#define
Price
30
\u8868\u793a\u8bed\u53e5\u4e2d\u51e1\u662f\u51fa\u73b0Price
\u7684\u5730\u65b9\u5c31\u752830\u4ee3\u66ff\u3002

print(\u201c\u8bf7\u8f93\u5165\u5706\u7684\u534a\u5f84:\u201d)\uff1b\u6539\u4e3a\uff1a
printf("\u8bf7\u8f93\u5165\u5706\u7684\u534a\u5f84:");//s=p*r*r\u6ca1\u6709\u5206\u53f7,\u6ce8\u610f\u662f\u82f1\u6587\u7684\u5206\u53f7\uff0c\u4e0d\u662f\u4e2d\u6587\u7684\u3002printf("\u5706\u7684\u9762\u79ef\u4e3a:\u201d)\uff1b //\u628a\u4e2d\u6587\u5206\u53f7\u6539\u6210\u82f1\u6587\u5206\u53f7

1.编程在一个已知字符串中查找最长单词,假定字符串中只含有字母和空格,空格用来分割不同单词!

方法一:

//VC++ 6.0 编译通过

#include<stdio.h>
void main()
{
char str[]="hello world my name is xun yi cao !!";
char*p=str,*p1;
int max=0,count=0,i;
while(*p)
{
count=0;
while(*p==' ')p++;
while(*p!=' '&&*p)
{//一定要注意这里的判断 *p!=0 也要判断,不然到了最后一个单词时,它一直向后面加,直到碰见空格,所以会超界。
p++;
count++;
}
if(max<count)
{
max=count;
p1=p-count;
}
}
printf("the largest number is :%d \n",max);
printf("the largest word is : ");
while(*p1!=' '&&*p1) //这里也要判断*p1!='\0',因为如果最长的单词在字符串的末尾的话,如果不判断*p1!='\0',也会过界。
{
putchar(*p1);
p1++;
}
putchar('\n');
}

/*
求字符串中最长的单词。要注意的是:如果在一个循环A 里面还有循环B 的话。那么不仅在循环B里面要保证,数组不过界。
而且要要保证在循环A里面数组也不过界。就像上面的例子一样。现给出一个更容易理解的例子。
while(*p)
{
while(*p!=' '&&*p)
{
p++;
}
}
虽然外循环和内循环在循环条件上没有什么必然的联系,但是对于一个数组的指针而言(如果以变量下标的
形式来访问数组的话,下标的加减也要引起注意),它的加减也要引起注意,必须要保证不能过界。
*/

方法二:

//VC++ 6.0 编译通过。

#include<stdio.h>
#include<string.h>
void main()
{
char str[]=" I am a student";
char*p=str,Array[10][20]={0};
int i=0,j=0,max=0;
while(*p)
{
while(*p==' ')*p++;
while(*p&&*p!=' ')
{
Array[i][j++]=*p;
p++;
}
i++;j=0;
}
i=0;
max=strlen(Array[i]);
p=Array[i];
while(strlen(Array[i]))
{
if(max<strlen(Array[i]))
{
max=strlen(Array[i]);
p=Array[i];
}
i++;
}
printf("%d\n%s\n",max,p);
}

/*
求字符串中最长的单词(不能分辨含非字母字符的单词),采用的是二维数组的形式判断的。
定义了一个二维数组,它的每一个元素用来存放一个字符串(每个被分离后的单词)。
再判断最长的那个。

这中方法对比第一种方法来说,思路更清晰一些。但是缺点就是要分配一个二维的数组来存放被分离后的每个
单词,占用存储空间。
*/

2.编写实现任意十进制数,转换成r进制数(r在2到16之间)

转换为二进制:

//VC++ 6.0编译通过

#include<stdio.h>
#include<string.h>
void main()
{
int a,b[30],i;
scanf("%d",&a);
for(i=0;a!=0;i++)
{
b[i]=a%2;
a=a/2;
}
for(--i;i>=0;i--)
{
printf("%d",b[i]);
}
putchar('\n');
}

//关于二进制的转换,还可以用位移运算符。通过和某一个数如1相按位与,就得到它的二进
制最低位,在位移,再得到二进制最低位,依此类推。

转换为8进制:

/VC++ 6.0编译通过。

#include<stdio.h>
#include<string.h>
void main()
{
int a,b[20],i;
scanf("%d",&a);
for(i=0;a!=0;i++)
{
b[i]=a%8;
a=a/8;
}
for(--i;i>=0;i--)
{
printf("%d",b[i]);
}
putchar('\n');
}

/*
转换为8进制就没有16进制那么麻烦了,它不需要另外定义一个字符数组用来存放,进制的
所有基数了,而是直接输出来就可以了。而对与16进制还要存放他的基数。从0到F
*/

转换为16进制:

//VC++ 6.0 下编译通过

#include<stdio.h>
#include<string.h>
void main()
{
int a,b[20],i,base=16;
char X[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
scanf("%d",&a);
for(i=0;a!=0;i++)
{
b[i]=a%base;
a=a/base;
}
for(--i;i>=0;i--) //开始有一个 --i
{
int j=b[i];
printf("%c",X[j]);
}
printf("\n");
}

/*
一般把其它进制的数转换为十进制的数较容易,有一个现成的乘法公式供我们使用。
但把十进制的数转换为其它进制的数,则要用到除法。这题的思路是比较清晰的,应该是
解决这类问题的典型算法了。

而对于把十进制的数转换为二进制的数来说,除了用到除法外,还可用位运算。

这个问题主要是这两句话值得理解:

b[i]=a%base;
a=a/base;
我们一般是用这两句循环使用来得到一个整数的各位的数字,这也恰巧说明了,我们得到
一个整数的各个位数所用到的方法,正是把一个十进制的数转换为一个 "十进制" 数的算法
也就是我们得到一个十进制数的各个位的数字的过程,实际上就是求把他转换为一个十进制
的数字的过程(虽然这里本身没必要在转换,因为本身它就已经是一个十进制数了)。用同样
的道理可以推算把十进制数转换为其他进制数的过程,和这个是类似的。

然后将后得到的结果先输出,而先取余数得到的结果则在数字的最后面,在低位。

*/

通用解决方案:

#include<stdio.h>
#include<string.h>
void main()
{
int a[10]={0,1,2,9,10,5,12,7,8,15};
for(int i=9;i>=0;i--)
{
if(a[i]>=10)
switch(a[i])
{
case 10: printf("%c",'A');break;
case 11: printf("%c",'B');break;
case 12: printf("%c",'C');break;
case 13: printf("%c",'D');break;
case 14: printf("%c",'E');break;
case 15: printf("%c",'F');break;
}
else
printf("%d",a[i]);
}
}

/*
其实进制转换的算法我们都知道,就是用我们要转换的那个数,对进制的基数(如果是16进制)
进行取余,把取余的结果保存在一个数组里面,再对他取整重新赋值,也就是丢掉余数部分,
相当于取上一步的商,再取余,再取整。如此循环,直到为0。

其实上面的算法,只要我们想起把一个十进制的数转换为二进制的数的计算方法,就不难理解,
因为都是相通的。

现在关键是,如果我的这些事情都做好了,也就是余数都放在一个数组里了,现在要做的就是
把数组逆序输出就ok了。那么如果是二进制或八进制,我们只要直接输出就可以了,但是如果是
一个十六进制的话,就不能这样了,也就是如果数组里面有一个元素是14,那么我就不能原样输出
了,此时必须输出E,因为E就是十六进制里面的基数,而且也是与十进制的14相对应的。但是如果
是一个二进制或者是一个八进制的话,就可以直接输出,因为数组里面的数都是0,1(对二进制)
或者(0....8),这些数就是二进制和八进制的基数。

所以这里要面临的问题就是,在输出一个整数的时候,如果这个整数满足某一条件,就输出什么字
符的问题,例如:如果这个整数等于14则输出'E'字符。

当然我们可以用 if..else 语句来判断,对于十六进制的数特殊的字符也就只有A,B,C,D,E,F六个
用 if...else 来判断也不算太烦琐。当然我们还可以用 switch 来判断,这样更加有条理。代码
也更清晰。

当然这是对于16进制的数来说的,我们可以这样判断,但是如果实际生活中遇到的问题和这个有点
类似,而且字母有多的话,用条件判断或switch就太烦琐了,代码也不直观,还容易出错。

那么这时我们可以在定义一个字符数组,分别放我们要输出的字符,如果有以下对应的关系:

10 A
11 B
12 C
13 D
14 E
15 F
16 G
17 H
18 I
19 J

也就是说在数组a里面放的是数字,在数组b里面放的是字符,要求数组a里面的数字是10的时候,输
出'A',而不是输出10,依次类推(看上面的对应关系),当然我上面的对应关系都是顺序的,其实也
可以不是顺序的,对于数字和字符都可以是乱的,当然这要看实际遇到的问题是什么样的了。如果
对上面的问题还用if...else来判断的话,那未免太烦琐。所以我们定义一个字符数组来专门存放
字符。那么怎么让数字和字符联系起来呢,怎么让a[i]的值是10的时候就输出'A'而是14的时候就输
出'E'呢,在这里我们可以这样定义b数组:

char b[30]={0};
b[10]='A';
b[11]='B';
b[12]='C';
b[13]='D';
b[14]='E';
...
b[19]='J';

这样也就是说当a[i]元素的值是10时,就输出b[10],是11就输出b[11];这样就和数字对应起来
了。我们可以这样用:

int t=a[i];
printf("%c",b[t]); a[i]的值是多少,我们就输出b[多少]

但对于上面举的例子来说,可以这样:

if(a[i]>=10&&a[i]<=19) //对应关系是连续的,才可以这样判断
{
int t=a[i];
printf("%c",b[t]);
}
else
{
printf("%d",a[i]);//如果不属于定义的对应的特殊字符,就原样输出。
}

当然了,上面的是对应的连续的情况,对与10进制与二进制,8进制,16进制之间的转换,都是连续的情况。
如果对应的是不连续的情况,那有该怎么办呢:

20 'A'
25 'B'
30 'D'
50 'G'
53 'H'
58 'C'
100 'Z'
200 'W'

对于上面的情况,是一点规律性也没有的,而且如果为了这几个数就去定义一个200个元素的数组,实在是
有点划不来。所以如果是上面这种情况,就没有比较好的办法了。只用用判断语句了,当然如果有20多个
字符的对应关系的话,判断语句也是不合适的,那么就没有比较好的办法了。还要进一步探索....

*/

这些都是我在考计算机等级考试碰到过的题目哦,算法都是相当典型的,有的是书上看到的,有的是自己扩展的。还是要自己认真哦。。。

由于文字太多第三题提交不上来了哦。。不好意思。。。

/*不要到这里帖题目,没人有这时间的,当然,你付钱的话就另当别论*/

2.任意r进制数么?

char temp[16];
long num;
_ltoa(num,temp,r);

3.
double total = 345.78;
total*100
m100 = total / 10000;
total %= 10000;
m50 = total / 5000;
total %= 5000;
m10 = total / 1000;
total %= 1000;
m5 = total / 500;
total %= 500;
m2 = total / 200;
total %= 200;
m1 = total / 100;
total %= 100;
m01 = total / 10;
total %= 10;
m05 = total / 5;
total %= 5;
m01 = total;

1.
void LARW(char str[])
{
int i=0,k,sign=0,len=0,word=0;
while(str[i])
{
if(('A'<=str[i]&&str[i]<='Z')||('a'<=str[i]&&str[i]<='z'))
{
if(!word)
{
word++;
k=i;
}
else word++;
}
else
{
if(word>len)
{
len=word;
word=0;
sign=k;
}
else k=0;
}
}
if(word>len)
{
len=word;
sign=k;
}
printf("the largest word is:\n");
for(i=0;i<len;i++)
{
printf("%c",str[sign+i]);
}
}

void main()
{
char a[200]={"I am a boy,i like to play football"};
LARW(a);
}

2:

void main()
{
int nNum,Rad,i=0,Residue;
int Store[50];
printf("请输入一个任意整数:");
scanf("%d",&nNum);
printf("\n请输入一个合法的表示进制的基数[2,16]:");
scanf("%d",&Rad);
if(Rad<=1)
exit(-1);
printf("\n转换后的结果是:");
while(nNum>=Rad)
{
Residue=nNum%Rad;//0
nNum/=Rad;//1
Store[i]=Residue;//0
++i;
}
Store[i]=nNum;

for(;i>=0;--i)
switch(Store[i])
{
case 0:
printf("0");
break;
case 1:
printf("1");
break;
case 2:
printf("2");
break;
case 3:
printf("3");
break;
case 4:
printf("4");
break;
case 5:
printf("5");
break;
case 6:
printf("6");
break;
case 7:
printf("7");
break;
case 8:
printf("8");
break;
case 9:
printf("9");
break;
case 10:
printf("A");
break;
case 11:
printf("B");
break;
case 12:
printf("C");
break;
case 13:
printf("D");
break;
case 14:
printf("E");
break;
case 15:
printf("F");
break;
}

printf("\n");

}

哈 只能说你。够懒。我也懒

  • c璇█缂栫▼闂!!
    绛旓細鍏朵粬绫讳技闂 2016-11-07 C璇█缂栫▼闂 2018-01-09 C璇█缂栫▼闂 2020-05-21 C璇█缂栫▼闂? 41 2020-04-21 鍏充簬c璇█缂栫▼闂! 36 2020-04-09 鍏充簬c璇█缂栫▼闂! 33 2020-01-15 C璇█缂栫▼鐨勯棶棰! 27 2019-05-27 C璇█缂栫▼闂! 30 2011-10-08 C璇█缂栫▼闂!!! 鏇村绫讳技闂 > ...
  • C璇█鍦缂栫▼鐨勬椂鍊欏簲娉ㄦ剰浠涔闂?
    绛旓細浜屻佺敤C璇█缂栫▼瑙e喅瀹為檯闂,鎵闇瑕佺殑涓嶄粎浠呮槸C璇█鐨勭紪绋嬬煡璇,杩橀渶瑕佺浉鍏崇殑涓撲笟鐭ヨ瘑銆備緥濡,濡傛灉浣犱笉鐭ラ亾闀挎柟褰㈢殑闈㈢Н鍏紡,鍗充娇C璇█瀛﹀緱鍐嶅ソ浣犱篃缂栦笉鍑烘眰闀挎柟褰㈢殑闈㈢Н鐨勭▼搴忔潵銆 涓夈C璇█绋嬪簭璁捐鏄竴闂ㄥ疄璺垫у緢寮虹殑璇剧▼,鈥滅焊涓婅皥鍏碘濆紡鐨勫厜瀛︿笉缁冩槸瀛︿笉濂紺璇█鐨勩備緥濡,澶у閮界湅杩囩簿褰╄嚜琛岃溅鏉傛妧琛ㄦ紨,...
  • c璇█缂栫▼闂
    绛旓細c璇█缂栫▼闂 杈撳叆涓琛屽瓧绗,鍒嗗埆缁熻鍑哄叾涓嫳鏂囧瓧姣嶃佺┖鏍笺佹暟瀛椼佸拰鍏朵粬瀛楃鐨勪釜鏁般#include<stdio.h>intmain(){charc;intletters=0,space=0,digit=0,other=0;printf("杈撳叆涓琛屽瓧绗:\n");while(... 杈撳叆涓琛屽瓧绗,鍒嗗埆缁熻鍑哄叾涓嫳鏂囧瓧姣嶃佺┖鏍笺佹暟瀛椼佸拰鍏朵粬瀛楃鐨勪釜鏁般#include <stdio.h>int main()...
  • 涓涓c璇█灏闂,缂栧啓绋嬪簭?
    绛旓細鎸夌収棰樼洰瑕佹眰缂栧啓鐨C璇█绋嬪簭濡備笅(瑙佸浘)
  • C璇█缂栫▼鍒濆闂
    绛旓細锛1锛夌▼搴忚緭鍑猴細c1=a;c2=b;c1=97;c2=98;鍥犱负锛氫綘鐢%c锛屽氨鏄綘瑕佽緭鍑轰竴涓瓧绗︼紝97鐨刟scii鐮佸氨鏄皬鍐欏瓧姣峚锛98涓篵锛涳紙2锛夊鏋滀綘鎶奵1=197锛宑2=198锛屽簲璇ヤ細鎻愮ず闅愬紡杞崲鍚э紝濡傛灉瀹氫箟char c1,c2锛岄粯璁や负鏈夌鍙风殑char鍨嬶紝鍙栧艰寖鍥翠负-128锝127锛屽洜姝よ緭鍑虹殑鏄197-256=-59,198-256=-58锛岃矊浼肩敤...
  • C璇█姹傛暀銆備竴涓皬灏忕殑缂栫▼闂,鍦ㄧ嚎绛
    绛旓細鏇村鍏充簬c璇█鐨勭煡璇 > 姝e湪姹傚姪 鎹竴鎹 鍥炵瓟闂,璧㈡柊鎵嬬ぜ鍖 鑻︾瓑1鍒嗛挓: 楂樹腑鐢熷钃濆厜杩囨晱瑕佹庝箞娌? 琚數鑴戞垨鎵嬫満鐓у皠鍒拌劯閮... 鍥炵瓟 鑻︾瓑30鍒嗛挓: 鏈夋病鏈変粈涔堣喘鐗╁晢鍩庢垨鑰卆pp鍍忓揩鐪嬪晢鍩庨偅鏍,鍗栦竴浜... 鍥炵瓟 鑻︾瓑31鍒嗛挓: 澶у鐢熷浣曟彁楂1000绫虫垚缁 鍥炵瓟 鑻︾瓑43鍒嗛挓: 姹傛帹鑽2000-3000浠蜂綅鐨勭瑪璁版湰鐢佃剳...
  • C璇█缂栫▼闂?
    绛旓細include "stdio.h"int main(){ char ch[5];int i;for(i=0;i<5;i++)scanf("%c",&ch[i]);//杈撳叆瀛楃 for(i=0;i<5;i++)printf("%c ",ch[i]);//閫氳繃涓嬫爣鎵撳嵃鍑烘暟缁勫唴鐨勫唴瀹 printf("\n");for(i=0;i<5;i++)printf("瀛楃锛%c 锛屾寚閽堬細%d\n",*(ch+i),ch+i);/...
  • C璇█缂栫▼棰
    绛旓細c = int(input("璇疯緭鍏ユ暣鏁癱锛"))d = int(input("璇疯緭鍏ユ暣鏁癲锛"))max_num = a if b > max_num:max_num = b if c > max_num:max_num = c if d > max_num:max_num = d min_num = a if b < min_num:min_num = b if c < min_num:min_num = c if d < min_...
  • C璇█缂栫▼闂,鍒濆鑰,涓嶅お浼,璋㈣阿
    绛旓細缂栧啓涓涓嚱鏁帮紝鍒犲幓杈撳叆鐨勪竴缁存暟缁勪腑鎵鏈夌浉鍚岀殑鏁,浣夸箣鍙墿涓涓傛暟缁勪腑鐨勬暟宸叉寜鐢卞皬鍒板ぇ鐨勯『搴忔帓鍒,鍑芥暟杩斿洖鍒犻櫎鍚庢暟缁勪腑鏁版嵁鐨勪釜鏁般傚湪涓诲嚱鏁拌緭鍏ヤ竴涓湁搴忔暟缁勶紝鎺ョ潃璋冪敤璇ヨ嚜瀹氫箟鍑芥暟锛屾渶鍚庤緭鍑哄垹闄ら噸澶嶆暟鎹悗鐨勬暟缁勫厓绱犮傚锛氳緭鍏ョ殑鏁扮粍鍏冪礌涓猴細999866000-2-2鎵撳嵃鐨勭粨鏋滀负锛9860-2 杩欎釜绋嬪簭鐨勫疄鐜...
  • C璇█缂栫▼闂姹傝В绛
    绛旓細9棰橈細include <stdio.h>int main(){int N=1;scanf("%d",&N);if(N<=0){N=1;}int numSpaceFirst=N-1;for(int row=0; row<N; row++,numSpaceFirst--){for(int i=0; i<numSpaceFirst; i++){printf(" ");}for(int i=0; i<2*row-1; i++){printf("*");}printf("\n...
  • 扩展阅读:少儿编程一般学几年 ... c语言植树问题模板 ... c++语言入门自学 ... 扫一扫题目出答案 ... c十十编程要学多久 ... c语言简单问题及答案 ... 编程一般要学多久 ... 三类人不适合学编程 ... 学编程一般不要超过多少岁 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网