给字母保密的c语言,C语言练习题
1.保密電文:某電報(bào)局的電文保密規(guī)律是將每個(gè)英文字母變成其后的第4個(gè)字母,例如A變成E,a變成e。最后四個(gè)字母(W, X,Y,Z或w,x,y,z)變成前四個(gè)字母(A,B,C,D或a,b,c,d)。電文中的非字母字符不變。
要求:
輸入一行字符串,輸出改變的字符串。
程序分析:
本程序?qū)?6個(gè)小寫字母和26個(gè)大寫字母轉(zhuǎn)換為ASCll碼。
ASCll碼對(duì)照表:
圖片來(lái)源:http://tool.oschina.net/commons?type=4
由對(duì)照表得知英文字母的ASCll碼都在(65–90和97–122)之間,所以只需要判斷輸入的字母是否在這個(gè)順序之間,如果在此區(qū)間內(nèi),則對(duì)此數(shù)字的ascll碼加上4,例如:a的acsll碼為97,加4變?yōu)閑。
而對(duì)于W,X,Y,Z和w,x,y,z則需要另行判斷對(duì)其ascll碼減去22得到修改后的字母。
題目程序:
#include
int main()
{
char n[1000];
int i;
gets(n);
for(i=0;n[i]!='\0';i++)
{
//判斷字母否為26個(gè)英文字母
if(((65<=(int)n[i])&&((int)n[i]<=90))||((97<=(int)n[i])&&((int)n[i]<=122)))
{
//判斷是否為a--v或A--V
if(((65<=(int)n[i])&&((int)n[i]<87))||((97<=(int)n[i])&&((int)n[i]<119)))
{
n[i]=n[i]+4;
printf("%c",n[i]);
}
//判斷是w--z和W--Z
else
if(((87<=(int)n[i])&&((int)n[i]<=90))||((119<=(int)n[i])&&((int)n[i]<=122)))
{
n[i]=n[i]-22;
printf("%c",n[i]);
}
}
//非字母時(shí)原樣輸出
else
{
printf("%c",n[i]);
}
}
return 0;
}
程序截圖:
2.猴子吃桃問(wèn)題。猴子第一天摘下若干個(gè)桃子,當(dāng)即吃了二分之一,還不過(guò)癮,又多吃了一個(gè)。第二天在上又將剩下的桃子吃掉二分之一,又不過(guò)癮又多吃了一個(gè)。以后每天早上都吃了前一天剩下的二分之一零一個(gè)。到第N天早上再想吃時(shí),見只剩下一個(gè)桃子了。求第一天共摘了多少個(gè)桃子。
要求:輸入N,輸出桃子總數(shù)
程序分析:
程序中需要的變量有:
天數(shù) int N,桃子總數(shù) int sum。
并且根據(jù)題意變量都是整型(int)。
求解思路:
根據(jù)總共的天數(shù)反向求解桃子的個(gè)數(shù),桃子每天減少公式為:2*(sum+1)。
題目程序:
#include
int main()
{
int sum=1,N,i;
printf("請(qǐng)輸入天數(shù)N\n");
scanf("%d",&N);
for(i=0;i
{
sum=2*(sum+1);
}
printf("桃子總數(shù)為:%d\n",sum);
return 0;
}
運(yùn)行結(jié)果:
3.回文素?cái)?shù)問(wèn)題。輸入一個(gè)n,輸出n以內(nèi)的所有回文素?cái)?shù),即即是素?cái)?shù),又是回文數(shù)(數(shù)字從前往后,從后往前看一樣)例如:373,232。
要求:
輸入大于10的正整數(shù)n。
輸出n以內(nèi)的所有回文素?cái)?shù)。
程序分析:
首先從數(shù)字1開始遍歷直到n,對(duì)每個(gè)數(shù)字進(jìn)行判斷,是否為回文素?cái)?shù),若符合要求則輸出。
題目程序:
#include
int sushu(int n) //判斷素?cái)?shù)
{
int i;
int x;
for(i=2; i<=n/2; i++)
{
x=1;
if(n%i==0)
{
x=0;
}
}
if(x)
{
return n;
}
else
{
return 0;
}
}
int huiwenshu(int m) //判斷回文數(shù)
{
int i=0;
int j;
int num;
int a[5];
if(m>=10)
{
num=m;
while(m)
{
a[i++]=m%10;
m=m/10;
}
for(j=i-1; j>=0; j--)
{
if(a[j]!= num%10)
{
return 0;
}
num=num/10;
}
return 1;
}
else
{
return 0;
}
}
int main()
{
int i,n;
printf("請(qǐng)輸入大于10的數(shù)字:\n");
scanf("%d",&n);
for(i=2; i
{
if( sushu(i) && huiwenshu(sushu(i) ) )
{
printf("%d是回文素?cái)?shù)\n", i);
}
}
return 0;
}
運(yùn)行結(jié)果:
4.C語(yǔ)言實(shí)驗(yàn)–整數(shù)的溢出:小明在做整數(shù)加法計(jì)算時(shí),發(fā)現(xiàn)選擇不同的整數(shù)類型得到的計(jì)算結(jié)果不一樣,經(jīng)過(guò)研究她發(fā)現(xiàn)了一個(gè)簡(jiǎn)單規(guī)律,可以根據(jù)計(jì)算結(jié)果推出程序用到的數(shù)據(jù)類型。請(qǐng)根據(jù)給出的測(cè)試數(shù)據(jù),推算出程序用到的整數(shù)類型,并用該類型編寫相應(yīng)的假發(fā)程序。
例如:
輸入:32767 和 32767
輸出:-2
程序分析:
本題考驗(yàn)程序的溢出問(wèn)題,
首先解釋一下什么是溢出:數(shù)據(jù)類型超過(guò)了計(jì)算機(jī)字長(zhǎng)的界限而出現(xiàn)的數(shù)據(jù)溢出,也就是計(jì)算機(jī)裝不下咱的數(shù)據(jù)然后把裝不下的數(shù)據(jù)扔了出來(lái)。
題目中輸入兩個(gè)32767進(jìn)行加法運(yùn)算,其結(jié)果為65534.
而short類型的數(shù)據(jù)范圍在-32768~32767之間。當(dāng)你輸入的數(shù)據(jù)大于32767那么計(jì)算機(jī)就會(huì)對(duì)你的數(shù)據(jù)進(jìn)行溢出表現(xiàn)為:
所以在編寫程序時(shí)要著重考慮變量的取值范圍。
題目程序:
#include
int main()
{
int a,b;
short sum;
scanf("%d %d",&a,&b);
sum=a+b;
printf("%d",sum);
return 0;
}
}
5.用數(shù)字造數(shù)字:輸入一個(gè)3位以上的整數(shù),求其中最大的兩個(gè)數(shù)字之和與最小的數(shù)字之和之間的差。
例如:輸入8729,輸出8,即(9+8)-(2+7)=8.
要求:
輸入一個(gè)三位以上的整數(shù)。
輸出最大的兩個(gè)數(shù)字之和與最小的數(shù)字之和之間的差。
題目程序:
#include
int main()
{
int n,m;
int a,b,c,d,e;
printf("請(qǐng)輸入一個(gè)三位以上的整數(shù):\n");
scanf("%d",&n);
a=n/1000;//千位
b=(n-a*1000)/100;//
c=(n-a*1000-b*100)/10;
d=(n-a*1000-b*100-c*10);
if(a
{
e=a;
a=b;
b=e;
}
if(a
{
e=a;
a=c;
c=e;
}
if(a
{
e=a;
a=d;
d=e;
}
if(b
{
e=b;
b=c;
c=e;
}
if(b
{
e=b;
b=d;
d=e;
}
if(c
{
e=c;
c=d;
d=e;
}
n=(a+b)-(c+d);
printf("%d",n);
return 0;
}
程序結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的给字母保密的c语言,C语言练习题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 旅行商问题c语言,【算法作业】用回溯法求
- 下一篇: c语言解决一元二次方程,一元二次方程求解