c语言编程问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言编程问题相关的知识,希望对你有一定的参考价值。

输入一行字符,分别统计出其中英文字母、空格、数字、和其他字符的个数。
#include <stdio.h>
int main()

char c;
int letters=0,space=0,digit=0,other=0;
printf("输入一行字符:\n");
while((c=getchar())!='\n')

switch(c)

case 'A':letters++;break;
case 'B':letters++;break;
case 'C':letters++;break;
case 'D':letters++;break;
case 'E':letters++;break;
case 'F':letters++;break;
case 'G':letters++;break;
case 'H':letters++;break;
case 'I':letters++;break;
case 'J':letters++;break;
case 'K':letters++;break;
case 'L':letters++;break;
case 'M':letters++;break;
case 'N':letters++;break;
case 'O':letters++;break;
case 'P':letters++;break;
case 'Q':letters++;break;
case 'R':letters++;break;
case 'S':letters++;break;
case 'T':letters++;break;
case 'U':letters++;break;
case 'V':letters++;break;
case 'W':letters++;break;
case 'X':letters++;break;
case 'Y':letters++;break;
case 'Z':letters++;break;
case 'a':letters++;break;
case 'b':letters++;break;
case 'c':letters++;break;
case 'd':letters++;break;
case 'e':letters++;break;
case 'f':letters++;break;
case 'g':letters++;break;
case 'h':letters++;break;
case 'i':letters++;break;
case 'j':letters++;break;
case 'k':letters++;break;
case 'l':letters++;break;
case 'm':letters++;break;
case 'n':letters++;break;
case 'o':letters++;break;
case 'p':letters++;break;
case 'q':letters++;break;
case 'r':letters++;break;
case 's':letters++;break;
case 't':letters++;break;
case 'u':letters++;break;
case 'v':letters++;break;
case 'w':letters++;break;
case 'x':letters++;break;
case 'y':letters++;break;
case 'z':letters++;break;
case ' ':space++;break;
case 0:digit++;break;
case 1:digit++;break;
case 2:digit++;break;
case 3:digit++;break;
case 4:digit++;break;
case 5:digit++;break;
case 6:digit++;break;
case 7:digit++;break;
case 8:digit++;break;
case 9:digit++;break;
default:other++;break;


printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n",letters,space,digit,other);

问一下内循环用switch有没有简单方法?

编程发现的最长的单词在字符串中的一个已知的,它假定该字符串只包含字母和空格,空格用来分隔不同的话!

方法:

/ / VC + + 6.0编译器

包括
无效的主要() BR />
字符STR [] =“世界你好我的名字是曹寻医!”;
的char * p = STR,* P1;
MAX = 0,计数= 0,我
而(* P)

计数= 0;
而(* p =='')P + +;
(* P!='' && * p)
/ /我们必须注意的判断* P! = 0来判断,或到最后一个字,它已被添加到背面直到满足空间,所以将超级部门。
P + +;
计数+ +;

(MAX <计数)

最大计数;
P1 =对数;


printf的(“人数最多的是:%d条\ n”);,最大
printf的(“最大的一句话是:”);
(* P1 ='' && * P1)/ /这里要判断* P1! ='\ 0',因为结尾的字符串中最长的单词,如果你不判断* P1! ='\ 0',也界。

的putchar(* P1);
P1 + +;

的putchar('\ n');

BR /> / *
在字符串中寻找最长的单词。注:A B.如果在一个循环中循环,以确保不仅在环路B,数组但是行业。
而且里面的数组A,但也是扇区,以确保循环。像上面的例子。现在提供一个更容易理解的例子。
而(* P)

而(* P!='' && * p)

P + +;


外循环和内循环的循环条件没有必然的,但对于一个指针数组(如果变量标
访问数组下标减法还要注意),加法和减法应该引起人们的注意,必须确保不流溢。
* /

方法:

/ / VC + + 6.0编译通过。

#包括
包括中
无效的主要()

字符STR [] =“我我的学生“;
的char * p = str中,数组[10] [20] = 0;
INT I = 0,J = 0,最大值= 0;
而( * P)

