C语言课后习题答案(第1-8章)

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

C语言课后习题答案(第1-8章)
第1章C语言概述
一、简答题
1.(1)语言简洁、紧凑,使用方便、灵活;(2)运算符丰富;(3)具有丰富的数据类型;(4)具有结构化的控制语句;(5)语法限制不太
严格,程序设计自由度大;(6)C语言允许
直接访问物理地址,能进行位(bit)操作,能实现汇编语言的大部分功能,可以直接访
问硬件;(7)生成目标代码质量高,程序执
行效率高;(8)用C语言写的程序可移植性
好,基本上不作修改就能用于各种型号的计
算机和各种操作系统。

2.顺序结构,分支结构,循环结构
3.所谓算法就是为解决一个问题而采取的方法和步骤。

算法的特性:有穷性、确定性、输入、输出、可行性。

表示算法的方式:(1)用自然语言表示;(2)用流程图表示;(3)用N—S流程图表示;
(4)用伪代码表示;(5)用计算机语言表
示。

二、算法
1.瓶子A里盛有醋
瓶子B里盛有酱油
那一个空瓶C
将A中的醋倒入C
将B中的酱油倒入A
将C中的醋倒入B 2.输入一个数放在a中
max = a
以下步骤重复9次:
输入一个数放在a中
如果a>max,max=b 打印max的值
3.如果a<b
temp=a
a=b
b=temp
如果c>a
temp1=a
temp2=b
a=c
b=temp1
c=temp2
否则
如果c>b
temp=b
打印i 的值 i=i+1
4. 如果m<n
temp=m
m=n n=temp
i=n
j=1
做以下循环,直到m 能够被i/j 整除:
如果i 能够被j 整除并且m 能够被i/j 整

