c语言圈子,C语言经典编程
//?經典1
//隨機產生20個[10,50]的正整數存到數組中,并求出數組中的所有元素最大值,最小值,平均值以及個元素之和,及第二大值
int?a[20]?=?{0};
printf("隨機產生的元素:\n");
for?(int?i?=?0;?i?
a[i]?=?arc4random()?%?(50?-?10?+1)?+?10;
printf("%d??",a[i]);
}
printf("\n");
//求所有元素的最大值
int?max?=?0;
for?(int?i?=?0;?i?
if?(a[i]?>?max)?{
max?=?a[i];
}
}
printf("max?=?%d\n",?max);
//求所有元素的最小值
int?min?=?a[0];
for?(int?i?=?1;?i?
if?(min?>?a[i])?{
min?=?a[i];
}
}
printf("min?=?%d\n",?min);
//求所有元素的和
int?sum?=?0;
for?(int?i?=?0;?i?
sum?+=?a[i];
}
printf("sum?=?%d\n",?sum);
//求所有元素的平均值
float?mid?=?0;
mid?=?sum?/?20;
printf("mid?=?%.2f\n",?mid);
//求第二大值
int?smax?=?0;
for?(int?i?=?0;?i?
if?(smax?
smax?=?a[i];
}
}
printf("smax?=?%d",?smax);
//?經典2
//編程在一個已知的字符串中查找最長單詞,假定字符串只含字母和空格,用空格來分隔單詞
//思路:
//主要是判斷單詞,連續的字母,就假定為一個單詞,從讀取到第一個字母開始計數,然后直接遇到空格,為一個單詞的長度,用一個變量記錄,最長單詞的長度,如果要輸出最長的單詞,一般是放在數組里面,記住下標.
char?targetString[]?=?"I?come?china";
int?maxLength?=?0;//最長長度
int?currentLength?=?0;//當前得到的單詞的長度
int?maxIndex?=?0;//當前最長單詞的起始下標
int?tempArray[200]?=?{0};
for?(int?i?=?0;?i?<=?strlen(targetString);?i++)?{
if?(targetString[i]?!=?'?'?&&?targetString[i]?!=?'\0')?{
currentLength++;
}?else?{
if?(maxLength?<=?currentLength)?{
maxLength?=?currentLength;
maxIndex?=?i?-?currentLength;??//記錄當前最長單詞的起始下標
tempArray[maxIndex]?=?maxLength;
}
currentLength?=?0;//同時給記錄單詞長度的currentlength做清零操作
}
}
for?(int?i?=?0?;?i?
if?(tempArray[i]?==?maxLength)?{
for?(int?j?=?i;?j?
printf("%c",?targetString[j]);
}
printf("\n");
}
}
//?經典3
//耶穌有13個門徒,其中有一個就是出賣耶穌的叛徒,請用排除法找出這位叛徒:13人圍坐一圈,從第一個開始報號:1,2,3,1,2,3...凡是報到'3'就退出圈子,最后留在圈子內的人就是出賣耶穌的叛徒.請找出它原來的序號
int??array[13]={1,2,3,4,5,6,7,8,9,10,11,12,13};//模擬報數,0表示未退出圈子,1表示退出圈子
int??numbers=13;//表示剩余人數
int??count?=?0;//表示報數
int???i?=0;//?表示下標的循環變量
while?(numbers?>?1)?{
if?(array[i]!=0)?{//如果當前得到的數組元素不為0,表示沒有退出圈子,則count++表示報數
count++;
}
if?(count?==?3)?{
printf("%d號退出圈子\n",array[i]);
array[i]?=?0;//表示當前報數的人報的數為3,則通過數組元素賦值為0來表示他退出圈子
count?=?0;//報數歸0
numbers?--;//表示退出圈子后剩余的人數
}
i++;
i?=?i?%13;//?如果i為13時,讓i重新從0開始
}
for?(?int?i?=0;?i?
if?(array[i]?>?0)?{
printf("%d號是叛徒",array[i]);
}
}
//?經典4
//將兩個排好序的數組,合并到另一個數組中,并且合并之后的數組也是有序的
int?i?=?0,?m?=?5,?a[5]?=?{1,?3,?7,?9,?13};
int?j?=?0,?n?=?6,?b[6]?=?{2,?4,?8,?16,?20,?24};
int?k?=?0,?c[11];
while(i?+?j?
{
if(j?>=?n)?{
c[k++]?=?a[i++];
}
else?if(i?>=?m)?{
c[k++]?=?b[j++];
}
else?if(a[i]?
c[k++]?=?a[i++];
}
else?{
c[k++]?=?b[j++];
}
}
for(i?=?0;i?
printf("%d??",c[i]);
}
//?經典5
//有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。
float?sum?=?0;
float?x?=?2,?y?=?1,?temp?=?0;
for?(int?i?=?0;?i?
sum?=?sum?+?x?/?y;
temp?=?x;
x?=?x?+?y;
y?=?temp;
}
printf("%.3f",?sum);
//給一個不多于5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。
//方法一:
long?a=0,b=0;
int?t=0;
printf("請輸入不多于5位的正整數:\n");
scanf("%ld",&a);
if?(a?>=?100000)?{
printf("請輸入不多于5位的正整數\n");
}else?{
for(t=0;a>0;a/=10,t++)
{
b=(b*10)+a%10;
}
printf("這個數是%d位的,逆序數=%ld\n",t,b);
}
//方法二:
int?a?=?0,?b?=?0,?c?=?0,?d?=?0,?e?=?0,?x?=?0;
printf("請輸入不多于5位的整數:\n");
scanf("%d",?&x);
if?(x?>?100000)?{
printf("請輸入不多于5位的整數");
}else{
a?=?x?/?10000;//分解出萬位
b?=?x?%?10000?/?1000;//分解出千位
c?=?x?%?1000?/?100;//分解出百位
d?=?x?%?100?/?10;//分解出十位
e?=?x?%?10;//分解出個位
if?(a?!=0?)?{
printf("這個數是5位的,?逆序數?=?%d%d%d%d%d\n",e,?d,?c,?b,?a);
}else?if?(b!=0){
printf("這個數是4位的,?逆序數?=?%d%d%d%d\n",e,d,c,b);
}else?if?(c!=0){
printf("這個數是3位的,?逆序數?=?%d%d%d\n",e,d,c);
}else?if?(d!=0){
printf("這個數是2位的,?逆序數?=?%d%d\n",e,d);
}else?if?(e!=0){
printf("這個數是1位的,?逆序數?=?%d\n",e);
}
}
//?方法三
int?num?=?0,?temp?=?0,?i?=?0;
printf("請輸入一個數字\n");
scanf("%d",?&num);
while(num?>?0)
{
temp?=?num?%?10;
++i;
printf("%d",?temp);
num?=?num?/?10;
}
printf("\n這個數是%d位數",?i);
//?經典6
//一個5位數,判斷它是不是回文數.即12321是回文數,個位與萬位相同,十位與千位相同.
long?w?=?0,?q?=?0,?s?=?0,?g?=?0?,?x?=?0;
printf("請輸入一個5位數:\n");
scanf("%ld",?&x);
if?(x?>?100000?||?x?
printf("請輸入一個5位數:\n");
}else{
w?=?x?/?10000;//求萬位的數字
q?=?(x?%?10000)?/?1000;?//求千位的數字
s?=?x?%?100?/?10;//求十位的數字
g?=?x?%?10;//求個位數字
if?(g?==?w?&&?q?==?s)?{
printf("是回文數");
}
else{
printf("不是回文數");
}
}
//經典7
//星期一???Monday
//星期二???Tuesday
//星期三???Wednesday
//星期四???Thursday
//星期五???Friday
//星期六???Saturday
//星期日???sunday
//請輸入星期幾的第一個字母來判斷一下是星期幾,如果第一個字母一樣,則繼續判斷第二個字母
char?week1;
char?week2;
printf("星期一???Monday?\n星期二???Tuesday?\n星期三
Wednesday??\n星期四???Thursday??\n星期五???Friday??\n星期六???Saturday???\n星期日
sunday\nplease?enter?a?letter\n");
scanf("%c",&week1);
switch(week1)
{
case('M'?|?'m'):printf("the?answer?is?Monday\n");
break;
case'W':printf("the?answer?is?Wednesday\n");
break;
case('F'?|?'f'):printf("the?answer?is?Friday\n");
break;
case('S'?|?'s'):
{
printf("please?enter?the?second?letter\n");
scanf("%c",&week2);
getchar();
if(week2?==?('a'?|?'A'))
printf("the?answer?is?Saturday\n");
else
if(week2?==?('u'?|?'U'))
printf("the?answer?is?Sunday\n");
else
printf("there?is?no?answer\n");
}
break;
case('T'?|?'t'):
{
printf("please?enter?the?second?letter\n");
scanf("%c",&week2);
getchar();
if(week2?==?('U'?|?'u'))???????????????printf("the?answer?is?Tuesday\n");
else???????????????if(week2?==?('H'?|?'h'))
printf("the?answer?is?Thursday\n");
else
printf("there?is?no?answer\n");
}
break;
default:
printf("there?is?no?correct?answer\n");
break;
}
//?經典8
//有1000000個數,每個數取值范圍是0-999999找出其中重復的數,重復次數
int?a[1000000]?=?{0},?b[1000000]?=?{0},?count?=?0;
for(int?i?=?0?;?i?
a[i]?=?arc4random()%1000000;
b[a[i]]++;
}
for?(int?j?=?0?;?j?
if(b[j]?>?1){
count++;
printf("重復數是%d?\n",j);
}
}
總結
以上是生活随笔為你收集整理的c语言圈子,C语言经典编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux中cd命令及范例,15个Lin
- 下一篇: c语言中lookup函数功能,Looku