西北农林科技大学C语言上机实习答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实习四答案

1、字符串连接

/* exer 4-1 两串字符连接*/由键盘任意输入两串字符,不用库函数strcat,连接将两串字符。

输入:两串字符输出:连接将两串字符输入样例:abc def 输出样例:abcdef

#include

#include

void main(void)

{

unsigned int i,j;

char soustr[80],desstr[80];

//printf("please enter soustr:");

gets(soustr); /* 输入原串*/

//printf("please enter desstr:");

gets(desstr); /* 输入目的串*/

i = strlen(soustr); /* 取目的串尾部位置*/

for(j=0; j<=strlen(soustr); j++,i++)

{

soustr[i] = desstr[j]; /* 将原串依次接入目的串尾部*/

}

puts(soustr);

}

2、简单加密程序

/* exer 4-2 字符加密*/

由键盘任意输入一串字符,对其进行加密,加密原则为:如果为字母,将其循环右移2个字母,其他字符保持不变。

输入:一串字符

输出:加密后的字符串

输入样例:abl2CDxyz

输出样例:cdl2EFzab

提示: 1. 可用gets()和puts()输入输出字符串。

2. 利用ASCII码运算进行加密。

3. 循环右移的含义是:将a-z,A-Z各看成一个环进行移动,即y右移2个字母后为a,z右移2个字母后为b;Y右移2个字母后为A,Z右移2个字母后为B。

#include

#include

void main(void)

{

unsigned int j;

char soustr[80],secstr[80];

//printf("please enter soustr:");

gets(soustr); /* 输入原串*/

for(j=0; j<=strlen(soustr); j++)

{

if(soustr[j]>='A' && soustr[j]<='Z' )

secstr[j] = (soustr[j]-'A'+2)%26+'A'; /*计算大写字母密文*/

else if(soustr[j]>='a' && soustr[j]<='z' )

secstr[j] = (soustr[j]-'a'+2)%26+'a'; /*计算小写字母密文*/

else

secstr[j] = soustr[j]; /* 其它字符不变*/

}

puts(secstr);

}

3、矩阵对角线元素求和

/* exer 4-3 主和辅对角线上元素之和*/

输入一个5×5的数组,分别求其主对角线和辅对角线上元素之和。输入:5×5的数组输出:主对角线和辅对角线上元素之和

输入样例:1 2 3 4 5

6 7 8 9 10

11 12 13 14 15

16 17 18 19 20

21 22 23 24 25

输出样例:65 65

主对角线为从矩阵的左上角至右下角的连线,在数组中即指行列下标相同的元素,辅对角线为从矩阵的右上角至左下角的连线,这些元素的下标之间也可用相应的表达式表达。

#include

#include

void main(void)

{

int i,j;

int a[5][5];

int sum1=0,sum2=0;

//printf("please enter soustr:");

for(i=0; i<5; i++)

for(j=0; j<5; j++)

scanf("%d",&a[i][j]); /* 输入数组*/

for(i=0; i<5; i++)

{

sum1 = sum1+a[i][i]; /* 主对角线*/

sum2 = sum2+a[i][4-i]; /* 辅对角线*/

}

printf("%d %d\n",sum1,sum2);

}

4、数据顺序调整

/* exer 4-4 将最大数调到最前面,最小数调到最后面*/

由键盘任意输入10个数,将最大数调到最前面,最小数调到最后面。输入:任意10个数输出:数据调整后的10个数。输入样例:0 1 2 3 4 5 6 7 8 9 输出样例:9 1 2 3 4 5 6 7 8 0

提示:①定义四个变量d1、d2、x1、x2,分别存放最大数、最小数及它们的位置;

②在循环开始前,将第一个元素作为参考,将其值分别存入d1、x1,将其下标分别存入d2、x2;

③在循环中将其它元素逐一与d1比较,若比d1大,将其存入d1,并将其下标存入d2;否则将其与x1比较,若比x1小,将其存入x1,并将其下标存入x2;

④结束循环后,将d2所示位置的数与第一个数交换,将x2所示位置的数与最后一个数交换,然后输出数组所有元素即可。

#include

#include

void main(void)

{

int i,a[10],temp;

int kmax=0,kmin=0;

//printf("please enter :");

for(i=0; i<10; i++) /* 输入数组*/

scanf("%d",&a[i]);

for(i=0; i<10; i++)

{

if(a[i]>a[kmax])

kmax = i; /* 找最大数位置*/

else if(a[i]

kmin = i; /* 找最小数位置*/

}

if(kmax == 9 && kmin == 0)

{

temp = a[0];

a[0] = a[kmax];

a[kmax] = temp; /* 与最前面的数交换*/

}

else

{

temp = a[0];

a[0] = a[kmax];

a[kmax] = temp; /* 与最前面的数交换*/

temp = a[9];

a[9] = a[kmin];

a[kmin] = temp; /* 与最后面的数交换*/

}

for(i=0; i<9; i++)

printf("%d ",a[i]); /* 输出数组*/

printf("%d\n",a[i]);

相关文档
最新文档