i/j 即是m 和n 的最大公约数
跳出循环
否则 j=j+1
打印i/j 的值
5. data=b*b —4*a*c
如果data >0
否则如果data=0
x1=x2=—b/2
a
data b x 2)
(1+-=a
data b x 2)
(2--=
否则
无实数解
三、编程题
1.main()
{
printf(“##############################\
n”);
printf(“How do you do?
\n”);
printf(“##############################\
n”);
}
2.main()
{
int a,b,c;
scanf(“%d%d%d”,&a,&b,&c);
printf(“sum=%d”,a+b+c);
}
第二章数据类型与表达式
一、单项选择题
1. B
2. C
3. A
4. A
5. D
6. B
7.B
8.A 9.C 10. D
二、写出下列程序的运行结果
1.
aabb cc abc
AN
2.
ab
9798
3. 9,11,9,10
4.
a=2,b=3,c=2
5.
s1=2.500000
s2=3
三、编程题
main()
{
char c1='c',c2='h',c3='i',c4='n',c5='a';
c1=c1+4;
c2=c2+4;
c3=c3+4;
c4=c4+4;
c5=c5+4;
printf("%c%c%c%c%c\n",c1,c2,c3,c4,c5);
}
第三章顺序程序设计
选择题
1)B 2)D 3)D 4)A 5)B 6)A 7)B 8)A 9)D 10)D 11)C 12)D 13)A
填空题
1)b 2)261 3)25 21 37 4)abc 5)5.0,4,c=3 6)3
编程题
#define pi 3.1415926
main( )
{
float h, r, l, sv, sz ;
printf(“请输入圆的半径r,圆柱高h:\n”) ; scanf(“%f,%f”,&r, &h) ;
l=2*pi*r ;
s=pi*r*r ;
sv=3.0/4.0*pi*r*r*r ;
sz=pi*r*r*h ;
printf(“圆周长为:l=%6.2f, 圆面积为:s=%6.2f\n”, l, s) ;
printf(“求体积为:sv=%6.2f, 圆柱体积为:sz=%6.2f\n”, sv, sz) ;
}
2、
main( )
{
float c, f ;
printf(“请输入一个华氏温度:\n”) ;
scanf(“%f”, &f) ;
c=(5.0/9.0)*(f-32) ;
printf(“摄氏温度为:%6.2f\n”, c) ;
}
第四章循环程序设计
一、选择题
1.D
2.D
3.D
4.C
5.D
6.A
7.B
8.B
9.A 10.D.11.B
12.A 13.B 14.C 15.C 16.C 17.D 18.B 19.D
20.D 21.A
二、填空题
1.585858
2.0
3.20
4.8921
5.20,0
6.6
7.1,3,2
8.Year%400==0
year%100!=0
count++
三、编程题
1.
main()
{
long a;
scanf(“%ld”,&a);
if (a>=10000&&a<=99999) printf(“这是个五位数”);else if (a>=1000&&a<=9999) printf(“这是个四位数”);else if (a>=100&&a<=999) printf(“这是个三位数”);else if (a>=10&&a<=99) printf(“这是个二位数”);else if (a>=0&&a<=9)
printf(“这是个一位数”);else
printf(“输入错误”);
}
2.
main()
{
int a;
int g,s,b;//个位、十位、百位printf("水仙花数有:\n"); for(a=100;i<=999;a++)
{g=a%10;
s=a/10%10;
b=a/100;
if (a==g*g*g+s*s*s+b*b*b)
printf("%d ",a);
}
printf("\n");
}
4、
main()
{int i,n;
printf("input n:");
scanf("%d",&n);
printf("\n%d=",n);
for(i=2;i<=n;i++)
{while(i!=n)
if(n%i==0)
{printf("%d*",i);n/=i;}
else break;
}
printf("%d\n",n);
}
5、
#include “stdio.h”
main()
{
char c;
int w,x,y,z;
w=x=y=z=0;
while((c=getchar())!=’\n’)
{
if((c>’a’&&c<’z’)||(c>’A’&&c<’Z’)) w++;
else if (c==’’)
x++;
else if (c>’0’&&c<’9’)
y++;
else z++
}
printf(“英文字母个数:%d\n”,w); printf(“空格个数:%d\n”,x); printf(“数字个数:%d\n”,y); printf(“其他字母个数:%d\n”,z); }
6、main()
{
float h=100,t;
int j;
for(j=1;j<10;j++)
{
t=h/2;
h+=(t*2);
}
printf(“共经过:%f 米\n”,h);
printf(“第十次反弹%f 米\n”,t);
}
第五章数组
一、单项选择题
1. B
2. A
3. C
4. C
5. D
6. B
7.C
8.B 9.C 10. B
二、写出下列程序的运行结果
1.S=368
2.*****
*****
*****
*****
*****
3.S1=18
S2=10
4.!margorP
5.数字0的出现次数是:3
数字1的出现次数是:2
数字2的出现次数是:2
数字3的出现次数是:2
数字4的出现次数是:0
数字5的出现次数是:1
数字6的出现次数是:1
数字7的出现次数是:1
数字8的出现次数是:1
数字9的出现次数是:1
三、编程题
1.#include "stdio.h"
main()
{int a[11];
int i,j,t;
printf("input 10 number:\n"); for (i=1;i<11;i++)
scanf("%d",&a[i]);
printf("\n");
for (i=1;i<=9;i++)
for (j=1;j<=10-i;j++)
if (a[j]<a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;} printf("the sorted number is:\n");
for (i=1;i<11;i++)
printf("%4d",a[i]);
}
2.#include "stdio.h"
main()
{int a[11],i,b;
printf("imput 10 sorted number:\n"); for (i=0;i<10;i++)
scanf("%d",&a[i]);
printf("input an integer:\n");
scanf("%d",&b);
for (i=9;i>=0&&a[i]>b;i--)
a[i+1]=a[i];
a[i+1]=b;
printf("sorted numbers:\n");
for (i=0;i<11;i++)
printf("%5d",a[i]);
}
3.#include "stdio.h"
main()
{int a[5],i,j,t;
printf("input 5 integer:\n");
for (i=0;i<5;i++) /*输入5个整数*/
scanf("%d",&a[i]);
for (i=0,j=4;i<j;i++,j--) /*逆序存放*/
{t=a[i];a[i]=a[j];a[j]=t;}
for (i=0;i<5;i++) /*逆序存放后重新输出*/
printf("%5d",a[i]);
}
4.#include "stdio.h"
main()
{int i,j,a[10][10]={{1},{1,1}};
for (i=2;i<10;i++) /*给二维数组每个元素赋值*/
{a[i][0]=1;
for (j=1;j<=i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for (i=0;i<10;i++) /*输出二维数组*/
{for (j=0;j<=i;j++)
printf("%-5d",a[i][j]);
printf("\n");
}
}
5.#include "stdio.h"
main()
{int a[3][4],i,j,max,row,col;
printf("input 3*4 matrix:\n");
for (i=0;i<3;i++) /*输入3*4矩阵*/
for (j=0;j<4;j++)
scanf("%d",&a[i][j]);
max=a[0][0]; row=0; col=0;
for (i=0;i<3;i++) /*寻找矩阵中的最大值及其行列号*/
for (j=0;j<4;j++)
if (max<a[i][j])
{max=a[i][j]; row=i, col=j;}
printf("\n数组中最大的数是%d,其行号是%d,列号是%d\n",max,row,col);
}
6.#define N 3
#define M 4
#include "stdio.h"
main()
{int a[N][M],i,j,k,max,row,col;
printf("input %d*%d matrix: \n",N,M);
for (i=0;i<N;i++) /*输入二维矩阵*/
for (j=0;j<M;j++)
scanf("%d",&a[i][j]);
for (i=0;i<N;i++) /*求鞍点*/
{max=a[i][0]; row=i; col=0;
for(j=1;j<M;j++) /*求矩阵中每一行的最大值及其所行列号*/
if (max<a[i][j])
{max=a[i][j]; col=j;}
for (k=0;k<N;k++) /*判断每一行的最大值在其所在列是否最大*/
if (a[k][col]<max)
break;
if (k==N) /*得到鞍点*/
{printf("the point is %d,row=%d,col=%d\n",max,row,col);br eak;}
}
if (i==N) /*没有鞍点*/
printf("no point\n");
}
7.#include "stdio.h"
main()
{int num=0,word=0;
/*word=0表示未出现单词,如出现单词就置word为1.num用来统计单词个数*/
char c;
printf("please input a string :\n");
while ((c=getchar())!='\n')
if (c==' ')
word=0;
else if (word==0)
{word=1; num++;}
printf("There are %d words in the line\n",num);
}
8.#include "stdio.h"
main()
{int i,j,uppn,lown,dign,span,othn;
/*uppn,lown,dign,span,othn分别存放英文大写字母、小写字母、数字、空格和其他字符的个数*/
char text[3][80];
uppn=lown=dign=span=othn=0;
for(i=0;i<3;i++)
{gets(text[i]);
for(j=0;j<80&&text[i][j]!='\0';j++)
{if(text[i][j]>='A'&&text[i][j]<='Z')
uppn++;
else if(text[i][j]>='a'&&text[i][j]<='z')
lown++;
else if(text[i][j]>='0'&&text[i][j]<='9')
dign++;
else if(text[i][j]==' ')
span++;
else
othn++;
}
}
for(i=0;i<3;i++)
printf("%s\n",text[i]);
printf("uppn=%d\n",uppn);
printf("lown=%d\n",lown);
printf("dign=%d\n",dign);
printf("span=%d\n",span);
printf("othn=%d\n",othn);
}
9.#include "stdio.h"
main()
{int i,j;
char str1[20],str2[20];
printf("input two strings:\n");
gets(str1);
gets(str2);
j=strlen(str1); /*求字符串1的长度*/
for (i=0;str2[i]!='\0';i++,j++) /*字符串合并*/
str1[j]=str2[i];
str1[j]='\0'; /*加上字符串结束标志*/
puts(str1);
}
10.#include "stdio.h"
main()
{int i,n;
char str1[20],str2[20];
printf("input two strings:(no more than 20 characters)\n");
gets(str1); gets(str2);
n=strlen(str1)<strlen(str2)?strlen(str1):strle
n(str2); /*n中存放较短字符串的长度*/
for (i=0;i<n&&str1[i]==str2[i];i++);
printf("%d\n",str1[i]-str2[i]);
}
第六章函数与编译预处理
一、单项选择题
1. C
2. B
3. B
4. B
5. A
6. B
7.A
8.C 9.D 10. A
二、写出下列程序的运行结果
1.9
2.4,B
8,B
3.-4.000000
4.a=6,b=5
5.48
三、编程题
1.main()
{int n;
printf("input n(n>0):\n");
scanf("%d",&n);
if (prime(n))
printf("%d is a sushu\n",n);
else printf("%d is not a sushu\n",n); }
int prime(int n)
{int flag=1,i;
for (i=2;i<=n/2&&flag==1;i++)
if (n%i==0) flag=0;
return(flag);
}
2.
#define N 3
convert(int array[3][3])
{ int i,j,t;
for (i=0;i<N-1;i++)
for (j=i+1;j<N;j++)
{t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
main()
{int i,j;
int a[N][N];
printf("input a:\n");
for (i=0;i<N;i++)
for (j=0;j<N;j++)
scanf("%d",&a[i][j]); printf("Array a:\n");
for (i=0;i<N;i++)
{for (j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n");
}
convert(a);
printf("a de zhuanzhi is:\n"); for (i=0;i<N;i++)
{for (j=0;j<N;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
3. #include <stdio.h>
#include <string.h>
main()
{char str[100];
printf("input a string:\n") ;
gets(str);
inverse(str);
printf("the reversed string is:%s\n",str); }
inverse(char str[])
{
char t;
int i,j;
for (i=0,j=strlen(str)-1;i<j;i++,j--)
{
t=str[i];
str[i]=str[j];
str[j]=t;
}
}
4. #include <stdio.h>
concat(char str1[],char str2[])
{ int i=0,j;
while (str1[i]!='\0')
i++;
for (j=0;str2[j]!='\0';i++,j++)
str1[i]=str2[j];
str1[i]='\0';
}
main()
{
char str1[100],str2[100];
gets(str1);gets(str2);
concat(str1,str2);
puts(str1);
}
5. main()
{char str[80];
printf("input a string (4 ge shu zi zi fu):\n"); scanf("%s",str);
insert(str);
printf("result is:\n%s\n",str);
}
insert(char str[])
{
int i;
for (i=strlen(str);i>0;i--)
{
str[2*i]=str[i];
str[2*i-1]=' ';
}
}
6. #include "stdio.h"
int i,ndight,nwhite,nletter,nother;
count(char str[])
{
ndight=nwhite=nletter=nother=0;
for (i=0;str[i]!='\0';i++)
if (str[i]>='0'&&str[i]<='9')
ndight++;
else if ((str[i]>='A'&&str[i]<='Z')||(str[i]>='a'&&s
tr[i]<='z'))
nletter++;
else if (str[i]==' ')
nwhite++;
else nother++;
}
main()
{
char text[80];
printf("input a string:\n");
gets(text);
count(text);
printf("ndight=%d,nletter=%d,nwhite=%d,not her=%d\n",ndight,nletter,nwhite,nother); }
7. #define N 10
#include <stdio.h>
sort(char str[])
{int i,j;
char t;
for (i=1;i<N;i++)
for (j=0;j<N-i;j++)
if (str[j]>str[j+1])
{t=str[j];str[j]=str[j+1] ;str[j+1]=t;} }
main()
{
char str[N];
int i ;
printf("Input 10 ge zi fu:\n");
gets(str);
sort(str);
printf("The sorted result:\n") ;
for(i=0;i<N;i++)
printf("%c",str[i]);
}
8. #include <stdio.h>
#include <string.h>
#define N 10
void input_e(int num[],char name[N][8])
{int i;
for (i=0;i<N;i++)
{ printf("input gong hao:");
scanf("%d",&num[i]);
printf("input name:");
getchar();
gets(name[i]);
}
for (i=0;i<N;i++)
printf("%5d%10s\n",num[i],name[i]);
}
void sort(int num[],char name[N][8]) /*选择法排序*/
{int i,j,min,temp1;
char temp2[8];
for (i=0;i<N-1;i++)
{min=i;
for (j=i+1;j<N;j++)
if (num[j]<num[min]) min=j;
temp1=num[i];
strcpy(temp2,name[i]);
num[i]=num[min];
strcpy(name[i],name[min]);
num[min]=temp1;
strcpy(name[min],temp2);
}
printf("the sorted result:\n");
for (i=0;i<N;i++)
printf("%5d%10s\n",num[i],name[i]);
}
void search(int n,int num[],char name[N][8]) /*折半查找法*/
{
int top,bott,mid,find;
find=0;
top=0;
bott=N-1;
if ((n<num[0])||(n>num[N-1]))
find=-1;
while ((find==0)&&(top<=bott))
{mid=(bott+top)/2;
if (n==num[mid])
{find=1; printf("%d name is:%s\n",n,name[mid]);}
else if (n<num[mid])
bott=mid-1;
else top=mid+1;
}
if ((find==-1)||(find==0))
printf("%d is not found.\n",n);
}
main()
{
int num[N],number,c,flag;
char name[N][8];
input_e(num,name);
sort(num,name);
for (flag=1;flag;)
{printf("please input chazhao de gonghao:"); /*输入查找的工号*/
scanf("%d",&number);
search(number,num,name);
printf("continue Y/N?"); /*是否继续查
找*/
getchar();
c=getchar();
if (c=='N'||c=='n')
flag=0;
}
}
9. #include "stdio.h"
#define MAX 10
main()
{
char str[MAX];
char c;
int i;
i=0;
printf("input number(16 jinzhi): "); /*输入一个十六进制的数*/
while((c=getchar())!='\n'&&i<MAX)
{ str[i]=c;
i++;
}
str[i]='\0';
printf("result is :%d\n",htod(str));
int htod(char s[])
{
int i,n;
n=0;
for(i=0;s[i]!='\0';i++)
{if (s[i]>='0'&&s[i]<='9')
n=n*16+s[i]-'0';
if (s[i]>='a'&&s[i]<='f')
n=n*16+s[i]-'a'+10;
if (s[i]>='A'&&s[i]<='F')
n=n*16+s[i]-'A'+10;
}
return(n);
}
10. #define SWAP(a,b) t=a;a=b;b=t main()
{
int a,b,t;
printf("input a,b:") ;
scanf("%d,%d",&a,&b);
SWAP(a,b);
printf("result:a=%d,b=%d\n",a,b);
11. #define SURPLUS(a,b) ((a)%(b)) main()
{
int a,b;
printf("input a,b:");
scanf("%d,%d",&a,&b);
printf("result is: %d\n",SURPLUS(a,b)); }
12. main()
{
int a,b,c;
printf("input a,b,c:");
scanf("%d,%d,%d",&a,&b,&c);
printf("max=%d\n",max(a,b,c));
}
int max(int x,int y,int z)
{
int t;
t=(x>y ? x : y);
return(t>z?t:z);
}
#define MAX(x,y) ((x)>(y)?(x):(y))
main()
{
int a,b,c;
printf("input a,b,c:");
scanf("%d,%d,%d",&a,&b,&c);
printf("max=%d\n",MAX(MAX(a,b),c));
}
13. #include "stdio.h"
#define CHANGE 1
#define MAX 80
main()
{
char str[MAX];
int i;
printf("input a string:\n");
gets(str);
#if (CHANGE)
{ for (i=0;str[i]!='\0';i++)
if
(str[i]>='a'&&str[i]<'z'||str[i]>='A'&&str[i] <'Z')
str[i]=str[i]+1;
else if (str[i]=='z'||str[i]=='Z')
str[i]=str[i]-25;
}
#endif
printf("%s\n",str);
}
第七章指针
一、选择题
1)A 2)D 3)D 4)C 5)
B 6)B 7)B 8)C
9)B 10)C 11)A 12)A 13)A 14)C 15)B 16)A 17)C 18)B 19)D 20)B
二、阅读下面程序,写出程序运行结果
1)abcdeedcba 2)1113151719 3)11,9
7,11
4)3 6 5)6385
三、编程题
1、main( )
{ int a[10],i,temp,*p=a;
printf("Please input array a:\n"); for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("array a:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
for(i=0;i<5;i++)
{ temp=p[i];
p[i]=p[10-i-1];
p[10-i-1]=temp;
}
printf("\n Now array a:\n");
for(i=0;i<10;i++)
printf("%4d",a[i]);
}
2、main( )
{ int a[3][3],*p,i,j;
printf("please input matrix:\n"); for(i=0;i<3;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
p=&a[0][0];
move(p);
printf("\n Now matrix:\n"); for(i=0;i<3;i++)
{ for(j=0;j<3;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
move(int *q)
{ int i,j,t;
for(i=0;i<3;i++)
for(j=i;j<3;j++)
{ t=*(q+3*i+j);
*(q+3*i+j)=*(q+3*j+i);
*(q+3*j+i)=t;
}
}
3、#include <stdlib.h>
#include <alloc.h>
#include <string.h>
#include <stdio.h>
main( )
{
int binary();
void insert();
char
*temp,*ptr1[6]={"BASIC","DATA","PASC AL","SQL","USE"};
int i;
ptr1[5]=malloc(20);
printf("\n");
printf("original string:\n");
for(i=0;i<5;i++)
printf("%s\n",ptr1[i]);
printf("input search string:\n");
temp=malloc(20);
gets(temp);
i=binary(ptr1,temp,5);
printf("i=%d\n",i);
insert(ptr1,temp,5,i);
printf("output strings:\n");
for(i=0;i<6;i++)
printf("%s\n",ptr1[i]);
}
int binary(char *ptr[],char *str,int n)
{int hig,low,mid;
low=0;
hig=n-1;
if(strcmp(str,ptr[0])<0) return(0);
if(strcmp(str,ptr[hig])>0) return(n); while(low<=hig)
{
mid=(low+hig)/2;
if(strcmp(str,ptr[mid])<0)
hig=mid-1;
else if(strcmp(str,ptr[mid])>0)
low=mid+1;
else return(mid);
}
return(low);
}
void insert(char *ptr[],char *str,int n,int i) {
int j;
for(j=n;j>i;j--)
strcpy(ptr[j],ptr[j-1]);
strcpy(ptr[i],str);
}
4、main( )
{ int i;
char *p[6],str[6][20];
for(i=0;i<6;i++)
p[i]=str[i];
printf("Input 6 strings:\n");
for(i=0;i<6;i++)
scanf("%s",p[i]);
sort(p);
printf("Now the strings:\n");
for(i=0;i<6;i++)
printf("%s\n",p[i]);
}
sort(char *q[ ])
{ int i,j;
char *t;
for(i=0;i<5;i++)
for(j=0;j<5-i;j++)
if(strcmp(*(q+j),*(q+j+1))>0)
{ t=*(q+j);
*(q+j)=*(q+j+1);
*(q+j+1)=t;
}
}
5、main( )
{ int m;
char str1[20],str2[20],*p1,*p2;
printf("please input two strings:\n"); scanf("%s",str1);
scanf("%s",str2);
p1=str1;
p2=str2;
m=stringcmp(p1,p2);
printf("result is %d:\n",m);
}
stringcmp(char *p1,char *p2)
{ int i=0;
while(*(p1+i)==*(p2+i))
if(*(p1+(i++))=='\0') return(0); return((*p1+i)-*(p2+i));
}
6、main( )
{ char str1[30],str2[30],str3[100];
int i=0,j=0,k=0;
printf("please input two strings:\n"); scanf("%s",str1);
scanf("%s",str2);
while(str1[i]!='\0' && str2[j]!='\0')
{ str3[k++]=str1[i++];
str3[k++]=str2[j++];
}
while(str1[i]!='\0')
str3[k++]=str1[i++];
while(str2[j]!='\0')
str3[k++]=str2[j++];
str3[k]='\0';
printf("\n%s\n",str3);
}
第八章结构体
一、选择题
1、C
2、B
3、C
4、D
5、B
6、A
7、D
8、C
9、C
10、B
二、填空题
1、34
2、0
3、51
4、10,x
5、364041
三、编程题
1、struct complex
{
float x; /*实部*/
float y; /*虚部*/
}
main()
{
struct complex c1={5,3},c2={2,6};
float t1,t2;
t1=c1.x*c2.x - c1.y*c2.y;
t2=c1.x*2.y + c1.y*c2.x;
printf(“The two complexs product is:”);
printf(“%.2f%+.2f i\n”,t1,t2);
}
2. struct student
{
char
name[10]; /*姓名*/
int number; /*学号*/
float x; /*成绩*/
float y; /*成绩*/
}
main( )
{
struct student s[45];
int i;
void max();
void average();
void sort();
for (i=0;i<45;i++)
scanf(“%s%d%f%d”,s[i].name,&s[i].numb er,&s[i].x,&s[i].y);
/*输入学生的姓名、学号、两门课程成绩*/
max(s,45);
average(s,45);
sort(s,45);
}
void max(struct student *a,int n)
{
float temp;
char na[10];
int i ,num;
temp=a[0].x+a[0].y;
for (i=1;i<n;i++)
if(temp<a[i].x+a[i].y) /*求总分最高的学生姓名、学号*/
{
temp=a[i].x+a[i].y;
strcmp(na,a[i].name);
num=a[i].number;
}
printf(“%s,%d”,na,num);
}
void average(struct student *b,int n)
{
float aver1,aver2,s1,s2;
int i ;
s1=s2=0;
for(i=0;i<45;i++) /*求每门课程的总成绩*/ {
s1+=b[i].x;
s2+=b[i].y;
}
aver1=s1/45;
aver2=s2/45;
for(i=0;i<45;i++)
if(b[i].x<aver1&&b[i].y<aver2)
/*输出两门课程都低于平均成绩的学生*/
printf(“%s,%d\n”,b[i].name,b[i].number);
}
void sort(struct student *c,int n)
{
float t;
int i,j ;
struct student temp;
for (i=0;i<n-1;i++) /*改进的选择法排序可参考课本P89页*/
{
k=i ;
for(j=i+1;j<n;j++)
if(c[k].x<c[j].x)
k=j;
if(k!=i)
{
temp=c[i];
c[i]=c[k];
c[k]=temp;
}
for(i=0;i<n;i++)
printf(“%s,%.2f\n”,c[i].n,c[i].x);
}
3. typedef struct Ljian
{
int pname;
int wnum;
struct Ljian *next;
}Part;/*用户自定义零件结构体类型*/
# include “stdio.h”
main( )
{。

相关文档
最新文档