西北农林科技大学c语言实习答案_最新c语言实习总结
西北农林科技大学c语言实习答案由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“最新c语言实习总结”。
实习11、简单程序设计 编程写程序,在屏幕上输出信息:Happy New
Year!
/* 输出图形*/ #include void main()
{
printf(“Happy New Year!n”);
}
2、简单计算 由键盘任意输入2个数,分别计算它们的和、差、积、商。/*简单计算*/ #include void main()
{ 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 void main()
{
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 void main()
{
char c;scanf(“%c”,&c);printf(“%dn”,c);
}
5、数据类型长度测试
编写程序,测试所使用的计算机系统字符型、短整型、整形、长整型、单精度实型、双精度实型所占有的字节数量。
/*数据类型长度测试*/ #include void main()
{ 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”,否则,输出“Pa”。不要改变与输入输出有关的语句。
/*成绩判断*/ #include
void main()
{ float mark;
scanf(“%f”,&mark);
if(mark
printf(“Failn”);
else
printf(“Pan”);
} 2.字符转换
输入一个字符,如果它是大写字母,输出相应的小写字母;如果它是小写字母,输出相应的大写字母;否则,原样输出。不要改变与输入输出有关的语句。
#include
main(){char ch;ch=getchar();
if(ch>='A'&&ch
{ch=ch+32;
printf(“%cn”,ch);}
else if(ch>='a'&&ch
{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 void main()
{ 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(bc){d=b;e=a;f=c;} else{d=b;e=c;f=a;} } } printf(“排序后:%d, %d, %dn”, d, e, f);
} 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 void main()
{
int x;x=7;while(!((x%3==2)&&(x%5==4)&&(x%6==5)))
x+=14;
printf(“%dn”,x);
}
3.猴子吃桃问题
一天一只猴子摘下一堆桃子,吃了一半,觉得不过瘾,又多吃了一个,第2天接着吃了前一天剩下的一半,再多吃了一个,以后每天如此,直到第n天,只剩下1个桃子,问猴子一共摘了多少桃子?
/*猴子吃桃问题*/ #include void main()
{ 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 #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
printf(“ ”);
for(j=0;j
printf(“n”);}
}
(^ω^)=☞1.字符串连接
由键盘任意输入两串字符,不用库函
数strcat,连接将两串字符。
输入: 两串字符
输出: 连接将两串字符
输入样例: abc
def
输出样例: abcdef /*字符串连接*/ #include #include void main()
{
┏ 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 #include void main()
{
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]='a'&&a[i]
a[i]=a[i]+2;else if((a[i]>='y'&&a[i]='Y'&&a[i]
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 #include void main()
{
int i,j;int a[6][6];int sum1=0,sum2=0;
for(i=0;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 #include void main()
{
int i,a[10],temp;int kmax=0,kmin=0;
for(i=0;i
for(i=0;i
{
if(a[i]>a[kmax])
kmax=i;
if(a[i]
kmin=i;
1、字符串连接
/* exer 4-1 两串字符连接 */ #include #include void main(void){
unsigned int i,j;
char soustr[80],detr[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 detr:”);
gets(detr);
/* 输入目的串 */
i = strlen(soustr);
/* 取目的串尾部位置 */
for(j=0;j
{
soustr[i] = detr[j];
/* 将原串依次接入目的串尾部 */
}
puts(soustr);}
2、简单加密程序
/* exer 4-2 字符加密 */ #include #include void main(void){
unsigned int j;
char soustr[80],secstr[80];
//printf(“please enter soustr:”);
gets(soustr);
/* 输入原串 */
for(j=0;j
{
if(soustr[j]>='A' && soustr[j]
secstr[j] =(soustr[j]-'A'+2)%26+'A';/*计算大写字母密文*/
else if(soustr[j]>='a' && soustr[j]
secstr[j] =(soustr[j]-'a'+2)%26+'a';/*计算小写字母密文*/
else
secstr[j] = soustr[j];
/* 其它字符不变 */
}
puts(secstr);}
3、矩阵对角线元素求和
/* exer 4-3 主和辅对角线上元素之和 */ #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
for(j=0;j
scanf(“%d”,&a[i][j]);
/* 输入数组 */
for(i=0;i
{
sum1 = sum1+a[i][i];
/* 主对角线 */
sum2 = sum2+a[i][4-i];
/* 辅对角线 */
}
printf(“%d %dn”,sum1,sum2);}
4、数据顺序调整
/* exer 4-4 将最大数调到最前面,最小数调到最后面 */ #include #include void main(void){
int i,a[10],temp;
int kmax=0,kmin=0;
//printf(“please enter :”);
for(i=0;i
/* 输入数组 */
scanf(“%d”,&a[i]);
for(i=0;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
printf(“%d ”,a[i]);
/* 输出数组 */
printf(“%dn”,a[i]);}
5、字符个数统计
/* exer 4-5 统计大写字母、小写字母、数字及其它字符的个数 */ #include #include 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
{
if(str[i]>='A' && str[i]
cap++;
/* 统计大写字母 */
else if(str[i]>='a' && str[i]
low++;
/* 统计小写字母 */
else if(str[i]>='0' && str[i]
dig++;
/* 统计数字 */
else
oth++;
/* 统计其它字符 */
}
printf(“%d %d %d %dn”,cap,low,dig,oth);}
6、学生成绩计算
/* exer 4-6 求每一个学生的总成绩和平均成绩 */ #include void main(void){
int i,j;
float score[10][5]={0.0f};
float allsco[10],avesco[10];
for(i=0;i
for(j=0;j
scanf(“%f”,&score[i][j]);
/* 输入学生的成绩 */
for(i=0;i
{
allsco[i] = 0;
/* 总成绩清零 */
for(j=0;j
{
allsco[i] = allsco[i]+score[i][j];
/* 累加总成绩 */
}
avesco[i] = allsco[i]/5;
/* 计算平均成绩 */
}
for(i=0;i
printf(“%f %fn”,allsco[i],avesco[i]);/* 输出成绩 */ }
7、姓名排序
/* exer 4-7 姓名排序 */ #include #include void main(void){
int i,j,k;
char name[10][80],temp[80];
//printf(“please enter :”);
for(i=0;i
gets(name[i]);
/* 输入姓名数组 */
for(i=0;i
/* 排序 */
{
k = i;
for(j=i+1;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
puts(name[i]);
/* 输出姓名数组 */ }
8、输出杨辉三角形
/* exer 4-8 打印杨辉三角形 */ #include void main(void){
int i,j;
int a[6][6];
for(i=0;i
{
a[i][i] = 1;
/* 主对角线为1 */
a[i][0] = 1;
/* 第1列为1 */
}
for(i=2;i
for(j=1;j
a[i][j] = a[i-1][j-1]+a[i-1][j];/* 计算 */
for(i=0;i
{
for(j=0;j
printf(“%d ”,a[i][j]);
/* 输出 */
printf(“n”);
/* 换行 */
} }
实习五答案
1、用指针实现排序
/* exer 5-1 由键盘输入 10个整数,将它们按由小到大顺序排列 */ #include void main(void){
int a[10],*p = NULL;
/* 说明数组和指针 */
int i, j, temp;
for(p = a;p
/* 指针从数组首到尾 */
{
scanf(“%d”, p);
/* 利用指针依次输入 */
}
p = a;
for(i = 0;i
/* 利用指针依次比较 */
{
for(j = i + 1;j
if(*(p + i)> *(p + j))
{
temp = *(p + i);
*(p + i)= *(p + j);
*(p + j)= temp;
}
}
for(p=a;p
printf(“%d ”, *p);
printf(“%dn”, *p);}
2、用指针实现字符串排序 /*exer 5-2 将 10个长度小于20的字符串排序*/ #include #include void main(void){
char szStr[10][20],*psz[10],szTemp[20];
int i,j;
for(i = 0;i
{
psz[i] = szStr[i];
/*指针数组的每个元素指向各行串*/
}
for(i = 0;i
{
gets(psz[i]);
/*输入10个字符串*/
}
for(i = 0;i
/*字符串排序*/
{
for(j = i + 1;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
{
puts(psz[i]);
/*输出字符串*/
} }
3、数据倒置
/*exer 5-3 将具有10个元素的一维数组中的数据倒置 */ #include void main(void){
int a[10], iTemp, *p, *q;
int i;
for(i = 0;i
{
scanf(“%d”, a + i);
/*输入数组*/
}
p = a;
q = a + 9;
for(p = a, q = a + 9;p
/*首尾交换*/
{
iTemp = *p;
*p = *q;
*q = iTemp;
}
for(i = 0;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
{
scanf(“%d”, a + i);/*输入数组*/
}
pMax = a;
/*最大值指针指向数组首地址*/
pMin = a;
/*最小值指针指向数组首地址*/
for(i = 1;i
{
if(*(a+i)> *pMax)
pMax = a + i;
if(*(a+i)
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
{
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 void main(void){
int a[3][4],(*p)[4], iCol, iRow;
int i, j;
p = a;
for(i = 0;i
{
for(j = 0;j
scanf(“%d”, *(p + i)+ j);
/*输入数组*/
}
iCol = 0;
/*设最大数及其位置 */
iRow = 0;
for(i = 0;i
{
for(j = 0;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 #include void main(void){
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个字符 */
{
*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 int count(char *);
/* 函数声明 */ 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
num++;
/* 统计 */
p++;
/* 指针后移 */
}
return num;}
3、排序函数设计
/* exer 6-3 利用函数排序 */ #include void sort(int a[ ],int num);
/* 函数声明 */ 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 transpose(int a[][100],int);
/* 函数声明 */ 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 #include int Prime(int);
/* 函数声明 */ void main(void){
int m,num=0;
/* 定义整型变量 */
for(m=101;m
{
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
/* 循环依次检测条件 */
{
if(n%i ==0)
found = 0;
/* 一旦除尽修正开关变量 */
i++;
}
return found;}
6、进制转换函数设计
/* exer 6-6 八进制数据字符串转换为十进制数据 */ #include int conver(char *);
/* 函数声明 */ 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 int comdivi(int ,int);
/* 函数声明 */ 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 #include int array(int *,int);
/* 函数声明 */ 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 #include #include int N=0;
/* 定义全局变量,代表电话簿长度 */ 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 int main(void){
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 int main(void){
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
{
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
{
if(staff[i].salary > MaxSalary)
MaxSalary = staff[i].salary;
}
printf(“%.2fn”, MaxSalary);
return 0;}
1、简单程序设计 编程写程序,在屏幕上输出信息:Happy New Year! /* 输出图形*/ #include void main() { printf("Happy New Year!\n");}2、简单计算 由键盘任意输入2个数,分......
实习五答案1、用指针实现排序/* exer 5-1 由键盘输入 10个整数,将它们按由小到大顺序排列 */ 用指针实现:由键盘输入10个整数,将他们按由小到大的顺序排列。输入: 键盘输入的10......
实习五答案1、用指针实现排序/* exer 5-1 由键盘输入 10个整数,将它们按由小到大顺序排列 */ #include void main(void) {int a[10],*p = NULL;/* 说明数组和指针 */int i, j......
实习六答案1、整数交换函数设计/* exer 6-1 交换2个整数 */ 设计一个函数,将任意2个整数交换,并在主函数中调用此函数。输入: 任意2个整数 输出: 交换后的2个整数 输入样例: 1......
实习四答案1、字符串连接/* exer 4-1 两串字符连接 */由键盘任意输入两串字符,不用库函数strcat,连接将两串字符。输入: 两串字符输出: 连接将两串字符输入样例: abc def输出样例......
