西北农林科技大学C语言上机实习答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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; /* 找最大数位置*/