1. 编写程序实现 s = 1+2+3+…+n,n<10000;n由用户输入;输出s
#include<stdio.h>
int main(){
int i,n,sum;
i = 1;
sum = 0;
printf("输入n:");
scanf("%d",&n);
if(n>=10000){
printf("数字不合法,大于10000\n");
return 0;
}
while(i<=n){
sum = sum + i;
i++;
}
printf("%d\n",sum); //sum为最终结果
return 0;
}
2. 假设黑白图像由2维矩阵表示,行数为M<5,列数为N<5,值分别用0或1表示。输入两幅相同大小的黑白图像表示,求它们的相似度。
说明:若两幅图像在相同位置上的像素点颜色相同,则称它们在该位置具有相同的像素点。两幅图像在相似度定义为相同像素点数占总像素点数的百分比。
#include<stdio.h>
int main(){
int row,col; //行数,列数
int sum,equal; //sum为像素点总数; equal为像素点相同个数
double percentage; //percentage为相似百分比
int img1[4][4],img2[4][4]; //两个图像
printf("输入图像行数,列数:");
scanf("%d %d",&row,&col);
sum = row * col;
equal = 0;
int i,j;
//输入
printf("img1:\n");
for(i=0;i<row;i++){
for(j=0;j<col;j++){
scanf("%d",&img1[i][j]);
}
}
printf("img2:\n");
for(i=0;i<row;i++){
for(j=0;j<col;j++){
scanf("%d",&img2[i][j]);
}
}
//计算
for(i=0;i<row;i++){
for(j=0;j<col;j++){
if(img1[i][j] == img2[i][j])
equal++;
}
}
percentage = (double)equal/sum;
printf("相似性:%.2f%%\n",percentage*100);
return 0;
}
3. 给出一个正整数k(k<=50,保证ak在整型表示范围内),要求Pell数列的第k项模上32767是多少?
Pell数列a1,a2,a3 的定义是这样的:
a1=1; a2=2; … an=2*an-1+an-2, n>2
#include"stdio.h"
int Pell(int k){
if(k==1)
return 1;
else if(k==2)
return 2;
else if(k>2 && k<=50)
return 2*Pell(k-1)+Pell(k-2);
else{
printf("参数有误,不能小于0\n");
return 0;
}
}
int main(){
int k;
printf("输入第k项:");
scanf("%d",&k);
printf("%d",Pell(k)%32767);
return 0;
}
4. 用二分法求方程的根
有函数:f(x)=x5-15x4+85x3-225x2+274x-121。
已知 f(1.5)>0,f(2.4)<0 且方程 f(x)=0 在区间 [1.5,2.4] 有且只有一个根。
#include"stdio.h"
#include"math.h"
#define min 1e-7 //极小值
double equal(double k){ //方程中x等于5
double n=pow(k,5)-15*pow(k,4)+85*pow(k,3)-225*pow(k,2)+274*pow(k,1)-121;
return n;
}
int overcome(double start,double end,double *num){
if(start <= end){
double mid = (start + end) / 2;
if(equal(mid)<min){
*num = mid;
return 1;
}
else if(equal(mid)<0)
overcome(mid+0.1,end,num);
else if(equal(mid)>0)
overcome(start,mid-0.1,num);
}else return 0;
}
int main(){
double start,end;
double num;
start = 1.5, end = 2.4;
if(overcome(start,end,&num))
printf("%.9f\n",num);
return 0;
}
5. 输入n及一段密文(长度<200),输出解密得到的明文
Julius Caesar 曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后n(n>0)位对应的字符来代替,这样就得到了密文。比如字符A用F来代替。
如下是n=5时密文和明文中字符的对应关系。
密文:ABCDEFGHIJKLMNOPQRSTUVWXYZ
明文:VWXYZABCDEFGHIJKLMNOPQRSTU
ps: 密文中出现的字母都是大写字母。密文中也包括非字母的字符和空格,对这些字符不用进行解码。
#include"stdio.h"
void correct(char s[]){
int n;
printf("输入n:");
scanf("%d",&n);
int i=0;
while(s[i]!='\0'){
if(s[i]>='A' && s[i]<='Z'){
if(s[i]>='A' && s[i]<('A'+n))
printf("%c",s[i]+26-n);
else
printf("%c",s[i]-n);
}else
printf("%c",s[i]);
i++;
}
}
int main(){
char str[200];
printf("输入字符串:");
gets(str);
correct(str);
return 0;
}