而(* p =='')* p + +;
(* P && * p!='')

>阵列[I] [J + +] = * p;
P + +;

i + +; J = 0;

= 0;
最大= strlen的(阵列[I]);
P =阵列[I];
(strlen的(阵列[I]))

(最大的strlen(阵列[I]))

最大值= strlen的(ARRAY [I]);
P =阵列[I];
<BR /我+ +;

printf的(“%e\ n%s的\ n”,最大,P);


/ *
>寻求中最长的单词的字符串(不区分词与词之间包含非字母数字字符),法官的二维数组的形式。
定义了一个两维数组,每个元素都用于存储一个字符串(每个分离的字)。
然后判断的时间最长。

比较第一种方法,这种方法更清楚地了解?一些。但缺点是,你要分配一个二维数组来存储分离
字,占用存储空间。
* /

实现任何十进制将R十六进制数2-16(R)

转换为二进制:
/ / VC + + 6.0编译通过

#包括
包括
无效的主要()
/>诠释A,B [30],我
scanf的(“%d”,&A);
(i = 0;了!= 0;我+ +)

B?[我] = 2%;
= A / 2;

( - I I> = 0;我 - )

printf的(“%d”,B [I]);

的putchar('\ n');


/ /二进制的转换,也可以使用位移运算符。一定的数量,如1相的二进制
系统的最低位按位“与”,得到的位移,然后得到的二进制最低位,等等。

转换为八进制:

/ VC + + 6.0编译器。

#包括
#,包括
无效的主要()

整数A,B [20]我
scanf的(“%d”,&A);
为(i = 0;了!= 0; i + +)

B [我] = 8%;
= A / 8;

( - I I> = 0; I - )

printf的(“% D“,B [I]);

的putchar('\ n');


/ *
8转换到那里没有十六进制这么大的麻烦,它并不需要定义一个用于存储
所有的基数十六进制的字符数组,但可以直接输出。同时保存他和十六进制基数。从0到F
* /

转换为16进制:

/ / VC + + 6.0编译通过

stdio.h中>
#,包括
无效的主要()

整数A,B [20],我基础= 16;
字符X [16] = '0','1','2','3','4','5','6','7','8','9','A' ,'B','C','D','E','F';
scanf的(“%d”,&A);
(i = 0;了! 0; i + +)

B [我] =%的基础;
= A /基地;

( - ; = 0; I - )/ /开始 - 我

诠释J = B [我];
printf的(“%c”的,X [J]); BR />
printf的(“\ n”);


/ *
一般其他十六进制数转换为十进制数更容易,准备乘法公式,我们使用。
十进制数转换为十六进制数,则要使用除法。的想法?这个问题是明确的,应该是
典型的算法来解决这些问题。

它的十进制数转换成二进制数,在除了使用部门,但还带着几分算术。

主要的问题是值得理解这两个词:

B [我] =%的基础;
= A /基地;
我们一般采用两种循环使用,得到一个整数的数字,这也恰好说明我们得到了
整数位的方法,它是一个十进制数转换为十进制数的算法
,是,我们得到一个小数位数字的过程,实际上是寻找他的过程中,转换为十进制
数字(虽然本身无需转换本身的时候,就已经是一个十进制数)。事实可以预计相同
十进制数转换成十六进制数的过程中,这是类似的。

然后在第一个输出的结果,取余数的结果,年底的数字,在低位。

* /

解决方案:

#包括
包括的
>无效的主要()

诠释一个[10] = 0,1,2,9,10,5,12,7,8,15;
(INT I = 9;我= 0; I - )

(A [I]> = 10)
开关([I])

10:printf的(“%c”的,'A');突破;
案例11:printf的(“C”,“B”);
情况下,12:printf(“请%C “,'C');休息;
案例13:printf的(”C“,”D“);
情况下,14:printf的(”%c“的,'E');打破;
情况下,15:printf的(“%c”时,'F');休息;

其他
printf的(“%d”的,一个[i]);



