第一篇:西北农林科技大学C语言试题答案
1、简单程序设计 编程写程序,在屏幕上输出信息:Happy New Year!/* 输出图形*/ #include
}
2、简单计算 由键盘任意输入2个数,分别计算它们的和、差、积、商。/*简单计算*/ #include
3、计算梯形的面积 已知梯形的上底、下底和高,计算梯形的面积。/*计算梯形的面积*/ #include
scanf(“%f”,&supline);
scanf(“%f”,&dowline);
scanf(“%f”,&high);area =((supline+dowline)*high)/2.0;printf(“%f n”,area);}
4、输出字符对应的ASCII码 任意输入一个字符,输出此字符对应的ASCII码。/*输出字符对应的ASCII码*/ #include
5、数据类型长度测试
编写程序,测试所使用的计算机系统字符型、短整型、整形、长整型、单精度实型、双精度实型所占有的字节数量。/*数据类型长度测试*/ #include
printf(“size of short=%dn”,sizeof(short));
printf(“size of int=%dn”,sizeof(int));
printf(“size of long int=%dn”,sizeof(long int));
printf(“size of float=%dn”,sizeof(float));
printf(“size of double=%dn”,sizeof(double));}
1.成绩判断
输入一个学生的数学成绩,如果它低于60,输出“Fail”,否则,输出“Pass”。不要改变与输入输出有关的语句。/*成绩判断*/ #include
输入一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。不要改变与输入输出有关的语句。
#include
main(){char ch;ch=getchar(“%c”);if(ch>='A'&&ch<='Z'){ch=ch+32;printf(“%cn”,ch);} else if(ch>='a'&&ch<='z'){ch=ch-32;printf(“%cn”,ch);} else printf(“%cn”,ch);} 3.利用海伦公式求三角形面积 三角形三个边长 /*计算三角形面积*/ #include “math.h” #include “stdio.h” void main(){ double a,b,c,s,area;printf(“请输入3条边长:”);scanf(“%lf%lf%lf”,&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b){
s=1.0/2*(a+b+c);
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“三角形的面积是:%fn”,area);
scanf(“%lfn”,area);} else
printf(“这3个数无法组成三角形!n”);} 4.判断是否能构成一个三角形
从键盘输三个数,判断是否能将它们作为三角形的三条边构成一个三角形。若能,输出“Yes”,否则,输出“No”。/*判断是否能构成一个三角形*/ #include
int a,b,c,d,e,f;
printf(“请输入三个整数n1,n2,n3:”);
scanf(“%d%d%d”,&a, &b, &c);
printf(“排序前:%d, %d, %dn”, a, b, c);if(a>b){ {
d=c;e=a;f=b;} { if(cc){d=b;e=a;f=c;} else{d=b;e=c;f=a;} } } printf(“排序后:%d, %d, %dn”, d, e, f);} 1.数据统计 任意输入n个整数,分别统计奇数的和、奇数的个数、偶数的和、偶数的个数。/*数据统计*/ #include
int i,n,m,jishuhe=0,oushuhe=0,jishuge=0,oushuge=0;
scanf(“%d”,&n);
for(i=0;i { scanf(“%d”,&m); if(m%2!=0) { jishuhe=jishuhe+m; jishuge++; } else { oushuhe=oushuhe+m; oushuge++; } } printf(“%dn%dn%dn%dn”,jishuhe,jishuge,oushuhe,oushuge);} 2.爱因斯坦阶梯问题 爱因斯坦阶梯问题。设有一阶梯,每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨6阶,最后剩5阶;每步跨7阶,正好到阶梯顶。问满足条件的最少阶梯数是多少。/*爱因斯坦阶梯问题*/ #include x+=14;printf(“%dn”,x);} 3.猴子吃桃问题 一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一个,第2天接着吃了前一天剩下的一半,再多吃了一个,以后每天如此,直到第n天,只剩下1个桃子,问猴子一共摘了多少桃子? /*猴子吃桃问题*/ #include } printf(“%dn”,x);} 4.求两个数的最大公约数和最小公倍数 用辗转相除法(即欧几里得算法)求两个正整数的最大公约数和最小公倍数。/* 求两个数的最大公约数和最小公倍数*/ #include if(a while(rem){ rem = a%b;a=b;b=rem;} Div=a;Multi = a1*b1/Div; printf(“%dn%dn”,Div,Multi);} 5.求sin(x)的近似值 利用公式求sin(x)的近似值(精度为10e-6)。 sin(x)=x-x3/3!+x5/5!-x7/7!+....(-1)nx(2n+1)/(2n+1)!+.../*求sin(x)的近似值*/ #include 6.图形输出 输入一个字符及行数n,用该字符在屏幕上输出如下图形: * *** ***** ******* ********* 输入: 一个字符及要输出的行数n。 输出: 用该字符在屏幕上构成的要求图形。 #include for(j=0;j<(n-1-i);j++) printf(“ ”); for(j=0;j<(2*i+1);j++) printf(“%c”,ch); printf(“n”);} } 1.字符串连接 由键盘任意输入两串字符,不用库函数strcat,连接将两串字符。输入: 两串字符 输出: 连接将两串字符 输入样例: abc def 输出样例: abcdef /*字符串连接*/ #include int i,j,k; char str[20]={“ ”},str1[10],str2[10]; gets(str1); gets(str2); j=strlen(str1),k=strlen(str2); for(i=0;i { if(i else str[i]=str2[i-j];} puts(str);} /*字符串连接*/ #include char str1[100],str2[50];int i,j; gets(str1);gets(str2); for(i=0;str1[i]!=' ';i++); for(j=0;str2[j]!=' ';j++){ str1[i]=str2[j]; i++;} str1[i] = ' '; puts(str1); } 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 a[i]=a[i]-24;} puts(a);} 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 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 %dn”,sum1,sum2);} 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 for(i=0;i<10;i++)scanf(“%d”,&a[i]); for(i=0;i<10;i++){ if(a[i]>a[kmax]) kmax=i; if(a[i] kmin=i;} temp=a[0];a[0]=a[kmax];a[kmax]=temp; if(kmax!=9){ temp=a[9];a[9]=a[kmin];a[kmin]=temp;} for(i=0;i<9;i++) printf(“%d ”,a[i]); printf(“%dn”,a[9]);} 5.字符个数统计 描述: 由键盘输入任意一串字符串,将其存入一个字符数组,统计其中的大写字母、小写字母、数字以及其他字符的个数。 输入: 任意一串字符串 输出: 大写字母、小写字母、数字以及其他字符的个数。 输入样例: abcdefg123456ABCDEFG 输出样例: 7 7 6 /*字符统计*/ #include int i;gets(str); for(i=0;str[i];i++) { if(str[i]>='A'&&str[i]<='Z') iA++; else if(str[i]>='a'&&str[i]<='z') ia++; else if(str[i]>='0'&&str[i]<='9') io++; else iqt++; } printf(“%d %d %d %dn”,iA,ia,io,iqt);} 6.学生成绩计算 已知10个学生的5门课程的成绩,将其存入一个二维数组,求每一个学生的总成绩和每一个学生的平均成绩。 输入: 10个学生的5门课程的成绩 输出: 每一个学生的总成绩和每一个学生的平均成绩 输入样例: 90.5 80 70 89 84.6 91.5 81 71 88 84.7 92.5 82 72 87 84.8 93.5 83 73 86 84.9 94.5 84 74 85 84.0 95.5 85 75 84 84.1 96.5 86 76 83 84.2 97.5 87 77 82 84.3 98.5 88 78 81 84.4 99.5 89 79 80 84.5 输出样例: 414.100006 82.820000 416.200012 83.240005 418.299988 83.659996 420.399994 84.080002 421.500000 84.300003 423.600006 84.720001 425.700012 85.139999 427.799988 85.559998 429.899994 85.979996 432.000000 86.400002 /*学生成绩计算*/ #include“stdio.h” void main(){ int i,j;float score[10][5]; float sum[10], aver[10]; for(i=0;i<10;i++) for(j=0;j<5;j++) scanf(“%f”,&score[i][j]); for(i=0;i<10;i++) { sum[i]=0; for(j=0;j<5;j++) { sum[i]=sum[i]+score[i][j]; } aver[i]=sum[i]/5; } for(i=0;i<10;i++)printf(“%f %fn”,sum[i],aver[i]); } 7.姓名排序 描述: 由键盘任意输入10个学生的姓名(以拼音形式),将它们按照ASCⅡ码的顺序从小到大排序。 输入: 10个学生的姓名(以拼音形式)。 输出: 按照ASCⅡ码的顺序从小到大排序。 输入样例: zhang ziang zaang zbang zcang zdang zeang zfang zgang zhang 输出样例: zaang zbang zcang zdang zeang zfang zgang zhang zhang ziang /*姓名排序*/ #include gets(name[i]);for(j=0;j<10;j++){ for(i=0;i<10-j;i++) if(strcmp(name[i],name[i+1])>0) { strcpy(temp,name[i]);strcpy(name[i],name[i+1]);strcpy(name[i+1],temp); } } for(i=0;i<10;i++)puts(name[i]);} 8.输出杨辉三角形 描述: 编程实现n阶(n<10)杨辉三角形的输出,n=6时,杨辉三角形如下所示: 1 1 1 1 2 1 3 1 4 1 5 10 5 输入: 杨辉三角形的阶数n。 输出: n阶杨辉三角形。 输入样例: 6 输出样例: 1 1 1 1 2 1 3 1 4 1 5 10 5 提示: ① 杨辉三角形的特点:第一列和对角线上的元素值均为1,即a[i][0]=a[i][i]=1;其余位置元素的值=上一行本列元素值+上一行前一列元素值,如第三行第二列2就是第二行第一列+第二行第二列,计算公式为a[i][j]=a[i-1][j-1]+ a[i-1][j]。 ② 应先对第一列和对角线元素赋值,然后再为其它元素赋值。 /*输出杨辉三角形*/ #include a[i][i]=1; a[i][0]=1;} for(i=0;i 描述: 用指针实现:由键盘输入10个整数,将他们按由小到大的顺序排列。 输入: 键盘输入的10个整数。 输出: 按由小到大的顺序排列。 输入样例: 1 5 4 3 2 9 23 11 5 7 输出样例: 1 2 3 4 5 5 7 9 11 23 /*用指针实现排序*/ #include int a[10],*p; int i,j=0,temp; p=a; for(i=0;i<10;i++) { scanf(“%d”,p+i); } p=&a[j]; for(i=1;i<=9;i++) for(j=0;j<10-i;j++) if(*(p+j)>*(p+j+1)) { temp=*(p+j);*(p+j)=*(p+j+1);*(p+j+1)=temp;} for(i=0;i<9;i++)printf(“%d ”,a[i]); printf(“%dn”,a[9]);} 标题: 2.用指针实现字符串排序 描述: 用指针实现:将10个字符串(设其长度小于20)从小到大排序。 输入: 10个字符串。 输出: 排序后的10个字符串。 输入样例: ijk jkl def ghi def cde hij def efg fgh 输出样例: cde def def def efg fgh ghi hij ijk jkl 提示: ① 定义二维字符数组和指向该数组的指针数组; ② 用循环使指针数组的元素指向二维字符数组各行首; ③ 用循环为指针数组元素赋字符串为值; ④ 用strcmp函数比较两个指针数组元素的值、用strcpy函数交换两个指针数组元素的值。 /*用指针实现字符串排序*/ #include int i,j;for(i=0;i<10;i++){ p[i]=a[i];} for(i=0;i<10;i++) { gets(p[i]); } for(i=0;i<9;i++) { for(j=i+1;j<10;j++) { if(strcmp(p[i],p[j])>0) { strcpy(b,p[i]); strcpy(p[i],p[j]); strcpy(p[j],b); } } } for(i=0;i<10;i++){ puts(a[i]);} } 标题: 3.数据倒置 描述: 用指针实现:将具有10个元素的一维数组中的数据倒置。 输入: 10个元素。 输出: 倒置数据。 输入样例: 0 1 2 3 4 5 6 7 8 9 输出样例: 9 8 7 6 5 4 3 2 1 0 提示: 数据倒置是指将数组前后元素的值交换后再输出。 /*数据倒置*/ #include scanf(“%d”,a+i); } p=a;q=a+9;for(p=a,q=a+9;p *q=b;} for(i=0;i<10;i++){ printf(“%d ”,*(a+i));} } 标题: 4.用指针实现数据位置调整 描述: 用指针实现:由键盘输入10个整数,将最大的调到最后,最小的调到最前。 输入: 10个整数。 输出: 最大的调到最后,最小的调到最前。 输入样例: 5 8 7 6 9 4 3 2 1 0 输出样例: 0 8 7 6 5 4 3 2 1 9 /*用指针实现数据位置调整*/ #include for(i=0;i<10;i++){ scanf(“%d”,&a[i]);} b1=a; p1=a+1; for(i=1;i<10;i++){ if(*p1>*b1) b1=p1; p1++;} temp=*b1;*b1=a[9];a[9]=temp; b2=a;p2=a+1; for(i=0;i<10;i++){ if(*p2<*b2) b2=p2; p2++;} temp=*b2;*b2=a[0];a[0]=temp; for(i=0;i<10;i++){ printf(“%d ”,*(a+i));} } 标题: 5.用指针实现查找二维数组中最大数及其位置 描述: 用指针实现:找出二维数组(设3行4列)中的最大数及其位置。 输入: 二维数组(设3行4列)。 输出: 最大数及其位置。 输入样例: 1 2 5 4 6 8 7 2 0 2 4 5 输出样例: 1 1 8 /*用指针实现查找二维数组中最大数及其位置*/ #include for(j=0;j<4;j++) { scanf(“%d”,a[i]+j); } } iMaxRow=0;iMaxCol=0;for(i=0;i<3;i++){ for(j=0;j<4;j++) { if(*(*(a+i)+j)>a[iMaxRow][iMaxCol]) { iMaxRow=i;iMaxCol=j; } } } printf(“%d %d %dn”,iMaxRow,iMaxCol,a[iMaxRow][iMaxCol]); } 标题: 6.用指针实现子字符串提取 描述: 用指针实现:由键盘输入一串字符,从下标为m的字符开始,取出n个字符(m和n由键盘输入),形成一个新的字符串。 输入: 键盘输入一串字符。 输出: 从下标为m的字符开始,取出n个字符(m和n由键盘输入),形成一个新的字符串。 输入样例: 0123456 5 2 输出样例: 56 提示: ① 定义二个字符数组zfsour[100]、zfdest[100],zfsour存放原串,zfdest存放新串; ② 定义二个指针变量*pzfsour、*pzfdest; zfsour字符数组的首地址; ③ 从键盘输入取字符的开始位置m(即下标值)和要取的字符个数n; ④ 让指针变量pzfsour指向zfsour+m处,让pzfdest指向zfdest字符数组的首地址; ⑤ 通过n次循环,逐次赋值、移动指针,即将原串中的n个字符存到新串字符数组中。 来源: /*用指针实现子字符串提取*/ #include *pszdest=*pszsour; pszdest++; pszsour++;} *pszdest=' ';puts(szstrdest);} 标题: 1.整数交换函数设计 描述: 设计一个函数,将任意2个整数交换,并在主函数中调用此函数。 输入: 任意2个整数 输出: 交换后的2个整数 输入样例: 1 2 输出样例: 2 1 /* 整数交换函数设计*/ #include 标题: 2.数字字符个数统计函数设计 描述: 设计一个函数,统计任意一串字符中数字字符的个数,并在主函数中调用此函数。输入: 任意一串字符 输出: 字符串中数字字符的个数 输入样例: abs1234ajbkc 输出样例: 4 /* 数字字符个数统计函数设计*/ #include return b;} 标题: 3.排序函数设计 描述: 设计一个函数,对任意n个整数排序(从大到小),并在主函数中输入数据个数n和n个整数,调用此函数实现排序。 输入: n个整数 输出: 排序后的n个整数 输入样例: 10<----数据个数 0 1 2 3 4 5 6 7 8 9<----数据 输出样例: 9 8 7 6 5 4 3 2 1 0 /*排序函数设计*/ #include scanf(“%d”,&m[i]);paixu(m,n);for(i=0;i printf(“%d ”,m[i]);} void paixu(int a[],int num){ int i,j,k,temp; for(i=0;i { k=i; for(j=i+1;j if(a[k] k=j; if(k!=j) { temp=a[k]; a[k]=a[i]; a[i]=temp; } } } 标题: 4.矩阵转置函数设计 描述: 设计一个函数,将任意n×n的矩阵转置,并在主函数中调用此函数将一个4*4的矩阵转置。 输入: n×n的矩阵 输出: 转置后的n×n的矩阵 输入样例: 3 1 2 3 4 5 6 7 8 9 输出样例: 1 4 7 2 5 8 3 6 9 /* 矩阵转置函数设计*/ #include int main(void){ int i, j;int m[100][100]; int n; scanf(“%d”, &n); for(i=0;i { for(j=0;j scanf(“%d”,&m[i][j]); } zhuan(m,n); for(i=0;i { for(j=0;j printf(“%d ”,m[i][j]); printf(“%dn”, m[i][j]); } return 0;} void zhuan(int a[][100],int n) { int i,j,temp; for(i=0;i { for(j=0;j { temp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = temp; } } } 标题: 5.求素数函数设计 描述: 设计一个函数,用以判断一个整数是否为素数,如果是,则返回1;如果不是,则返回0;并利用此函数,找出m-n之间的所有素数,并统计其个数,m、n由键盘输入。 输入: 数据范围m-n。 输出: m-n之间的所有素数及个数。 输入样例: 100 200 输出样例: 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 21 /*求素数函数设计*/ #include void main(void){ int m,num=0; int i,j; scanf(“%d %d”,&i,&j); for(m=i;m<=j;m=m+1) { if(P(m)) { printf(“%d ”,m); num++; } } printf(“n%dn”,num); } int P(int n) { int found; int i; double k; k=sqrt((double)n); found = 1; i = 2; while(i<=k && found) { if(n%i ==0) found = 0; i++; } return found;} 标题: 6.进制转换函数设计 描述: 设计一个函数,将任意一个八进制数据字符串转换为十进制数据,并在主函数中调用此函数。 输入: 一个八进制数 输出: 十进制数 输入样例: 77 输出样例: 63 /*进制转换函数设计*/ #include num=num*8+*p-'0';return num;} 标题: 7.求最大公约数函数设计 描述: 设计一个函数,找出任意2个整数的最大公约数,并在主函数中调用此函数。 输入: 2个整数 输出: 最大公约数 输入样例: 8 4 输出样例: 4 提示: 求最大公约数可用辗转相除法: rem=m%n;m=n;n=rem;若rem=0,m是最大公约数,程序结束;否则从新执行以上语句。 /*求最大公约数函数设计*/ #include scanf(“%d%d”,&a,&b);com=comdivi(a,b);printf(“%dn”,com);} int comdivi(int m,int n){ int q;if(n>m){ int z; z=m;m=n;n=z;} do { q=m%n; m=n; n=q;} while(q!=0);return m;} 标题: 8.对称数组判断 描述: 设计一个函数,判断二维数组是否为对称数组(对称矩阵),如果是,则返回1;如果不是,则返回0,并在主函数中调用此函数,判断一个4*4的数组是否为对称数组。 输入: 二维数组 输出: 是否为对称数组 输入样例: 1 2 3 4 2 5 6 7 3 6 8 9 4 7 9 0 输出样例: Yes /*对称数组判断*/ #include for(j=0;j<4;j++) scanf(“%d”,&a[i][j]);} if(array((int*)a,4)) printf(“Non”);else printf(“Yesn”);} int array(int*p,int n){ int found;int i,j;found=1;for(i=0;i for(j=0;j { if(*(p+i*n+j)!=*(p+j*n+j)) { found=0;break; } } } return found;} 实习07 结构体、联合体及用户定义的数据类型 标题: 1.结构体的定义与引用 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 定义一个职工结构体数据类型,并定义职工结构体变量。 输入: 从键盘输入一个职工的信息。(4个数据,每个占一行,工资有两位小数) 输出: 输出职工信息。(4个数据,每个占一行) 输入样例: zhangping ***001 21 2183.55 输出样例: zhangping ***001 21 2183.55 /*结构体的定义与引用*/ #include scanf(“%s”,em.name);scanf(“%s”,em.id);scanf(“%d”,&em.gl);scanf(“%g”,&em.salary); printf(“%sn%sn%dn%gn”,em.name,em.id,em.gl,em.salary);return 0;} 标题: 2.结构体数组的定义与引用 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 定义一个职工结构体数组,从键盘输入5位职工的信息,打印出最高的工资。 输入: 从键盘输入5位职工的信息(4个数据,每个占一行,工资有两位小数)。 输出: 打印出最高的工资。 输入样例: liuxin 9***71265 11 1234.23 liyixin 9***71265 11 5234.24 liuxin 9***71265 11 1244.25 liuxin 9***71265 11 1284.26 liuxin 9***71265 11 1232.27 输出样例: 5234.24 /* 结构体数组的定义与引用*/ #include struct a{ char name[8];int id;int NO;float salary;}a[N]; void main(){ int i;int j=0;float max=0;for(i=0;i scanf(“%s%d%d%g”,a[i].name,&a[i].id,&a[i].NO,&a[i].salary);} for(i=0;i if(max max=a[i].salary; j=i; } } printf(“%gn”,a[j].salary);} 标题: 3.电话薄管理程序设计 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 1.编写手机电话薄管理程序,用结构体实现下列功能: (1)手机电话薄含有姓名、宅电、手机3项内容,建立含有上述信息的电话簿。 (2)输入姓名,查找此人的号码。 (3)插入某人的号码。 (4)输入姓名,删除某人的号码。 (5)将以上功能分别用子函数实现,编写主函数,可以根据用户的需要,调用相应的子函数。 建议用结构体完成。 1、程序主函数如下所示,请认真理解,不要更改代码。 int main(void) /* 主函数 */ { int k; do { printf(“ 0: exitn”); /* 打印菜单项 */ printf(“ 1: creatn”); printf(“ 2: searchn”);提示: printf(“ 3: insertn”); printf(“ 4: deleten”); printf(“ 5: outputn”); printf(“please select:”); scanf(“%d”,&k); /* 输入选择项 */ switch(k) { case 0: exit(0); /* 退出函数 */ case 1: creat(); break; case 2: search(); break; case 3: insert(); break; case 4: delete(); break; case 5: output(); break; /* 调用子函数 */ default: exit(0); } } while(1); return 0;} 2、根据主函数,设计相应函数完成指定功能。 3、creat时,可用while(1)循环连续创建,当输入'*'时,则结束。/*3.电话薄管理程序设计*/ /*1)手机电话薄含有姓名、宅电、手机3项内容,建立含有上述信息的电话簿*/ /*(2)输入姓名,查找此人的号码。*/ /*(3)插入某人的号码。*/ /*(4)输入姓名,删除某人的号码。*/ /*(5)将以上功能分别用子函数实现,编写主函数,*/ /*可以根据用户的需要,调用相应的子函数。*/ #include { int k; do { printf(“ 0: exitn”); printf(“ 1: creatn”); printf(“ 2: searchn”); printf(“ 3: insertn”); printf(“ 4: deleten”); printf(“ 5: outputn”); printf(“please select:”); scanf(“%d”,&k); switch(k) { case 0: exit(0); case 1: creat(); break; case 2: search(); break; case 3: insert(); break; case 4: delete(); break; /* 主函数 */ /* 打印菜单项 */ /* 输入选择项 */ /* 退出函数 */ case 5: output(); break; /* 调用子函数 */ default: exit(0); } } while(1); return 0;} void creat(void){ char appella[20];getchar();while(1) /* 输入结构数组 */ { gets(appella); if(*appella=='*') break; /* 输入*,则结束 */ strcpy(book[N].name, appella); gets(book[N].num1); gets(book[N].num2); N++;} } void search(void) /*查找子函数 */ { char appella[20]; int i=0; getchar(); gets(appella); while(i { i++; } if(i printf(“%s %s %sn”,book[i].name,book[i].num1,book[i].num2); else printf(“not found”);} void insert(void) /* 插入子函数 */ { getchar(); gets(book[N].name); gets(book[N].num1); gets(book[N].num2); N++; /* 长度加1 */ } void delete(void) /*删除子函数 */ { char appella[20]; int i=0,j; getchar(); gets(appella); while(i { i++; } if(i { for(j=i+1;j { book[j-1] = book[j]; } N--; /* 长度减1 */ } else printf(“not found”);} void output(void) /* 输出子函数 */ { int i; for(i=0;i printf(“%s %s %sn”,book[i].name,book[i].num1,book[i].num2);} 标题: 4.正负数判断 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 从键盘输入任意十六进制整数a,判断其最高为是0或1,如果为0,输出此函数是正数的信息;如果为1,输出此函数是负数的信息。 输入: 整数a。 输出: 输出此函数是负数的信息。 输入样例: 0XFFA7 或 0X59 输出样例: is negative number 或 is positive number /*正负数判断*/ #include short num,a; int m; m= 0x8000; scanf(“%x”,&num); a =(m& num)?1:0; if(a==0) printf(“is positive numbern”); else printf(“is negative numbern”); } 标题: 5.偶数位清零 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 从键盘任意输入整数a,将其偶数位清零,其他位保留。 输入: 整数a。 输出: 偶数位清零,其他位保留后的数。 输入样例: 0XFFFF 输出样例: 5555<--十六进制 /*偶数位清零*/ #include unsigned short a,b,mask; mask = 0x5555; scanf(“%x”,&a); b = a&mask; printf(“%xn”,b); } 实习08 文件操作 标题: 1.文本文件中字符个数统计 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 统计一个文本文件中字符的个数。 输入: 文本文件名称(包含全路径) 输出: 文本文件中字符的个数。 输入样例: E:DATA70f1.txt 输出样例: 16 提示: 部分代码如下: int main(void){ char ch, filename[200]; int count = 0; /******************/ /* 定义文件指针 */ /******************/ scanf(“%s”, filename);//输入文本文件名 /******************/ /* 在此编写处理代码 */ /******************/ return 0;} /*文本文件中字符统计*/ #include char ch, filename[200]; int count = 0; FILE *fp; /* 定义文件指针 */ scanf(“%s”, filename);//输入文本文件名 if((fp=fopen(filename,“r”))==NULL){ printf(“File open error!n”); exit(1);} while((ch=fgetc(fp))!=EOF){ count++;} printf(“%dn”,count);if(fclose(fp)){ printf(“File close error!n”); exit(1);} } 标题: 2.数据文件 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 已知一个二进制数据文件中存放了10个整型数据,将他们排序后存入另一个二进制文件中。 输入: 存放了10个整型数据的二进制数据文件名(包含全路径) 输出: 排序后的数据,并将其存入结果数据文件中。 输入样例: E:DATA71f0.dat E:DATA71result.dat 输出样例: 34 39 49 65 71 75 91 93 455 723 提示: 部分代码如下: int main(void){ int a[10], temp = 0, i = 0, j = 0, k = 0; char filename1[80], filename2[80]; /******************/ /* 定义文件指针 */ /******************/ scanf(“%s”, filename1);//输入要读入的二进制数据文件名 scanf(“%s”, filename2);//输入存放排序结果的二进制文件名 /******************/ /* 在此编写代码 */ /******************/ /*输出结果的代码,请不要改动*/ if((fp1 = fopen(filename2, “rb”))== NULL) { printf(“Result file open error!n”); exit(1); } for(i = 0;i < 10;i++) { fread(&a[i], sizeof(int), 1, fp1); /* 读出数据 */ } if(fclose(fp1)) { printf(“Result file close error!n”); exit(1); } for(i = 0;i < 9;i++) printf(“%d ”, a[i]); printf(“%dn”, a[i]); return 0;} 标题: 3.二进制文件操作 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 已知一个文本文件中存放了10个整型数据,将它们以二进制数据的形式存入另一个文件。 输入: 存放了10个整型数据的文本文件名。 输出: 二进制数据文件。 输入样例: E:DATA72f0.txt E:DATA72result.dat 输出样例: 23 45 67 78 45 32 12 56 99 56 提示: 部分代码如下: int main(void){ int a[10], i = 0; char filename1[80], filename2[80]; /******************/ /* 定义文件指针 */ /******************/ scanf(“%s”, filename1);//输入要打开的文本文件名 scanf(“%s”, filename2);//输入要创建的二进制文件名 /******************/ /*在此编写处理代码 */ /******************/ /*输出结果的代码,请不要改动*/ if((fp1 = fopen(filename2, “rb”))== NULL) { printf(“Result file open error!n”); exit(1); } for(i = 0;i < 10;i++) { fread(&a[i], sizeof(int), 1, fp1); /* 读出数据 */ } if(fclose(fp1)) { printf(“Result file close error!n”); exit(1); } for(i = 0;i < 9;i++) printf(“%d ”, a[i]); printf(“%dn”, a[i]); return 0;} /*二进制文件操作*/ #include int a[10], i = 0; char filename1[80], filename2[80]; FILE *fp1,*fp2; /* 定义文件指针 */ scanf(“%s”, filename1);//输入要打开的文本文件名 scanf(“%s”, filename2);//输入要创建的二进制文件名 if((fp1 = fopen(filename1, “rb”))== NULL) { printf(“Input file open error!n”); exit(1); } if((fp2 = fopen(filename2, “wb”))== NULL) { printf(“Result file open error!n”); exit(1); } for(i=0;i<10;i++) { fscanf(fp1,“%d”,&a[i]); fwrite(&a[i],sizeof(int),1,fp2); } if(fclose(fp1)) { printf(“Result file close error!n”); exit(1); } if(fclose(fp2)) { printf(“Result file close error!n”); exit(1); } if((fp1 = fopen(filename2, “rb”))== NULL) { printf(“Result file open error!n”); exit(1); } for(i = 0;i < 10;i++) { fread(&a[i], sizeof(int), 1, fp1); /* 读出数据 */ } if(fclose(fp1)) { printf(“Result file close error!n”); exit(1); } for(i = 0;i < 9;i++) printf(“%d ”, a[i]); printf(“%dn”, a[i]); return 0;} 标题: 4.文件内容比较 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 设2个文本文件中的字符数量相等,比较2个文本文件中的内容是否一致,如果不同输出首次不同的字符的位置。 输入: 2个文本文件全路径名。 输出: 比较2个文本文件中的内容是否一致,如果不同输出首次不同的字符的位置。 输入样例: E:DATA73f01.txt E:DATA73f02.txt 输出样例: 提示: #include int i = 1, flag = 0; char filename1[80], filename2[80]; /******************/ /* 定义文件指针 */ /******************/ scanf(“%s”, filename1);//输入第1个文件名 scanf(“%s”, filename2);//输入第2个文件名 /******************/ /* 在此编写处理代码*/ /******************/ return 0;} 标题: 1、除不尽的自然数 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到的商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求这个自然数。 输入: 无 输出: 满足条件的自然数。 输入样例: 无 输出样例: 1993 提示: 根据题意,可设最后的商为i(i从0开始取值),用逆推法可以列出关系式:(((i*8+7)*8)+1)*8+1=((2*i*17)+15)*17+4再用试探法求出商i的值。 #include int i; for(i=0;;i++)/*试探商的值*/ if(((i*8+7)*8+1)*8+1==(34*i+15)*17+4) { /*逆推判断所取得的当前i值是否满足关系式*/ /*若满足则输出结果*/ printf(“%dn”,(34*i+15)*17+4); break;/*退出循环*/ } return 0;} 标题: 2、4位反序数 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321。 输入: 无 输出: 4位反序数 输入样例: 无 输出样例: 1089 提示: 可设整数N的千、百、十、个位为i、j、k、l,其取值均为0~9,则满足关系式:(i*10^3+j*10^2+10*k+l)*9=(l*10^3+k*10^2+10*j+i)的i、j、k、l即构成N。 #include int i; for(i=1002;i<1111;i++)/*穷举四位数可能的值*/ if(i%10*1000+i/10%10*100+i/100%10*10+i/1000==i*9) /*判断反序数是否是原整数的9倍*/ printf(“%dn”,i); /*若是则输出*/ return 0;} 标题: 3、求车速 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少? 输入: 无 输出: 满足条件的对称数和车速 输入样例: 无 输出样例: 95959 50.00 提示: 根据题意,设所求对称数为i,其初值为95859,对其依次递增取值,将i值的每一位分解后与其对称位置上的数进行比较,若每个对称位置上的数皆相等,则可判定i即为所求的对称数。 #include int t,a[5];/*数组a存放分解的数字位*/ long int k,i; for(i=95860;;i++)/*以95860为初值,循环试探*/ { for(t=0,k=100000;k>=10;t++)/*从高到低分解所取i值的每位数*/ { /* 字,依次存放于a[0]~a[5]中*/ a[t]=(i%k)/(k/10); k/=10; } if((a[0]==a[4])&&(a[1]==a[3])) { printf(“%d%d%d%d%dn”,a[0],a[1],a[2],a[3],a[4]); printf(“%.2fn”,(i-95859)/2.0); break; } } return 0;} 标题: 4、阿姆斯特朗数 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 如果一个正整数等于其各个数字的立方和,则称该数为阿姆斯特朗数(亦称为自恋性数)。如 407=4^3+0^3+7^3就是一个阿姆斯特朗数。试编程求1000以内的所有阿姆斯特朗数。 输入: 无 输出: 阿姆斯特朗数 输入样例: 无 输出样例: 153 370 371 407 提示: 输出时printf()的格式串用“%5d”。 #include int i,t,k,a[3]; //printf(“There are follwing Armstrong number smaller than 1000:n”); for(i=2;i<1000;i++)/*穷举要判定的数i的取值范围2~1000*/ { for(t=0,k=1000;k>=10;t++)/*截取整数i的各位(从高向低位)*/ { a[t]=(i%k)/(k/10);/*分别赋于a[0]~a[2}*/ k/=10; } if(a[0]*a[0]*a[0]+a[1]*a[1]*a[1]+a[2]*a[2]*a[2]==i) /*判断i是否为阿姆斯特朗数*/ printf(“%5d”,i);/*若满足条件,则输出*/ } printf(“n”); return 0;} 标题: 5、完全数 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 如果一个数恰好等于它的因子之和,则称该数为“完全数”,求1000以内的完全数。 输入: 无 输出: 完全数 输入样例: 无 输出样例: 496 提示: 1、根据完全数的定义,先计算所选取的整数a(a的取值1~1000)的因子,将各因子累加于m,若m等于a,则可确认a为完全数。 2、输出用printf(“%4d ”,a)。 #include int a,i,m; //printf(“There are following perfect numbers smaller than 1000:n”); for(a=1;a<1000;a++)/*循环控制选取1~1000中的各数进行判断*/ { for(m=0,i=1;i<=a/2;i++)/*计算a的因子,并将各因子之和m=a,则a是完全数输出*/ if(!(a%i))m+=i; if(m==a) printf(“%4d ”,a); } printf(“n”); return 0;} 标题: 6、亲密数 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 如果整数A的全部因子(包括1,不包括A本身)之和等于B;且整数B的全部因子(包括1,不包括B本身)之和等于A,则将整数A和B称为亲密数。求3000以内的全部亲密数。 输入: 无 输出: 亲密数 输入样例: 无 输出样例: 220<->284 1184<->1210 2620<->2924 #include int a,i,b,n; //printf(“There are following friendly–numbers pair smaller than 3000:n”); for(a=1;a<3000;a++)/*穷举1000以内的全部整数*/ { for(b=0,i=1;i<=a/2;i++)/*计算数a的各因子,各因子之和存放于b*/ if(!(a%i))b+=i;/*计算b的各因子,各因子之和存于n*/ for(n=0,i=1;i<=b/2;i++) if(!(b%i))n+=i; if(n==a&&a printf(“%d<->%dn”,a,b);/*若n=a,则a和b是一对亲密数,输出*/ } return 0;} 标题: 7、自守数 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2=625、76^2=5776、9376^2=87909376,请求出200000以内的自守数。 输入: 无 输出: 自守数 输入样例: 无 输出样例: 0 1 5 6 25 76 376 625 9376 90625 109376 提示: 若采用“求出一个数的平方后再截取最后相应位数”的方法显然是不可取的,因为计算机无法表示过大的整数。 #include long mul,number,k,ll,kk; //printf(“It exists following automorphic nmbers small than 200000:n”); for(number=0;number<200000;number++) { for(mul=number,k=1;(mul/=10)>0;k*=10); /*由number的位数确定截取数字进行乘法时的系数k*/ kk=k*10;/*kk为截取部分积时的系数*/ mul=0;/*积的最后n位*/ ll=10;/*ll为截取乘数相应位时的系数*/ while(k>0) { mul=(mul+(number%(k*10))*(number%ll-number%(ll/10)))%kk; /*(部分积+截取被乘数的后N位*截取乘数的第M位),%kk再截取部分积*/ k/=10;/*k为截取被乘数时的系数*/ ll*=10; } if(number==mul)/*判断若为自守数则输出*/ printf(“ %ld”,number); } printf(“n”); return 0;} 标题: 8、回文数 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 打印所有不超过n(取n<256)的平方具有对称性质的数(也称回文数)。 输入: 无 输出: 满足条件的整数 输入样例: 无 输出样例: 2 3 4 5 484 6 676 7 10201 8 12321 9 121 14641 10 202 40804 11 212 44944 提示: 1、对于要判断的数n,计算出其平方后(存于a),将a的每一位进行分解,再按a的从低到高的顺序将其恢复成一个数k(如n=13,则a=169且k=961),若a等于k则可判定n为回文数。 2、输出格式串用:“%2d%10d%10dn”。 #include int m[16],n,i,j,t,count=0; long unsigned a,k; //printf(“No.number it's square(palindrome)n”); for(n=1;n<256;n++)/*穷举n的取值范围*/ { k=0; t=1; a=n*n;/*计算n的平方*/ for(i=0;a!=0;i++)/*从低到高分解数a的每一位存于数组m[0]~m[16]*/ { m[i]=a%10;//这个是取得a的个位,整个循环合起来就可以取得各个位 a/=10; } j=0; for(i--;j if(m[j]!=m[i])break;//只要有一位不是对称,那就说明不是对称,就可以退出了 //所有的位都对称就说明是对称了,这样就可以打印出结果了 if(j>=i)printf(“%2d%10d%10dn”,++count,n,n*n); } return 0;} 标题: 9、具有abcd=(ab+cd)^2性质的四位数 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(30+25)^2,恰好等于3025本身。请求出具有这样性质的全部四位数。 输入: 无 输出: 具有abcd=(ab+cd)^2性质的四位数 输入样例: 无 输出样例: 2025 3025 9801 #include int n,a,b; //printf(“There are following number with 4 digits satisfied conditionn”); for(n=1000;n<10000;n++)/*四位数N的取值范围1000~9999*/ { a=n/100;/*截取N的前两位数存于a*/ b=n%100;/*截取N的后两位存于b*/ if((a+b)*(a+b)==n)/*判断N是否为符合题目所规定的性质的四位数*/ printf(“%d ”,n); } return 0;} 标题: 1、新娘和新郞 时 限: 1000 ms 内存限制: 10000 K 总时限: 3000 ms 描述: 三对情侣参加婚礼,三个新郞为A、B、C,三个新娘为X、Y、Z。有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的:A说他将和X结婚;X说她的未婚夫是C;C说他将和Z结婚。这人听后知道他们在开玩笑,全是假话。请编程找出谁将和谁结婚。 输入: 无 输出: 分析推理结果。 输入样例: 无 输出样例: X will marry to B.Y will marry to C.Z will marry to A.提示: 将A、B、C三人用1,2,3表示,将X和A结婚表示为“X=1”,将Y不与A结婚表示为“Y!=1”。按照题目中的叙述可以写出表达式: x!=1 A不与X结婚 x!=3 X的未婚夫不是C z!=3 C不与Z结婚 题意还隐含着X、Y、Z三个新娘不能结为配偶,则有: x!=y且x!=z且y!=z 穷举以上所有可能的情况,代入上述表达式中进行推理运算,若假设的情况使上述表达式的结果均为真,则假设情况就是正确的结果。 实习1 1、简单程序设计 编程写程序,在屏幕上输出信息:Happy New Year! /* 输出图形*/ #include { printf(“Happy New Year!n”); } 2、简单计算 由键盘任意输入2个数,分别计算它们的和、差、积、商。/*简单计算*/ #include { float a,b;float h,c,j,s;scanf(“%f%f”, &a,&b); h=a+b;c=a-b;j=a*b; s=a/b;printf(“和=%f,差=%f,积=%f,商=%fn”,h,c,j,s); } 3、计算梯形的面积 已知梯形的上底、下底和高,计算梯形的面积。 /*计算梯形的面积*/ #include { float supline,dowline,high; double area;scanf(“%f”,&supline); scanf(“%f”,&dowline); scanf(“%f”,&high);area =((supline+dowline)*high)/2.0; printf(“%f n”,area); } 4、输出字符对应的ASCII码 任意输入一个字符,输出此字符对应的ASCII码。 /*输出字符对应的ASCII码*/ #include { char c;scanf(“%c”,&c);printf(“%dn”,c); } 5、数据类型长度测试 编写程序,测试所使用的计算机系统字符型、短整型、整形、长整型、单精度实型、双精度实型所占有的字节数量。 /*数据类型长度测试*/ #include { printf(“size of char=%dn”,sizeof(char)); printf(“size of short=%dn”,sizeof(short)); printf(“size of int=%dn”,sizeof(int)); printf(“size of long int=%dn”,sizeof(long int)); printf(“size of float=%dn”,sizeof(float)); printf(“size of double=%dn”,sizeof(double)); } 1.成绩判断 输入一个学生的数学成绩,如果它低于60,输出“Fail”,否则,输出“Pass”。不要改变与输入输出有关的语句。 /*成绩判断*/ #include void main() { float mark; scanf(“%f”,&mark); if(mark<60) printf(“Failn”); else printf(“Passn”); } 2.字符转换 输入一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。不要改变与输入输出有关的语句。 #include main(){char ch;ch=getchar(); if(ch>='A'&&ch<='Z') {ch=ch+32; printf(“%cn”,ch);} else if(ch>='a'&&ch<='z') {ch=ch-32; printf(“%cn”,ch);} else printf(“%cn”,ch); } 3.利用海伦公式求三角形面积 三角形三个边长 /*计算三角形面积*/ #include “math.h” #include “stdio.h” void main() { double a,b,c,s,area; printf(“请输入3条边长:”);scanf(“%lf%lf%lf”,&a,&b,&c);if(a+b>c&&b+c>a&&a+c>b) { s=1.0/2*(a+b+c); area=sqrt(s*(s-a)*(s-b)*(s-c)); printf(“三角形的面积是:%fn”,area); scanf(“%lfn”,area); } else printf(“这3个数无法组成三角形!n”); } 4.判断是否能构成一个三角形 从键盘输三个数,判断是否能将它们作为三角形的三条边构成一个三角形。若能,输出“Yes”,否则,输出“No”。 /*判断是否能构成一个三角形*/ #include { float a,b,c; printf(“请输入3条边长:”);scanf(“%f%f%f”,&a,&b,&c);if(a>0&&b>0&&c>0&&a+b>c&&a+c>b&& b+c>a) printf(“Yesn”); else printf(“Non”); } 5.按从大到小排序三个数 从键盘输入三个数,将它们按从大到小进 行排序,然后输出。/*按从大到小排序三个数*/ #include main(){ int a,b,c,d,e,f; printf(“请输入三个整数n1,n2,n3:”); scanf(“%d%d%d”,&a, &b, &c); printf(“排序前:%d, %d, %dn”, a, b, c); if(a>b){ { d=c;e=a;f=b; } { if(c } else { d=a;e=c;f=b;} } } else{if(b } 1.数据统计 任意输入n个整数,分别统计奇数的和、奇数的个数、偶数的和、偶数的个数。 /*数据统计*/ #include void main() { int i,n,m,jishuhe=0,oushuhe=0,jishuge=0,oushuge=0; scanf(“%d”,&n); for(i=0;i { scanf(“%d”,&m); if(m%2!=0) { jishuhe=jishuhe+m; jishuge++; } else { oushuhe=oushuhe+m; oushuge++; } } printf(“%dn%dn%dn%dn”,jishuhe,jishuge,oushuhe,oushuge); } 2.爱因斯坦阶梯问题 爱因斯坦阶梯问题。设有一阶梯,每步跨2阶,最后剩1阶;每步跨3阶,最后剩2阶;每步跨5阶,最后剩4阶;每步跨6阶,最后剩5阶;每步跨7阶,正好到阶梯顶。问满足条件的最少阶梯数是多少。 /*爱因斯坦阶梯问题*/ #include { int x;x=7;while(!((x%3==2)&&(x%5==4)&&(x%6==5))) x+=14; printf(“%dn”,x); } 3.猴子吃桃问题 一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一个,第2天接着吃了前一天剩下的一半,再多吃了一个,以后每天如此,直到第n天,只剩下1个桃子,问猴子一共摘了多少桃子? /*猴子吃桃问题*/ #include { int n;int x=1,i; scanf(“%d”,&n);for(i=1;i { x=2*(x+1); } printf(“%dn”,x); } ┏(^ω^)=☞✘✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 4.求两个数的最大公约数和最小公倍数 用辗转相除法(即欧几里得算法)求两个正整数的最大公约数和最 小公倍数。 /* 求两个数的最大公约数和最小公倍数*/ #include void main() { int a,b,rem,temp;int Div,Multi;int a1,b1; scanf(“%d%d”,&a,&b); a1=a;b1=b;if(a temp=a;a=b;b=temp;} while(rem) { rem = a%b; a=b;b=rem;} Div=a;Multi = a1*b1/Div; printf(“%dn%dn”,Div,Multi); } 5.求sin(x)的近似值 利用公式求sin(x)的近似值(精度为10e-6)。sin(x)=x-x3/3!+x5/5!-x7/7!+....(-1)nx(2n+1)/(2n+1)!+.../*求sin(x)的近似值*/ #include main(){ float a,b=1;float i,sinx,x;scanf(“%f”,&x); a=x;sinx=0; for(i=1;fabs(a/b)>=1e-6;i++) { sinx+=a/b;a=-a*x*x;b=b*2*i*(2*i+1); } printf(“%fn”,sinx); } 6.图形输出 输入一个字符及行数n,用该字符在屏幕上输出如下图形: * *** ***** ******* ********* 输入: 一个字符及要输出的行数n。 输出: 用该字符在屏幕上构成的要求图形。 #include void main() { int n,i,j;char ch;ch=getchar();scanf(“%d”,&n);for(i=0;i for(j=0;j<(n-1-i);j++) printf(“ ”); for(j=0;j<(2*i+1);j++)printf(“%c”,ch); printf(“n”);} } (^ω^)=☞1.字符串连接 由键盘任意输入两串字符,不用库函 数strcat,连接将两串字符。 输入: 两串字符 输出: 连接将两串字符 输入样例: abc def 输出样例: abcdef /*字符串连接*/ #include { ┏ int i,j,k; char str[20]={“ ”},str1[10],str2[10]; gets(str1); gets(str2); j=strlen(str1),k=strlen(str2); for(i=0;i { if(i else str[i]=str2[i-j]; } puts(str);} /*字符串连接*/ #include { char str1[100],str2[50]; int i,j; gets(str1);gets(str2); for(i=0;str1[i]!=' ';i++) ; for(j=0;str2[j]!=' ';j++) { str1[i]=str2[j]; i++;} str1[i] = ' '; puts(str1); } 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 void main() { char a[80]; int i;gets(a); for(i=0;a[i]!=0;i++){if((a[i]>='A'&& a[i]<='X')||(a[i]>='a'&&a[i]<='x')) a[i]=a[i]+2;else if((a[i]>='y'&&a[i]<='z')||(a[i]>='Y'&&a[i]<='Z')) a[i]=a[i]-24;} puts(a);} 3.矩阵对角线元素求和 描述: 输入一个5×5的数组,分别求其主对角线和辅对角线上 元素之和。 输入: 5×5的数组 输出: 主对角线和辅对角线上元素之和 输入样例: 1 2 3 4 5 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 输出样例: 65 65 提示: 主对角线为从矩阵的左上角至右下角的连线,在数组中即指行列下标相同的元素,辅对角线为从矩阵的右上角至左下角的连线,这些元素的下标之间也可用相应的表达式表达。 /*矩阵对角线元素求和*/ #include { int i,j;int a[6][6];int sum1=0,sum2=0; 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 %dn”,sum1,sum2); } 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 { int i,a[10],temp;int kmax=0,kmin=0; for(i=0;i<10;i++)scanf(“%d”,&a[i]); for(i=0;i<10;i++) { if(a[i]>a[kmax]) kmax=i; if(a[i] kmin=i; 1、字符串连接 /* exer 4-1 两串字符连接 */ #include unsigned int i,j; char soustr[80],desstr[80]; //printf(“please enter soustr:”); gets(soustr); } temp=a[0];a[0]=a[kmax];a[kmax]=temp; if(kmax!=9) { temp=a[9];a[9]=a[kmin];a[kmin]=temp; } 实习四答案 /* 输入原串 */ //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 字符加密 */ #include 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 主和辅对角线上元素之和 */ #include 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 %dn”,sum1,sum2);} 4、数据顺序调整 /* exer 4-4 将最大数调到最前面,最小数调到最后面 */ #include 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(“%dn”,a[i]);} 5、字符个数统计 /* exer 4-5 统计大写字母、小写字母、数字及其它字符的个数 */ #include 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 { 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++; /* 统计数字 */ else oth++; /* 统计其它字符 */ } printf(“%d %d %d %dn”,cap,low,dig,oth);} 6、学生成绩计算 /* exer 4-6 求每一个学生的总成绩和平均成绩 */ #include 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 %fn”,allsco[i],avesco[i]);/* 输出成绩 */ } 7、姓名排序 /* exer 4-7 姓名排序 */ #include int i,j,k; char name[10][80],temp[80]; //printf(“please enter :”); for(i=0;i<10;i++) gets(name[i]); /* 输入姓名数组 */ for(i=0;i<9;i++) /* 排序 */ { k = i; for(j=i+1;j<10;j++) if(strcmp(name[k],name[j])>0) k = j; if(k!=i) { strcpy(temp,name[i]); strcpy(name[i],name[k]); strcpy(name[k],temp); /* 交换 */ } } for(i=0;i<10;i++) puts(name[i]); /* 输出姓名数组 */ } 8、输出杨辉三角形 /* exer 4-8 打印杨辉三角形 */ #include int i,j; int a[6][6]; for(i=0;i<6;i++) { a[i][i] = 1; /* 主对角线为1 */ a[i][0] = 1; /* 第1列为1 */ } for(i=2;i<6;i++) for(j=1;j a[i][j] = a[i-1][j-1]+a[i-1][j];/* 计算 */ for(i=0;i<6;i++) { for(j=0;j<=i;j++) printf(“%d ”,a[i][j]); /* 输出 */ printf(“n”); /* 换行 */ } } 实习五答案 1、用指针实现排序 /* exer 5-1 由键盘输入 10个整数,将它们按由小到大顺序排列 */ #include int a[10],*p = NULL; /* 说明数组和指针 */ int i, j, temp; for(p = a;p < a + 10;p++) /* 指针从数组首到尾 */ { scanf(“%d”, p); /* 利用指针依次输入 */ } p = a; for(i = 0;i < 9;i++) /* 利用指针依次比较 */ { for(j = i + 1;j < 10;j++) if(*(p + i)> *(p + j)) { temp = *(p + i); *(p + i)= *(p + j); *(p + j)= temp; } } for(p=a;p < a + 9;p++) printf(“%d ”, *p); printf(“%dn”, *p);} 2、用指针实现字符串排序 /*exer 5-2 将 10个长度小于20的字符串排序*/ #include char szStr[10][20],*psz[10],szTemp[20]; int i,j; for(i = 0;i < 10;i++) { psz[i] = szStr[i]; /*指针数组的每个元素指向各行串*/ } for(i = 0;i < 10;i++) { gets(psz[i]); /*输入10个字符串*/ } for(i = 0;i < 9;i++) /*字符串排序*/ { for(j = i + 1;j < 10;j++) { if(strcmp(psz[i], psz[j])> 0) { strcpy(szTemp, psz[i]); strcpy(psz[i], psz[j]); strcpy(psz[j], szTemp); } } } for(i = 0;i < 10;i++) { puts(psz[i]); /*输出字符串*/ } } 3、数据倒置 /*exer 5-3 将具有10个元素的一维数组中的数据倒置 */ #include int a[10], iTemp, *p, *q; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i); /*输入数组*/ } p = a; q = a + 9; for(p = a, q = a + 9;p < q;p++, q--) /*首尾交换*/ { iTemp = *p; *p = *q; *q = iTemp; } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*输出*/ } } 4、用指针实现数据位置调整 /*exer 5-4 输入 10个整数,将最大的调到最后,最小的调到最前*/ #include void swap(int *px, int *py); int main(void){ int a[10], iTemp, *pMax, *pMin; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i);/*输入数组*/ } pMax = a; /*最大值指针指向数组首地址*/ pMin = a; /*最小值指针指向数组首地址*/ for(i = 1;i < 10;i++) { if(*(a+i)> *pMax) pMax = a + i; if(*(a+i)< *pMin) pMin = a + i; } /*最大值是第1个元素,最小值是最后一个元素*/ if(pMax == a && pMin == a + 9) { swap(pMax, pMin); } else { /*最小值与第一个元素交换*/ swap(a, pMin); /*最大值与最后一个元素交换*/ swap(a + 9, pMax); } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*输出*/ } return 0;} void swap(int *px, int *py){ int temp; temp = *px; *px = *py; *py = temp;} 5、用指针实现查找二维数组中最大数及其位置 /*exer 5-5 找出二维数组(设3行4列)中的最大数及其位置 */ #include int a[3][4],(*p)[4], iCol, iRow; int i, j; p = a; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) scanf(“%d”, *(p + i)+ j); /*输入数组*/ } iCol = 0; /*设最大数及其位置 */ iRow = 0; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) { if(*(*(p + i)+ j)> *(*(p + iRow)+ iCol)) { iRow = i; iCol = j; /*修改位置*/ } } } printf(“%d %d %dn”, iRow, iCol, a[iRow][iCol]);} 6、用指针实现子字符串提取 /*exer 5-6 由键盘输入一串字符,从字符串下标为m开始 取出n个字符(m和n由键盘输入),形成一个新的字符串 */ #include char szStrSour[80], szStrDest[80], *pszSour, *pszDest; int i, m, n; gets(szStrSour); /* 输入字符串 */ scanf(“%d%d”, &m, &n); /* 输入位置和长度 */ pszSour = szStrSour + m; /* 确定起始位置 */ pszDest = szStrDest; for(i = 0;i < n;i++) /* 依次取n个字符 */ { *pszDest = *pszSour; pszDest++; pszSour++; } *pszDest = ' '; /* 在字符串末尾追加结束标志 */ puts(szStrDest);} 实习六答案 1、整数交换函数设计 /* exer 6-1 交换2个整数 */ #include void swap(int *, int *); /* 函数声明 */ void main(void){ int a,b; //printf(“please enter 2 data:”); scanf(“%d%d”,&a,&b); /* 输入2个整数 */ //printf(“a=%d,b=%dn”,a,b); swap(&a,&b); /* 调用函数进行交换 */ printf(“%d %dn”,a,b);} void swap(int *p1, int *p2) /* 交换函数 */ { int temp; temp = *p2; /* 交换 */ *p2 = *p1; *p1 = temp;} 2、数字字符个数统计函数设计 /* exer 6-2 统计一串字符中数字字符的个数 */ #include /* 函数声明 */ void main(void){ char pstr[80]; //printf(“please enter string:”); gets(pstr); /* 输入字符串 */ printf(“%dn”,count(pstr));/* 调用函数进行统计 */ } int count(char *p) /* 统计函数 */ { int num=0; while(*p!=' ') /* 循环依次遍历 */ { if(*p>='0' && *p<='9') num++; /* 统计 */ p++; /* 指针后移 */ } return num;} 3、排序函数设计 /* exer 6-3 利用函数排序 */ #include /* 函数声明 */ void main(void){ int n, i, data[10]; //printf(“please enter 10 data:”); scanf(“%d”, &n); for(i=0;i scanf(“%d”,&data[i]); /* 输入数组 */ sort(data,n); /* 调用函数排序 */ for(i=0;i printf(“%d ”,data[i]); /* 输出数组 */ } void sort(int a[ ],int num) /* 排序函数 */ { int i,j,k,temp; for(i=0;i /* 排序 */ { k = i; for(j=i+1;j if(a[k] k = j; if(k!=i) { temp = a[k]; a[k] = a[i]; a[i] = temp; /* 交换 */ } } } 4、矩阵转置函数设计 /* exer 6-4 矩阵转置 */ #include /* 函数声明 */ void main(void){ int n, i, j, data[100][100]; scanf(“%d”, &n); for(i=0;i { for(j=0;j scanf(“%d”,&data[i][j]); /* 输入数组 */ } transpose(data,n); /* 调用函数转置 */ for(i=0;i { for(j=0;j printf(“%d ”,data[i][j]); /* 输出数组 */ printf(“%dn”, data[i][j]); } } void transpose(int a[][100],int n) /* 转置函数 */ { int i,j,temp; for(i=0;i /* 转置 */ { for(j=0;j { temp = a[i][j]; a[i][j] = a[j][i]; a[j][i] = temp; /* 交换 */ } } } 5、求素数函数设计 /* exer 6-5 求素数 */ #include /* 函数声明 */ void main(void){ int m,num=0; /* 定义整型变量 */ for(m=101;m<=200;m=m+2)/* 循环依次遍历待检测的奇数 */ { if(Prime(m)) /* 调用函数判断此数是否为素数 */ { printf(“%d ”,m); /* 输出素数 */ num++; /* 统计素数 */ } } printf(“n%dn”,num);/* 输出素数个数 */ } int Prime(int n) /* 判断此数是否为素数函数 */ { int found; /* 定义开关变量 */ int i,k; k = sqrt((double)n); found = 1; /* 初始化开关变量 */ i = 2; while(i<=k && found) /* 循环依次检测条件 */ { if(n%i ==0) found = 0; /* 一旦除尽修正开关变量 */ i++; } return found;} 6、进制转换函数设计 /* exer 6-6 八进制数据字符串转换为十进制数据 */ #include /* 函数声明 */ void main(void){ char str[10]; gets(str); /* 输入八进制数据字符串 */ printf(“%dn”,conver(str));/* 调用子函数转换 */ } int conver(char *p) /* 转换子函数 */ { int num=0; for(;*p!=' ';p++) num = num*8+*p-'0'; /* 进行转换 */ return num;} 7、求最大公约数函数设计 /* exer 6-7 求最大公约数 */ #include /* 函数声明 */ void main(void){ int a,b,com; //printf(“please enter two integers:”); scanf(“%d%d”,&a,&b); /* 输入两个正整数 */ com = comdivi(a,b); /* 调用函数 */ printf(“%dn”,com);} int comdivi(int m,int n) /* 求最大公约数子函数 */ { int q; if(n>m) /* 如果m小于n,交换 */ { int z; z = m; m = n; n = z; } do { q = m%n; /* 开始迭代 */ m = n; n = q; } while(q!=0); /* 循环整除取余,直到余数为0 */ return m;} 8、对称数组判断 /* exer 6-8 判断二维数组是否为对称数组 */ #include /* 函数声明 */ void main(void){ int n, i, j, data[100][100]; scanf(“%d”, &n); for(i=0;i { for(j=0;j scanf(“%d”,&data[i][j]); /* 输入数组 */ } if(array((int *)data, 4)) /* 调用函数判断 */ printf(“Yesn”); else printf(“Non”);} int array(int *p,int n) /* 判断此数组是否为对称数组函数 */ { int found; /* 定义开关变量 */ int i,j; found = 1; /* 初始化开关变量 */ for(i=0;i { for(j=0;j { if(*(p+i*100+j)!=*(p+j*100+i))/* 循环依次判断 */ { found = 0; break; } } } return found;} 实习七答案 1、电话薄管理程序设计 /* exer 7-1 手机电话簿管理 */ #include /* 定义全局变量,代表电话簿长度 */ struct stud /* 定义结构类型 */ { char name[15]; char phone_num[15]; char mobile_num[15];} book[100]; /* 定义结构数组 */ void creat(); /* 函数的原型声明 */ void insert();void search();void delete();void output(); int main(void) /* 主函数 */ { int k; do { printf(“ 0: exitn”); /* 打印菜单项 */ printf(“ 1: creatn”); printf(“ 2: searchn”); printf(“ 3: insertn”); printf(“ 4: deleten”); printf(“ 5: outputn”); printf(“please select:”); scanf(“%d”,&k); /* 输入选择项 */ switch(k) { case 0: exit(0); /* 退出函数 */ case 1: creat(); break; case 2: search(); break; case 3: insert(); break; case 4: delete(); break; case 5: output(); break; /* 调用子函数 */ default: exit(0); } } while(1); return 0;} void creat(void) /* 生成子函数 */ { char appella[15]; getchar(); while(1) /* 输入结构数组 */ { gets(appella); if(*appella=='*')break; /* 输入*,则结束 */ strcpy(book[N].name, appella); gets(book[N].phone_num); gets(book[N].mobile_num); N++; /* 统计长度 */ } } void search(void) /*查找子函数 */ { char appella[15]; int i=0; getchar(); gets(appella); while(i { i++; } if(i printf(“%s %s %sn”,book[i].name,book[i].phone_num,book[i].mobile_num); else printf(“not found”);} void insert(void) /* 插入子函数 */ { getchar(); gets(book[N].name); gets(book[N].phone_num); gets(book[N].mobile_num); N++; /* 长度加1 */ } void delete(void) /*删除子函数 */ { char appella[15]; int i=0,j; getchar(); gets(appella); while(i { i++; } if(i { for(j=i+1;j { book[j-1] = book[j]; } N--; /* 长度减1 */ } else printf(“not found”);} void output(void) /* 输出子函数 */ { int i; for(i=0;i printf(“%s %s %sn”,book[i].name,book[i].phone_num,book[i].mobile_num);} 2、正负数判断 /* exer 8-1 判断数是正数、负数 */ #include short num,mask,bit; mask = 0x8000; /* 构造掩码 */ scanf(“%hx”,&num); /* 输入数据 */ bit =(mask & num)?1:0; /* 取出第一位 */ if(bit == 0) printf(“is positive numbern”); /* 输出正数 */ else printf(“is negative numbern”); /* 输出负数 */ return 0;} 3、偶数位清零 /* exer 8-3 将偶数位清零,其它位保留 */ #include unsigned short a,b,mask; mask = 0x5555; /* 构造掩码 */ scanf(“%hx”,&a); /* 输入数据a */ b = a & mask; /* 与掩码按位与 */ printf(“%xn”,b); /* 输出 */ return 0;} 4、结构体的定义与引用 #include /*定义结构体*/ struct employee { char name[100]; char ID[20]; int age; float salary;}; int main(){ /*定义结构体变量*/ struct employee staff; /*输入数据*/ gets(staff.name); gets(staff.ID); scanf(“%d”, &staff.age); scanf(“%f”, &staff.salary); /*输出数据*/ puts(staff.name); puts(staff.ID); printf(“%dn”, staff.age); printf(“%.2fn”, staff.salary); return 0;} 5、结构体数组的定义与引用 #include /*定义结构体*/ struct employee { char name[100]; char ID[20]; int age; float salary;}; int main(){ int i = 0; float MaxSalary = 0.0f; /*定义结构体变量*/ struct employee staff[5]; /*输入数据*/ for(i = 0;i < 5;i++) { scanf(“%s”, staff[i].name); scanf(“%s”, staff[i].ID); scanf(“%d”, &staff[i].age); scanf(“%f”, &staff[i].salary); } MaxSalary = staff[0].salary; for(i = 1;i < 5;i++) { if(staff[i].salary > MaxSalary) MaxSalary = staff[i].salary; } printf(“%.2fn”, MaxSalary); return 0;} 西北农林科技大学 热能与动力工程(本科类) 热能与动力工程专业 学制四年,毕业授予工学学士学位。本专业培养具备水利水电动力工程学科的基本理论、基本知识和基本技能,受到现代水利水电动力工程师的基本培养和训练,系统掌握水利水电动力工程的基本知识与相关的工程技术、工程经济和工程管理知识的高级工程技术人才。 主干学科:动力工程 相关学科:水利工程、电气工程 主干课程:理论力学、材料力学、工程流体力学、机械设计基础、电路、电子技术基础、电机与拖动、微机原理及应用、水力机械、电气设备、发电厂电气部分等。 就业方向及深造:毕业后能在水利、水电、供水等部门从事机电设备及动力工程的设计、选型、安装、调试、运行、管理和实验研究等方面工作。优秀毕业生可推荐或报考我院8个博、硕士学位授权点继续深造,也可推荐或报考国内外院校博、硕士研究生。 木材科学与工程(本科类) 木材科学与工程专业 学制四年,毕业授予工学学士学位。本专业培养具有木材科学与工程的基本理论、基本知识和基本技能的高级科技人才。熟悉木材物理化学、电工电子技术、机械基础、造型艺术等方面理论知识。具有木材及木质复合材料加工和设备选型的基本技能及经营、管理能力。(该专业设有家具与室内设计方向) 主干学科:林业工程 相关学科:机械工程 主干课程:图学基础与计算机绘图、木材学、工程力学、胶合材料学、机械基础、电工电子技术、木工机械、造型设计原理、制材学、木材干燥学、木制品生产工艺学、人造板生产工艺学、家具设计等。 就业方向与深造:毕业后能在木材工业、家具制造业、室内装修工程等领域从事木材加工、家具设计制造、室内装修、装修工程的研究开发工作。优秀毕业生可以推荐或报考木材科学与技术专业硕士点继续深造,也可以推荐与国外院校联合培养、出国深造。 机械设计制造及其自动化(本科类) 机械设计制造及其自动化专业 学制四年,毕业授予工学学士学位。本专业培养具有机械设计制造及其自动化学科的基本理论、基本知识和基本技能的高级工程技术人才。系统掌握数学、力学、电工电子学、自动控制理论、机械设计、现代设计方法、机械制造技术、数控技术和计算机应用技术等方面的理论知识和技能。具备机械工程的创新设计能力。 主干学科:机械工程 相关学科:农业工程、电气工程、食品科学与工程 主干课程:工程图学、工程材料、理论力学、材料力学、机械原理、机械设计、电工电子技术、机械制造技术基础、机械工程控制基础、自动控制原理、机电一体化系统设计等。 就业方向与深造:毕业后能从事机械工程领域的设计制造、科研开发、应用研究、运行管理及教学等工作。优秀毕业生可推荐或报考我校机械设计制造及理论、农业电气化与自动化、农业机械化工程、农产品加工及贮藏工程等博士、硕士学位授权点或外校学位点继续深造,也可以推荐与国外院校联合培养、出国深造。 西北农林科技大学 2005年下半年教职工政治理论学习安排 2005年下半年全校教职工政治理论学习总的要求是:坚持以“三个代表”重要思想为指导,深入学习贯彻党的十六大及十六届四中、五中全会精神,全面宣传贯彻落实科学发展观,学习贯彻落实我校第一次党代会精神,以进一步加强大学生思想政治教育工作和开展保持共产党员先进性教育活动为重点,紧紧围绕学校的中心工作,在健全制度、创新形式、突出实效上下功夫,切实抓好全校教职工政治理论学习,为学校改革发展提供精神动力和思想保证。 一、学习内容 1、胡锦涛总书记在纪念中国人民抗日战争暨世界反法西斯战争胜利60周年大会上的重要讲话 2、中央关于纪念长征胜利70周年的系列文件与有关会议精神 3、关于科学发展观及构建社会主义和谐社会的有关论述 4、国务院关于做好建设节约型社会近期重点工作的通知与温家宝总理关于建设节约型机关的重要批示精神 5、中国共产党十六届五中全会精神 6、中共中央关于在全党开展保持共产党员先进性教育活动的意见及教育部党组、省教工委及校党委关于开展好第二批保持共产党员先进性教育活动的重要文件 7、周济部长在教育部高等教育教学评估中心成立大会上的讲话《大力推进高等学校教学评估工作,全面提高高等教育教学质量》以及我校评建工作的有关文件 8、中央16号文件与我校《关于进一步加强和改进大学生思想政治教育的实施意见》及其配套文件 9、其他形势与政策教育材料 二、具体安排 1、第1—10周(8月22日——10月30日) 学习内容:(1)胡锦涛总书记在纪念中国人民抗日战争暨世界反法西斯战争胜利60周年大会上的重要讲话(2)中共中央关于在全党开展保持共产党员先进性教育活动的意见及教育部党组、省教工委及校党委关于开展好第二批保持共产党员先进性教育活动的重要文件 (3)周济部长在教育部高等教育教学评估中心成立大会上的讲话《大力推进高等学校教学评估工作,全面提高高等教育教学质量》以及我校评建工作的有关文件(4)中央16号文件与我校《关于进一步加强和改进大学生思想政治教育的实施意见》及其配套文件 学习重点:深入理解教学评估工作的重要性,明确我校评建工作的重要意义、工作要求及主要任务,确保评估达目标的实现;高度重视和积极参与保持共产党员先进性教育活动,学习先进典型;认真贯彻落实我校《关于进一步加强和改进大学生思想政治教育的实施意见》及其配套文件精神,不断提高大学生思想政治教育的针对性与实效性。 思 考 题: (1)教育部对本科生教学评估有哪些重要要求?我校如何以评建为契机,进一步规范教学管理,提高教学质量?我校在评建工作中对教职员工有哪些具体任务?各部门、各单位的每位教职员工应该如何发挥好自己的积极作用? (2)在新的历史条件下,坚持党的先进性和开展保持共产党员先进性教育活动有哪些历史背景与基本要求?教育部党组、省教工委关于在高校开展好第二批保持共产党员先进性教育活动有哪些具体要求?广大党员如何积极参加好这项重要活动? (3)如何深刻领会加强和改进大学生思想政治教育工作重要意义?如何贯彻落实好校党委出台的有关政策?如何进一步提高大学生 思想政治教育工作的针对性与实效性?广大教职工应如何更新观念、为加强和改进大学生思想政治教育工作做出自己的贡献? 2、第11—19周(10月10日——12月31日) 学习内容:(1)中国共产党十六届五中全会精神(2)关于科学发展观及构建社会主义和谐社会的有关论述(3)国务院关于做好建设节约型社会近期重点工作的通知与温家宝总理关于建设节约型机关的重要批示精神(4)中央关于纪念长征胜利70周年的系列文件与有关会议精神 学习重点:深入理解和正确把握中国共产党十六届五中全会精神,全面了解“十一〃五规划”的主要内容;进一步结合学校实际学习关于科学发展观及构建社会主义和谐社会的有关论述,高度重视国务院关于做好建设节约型社会近期重点工作的通知与温家宝总理关于建设节约型机关的重要批示精神,在全校形成科学、和谐、节约的良好氛围。 思考题: (1)如何深入理解十六届五中全会关于当前我国经济形势和经济工作的全面部署?“十一〃五规划”给我校改革和发展提供了哪些重要机遇? (2)我校应如何针对“十一〃五规划”制定相应发展战略,在推进西部大开发、促进区域经济发展、构建和谐社会与加强科技创新等方面作出新的更大的贡献? (3)结合我校实际,谈谈对实施人才强校、加强科技创新、推进学校国际化等发展战略的理解和看法。 (4)强调树立科学发展观与构建社会主义和谐社会,对高校有哪些具体要求?我校广大师生的思想认识在哪些方面存在明显差距,应如何进一步提高和改进? (6)在新的历史条件下,国家强调提出建设节约型社会有何重要意义?高校应如何贯彻落实好国务院通知要求与温家宝总理关于建设 节约型机关的重要批示精神?结合实际,谈谈自己对建设节约型社会的思考与看法。 三、学习方法及要求 1、各学院(系)、职能处(部、室)要根据本单位的实际情况,保证至少每两周组织一次集中学习,每月学习时间不少于6学时,并做好理论学习的组织工作及考勤、记录、总结工作。 2、学习要坚持集中学习与自学相结合、学习与讨论相结合、学习理论与解决实际问题相结合的原则,及时解决广大教职工思想、学习、生活中存在的各种问题,为学校的改革与发展服务。 3、各单位、各部门要采取多种形式搞好教职工的理论学习,党委宣传部将加强对全校教职工政治理论学习的指导,并适时组织学习辅导报告,以切实推进全校政治理论学习的开展。 党 委 宣 传 部 二○○五年九月六日 实习五答案 1、用指针实现排序 /* exer 5-1 由键盘输入 10个整数,将它们按由小到大顺序排列 */ #include int a[10],*p = NULL; /* 说明数组和指针 */ int i, j, temp; for(p = a;p < a + 10;p++) /* 指针从数组首到尾 */ { scanf(“%d”, p); /* 利用指针依次输入 */ } p = a; for(i = 0;i < 9;i++) /* 利用指针依次比较 */ { for(j = i + 1;j < 10;j++) if(*(p + i)> *(p + j)) { temp = *(p + i); *(p + i)= *(p + j); *(p + j)= temp; } } for(p=a;p < a + 9;p++) printf(“%d ”, *p); printf(“%dn”, *p);} 2、用指针实现字符串排序 /*exer 5-2 将 10个长度小于20的字符串排序*/ #include char szStr[10][20],*psz[10],szTemp[20]; int i,j; for(i = 0;i < 10;i++) { psz[i] = szStr[i]; /*指针数组的每个元素指向各行串*/ } for(i = 0;i < 10;i++) { gets(psz[i]); /*输入10个字符串*/ } for(i = 0;i < 9;i++) /*字符串排序*/ { for(j = i + 1;j < 10;j++) { if(strcmp(psz[i], psz[j])> 0) { strcpy(szTemp, psz[i]); strcpy(psz[i], psz[j]); strcpy(psz[j], szTemp); } } } for(i = 0;i < 10;i++) { puts(psz[i]); /*输出字符串*/ } } 3、数据倒置 /*exer 5-3 将具有10个元素的一维数组中的数据倒置 */ #include int a[10], iTemp, *p, *q; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i); /*输入数组*/ } p = a; q = a + 9; for(p = a, q = a + 9;p < q;p++, q--) /*首尾交换*/ { iTemp = *p; *p = *q; *q = iTemp; } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*输出*/ } } 4、用指针实现数据位置调整 /*exer 5-4 输入 10个整数,将最大的调到最后,最小的调到最前*/ #include void swap(int *px, int *py); int main(void){ int a[10], iTemp, *pMax, *pMin; int i; for(i = 0;i < 10;i++) { scanf(“%d”, a + i);/*输入数组*/ } pMax = a; /*最大值指针指向数组首地址*/ pMin = a; /*最小值指针指向数组首地址*/ for(i = 1;i < 10;i++) { if(*(a+i)> *pMax) pMax = a + i; if(*(a+i)< *pMin) pMin = a + i; } /*最大值是第1个元素,最小值是最后一个元素*/ if(pMax == a && pMin == a + 9) { swap(pMax, pMin); } else { /*最小值与第一个元素交换*/ swap(a, pMin); /*最大值与最后一个元素交换*/ swap(a + 9, pMax); } for(i = 0;i < 10;i++) { printf(“%d ”, *(a + i)); /*输出*/ } return 0;} void swap(int *px, int *py){ int temp; temp = *px; *px = *py; *py = temp;} 5、用指针实现查找二维数组中最大数及其位置 /*exer 5-5 找出二维数组(设3行4列)中的最大数及其位置 */ #include int a[3][4],(*p)[4], iCol, iRow; int i, j; p = a; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) scanf(“%d”, *(p + i)+ j); /*输入数组*/ } iCol = 0; /*设最大数及其位置 */ iRow = 0; for(i = 0;i < 3;i++) { for(j = 0;j < 4;j++) { if(*(*(p + i)+ j)> *(*(p + iRow)+ iCol)) { iRow = i; iCol = j; /*修改位置*/ } } } printf(“%d %d %dn”, iRow, iCol, a[iRow][iCol]);} 6、用指针实现子字符串提取 /*exer 5-6 由键盘输入一串字符,从字符串下标为m开始 取出n个字符(m和n由键盘输入),形成一个新的字符串 */ #include char szStrSour[80], szStrDest[80], *pszSour, *pszDest; int i, m, n; gets(szStrSour); /* 输入字符串 */ scanf(“%d%d”, &m, &n); /* 输入位置和长度 */ pszSour = szStrSour + m; /* 确定起始位置 */ pszDest = szStrDest; for(i = 0;i < n;i++) /* 依次取n个字符 */ { *pszDest = *pszSour; pszDest++; pszSour++; } *pszDest = ' '; puts(szStrDest);} /* 在字符串末尾追加结束标志 */第二篇:西北农林科技大学c语言实习答案
第三篇:西北农林科技大学
第四篇:西北农林科技大学
第五篇:西北农林科技大学 c语言上机 实习5答案