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