/ *
事实上,二进制的转换算法,我们知道的是,我们希望将其转换成16进制数(如果十六进制) />取余数,剩下的结果存储在一个数组里面四舍五入重新分配给他的,那就是扔掉的其余部分,
相当于外商前面的步骤,然后采取余数,再取整。如此循环,直到0为止。

事实上,上述算法,它提醒我们一个十进制数转换成二进制数计算,是不难理解的,
是相通的。

现在的关键是,如果这些东西都是好的,那就是,其余的被放置在一个数组中,现在要做的,
阵列反向输出就OK了。二进制或八进制,只要它的直接输出,但如果
十六进制,不能的情况下,也就是说,如果一个元素的数组里面是14的话,我不能作为输出/>,则必须输出E,因为E是十六进制内底,但也有相应的十进制数14。
一个二进制或八进制,可以直接输出,因为阵列的数量是0,1(二进制)

(0 .... 8),这些数字的二进制和八进制基地。

所面临的问题在这里是输出一个整数,这个整数满足一定的条件下,输出字
突破,例如:如果该整数等于14'E'字符的输出。

当然,我们可以使用.. else语句,以确定特殊字符的十六进制数,它是唯一的A,B,C,D,E,F 6
以确定是否...否则太麻烦了。当然,我们也可以使用开关来确定这更有组织。代码
更清晰。

当然,这是一个十六进制数,我们可以判断,但如果在现实生活中遇到的问题,这一点
条件或交换机上太麻烦了类似的信件,代码是不直观,但也容易出错。

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

10 A
11 B BR /> 12?
13e
14 -
15 F
16?
17 H
18我
19 J
>
该数组,把数字,里面的字符数组b数组,一个里面的数字是10,当输入
'A',而不是输出10,等等(见上面的对应)课程我上面的对应关系是连续的,其实
的数字和字符的顺序可能不乱,当然,这取决于实际遇到的问题是什么。
以上,如果...否则以确定它是否会过于繁琐。因此,我们定义了一个字符数组来存储
字符。因此,如何接触数字和字符,如何让一个[i],价值10时,但14失去
'E'输出'A',我们可以定义b数组:
/>字符B [30] = 0;
B [10] ='A';
B [11] ='B';
B [12] ='C'
B [13] ='D';
B [14] ='E';
...
B [19] ='J';

因此,这意味着,当该元素的值一个[i] 10:00输出[10] 11输出[11];这和数字对应
。我们可以使用:

诠释吨= [];
printf的(“%c”时,B [T]),[i]的值,我们输出B [多少]

对于上面的例子中,它可以是:

如果(一个[i]> = 10 &&一个[i] <= 19)/ /对应关系是连续的,可以判断

诠释吨= [];
printf的(“%c”时,B [T]);

其他

printf的(“%d”,一个[i]);/ /如果你不属于特殊字符的定义相应的输出。



当然,上面是相应的连续十进制和二进制,八进制,十六进制的转换,是连续的。
相应的连续,即如何做到这一点:

20'A'
25'B'
30'D'
50'G' /> 53“H”
58的'C'
100'Z'
200'W'

以上,没有规律性,和数目,这些去定义一个数组的200个元素,
有点划不来。因此,如果是上面这种情况下,有没有更好的办法。只有在判断语句,当然,如果有超过20
字符的对应关系来确定语句是不恰当的,那么有没有更好的办法。同时进一步探讨......

* /

这是我的测试计算机等级考试主题碰到哦,算法相当,一些书,一些扩展。还是自己严重的哦。 。 。

由于太多的文字提出的第三个问题不上来,哦。 。抱歉。 。 。追问

初学者!还没学数组!

参考技术A int main()
char c;
int letters=0,space=0,digit=0,other=0;
printf("输入一行字符:\n");
while((c=getchar())!='\n')
//循环输入字符
if (c>='0'&&c<='9') digit++;//统计数字
else if ((c>='a'&&c<='z')||(c>='A'&&c<='Z')) letters++;//统计字母
else if (c==' ')space++;//统计空格
else other++;


printf("字母数:%d\n空格数:%d\n数字数:%d\n其他字符数:%d\n",letters,space,digit,other);
return 0;
追问

我意思是用switch语句有没有简单方法?

追答

