当前位置:文档之家› 西北农林科技大学C语言上机实习答案

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

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

输入:两串字符输出:连接将两串字符输入样例:abc def 输出样例:abcdef#include<stdio.h>#include<string.h>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<stdio.h>#include<string.h>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'; /*计算小写字母密文*/elsesecstr[j] = soustr[j]; /* 其它字符不变*/}puts(secstr);}3、矩阵对角线元素求和/* exer 4-3 主和辅对角线上元素之和*/输入一个5×5的数组,分别求其主对角线和辅对角线上元素之和。

输入:5×5的数组输出:主对角线和辅对角线上元素之和输入样例:1 2 3 4 56 7 8 9 1011 12 13 14 1516 17 18 19 2021 22 23 24 25输出样例:65 65主对角线为从矩阵的左上角至右下角的连线,在数组中即指行列下标相同的元素,辅对角线为从矩阵的右上角至左下角的连线,这些元素的下标之间也可用相应的表达式表达。

#include<stdio.h>#include<string.h>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<stdio.h>#include<string.h>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]<a[kmin])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]);}5、字符个数统计/* exer 4-5 统计大写字母、小写字母、数字及其它字符的个数*/由键盘输入任意一串字符串,将其存入一个字符数组,统计其中的大写字母、小写字母、数字以及其他字符的个数。

输入:任意一串字符串输出:大写字母、小写字母、数字以及其他字符的个数。

输入样例:abcdefg123456ABCDEFG 输出样例:7 7 6#include<stdio.h>#include<string.h>void main(void){unsigned int i;int cap=0,low=0,dig=0,oth=0; /* 定义并初始化*/char str[80];//printf("please enter str:");gets(str); /* 输入原串*/for(i=0; i<strlen(str); i++){if(str[i]>='A' && str[i]<='Z')cap++; /* 统计大写字母*/else if(str[i]>='a' && str[i]<='z')low++; /* 统计小写字母*/else if(str[i]>='0' && str[i]<='9')dig++; /* 统计数字*/elseoth++; /* 统计其它字符*/ }printf("%d %d %d %d\n",cap,low,dig,oth);}6、学生成绩计算/* exer 4-6 求每一个学生的总成绩和平均成绩*/已知10个学生的5门课程的成绩,将其存入一个二维数组,求每一个学生的总成绩和每一个学生的平均成绩。

输入:10个学生的5门课程的成绩输出:每一个学生的总成绩和每一个学生的平均成绩输入样例:90.5 80 70 89 84.691.5 81 71 88 84.792.5 82 72 87 84.893.5 83 73 86 84.994.5 84 74 85 84.095.5 85 75 84 84.196.5 86 76 83 84.297.5 87 77 82 84.398.5 88 78 81 84.499.5 89 79 80 84.5输出样例:414.100006 82.820000416.200012 83.240005418.299988 83.659996420.399994 84.080002421.500000 84.300003423.600006 84.720001425.700012 85.139999427.799988 85.559998429.899994 85.979996432.000000 86.400002#include<stdio.h>void main(void){int i,j;float score[10][5]={0.0f};float allsco[10],avesco[10];for(i=0; i<10; i++)for(j=0; j<5; j++)scanf("%f",&score[i][j]); /* 输入学生的成绩*/for(i=0; i<10; i++){allsco[i] = 0; /* 总成绩清零*/for(j=0; j<5; j++){allsco[i] = allsco[i]+score[i][j]; /* 累加总成绩*/}avesco[i] = allsco[i]/5; /* 计算平均成绩*/}for(i=0; i<10; i++)printf("%f %f\n",allsco[i],avesco[i]);/* 输出成绩*/}7、姓名排序/* exer 4-7 姓名排序*/由键盘任意输入10个学生的姓名(以拼音形式),将它们按照ASCⅡ码的顺序从小到大排序。

相关主题