switch(c) 时
case +一个具体的值,不能加范围,要是非得用switch,只能像楼主那样穷举了

本回答被提问者和网友采纳
参考技术B 根据ascii码值判断,比如英文字母的值有个范围,直接用if语句判断一下就行,空格这种就更容易判断了,ascii值唯一。。。 参考技术C #包括
包括
包括中
诠释TIME0,TIME1,TIME2,M1,M2;
浮一
T(INT TIME0,时间1,时间2);
浮动米(持股量M1,浮动平方米);
字符的NewMessage [45];
字符消息[45 “那只敏捷的棕色狐狸跳过了懒惰的狗。”;
诠释的主要()
(1)
printf的(“敏捷的棕色狐狸跳过了懒惰的狗。 “);
getchar函数();
T(定时器0,TIME1,TIME2);

返回0;

诠释吨(TIME0 ,诠释时间1,诠释TIME2)
时间1 =时间(NULL);
得到(的NewMessage);
M(M1,M2);
TIME2 =时间(NULL);
TIME0 = TIME2时间1
printf的(“您可以使用%d秒的正确率%.2 f%%\ n”,TIME0 a/44 * 100);
/>浮动持股量持股量M2货币供应量M1,M()

= 0;
(i = 0;我<44; i + +)

(消息[I] ==的NewMessage [I])
A + +;

参考技术D 第一个问题:
无效的主要()

整数= 0;
INT I = 1;
(i = 1; <= 100; + +)

A = A + I;


(I <= 100)

= A + I;
我+ +;



A = A + I;
+ +;

(I <= 100)

第二个问题,到1-100奇:
= 0;
INT I = 1;
(i = 1; <= 100; i + +)

(i%2 == 1)
A = A + ;


(I <= 100)

(i%2 == 1)
A = A +;
i + +;



(i%2 == 1)
A = A +;
+ +;

而(I <= 100)

第三个冠军1-100
诠释= 0;
INT I = 1;
为(i = 1; <= 100,我+ +)

(i%2 == 0) /> A = A + I;


(I <= 100)

(i%2 == 0)
A = A +;
+ +;



(i%2 == 0)
A = A +;
+ +;

(I <= 100)

C语言中的一个编程问题

求一个程序,急急急!!!
输入一行包含数字字符,请用数组元素作为计数器来统计每个数字字符(0-9)的个数.用下标为0的元素统计“0”的个数,用下标为1的元素统计“1”的个数……以此类推,有谁知道,赶紧告诉我,谢谢啊!

#include <stdio.h>

void main(void)

unsigned char i,j,num[11]=0;
unsigned char a[30];
scanf("%s",a);
for(i=0;i<29;i++)

if((a[i]<='9')&&(a[i]>='0'))

j=a[i]-48;
num[j]++;


printf("num[0]=%d\nnum[1]=%d\nnum[2]=%d\nnum[3]=%d\nnum[4]=%d\nnum[5]=%d\nnum[6]=%d\nnum[7]=%d\nnum[8]=%d\nnum[9]=%d\n",
num[0],num[1],num[2],num[3],num[4],num[5],num[6],num[7],num[8],num[9]);


vc6.0中测试完全可用 输入字符串字符个数小于30.
unsigned char a[30]; 可以改大。for(i=0;i<29;i++)相应的29也要改大。
参考技术A int 数组a[],全幅值为0,
for()//循环整个数字字符,数字字符记为str[]

++a[str[i]];


循环完后,a[]中就是统计数
参考技术B 我刚写的 看看可以不:
#include<stdio.h>
void main()

int a[10]=1,2,4,0,4,5,6,9,7,8;
int b[10]=0,0,0,0,0,0,0,0,0,0;
int i,p;
for(i=0;i<10;i++)
p=a[i];
b[p]++;
for(i=0;i<10;i++)
printf("%d is %d\n",i,b[i]);

以上是关于c语言编程问题的主要内容,如果未能解决你的问题,请参考以下文章

c语言问题

c语言问题

C语言数组问题?

C语言编程 集合子集问题

c语言问题?????????

兔子繁殖问题 C语言编程