北京工业大学c语言练习7-结构

合集下载

C语言程序设计结构习题与答案

C语言程序设计结构习题与答案

C语言程序设计结构习题与答案1. 介绍C语言是一种广泛应用于系统软件和应用软件开发的高级程序设计语言。

C语言程序设计结构是指程序的组织形式和编写规范。

在学习C 语言时,我们需要通过练习习题来提升自己的编程能力。

本文将介绍一些C语言程序设计结构习题,并给出相应的答案。

2. 基本语法习题2.1 输出Hello, World!要求:编写一个程序,在屏幕上输出"Hello, World!"。

答案:```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```2.2 输入输出整数要求:编写一个程序,从键盘输入一个整数,然后将其加1后输出。

答案:```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("加1后的值为:%d\n", num + 1);return 0;}```3. 控制结构习题3.1 判断奇偶数要求:编写一个程序,判断一个输入的整数是奇数还是偶数,并输出相应的结果。

答案:```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("输入的整数为偶数\n");} else {printf("输入的整数为奇数\n");}return 0;}```3.2 计算阶乘要求:编写一个程序,计算输入的正整数的阶乘并输出。

答案:```c#include <stdio.h>int main() {int num, factorial = 1, i;printf("请输入一个正整数:");scanf("%d", &num);for (i = 1; i <= num; i++) {factorial *= i;}printf("%d的阶乘为:%d\n", num, factorial);return 0;}```4. 数组与函数习题4.1 求数组元素和要求:编写一个程序,计算一个整型数组中所有元素的和并输出结果。

(完整版)c语言分支结构习题

(完整版)c语言分支结构习题

分支结构1、以下4个选项中,不能看作一条语句的是(d)A){;} B)a=0,b=0,c=0; C)if(a>0); D)if(b==0) m=1;n=2;2、以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是(a)A)if((a>b)&&(b>c)) k=1; B) if((a>b)||(b>c))k=1else k=0;C)if(a<=b) k=0; D)if(a>b) k=1;else if(b<=c) k=1; else if(b>c) k=1;3、有以下程序main(){ int i=1,j=1,k=2;if((j++||k++)&&i++) printf("%d,%d,%d\n",i,j,k);}执行后输出的结果是 CA) 1,1,2 B) 2,2,1 C) 2,2,2 D) 2,2,34、有以下程序main(){ int a=5,b=4,c=3,d=2;if(a>b>c)printf("%d\n",d);else if((c-1>=d)==1)printf("%d\n",d+1);elseprintf("%d\n",d+2);}执行后输出的结果是BA) 2 B) 3 C) 4 D) 编译时有错,无结果5、有以下程序main(){ int a=15,b=21,m=0;switch(a%3){ case 0:m++;break;case 1:m++;switch(b%2){ default:m++;case 0:m++;break;}}printf("%d\n",m);}程序运行后的输出结果是_ A__。

A) 1 B) 2 C) 3 D) 46、以下程序的输出结果是Cmain(){ int a=5,b=4,c=6,d;printf("%d\n",d=a>b?(a>c?a:c):(b));}A) 5 B) 4 C) 6 D) 不确定7、以下程序的输出结果是Amain(){ int a=4,b=5,c=0,d;d=!a&&!b||!c;printf("%d\n",d);}A) 1 B) 0 C) 非0的数 D) -18、能正确表示逻辑关系:"a≥=10或a≤0"的C语言表达式是DA) a>=10 or a<=0 B) a>=0|a<=10 C) a>=10 &&a<=0 D) a>=10‖a<=09、有如下程序main0{ int x=1,a=0,b=0;switch(x){case 0: b++;case 1: a++;case 2: a++;b++;}printf("a=%d,b=%d\n",a,b);}该程序的输出结果是 AA) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=210、有如下程序main(){ float x=2.0,y;if(x<0.0) y=0.0;else if(x<10.0) y=1.0/x;else y=1.0;printf("%f\n",y);}该程序的输出结果是CA) 0.000000 B) 0.250000 C) 0.500000 D) 1.00000011、有如下程序main(){ int a=2,b=-1,c=2;if(a<b)if(b<0) c=0;else c++;printf("%d\n",c);}该程序的输出结果是A) 0 B) 1 C) 2 D) 312、当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是CA) c=b=a;B) (a=c) ‖(b=c) ;C) (a=c) &&(b=c); D) a=c=b;13、能正确表示a和b同时为正或同时为负的逻辑表达式是DA) (a>=0‖b>=0)&&(a<0‖b<0) B) (a>=0&&b>=0)&&(a<0&&b<0)C) (a+b>0)&&(a+b<=0) D) a*b>014、以下程序输出结果是 BA)7 B) 6 C) 5 D) 4main ( ){ int m=5;if (m++>5 print ("%d\n",m); else printf ("%d\n",m--); }。

C教程ch7

C教程ch7

week.h
#ifndef WEEK #define WEEK
//以下是原先week.h中的内容
int a=10;
#endif
f1.cpp
#include “abc.h”
void main() {……}
include展开
…… #ifndef WEEK #define WEEK
int a=10; #endif …… #ifndef WEEK #define WEEK
♥ 需要注意的是,用#include包含了相应的 头文件,编译步骤可以通过,但若相应的 工程路径下没有包含函数定义的源文件, 连接步骤会报错。
♥ 试验删除mainfunc.cpp
test2
在一个头文件中可以用include另一个头文件。这会产生一 个问题:在编译一个程序文件时,重复包含同一个头文件
---main.cpp---
void main() {
int n; …… validate(n); jiecheng(n); qiuhe(n); …… }
---mainfunc.cpp---
int jiecheng(int n) {
…… }
int qiuhe(int n) {
…… }
---assifunc.cpp---
程序由什么组成?
♥ 答案1:程序由代码语句组成。正是一行行的代 码,组成了一个完整的程序。
♥ 答案2:程序由函数组成。一个个函数之间的互 相调用,最终构建出一个完整的程序。
♥ 答案3:“程序由文件组成”。
7.1 源文件和头文件
♥ 扩展名为.cpp 的文件,主要用以实现程序的各种 功能,存放函数或数据定义。我们称为源文件或代 码文件。
int a=10; #endif …… void main() {……}

课件7-结构2

课件7-结构2

char color[20];
double thickness; };
/*手机颜色 */
/*手机厚度 */
2
void main ( )
{ /*定义mobile类型的变量和数组,并初始化结构数组变量*/
#include <stdio.h> #include <string.h> struct mobile{ /*定义手机结构类型*/ char brand[20]; /*手机品牌 */ char color[20]; /*手机颜色 */ double thickness; /*手机厚度 */ };
struct mobile m1,m2[3]={{"iphone","black",7.6},{"nokia","red",12.1},{"samsung","blue",8.5}}; strcpy(m1.brand,"blackberry"); /*为m1赋值*/ strcpy(m1.color,"black"); m1.thickness=6.5; printf("m1的值为:\n"); printf("%s\t%s\t%3.1f\n",m1.brand,m1.color,m1.thickness); strcpy(m1.brand,"sony"); printf("m1变量修改后的值为:\n"); printf("%s\t%s\t%3.1f\n",m1.brand,m1.color,m1.thickness); /*输出m1*/ /*修改m1的brand值*/ /*输出m1*/

c语言教材第七章习题答案

c语言教材第七章习题答案

c语言教材第七章习题答案《C语言教材第七章习题答案》在学习C语言的过程中,掌握基本的语法和逻辑结构是非常重要的。

第七章的习题涉及到了一些较为复杂的概念和技巧,需要我们对C语言有更深入的理解和掌握。

1. 题目:编写一个程序,计算并输出1到100之间所有偶数的和。

答案:我们可以使用循环结构和条件判断来解决这个问题。

具体的代码如下: ```#include <stdio.h>int main() {int sum = 0;for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum += i;}}printf("1到100之间所有偶数的和为:%d\n", sum);return 0;}```这段代码使用了for循环来遍历1到100之间的所有数字,然后通过条件判断判断是否为偶数,如果是偶数则累加到sum中,最后输出sum的值。

2. 题目:编写一个程序,输出九九乘法表。

答案:九九乘法表是一个经典的练习题,通过嵌套循环可以很容易地实现。

具体的代码如下:```#include <stdio.h>int main() {for (int i = 1; i <= 9; i++) {for (int j = 1; j <= i; j++) {printf("%d*%d=%d\t", j, i, i*j);}printf("\n");}return 0;}```这段代码使用了两层嵌套的for循环,外层循环控制行数,内层循环控制列数,通过printf语句输出乘法表中的每一项。

通过解答以上两道习题,我们不仅复习了C语言中的循环结构和条件判断,还锻炼了我们的编程思维和逻辑能力。

希望大家在学习C语言的过程中能够多多练习,不断提升自己的编程水平。

北工大C语言练习题答案.doc

北工大C语言练习题答案.doc

1求两个数的和与差输入整数a和b,计算并输出a、b的和与差。

(例:输入2 -8;输出The sum is -6 The difference is 10)#include <stdio.h>int main(){int a,b,sum,diff;scanf(H%d%d n,&a,&b);sum=a+b;diff=a-b;printf(n The sum is %d\n H,sum);printf(n The difference is %d\n*\diff);} 2 求平方根输入1个实数x,计算并输出其平方根 (保留1位小数)。

(例:输入17;输出The square root of 17.0 is 4.1)#include <stdio.h>#include <math.h>int main()(double x,root;scanf(n%lf n,&x);root=sqrt(x);printf(n The square root of %0.1f is % 0. lf\n n ,x,root);}3华氏温度转换为摄氏温度输入华氏温度f,计算并输出相应的摄氏温度c(保留2位小数)。

c = 5/9(f-32).(例:括号内是说明输入17.2 (华氏温度)输出The temprature is -8.22)#include <stdio.h>int main()(double f,c;scanf(H%lf n,&f);c=5.0/9.0*(f-32.0);printf(n The temprature is %0.2f\n n,c);} 4计算旅途时间输入2个整数timel和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。

有效的时间范围是0000到2359, 不需要考虑出发时间晚于到达时间的情况。

例:括号内是说明输入712 1411 (出发时间是7:12,到达时间是14:11)输出The train journey time is 6 hrs 59 mins.#include <stdio.h>int main()(int timel,time2,hours,mins;scanf(n%d%d H,&timel,&time2);timel=timel/100*60+timel % 100;time2= time2/100*60+time2% 100;hours=(time2-timel)/60;mins=(time2-timel) % 60;printf(n The train journey time is %d hrs %d mins An'hours,mins);}5大写字母转换成小写字母输入一个大写英文字母,输出相应的小写字母。

(完整版)数据结构---C语言描述-(耿国华)-课后习题答案

(完整版)数据结构---C语言描述-(耿国华)-课后习题答案

第一章习题答案2、××√3、(1)包含改变量定义的最小范围(2)数据抽象、信息隐蔽(3)数据对象、对象间的关系、一组处理数据的操作(4)指针类型(5)集合结构、线性结构、树形结构、图状结构(6)顺序存储、非顺序存储(7)一对一、一对多、多对多(8)一系列的操作(9)有限性、输入、可行性4、(1)A(2)C(3)C5、语句频度为1+(1+2)+(1+2+3)+…+(1+2+3+…+n)第二章习题答案1、(1)一半,插入、删除的位置(2)顺序和链式,显示,隐式(3)一定,不一定(4)头指针,头结点的指针域,其前驱的指针域2、(1)A(2)A:E、AB:H、L、I、E、AC:F、MD:L、J、A、G或J、A、G(3)D(4)D(5)C(6)A、C3、头指针:指向整个链表首地址的指针,标示着整个单链表的开始。

头结点:为了操作方便,可以在单链表的第一个结点之前附设一个结点,该结点的数据域可以存储一些关于线性表长度的附加信息,也可以什么都不存。

首元素结点:线性表中的第一个结点成为首元素结点。

4、算法如下:int Linser(SeqList *L,int X){ int i=0,k;if(L->last>=MAXSIZE-1){ printf(“表已满无法插入”);return(0);}while(i<=L->last&&L->elem[i]<X)i++;for(k=L->last;k>=I;k--)L->elem[k+1]=L->elem[k];L->elem[i]=X;L->last++;return(1);}5、算法如下:#define OK 1#define ERROR 0Int LDel(Seqlist *L,int i,int k){ int j;if(i<1||(i+k)>(L->last+2)){ printf(“输入的i,k值不合法”);return ERROR;}if((i+k)==(L->last+2)){ L->last=i-2;ruturn OK;}else{for(j=i+k-1;j<=L->last;j++)elem[j-k]=elem[j];L->last=L->last-k;return OK;}}6、算法如下:#define OK 1#define ERROR 0Int Delet(LInkList L,int mink,int maxk){ Node *p,*q;p=L;while(p->next!=NULL)p=p->next;if(mink<maxk||(L->next->data>=mink)||(p->data<=maxk)) { printf(“参数不合法”);return ERROR;}else{ p=L;while(p->next-data<=mink)p=p->next;while(q->data<maxk){ p->next=q->next;free(q);q=p->next;}return OK;}}9、算法如下:int Dele(Node *S){ Node *p;P=s->next;If(p= =s){printf(“只有一个结点,不删除”);return 0;}else{if((p->next= =s){s->next=s;free(p);return 1;}Else{ while(p->next->next!=s)P=p->next;P->next=s;Free(p);return 1;}}}第三章习题答案2、(1)3、栈有顺序栈和链栈两种存储结构。

北工大c语言题库

北工大c语言题库

求1 + 1/2! +....+ 1/n!#include "stdio.h"int main( ){int ri,repeat;int i,n;double s;double fact(int n);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d",&n);s=0;for(i=1;i<=n;i++)s=s+1/fact(i);printf("%0.4f\n",s);}return 0;}double fact(int n){int i;double result;result=1;for(i=1;i<=n;i++)result=result*i;return result;}统计一个整数中数字的个数#include "stdio.h"int main( ){int ri,repeat;int count;long in;int countdigit(long number, int digit); scanf("%d",&repeat); #include "stdio.h"int main( ){int ri,repeat;int i,n,j;float s,t;scanf("%d",&repeat); for(ri=1;ri<=repeat;ri++){scanf("%d",&n);s=0;for(i=1;i<=n;i++){t=1;for(j=1;j<=i;j++)t=t*j;s=s+1.0/t;}printf("%0.4f\n",s); }}for(ri=1;ri<=repeat;ri++){scanf("%ld",&in);count=countdigit(in,2);printf("count=%d\n",count);}}int countdigit(long number, int digit) {int i,count=0,t;if(number<0)number=-number;for(i=1; ;i++){t=number%10;if(t==digit)count++;number=number/10;if(number==0)break;}return count;}统计素数并求和#include "stdio.h"#include "math.h"int main( ){int ri,repeat;int count, i, m, n, sum;int prime(int m);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d%d", &m, &n);sum=0;count=0;for(i=m;i<=n;i++){if(prime(i)==1){count++;sum=sum+i;}}printf("count=%d, sum=%d\n", count, sum); #include "stdio.h"#include "math.h"int main( ){int ri,repeat;int count, digit, i, j, k, m, n, sum;scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d%d", &m, &n); count=0;sum=0;digit=0;for(i=m;i>=m&&i<=n;i++){for(j=2;j<=n/2;j++)if(i%j==0)break;if(j>i/2&&i!=1){count++;sum=sum+i;}}}int prime(int m){int i;if(m==1)return 0;if(m>1){for(i=2;i<=m/2;i++){if(m%i==0){return 0;}}if(i>m/2) return 1;}}求完数#include "stdio.h"int main( ){int ri,repeat;int i, m, n;long factorsum(int number);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){ scanf("%d%d", &m, &n);for(i=m;i<=n;i++){if(i==factorsum(i))printf("%d ", i);}printf("\n");}}long factorsum(int number) {int i,sum=0;if(number==1) return 1;for(i=1;i<number;i++){if(number%i==0)sum=sum+i;}return sum;}输出 Fibonacci 序列#include "stdio.h"#include "math.h"int main( ){int ri,repeat;int i, m, n;long f;long fib(int n);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){ scanf("%d%d", &m, &n); for(i=1; ;i++){ f=fib(i);if(f>=m&&f<=n) printf("%ld ", f); if(f>n) break; }printf("\n"); }return 0; }long fib(int n) {int i,a=1,b=1,t;if(n==1) return 1; if(n==2) return 1; for(i=3;i<=n;i++){ t=a+b; a=b; b=t; }return t; }求各位数字的立方和等于它本身的数#include "stdio.h" int main( ) {int ri,repeat;Fibonacci 序列的前十项X1=1;X2=1;Printf(“%6d%6d ”,x1,x2);For(i=1;i<=8;i++){X=x1+x2;Printf(“%6d ”,x);X1=x2;X2=x;int i, m, n;int is(int number);scanf("%d",&repeat);for(ri=1;ri<=repeat;ri++){scanf("%d%d", &m, &n);for(i=m;i<=n;i++){if(i==is(i))printf("%d ", i);}printf("\n");}return 0;}int is(int number){int t,sum=0;do{t=number%10;sum=sum+t*t*t;number=number/10;}while(number!=0);return sum;}将一个整数逆序输出#include <stdio.h>int main( ){int ri, repeat;long in, res,k;long reverse(long number);scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){ scanf("%ld", &in);if(in<0){in=-in;k=1;}else k=0;res=reverse(in);if(k==1)res=-res;printf("%ld\n", res);}}long reverse(long number){int a,b;b=0;while(number!=0){a=number%10;b=b*10+a;number=number/10;}return b;}循环移动(调试示例error08_1)#include <stdio.h>void mov(int *x, int n, int m);int main(void){int i, m, n,*p;int a[80];scanf("%d%d", &n, &m);for(i = 0; i < n; i++)scanf("%d", &a[i]);mov(a,n,m);printf("After move: ");for(i = 0; i < n; i++)printf("%d ", a[i]);printf("\n");}void mov(int *x,int n,int m){int i,j,k;for(i=0;i<m;i++){k=x[n-1];for(j=n-1;j>0;j--)x[j]=x[j-1];x[0]=k;}}在数组中查找指定元素#include <stdio.h>int main(void){int i, index, n, res, x;int repeat, ri;int a[10];int search(int list[], int n, int x); scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);scanf("%d", &x);res=search(a,n,x);if(res != -1)printf("index = %d\n", res); elseprintf("Not found\n");}}int search(int list[],int n,int x){int i,res;res=-1;for(i=0;i<n;i++)if(list[i]==x)res=i;return res;}使用函数的选择法排序#include <stdio.h>void sort(int a[],int n);int main(void){int i, n;int repeat, ri;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);sort(a,n);printf("After sorted: ");for(i = 0; i < n; i++)printf("%d ", a[i]);printf("\n");}}void sort(int *p,int n){int k,i,index,t;for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++)if(p[i]<p[index])index=i;t=p[index];p[index]=p[k];p[k]=t;}}使用函数删除字符串中的字符#include<stdio.h>void main(){char c;char str[80];int repeat, ri;void delchar(char *str, char c); scanf("%d", &repeat);getchar();for(ri = 1; ri <= repeat; ri++){ gets(str);scanf("%c", &c);getchar();/*---------*/delchar(str,c);printf("result: ");puts(str);}}/*---------*/void delchar(char *str,char c){int i,j;for(i=j=0;str[i]!='\0';i++){if(str[i]!=c)str[j++]=str[i];}str[j]='\0';}使用函数实现字符串复制#include<stdio.h>#include<string.h>void main(){char s[80], t[80];int m;int repeat, ri;void strmcpy(char *s,char *t, int m);scanf("%d", &repeat);getchar();for(ri = 1; ri <= repeat; ri++){gets(t);scanf("%d", &m);getchar();if(strlen(t) < m)printf("error input");else{/*---------*/strmcpy(s,t,m);puts(s);}}}void strmcpy(char *s,char *t,int m){int i,j;j=0;for(i=m-1;t[i]!='\0';i++)s[j++]=t[i];s[j]='\0';}/*---------*/判断回文字符串#include <stdio.h>void main(){char s[80];int repeat, ri;int mirror(char *p);scanf("%d", &repeat);getchar();for(ri = 1; ri <= repeat; ri++){ gets(s);if(mirror(s) != 0)printf("YES\n");elseprintf("NO\n");}}/*---------*/int mirror(char *p){char *q;q=p;while(*q!='\0')q++;p--;while(p<q){if(*p!=*q)return 0;p++;q--;}return 1;}分类统计字符个数#include<stdio.h>void main()char s[80];char *p;int blank, digit, lower, other, upper;gets(s);upper = lower = blank = digit = other = 0;/*---------*/for(p=s;*p!='\0';p++)if(*p>='A'&&*p<='Z')upper++;else if(*p>='a'&&*p<='z')lower++;else if(*p>='0'&&*p<='9')digit++;else if(*p==' ')blank++;elseother++;printf("upper: %d lower: %d blank: %d digit: %d other: %d\n", upper, lower, blank, digit, other);}显示水果的价格#include <stdio.h>int main(void){int ri, repeat;int choice;float price;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){printf("[1] apples\n");printf("[2] pears\n");printf("[3] oranges\n");printf("[4] grapes\n");scanf("%d", &choice);if(choice==0)printf("price=0");switch(choice){case 1:price=3.00;break;case 2:price=2.50;break;case 3:price=4.10;break;case 4:price=10.20;break;}printf("price=%.2f\n", price); }return 0;}求n!#include <stdio.h>int main(void){int ri, repeat;int i, n;double fact;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);fact=1;for(i=1;i<=n;i++)fact=fact*i;printf("%.0f\n", fact);}return 0;}求最大值#include <stdio.h>int main( ){int ri, repeat;int i , max, n, x;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%d", &n);max=n;for(i=1;i<=n;i++){scanf("%d",&x);if(max<x)max=x;}printf("%d\n", max);}return 0;}求整数的位数以及各位数之和#include <stdio.h>int main( ){int ri, repeat;int number, sum;long in;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){number=0;sum=0;scanf("%ld", &in);if(in<0)in=-in;do{sum=sum+in%10;in=in/10;number++;}while(in!=0);printf("number=%d, sum=%d\n", number, sum); }}求a+aa+aaa+aa…a#include <stdio.h>void main(){int ri, repeat;int i, n;long int a, sn, tn;scanf("%d", &repeat);for(ri=1; ri<=repeat; ri++){scanf("%ld%d", &a, &n);sn=a;tn=a;for(i=1;i<=n-1;i++){tn=10*tn+a;sn=sn+tn;}printf("%ld\n",sn);}}求平均值#include <stdio.h>int main(void) {int i, n, sum; int repeat, ri;int a[10];double aver;scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d", &n);sum=0;for(i = 0; i < n; i++){scanf("%d", &a[i]);sum=sum+a[i];}aver=sum/(n*1.0);printf("average = %.2f\n", aver);}}交换最小值和最大值#include <stdio.h>int main(void){int i, index, n, t;int repeat, ri;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);index=0;for(i=0;i<n;i++)if(a[i]<a[index])index=i;t=a[0];a[0]=a[index];a[index]=t;for(i=0;i<n;i++)if(a[i]>a[index])index=i;t=a[n-1];a[n-1]=a[index];a[index]=t;printf("After swap: ");for(i = 0; i < n; i++)printf("%d ", a[i]);printf("\n");}}将数组中的数逆序存放#include <stdio.h>int main(void){int i, n, temp;int repeat, ri;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){ scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);for(i=0;i<n/2;i++){temp=a[i];a[i]=a[n-1-i];a[n-1-i]=temp;}for(i = 0; i < n; i++)printf("%d ", a[i]);printf("\n");}}选择法排序#include <stdio.h>int main(void){int i, index, k, n, temp;int repeat, ri;int a[10];scanf("%d", &repeat);for(ri = 1; ri <= repeat; ri++){scanf("%d", &n);for(i = 0; i < n; i++)scanf("%d", &a[i]);for(k=0;k<n-1;k++){index=k;for(i=k+1;i<n;i++)if(a[i]>a[index])index=i;temp=a[index];a[index]=a[k];a[k]=temp;}printf("After sorted: ");for(i = 0; i < n; i++)printf("%d ", a[i]);printf("\n");}}调试示例error09_1.cpp#include <stdio.h>int main (void){int i, n;struct emp{char name[10];double jbg;double fdg;double zc;} s[10];scanf("%d", &n);for(i=0;i<n;i++)scanf("%s%lf%lf%lf",s[i].name,&s[i].jbg,&s[i].fdg,&s[i].zc);for (i = 0; i < n; i++)printf ("%5s 实发工资:%7.2f\n", s[i].name, s[i].jbg + s[i].fdg - s[i].zc);return 0;}计算平均成绩#include <stdio.h>int main(void){int i, n;double average, sum=0;struct student{int num;char name[10];int score;}s[10];scanf("%d", &n);for(i=1;i<=n;i++){scanf("%d%s%d",&s[i].num,s[i].name,&s[i].score); sum=sum+s[i].score;}average=sum/n;printf("average: %.2f\n", average);}查找书籍#include <stdio.h>int main (void){int i, max_index, min_index, n;double x;struct book{char name[50];double price;}book[10];scanf("%d", &n);getchar();for(i = 0; i < n; i++){gets(book[i].name);scanf("%lf", &x);getchar();book[i].price = x;}min_index=0;for(i=0;i<n;i++){if(book[i].price<book[min_index].price){min_index=i;}}max_index=0;for(i=0;i<n;i++){if(book[i].price>book[max_index].price){max_index=i;}}printf("highest price: %.1f, %s\n", book[max_index].price, book[max_index].name);printf("lowest price: %.1f, %s\n", book[min_index].price,book[min_index].name);return 0;}找出总分最高的学生(改错题error09_2)#include <stdio.h>int main (void){int i, j, k, max_index, n;struct student{int number;char name[20];int score[3];int sum;}stu[10];scanf("%d", &n);/*---------*/for(i=0;i<n;i++){scanf("%d",&stu[i].number);scanf("%s",stu[i].name);scanf("%d",&stu[i].score[0]);scanf("%d",&stu[i].score[1]);scanf("%d",&stu[i].score[2]);stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]; }max_index=0;for(i=0;i<n;i++){if(stu[i].sum>stu[max_index].sum)max_index=i;}printf("总分最高的学生是: %s,%d分", stu[max_index].name,stu[max_index].sum);}计算两个复数之积#include <stdio.h>int main(void){struct complex{int real;int imag;}product, x, y;scanf("%d%d%d%d", &x.real, &x.imag, &y.real, &y.imag);product.real=x.real*y.real-x.imag*y.imag;product.imag=x.real*y.imag+y.real*x.imag;printf("(%d+%di) * (%d+%di) = %d + %di\n", x.real, x.imag, y.real, y.imag, product.real, product.imag);return 0;}#include<stdio.h>Int main(void){Printf(“Hello World!\n”);Return 0;}1~100 间所有偶数的和#include<stdio.h>Int main(void){Int i, sum=0;For(i=1; i<=100; i++)If(i%2==0)Sum=sum+i;Printf(“%d”,sum);Return 0;}求分段函数#include<stdio.h>Int main(void){Double x,y;Printf(“Enter x (x>=0):\n”);Scanf(“%lf”,&x);if(x<=15)Y=4*x/3;ElseY=2.5*x-10.5;Printf(“f(%f)=%.2f\n”,x,y);Return 0;}求1+2+......+n#include<stdio.h>Int main(void){Int i, sum, n;Printf(“Enter n:”);Scanf(“%d”,&n);Sum=0;For(i=1;i<=n;i++)Sum=sum+i;Printf(“sum=%d\n”,sum);Return 0;}求1-1/3+1/5-1/7+...共n项之和#include<stdio.h>Int main(void){Int denominator, flag, i, n;Double item, sum;Printf(“Enter n:”);Scanf(“%d”,&n);Flag=1;Denominator=1;Sum=0;For(i=1;i<=n;i++){Item=flag*1.0/denominator;Sum=sum+item;Flag=-flag;Denominator=denominator+2; }Printf(“sum=%f\n”, sum);Return 0;}统计学生的成绩从键盘输入一批学生的成绩,计算平均成绩,并统计不及格学生的人数统计一个整数的位数判断素数求最小值及其下标判断回文统计数字字符个数输入5个字符串,输出其中最小字符串将数组元素逆序存放输入n个学生的成绩信息,计算并输出每个学生的个人平均成绩。

北航大一上c语言第四五六七八次作业

北航大一上c语言第四五六七八次作业

3. 字母频率统计【问题描述】编写程序从标准输入中读入一段英文,统计其中小写字母出现次数,并以柱状图的形式显示其出现次数。

【输入形式】在标准输入上输入一段英文文章(可能有一行,也可能有多行),在新的一行的开头输入ctrl+z键表示结束。

【输出形式】在屏幕上依次输出表示每个小写字母出现次数的柱状图(以“*”字符表示柱状图,空白处用空格字符表示,某个小写字母出现多少次,就显示多少“*”字符;柱状图的高度以出现最多的字母次数为准),在最后一行依次输出26个小写字母。

【样例输入】The computing world has undergone arevolution since the publication ofThe C Programming Language in 1978.【样例输出】【样例说明】在输入的英文短文中,小写字母a出现了6次,所以其上输出了6个字符"*"。

出现次数最多的是字母n,所以柱状图的高度为9个字符。

字母j没有出现,所以其上都为空格字符。

【评分标准】该题要求输出柱状图表示的字母出现次数,共有5个测试点。

上传C语言文件名为bar.c。

【输入形式】从标准输入读取顶点坐标。

格式为:第一行是点的个数N(3≤N≤15),后面紧接着N 行,每行两个数字(由空格隔开),分别表示该点的X、Y坐标(0≤X,Y≤32767)。

所有点的坐标互不相同,且按顺时针次序给出。

输入数据确保该多边形是一个凸多边形。

【输出形式】向标准输出打印一个浮点数,是该多边形的面积。

该浮点数保留两位小数。

【输入样例】 43 330101 2【输出样例】5.00【样例说明】输入数据表示了如图所示的四边形。

其面积为5.00。

提示:求三角形面积可用海伦公式,求平方根可用<math.h>头文件中定义的sqrt函数。

【评分标准】结果完全正确得20分,每个测试点4分。

提交程序名为:points.c。

C语言程序设计教程 第七章 课后习题参考答案

C语言程序设计教程 第七章 课后习题参考答案
printf("原数组为:\n");
for(i=0;i<N;i++)
{
printf("%4d",a[i]);
}
bubble_sort(a,N);
printf("\n");
}
void bubble_sort(int a[],int n)
{
int i,j,tmp;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
for(i=0;i<n/2;i++)
{
t=a[i];
a[i]=a[n-1-i];
a[n-1-i]=t;
}
for(i=0;i<n;i++)
{
printf("%-4d",a[i]);
}
}
P1985对称矩阵
#include<stdio.h>
void print(int a[][3],int rows,int cols);
int a[M][N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int i,j,m=0,n=0;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<M;i++)
m++;

北京工业大学C语言部分练习答案

北京工业大学C语言部分练习答案

练习1 分支1.若从键盘输入58,则以下程序段的输出结果是(58 58 58):int main(void){int a;scanf(“%d”,&a);if (a>50) printf(“%d”,a);if(a>40) printf(“%d”,a);if(a>30) printf(“%d”,a);return 0;}2.下列程序运行的输出结果是(9):没有遇到break语句,继续执行到switch语句结束int main(void){char c=’b’;int k=4;switch(c) {case ‘a’: k=k+1; break;case ‘b’: k=k+2;case ‘c’: k=k+3;}printf(“%d\n”,k);return 0;}练习2 循环一、读程序写结果1.阅读下列程序并回答问题:main(){inti,j,k=0,m=0;for(i=0;i<2;i++){; /*第6行*/for(j=0;j<3;j++)k++;m++; /*第9行*/}printf(“k=%d,m=%d\n”,k,m);}(1)程序的输出是___k=6,m=2___________。

(2)将第9行改为“m=m+k;“ ,程序的输出是____k=6,m=9_________。

(3)将第6行改为“k=0;”,将第9行改为“m=m+k;”,程序的输出是________k=3,m=6____________。

2.请阅读下面的程序,并回答下列问题#include <stdio.h>int main(){int digit=0,letter=0, other=0;charch;printf("Enter a line text:");do {ch = getchar();if((ch>= 'a' &&ch<= 'z' ) || ( ch>= 'A' &&ch<= 'Z'))letter ++;else if(ch>= '0' &&ch<= '9')digit ++;elseother ++;}while(ch!='\n');printf("letter=%d, digit=%d, other=%d\n", letter, digit, other); }(1)若在程序运行时输入 Today_is_2013/12/28<回车>letter=7, digit=8, other=5(2)简述程序的主要功能:统计输入字符串中字母数字和其他字符的个数。

北京工业大学 计算机系统结构 复习

北京工业大学 计算机系统结构 复习

计算机系统结构概念点,不含计算方法,仅有部分提示,整理内容仅供参考计算机系统结构:指机器语言程序的设计者或是编译程序设计者所看到的计算机系统的概念性结构与功能特性。

透明性:一种本来存在,有差异的事物和属性,从某种角度上看又好像不存在的现象,被称为是“透明性”(例如,高级程序员看不到各种不同类型机器的差异性,就是一个明显的例证。

)计算机系统结构:数据表示;寄存器定义;指令系统;中断系统;存储系统;输入输出结构;机器工作状态;信息保护计算机组成:数据通路的宽度;专用部件的设置;各功能部件;控制机构的组成方式;缓冲技术;可靠性技术的采用和方式的选择计算机实现:逻辑设计的物理实现FLYNN分类法:单指令流单数据流( SISD ),传统顺序处理计算机单指令流、多数据流(SIMD )结构,阵列处理机、并行处理机多指令流、单数据流( MISD )结构,如RISC机、向量机多指令流、多数据流( MIMD )结构,多处理机系统计算机系统的设计原则:1.加速那些使用频率高的部件——提高整个计算机性能; 2.Amdahl定律; 3.程序访问局部性原理Amdahl定律:系统中某一部件由于采用某种改进的执行方式后,整个系统的性能提高了,其衡量指标为加速比。

Amdahl定律可表示为:加速比Sp = T e / T0改进后时间T0= Te(1 –可改进部分占比fe + f e性能提高倍数 r e ⁄)整理得Sp=1(1−fe)+fe/reCPU性能指标:T CPU=I N∗CPI∗T c=指令总数*执行每条指令所需平均周期数*时钟周期CPI=∑CPI i∗I iI N MIPS=I NT e∗106=时钟频率R cCPI∗106MFLOPS=程序中的浮点操作次数I FN执行时间T e∗106计算机系统的层次结构(会排序,注意23级)性能评价结果数据的处理方法:算术性能平均法;几何..;调和..;软件兼容性要求:继承软件资产,保证软件向后兼容和向上兼容数据类型:基本数据类型(二进制数位及位串、整数及自然数、实数(浮点数)、逻辑数、十进制数、字符等。

2022年北京工业大学公共课《C语言》科目期末试卷A(有答案)

2022年北京工业大学公共课《C语言》科目期末试卷A(有答案)

2022年北京工业大学公共课《C语言》科目期末试卷A(有答案)一、填空题1、设x是一个整数(16bit),若要通过xly使x低8位置1,高8位不变,则y的八进制数是_______。

2、C语言源程序文件的后缀是;经过编译后,生成文件的后缀是;经过连接后,生成文件的后缀是3、一个C语言源程序由若干函数组成,其中至少应含有一个________4、表达式x=6应当读做_______5、若有定义语句:inte=1,f=4,g=2;float m=10.5,n=4.0,k;,则执行表达式k=(e+f)/g+sqrt((double)n)*1.2/g+m后k的值是_______。

6、以下程序段通过指针变量q,但不移动q,将如图所示连续动态存储单元的值,从第一个元素起依次输出到终端屏幕。

请填空。

(假设程序段中的所有变量均已正确说明。

)for(k=0;k<10;k++) printf("%d,",_______); printf("\n");7、下面程序段的运行结果是_______。

x=2;do{printf("*");x--;)while(!x==0);8、已有定义int a;float b,x;char cl,c2;为使a=3、b=6.5、x=12.6、cl='a'、c2='A',正确的scanf函数调用语句是_______,数据输入的形式应为_______。

9、执行以下程序时,若从第一列开始输入数据,为使变量a=3、b=7、x=8.5、y=71.82、c1='A'、c2='a',正确的数据输入形式是_______。

#include <stdio.h>int main(){int a,b;float x,y;char cl,c2;scanf("a=%d b=%d",&.a,&.b);scanf("x=%f y=%",8.x,8.y);scanf("c1=%cc2=%c”,8.cl,8.c2);printf("a=%d,b=%d,x=%f,y=%f,cl=%c,c2=%c",a,b,x,y,cl,c2);return0;}10、若有定义:doublex[3][5];,则x数组中行下标的下限为_______,列下标的上限为_______。

数据结构C语言描述耿国华习题及答案

数据结构C语言描述耿国华习题及答案

第一章习题答案2、××√3、(1)包含改变量定义的最小范围(2)数据抽象、信息隐蔽(3)数据对象、对象间的关系、一组处理数据的操作(4)指针类型(5)集合结构、线性结构、树形结构、图状结构(6)顺序存储、非顺序存储(7)一对一、一对多、多对多(8)一系列的操作(9)有限性、输入、可行性4、(1)A(2)C(3)C5、语句频度为1+(1+2)+(1+2+3)+…+(1+2+3+…+n)第二章习题答案1、(1)一半,插入、删除的位置(2)顺序和链式,显示,隐式(3)一定,不一定(4)头指针,头结点的指针域,其前驱的指针域2、(1)A(2)A:E、AB:H、L、I、E、AC:F、MD:L、J、A、G或J、A、G(3)D(4)D(5)C(6)A、C3、头指针:指向整个链表首地址的指针,标示着整个单链表的开始。

头结点:为了操作方便,可以在单链表的第一个结点之前附设一个结点,该结点的数据域可以存储一些关于线性表长度的附加信息,也可以什么都不存。

首元素结点:线性表中的第一个结点成为首元素结点。

4、算法如下:int Linser(SeqList *L,int X){ int i=0,k;if(L->last>=MAXSIZE-1){ printf(“表已满无法插入”);return(0);}while(i<=L->last&&L->elem[i]<X)i++;for(k=L->last;k>=I;k--)L->elem[k+1]=L->elem[k];L->elem[i]=X;L->last++;return(1);}5、算法如下:#define OK 1#define ERROR 0Int LDel(Seqlist *L,int i,int k){ int j;if(i<1||(i+k)>(L->last+2)){ printf(“输入的i,k值不合法”);return ERROR;}if((i+k)==(L->last+2)){ L->last=i-2;ruturn OK;}else{for(j=i+k-1;j<=L->last;j++)elem[j-k]=elem[j];L->last=L->last-k;return OK;}}6、算法如下:#define OK 1#define ERROR 0Int Delet(LInkList L,int mink,int maxk){ Node *p,*q;p=L;while(p->next!=NULL)p=p->next;if(mink<maxk||(L->next->data>=mink)||(p->data<=maxk)) { printf(“参数不合法”);return ERROR;}else{ p=L;while(p->next-data<=mink)p=p->next;while(q->data<maxk){ p->next=q->next;free(q);q=p->next;}return OK;}}9、算法如下:int Dele(Node *S){ Node *p;P=s->next;If(p= =s){printf(“只有一个结点,不删除”);return 0;}else{if((p->next= =s){s->next=s;free(p);return 1;}Else{ while(p->next->next!=s)P=p->next;P->next=s;Free(p);return 1;}}}第三章习题答案2、(1)3、栈有顺序栈和链栈两种存储结构。

C07结构

C07结构
birthday age month day year addr
num name sex
struct student {int num; char name[20]; char sex; int age; struct date birthday; char addr[30]; } stu;
stu.birthday.month=6; stu. birthday .day=24;
关键字struct定义一个结构类型。结构名是用户自定义标识符它 定义一个结构类型。结构名是用户自定义标识符, 关键字 定义一个结构类型 是一个类型说明符而不是变量名。结构定义以分号结束。 是一个类型说明符而不是变量名。结构定义以分号结束。
struct student {int num; char num name[20]; 10010 char sex; int age; float score; char addr[30]; };
struct person {char name[20]; int age; char sex; }a ={”li ning”, 20, ’m’} , *p=&a; 则对字符串li 的引用方式可以是______ 则对字符串 ning 的引用方式可以是 A C D A. (*p). name C. B. D. p->name
六、结构体指针 (1)指向结构体变量的指针变量 指向结构的指针是一个指针变量,指向一个结构体变量, 指向结构的指针是一个指针变量,指向一个结构体变量,即指向该 变量所分配的存储区域的首地址 struct student {int num; char name[20]; char sex; }stu, }stu,*p; p=&stu; /把结构变量的地址赋给结构指针 把结构变量的地址赋给结构指针*/ 把结构变量的地址赋给结构指针 使用指针形式引用结构体成员: 使用指针形式引用结构体成员:(*p).num,(*p).name, (*p).sex 写为:指针变量名 写为:指针变量名-> 成员名 “- >”是指向运算符,左结合性 ”是指向运算符,

《数据结构——C语言描述》习题及答案 耿国华

《数据结构——C语言描述》习题及答案 耿国华

第1章绪论之欧侯瑞魂创作习题一、问答题1. 什么是数据结构?2. 四类基本数据结构的名称与含义.3. 算法的界说与特性.4. 算法的时间复杂度.5. 数据类型的概念.6. 线性结构与非线性结构的分歧.7. 面向对象法式设计语言的特点.8. 在面向对象法式设计中,类的作用是什么?9. 参数传递的主要方式及特点.10. 笼统数据类型的概念.二、判断题1. 线性结构只能用顺序结构来寄存,非线性结构只能用非顺序结构来寄存.2. 算法就是法式.3. 在高级语言(如C、或 PASCAL)中,指针类型是原子类型.三、计算下列法式段中X=X+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;[提示]:i=1时: 1 = (1+1)×1/2 = (1+12)/2i=2时: 1+2= (1+2)×2/2 = (2+22)/2i=3时: 1+2+3= (1+3)×3/2 = (3+32)/2…i=n时:1+2+3+……+n= (1+n)×n/2 = (n+n2)/2f(n) = [ (1+2+3+……+n) + (12 + 22 + 32 + …… + n2 ) ] / 2=[ (1+n)n/2 + n(n+1)(2n+1)/6 ] / 2=n(n+1)(n+2)/6=n3/6+n2/2+n/3区分语句频度和算法复杂度:O(f(n)) = O(n3)四、试编写算法求一元多项式Pn(x)=a0+a1x+a2x2+a3x3+…a n x n的值P n(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能的小,规定算法中不能使用求幂函数.注意:本题中的输入a i(i=0,1,…,n), x和n,输出为P n(x0).通常算法的输入和输出可采纳下列两种方式之一:(1)通过参数表中的参数显式传递;(2)通过全局变量隐式传递.试讨论这两种方法的优缺点,并在本题算法中以你认为较好的一种方式实现输入和输出.[提示]:float PolyValue(float a[ ], float x, int n) {……}核心语句:p=1; (x的零次幂)s=0;i从0到n循环s=s+a[i]*p;p=p*x;或:p=x; (x的一次幂)s=a[0];i从1到n循环s=s+a[i]*p;p=p*x;实习题设计实现笼统数据类型“有理数”.基本把持包括有理数的加法、减法、乘法、除法,以及求有理数的分子、分母.第一章谜底计算下列法式中x=x+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;【解答】x=x+1的语句频度为:T(n)=1+(1+2)+(1+2+3)+……+(1+2+……+n)=n(n+1)(n+2)/61.4试编写算法,求p n(x)=a0+a1x+a2x2+…….+a n x n的值p n(x0),并确定算法中每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数.注意:本题中的输入为a i(i=0,1,…n)、x和n,输出为P n(x0).算法的输入和输出采纳下列方法(1)通过参数表中的参数显式传递(2)通过全局变量隐式传递.讨论两种方法的优缺点,并在算法中以你认为较好的一种实现输入输出.【解答】(1)通过参数表中的参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强.缺点:形参须与实参对应,且返回值数量有限.(2)通过全局变量隐式传递优点:减少实介入形参的个数,从而减少内存空间以及传递数据时的时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue(){ int i,n;float x,a[],p;printf(“\nn=”);scanf(“%f”,&n);printf(“\nx=”);scanf(“%f”,&x);for(i=0;i<n;i++)scanf(“%f ”,&a[i]); /*执行次数:n次 */p=a[0];for(i=1;i<=n;i++){ p=p+a[i]*x; /*执行次数:n次*/ x=x*x;}printf(“%f”,p);}算法的时间复杂度:T(n)=O(n)通过参数表中的参数显式传递float PolyValue(float a[ ], float x, int n){float p,s;int i;p=x;s=a[0];for(i=1;i<=n;i++){s=s+a[i]*p; /*执行次数:n次*/p=p*x;}return(p);}算法的时间复杂度:T(n)=O(n)第2章线性表习题2.1 描述以下三个概念的区别:头指针,头结点,首元素结点.2.2 填空:(1)在顺序表中拔出或删除一个元素,需要平均移动__一半__元素,具体移动的元素个数与__拔出或删除的位置__有关.(2)在顺序表中,逻辑上相邻的元素,其物理位置______相邻.在单链表中,逻辑上相邻的元素,其物理位置______相邻.(3)在带头结点的非空单链表中,头结点的存储位置由______指示,首元素结点的存储位置由______指示,除首元素结点外,其它任一元素结点的存储位置由__其直接前趋的next域__指示.2.3 已知L是无表头结点的单链表,且P结点既不是首元素结点,也不是尾元素结点.按要求从下列语句中选择合适的语句序列.a. 在P结点后拔出S结点的语句序列是:_(4)、(1)_.b. 在P结点前拔出S结点的语句序列是:(7)、(11)、(8)、(4)、(1).c. 在表首拔出S结点的语句序列是:(5)、(12).d. 在表尾拔出S结点的语句序列是:(11)、(9)、(1)、(6).供选择的语句有:(1)P->next=S;(2)P->next= P->next->next;(3)P->next= S->next;(4)S->next= P->next;(5)S->next= L;(6)S->next= NULL;(7)Q= P;(8)while(P->next!=Q) P=P->next;(9)while(P->next!=NULL) P=P->next;(10)P= Q;(11)P= L;(12)L= S;(13)L= P;2.4 已知线性表L递增有序.试写一算法,将X拔出到L的适当位置上,以坚持线性表L的有序性.[提示]:void insert(SeqList *L; ElemType x)< 方法1 >(1)找出应拔出位置i,(2)移位,(3)……< 方法2 > 参P. 2292.5 写一算法,从顺序表中删除自第i个元素开始的k个元素. [提示]:注意检查i和k的合法性.(集体搬场,“新房”、“旧房”)< 方法1 > 以待移动元素下标m(“旧房号”)为中心,计算应移入位置(“新房号”):for ( m= i-1+k; m<= L->last; m++)L->elem[ m-k ] = L->elem[ m ];< 方法2 > 同时以待移动元素下标m和应移入位置j为中心:< 方法3 > 以应移入位置j为中心,计算待移动元素下标:已知线性表中的元素(整数)以值递增有序排列,并以单链表作存储结构.试写一高效算法,删除表中所有年夜于mink且小于maxk 的元素(若表中存在这样的元素),分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值为任意的整数).[提示]:注意检查mink和maxk的合法性:mink < maxk不要一个一个的删除(屡次修改next域).(1)找到第一个应删结点的前驱prepre=L; p=L->next;while (p!=NULL && p->data <= mink){ pre=p; p=p->next; }(2)找到最后一个应删结点的后继s,边找边释放应删结点s=p;while (s!=NULL && s->data < maxk){ t =s; s=s->next; free(t); }(3)pre->next = s;试分别以分歧的存储结构实现线性表的就地逆置算法,即在原表的存储空间将线性表(a1, a2..., a n)逆置为(a n, a n-1,..., a1).(1)以一维数组作存储结构,设线性表存于a(1:arrsize)的前elenum个分量中.(2)以单链表作存储结构.[方法1]:在原头结点后重新头插一遍[方法2]:可设三个同步移动的指针p, q, r,将q的后继r改为p2.8 假设两个按元素值递增有序排列的线性表A和B,均以单链表作为存储结构,请编写算法,将A表和B表归并成一个按元素值递加有序的排列的线性表C,并要求利用原表(即A表和B表的)结点空间寄存表C.[提示]:参P.28 例2-1< 方法1 >void merge(LinkList A; LinkList B; LinkList *C){ ……pa=A->next; pb=B->next;*C=A; (*C)->next=NULL;while ( pa!=NULL && pb!=NULL ){if ( pa->data <= pb->data ){smaller=pa; pa=pa->next;smaller->next = (*C)->next; /* 头插法 */(*C)->next = smaller;}else{smaller=pb; pb=pb->next;smaller->next = (*C)->next;(*C)->next = smaller;}}while ( pa!=NULL){smaller=pa; pa=pa->next;smaller->next = (*C)->next;(*C)->next = smaller;}while ( pb!=NULL){smaller=pb; pb=pb->next;smaller->next = (*C)->next;(*C)->next = smaller;}< 方法2 >LinkList merge(LinkList A; LinkList B){ ……LinkList C;pa=A->next; pb=B->next;C=A; C->next=NULL;…………return C;2.9 假设有一个循环链表的长度年夜于1,且表中既无头结点也无头指针.已知s为指向链表某个结点的指针,试编写算法在链表中删除指针s所指结点的前趋结点.[提示]:设指针p指向s结点的前趋的前趋,则p与s有何关系?2.10 已知有单链表暗示的线性表中含有三类字符的数据元素(如字母字符、数字字符和其它字符),试编写算法来构造三个以循环链表暗示的线性表,使每个表中只含同一类的字符,且利用原表中的结点空间作为这三个表的结点空间,头结点可另辟空间.2.11 设线性表A=(a1, a2,…,a m),B=(b1, b2,…,b n),试写一个按下列规则合并A、B为线性表C的算法,使得:C= (a1, b1,…,a m, b m, b m+1,…,b n)当m≤n时;或者 C= (a1, b1,…,a n, b n, a n+1,…,a m) 当m>n时.线性表A、B、C均以单链表作为存储结构,且C表利用A表和B表中的结点空间构成.注意:单链表的长度值m和n均未显式存储.[提示]:void merge(LinkList A; LinkList B; LinkList *C)或:LinkList merge(LinkList A; LinkList B)2.12 将一个用循环链表暗示的稀疏多项式分解成两个多项式,使这两个多项式中各自仅含奇次项或偶次项,并要求利用原链表中的结点空间来构成这两个链表.[提示]:注明用头指针还是尾指针.2.13 建立一个带头结点的线性链表,用以寄存输入的二进制数,链表中每个结点的data域寄存一个二进制位.并在此链表上实现对二进制数加1的运算.[提示]:可将低位放在前面.2.14 设多项式P(x)采纳课本中所述链接方法存储.写一算法,对给定的x值,求P(x)的值.[提示]:float PolyValue(Polylist p; float x) {……}实习题1.将若干城市的信息存入一个带头结点的单链表,结点中的城市信息包括城市名、城市的位置坐标.要求:(1)给定一个城市名,返回其位置坐标;(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于即是D的城市.2.约瑟夫环问题.约瑟夫问题的一种描述是:编号为1,2,…,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数).一开始任选一个整数作为报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m时停止报数.报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止.试设计一个法式,求出出列顺序.利用单向循环链表作为存储结构模拟此过程,依照出列顺序打印出各人的编号.例如m的初值为20;n=7,7个人的密码依次是:3,1,7,2,4,8,4,出列的顺序为6,1,4,7,2,3,5.第二章谜底实习题二:约瑟夫环问题约瑟夫问题的一种描述为:编号1,2,…,n的n个人按顺时针方向围坐一圈,每个人持有一个密码(正整数).一开始任选一个报数上限值m,从第一个人开始顺时针自1开始顺序报数,报到m 时停止报数.报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止.试设计一个法式,求出出列顺序.利用单向循环链表作为存储结构模拟此过程,依照出列顺序打印出各人的编号.例如,m的初值为20;n=7,7个人的密码依次是:3,1,7,2,4,8,4,出列顺序为6,1,4,7,2,3,5.【解答】算法如下:typedef struct Node{int password;int num;struct Node *next;} Node,*Linklist;void Josephus(){Linklist L;Node *p,*r,*q;int m,n,C,j;L=(Node*)malloc(sizeof(Node)); /*初始化单向循环链表*/if(L==NULL) { printf("\n链表申请不到空间!");return;} L->next=NULL;r=L;printf("请输入数据n的值(n>0):");scanf("%d",&n);for(j=1;j<=n;j++)/*建立链表*/{p=(Node*)malloc(sizeof(Node));if(p!=NULL){printf("请输入第%d个人的密码:",j);scanf("%d",&C);p->password=C;p->num=j;r->next=p;r=p;}}r->next=L->next;printf("请输入第一个报数上限值m(m>0):");scanf("%d",&m);printf("*****************************************\n"); printf("出列的顺序为:\n");q=L;p=L->next;while(n!=1)/*计算出列的顺序*/{j=1;while(j<m)/*计算以后出列的人选p*/{q=p;/*q为以后结点p的前驱结点*/p=p->next;j++;}printf("%d->",p->num);m=p->password; /*获得新密码*/ n--;q->next=p->next; /*p出列*/r=p;p=p->next;free(r);}printf("%d\n",p->num);}试分别以分歧的存储结构实现单线表的就地逆置算法,即在原表的存储空间将线性表(a1,a2,…,a n)逆置为(a n,a n-1,…,a1).【解答】(1)用一维数组作为存储结构void invert(SeqList *L, int *num) {int j;ElemType tmp;for(j=0;j<=(*num-1)/2;j++){tmp=L[j];L[j]=L[*num-j-1];L[*num-j-1]=tmp;}}}(2)用单链表作为存储结构void invert(LinkList L){Node *p, *q, *r;if(L->next ==NULL) return; /*链表为空*/p=L->next;q=p->next;p->next=NULL; /* 摘下第一个结点,生成初始逆置表 */while(q!=NULL) /* 从第二个结点起依次头拔出以后逆置表 */{r=q->next;q->next=L->next;L->next=q;q=r;}}将线性表A=(a1,a2,……am), B=(b1,b2,……bn)合并成线性表C, C=(a1,b1,……am,bm,bm+1,…….bn)当m<=n时,或C=(a1,b1, ……an,bn,an+1,……am)当m>n时,线性表A、B、C以单链表作为存储结构,且C表利用A表和B表中的结点空间构成.注意:单链表的长度值m和n均未显式存储.【解答】算法如下:LinkList merge(LinkList A, LinkList B, LinkList C){Node *pa, *qa, *pb, *qb, *p;pa=A->next; /*pa 暗示A的以后结点*/pb=B->next;p=A; / *利用p来指向新连接的表的表尾,初始值指向表A 的头结点*/while(pa!=NULL && pb!=NULL) /*利用尾插法建立连接之后的链表*/{qa=pa->next;qb=qb->next;p->next=pa; /*交替选择表A和表B中的结点连接到新链表中;*/p=pa;p->next=pb;p=pb;pa=qa;pb=qb;}if(pa!=NULL) p->next=pa; /*A的长度年夜于B的长度*/if(pb!=NULL) p->next=pb; /*B的长度年夜于A的长度*/C=A;return(C);}第3章限定性线性表—栈和队列习题1. 按图3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车箱调度,回答:⑴如进站的车箱序列为123,则可能获得的出站车箱序列是什么?123、213、132、231、321(312)⑵如进站的车箱序列为123456,能否获得435612和135426的出站序列,并说明原因.(即写出以“S”暗示进栈、以“X”暗示出栈的栈把持序列).SXSS XSSX XXSX 或 S1X1S2S3X3S4S5X5X4X2S6X62. 设队列中有A、B、C、D、E这5个元素,其中队首元素为A.如果对这个队列重复执行下列4步把持:(1)输出队首元素;(2)把队首元素值拔出到队尾;(3)删除队首元素;(4)再次删除队首元素.直到队列成为空队列为止,则是否可能获得输出序列:(1)A、C、E、C、C (2) A、C、E(3) A、C、E、C、C、C (4) A、C、E、C[提示]:A、B、C、D、E (输出队首元素A)A、B、C、D、E、A (把队首元素A拔出到队尾)B、C、D、E、A (删除队首元素A)C、D、E、A (再次删除队首元素B)C、D、E、A (输出队首元素C)C、D、E、A、C (把队首元素C拔出到队尾)D、E、A、C (删除队首元素C)E、A、C (再次删除队首元素D)3. 给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?4. 依照四则运算加、减、乘、除和幂运算(↑)优先关系的惯例,画出对下列算术表达式求值时把持数栈和运算符栈的变动过程:A-B*C/D+E↑F5. 试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1& 序列2’模式的字符序列.其中序列1和序列2中都不含字符’&’,且序列2是序列1的逆序列.例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是.[提示]:(1)边读边入栈,直到&(2)边读边出栈边比力,直到……6. 假设表达式由单字母变量和双目四则运算算符构成.试写一个算法,将一个通常书写形式(中缀)且书写正确的表达式转换为逆波兰式(后缀).[提示]:例:中缀表达式:a+b后缀表达式: ab+中缀表达式:a+b×c后缀表达式: abc×+中缀表达式:a+b×c-d后缀表达式: abc×+d-中缀表达式:a+b×c-d/e后缀表达式: abc×+de/-中缀表达式:a+b×(c-d)-e/f后缀表达式: abcd-×+ef/-•后缀表达式的计算过程:(简便)顺序扫描表达式,(1)如果是把持数,直接入栈;(2)如果是把持符op,则连续退栈两次,得把持数X, Y,计算X op Y,并将结果入栈.•如何将中缀表达式转换为后缀表达式?顺序扫描中缀表达式,(1)如果是把持数,直接输出;(2)如果是把持符op2,则与栈顶把持符op1比力:如果op2 > op1,则op2入栈;如果op2 = op1,则脱括号;如果op2 < op1,则输出op1;7. 假设以带头结点的循环链表暗示队列,而且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队列和出队列的算法.[提示]:参P.56 P.70 先画图.typedef LinkListCLQueue;int InitQueue(CLQueue * Q)int EnterQueue(CLQueue Q, QueueElementType x)int DeleteQueue(CLQueue Q, QueueElementType *x)8. 要求循环队列不损失一个空间全部都能获得利用, 设置一个标识表记标帜域tag , 以tag为0或1来区分头尾指针相同时的队列状态的空与满,请编写与此结构相应的入队与出队算法. [提示]:初始状态:front==0, rear==0, tag==0队空条件:front==rear, tag==0队满条件:front==rear, tag==1其它状态:front !=rear, tag==0(或1、2)入队把持:……(入队)if (front==rear) tag=1;(或直接tag=1)出队把持:……(出队)tag=0;[问题]:如何明确区分队空、队满、非空非满三种情况?9. 简述以下算法的功能(其中栈和队列的元素类型均为int):(1)void proc_1(Stack S){ iint i, n, A[255];n=0;while(!EmptyStack(S))n++;Pop(&S, &A[n]);}for(i=1; i<=n; i++)Push(&S, A[i]);}将栈S逆序.(2)void proc_2(Stack S, int e) {Stack T; int d;InitStack(&T);while(!EmptyStack(S)){Pop(&S, &d);if (d!=e) Push( &T, d);}while(!EmptyStack(T)){Pop(&T, &d);Push( &S, d);}}删除栈S中所有即是e的元素.(3)void proc_3(Queue *Q){Stack S; int d;InitStack(&S);while(!EmptyQueue(*Q)){DeleteQueue(Q, &d);Push( &S, d);}while(!EmptyStack(S))Pop(&S, &d);EnterQueue(Q,d)}}将队列Q逆序.实习题1.回文判断.称正读与反读都相同的字符序列为“回文”序列.试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1&序列2’模式的字符序列.其中序列1和序列2中都不含字符‘&’,且序列2是序列1的逆序列.例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是. 2.停车场管理.设停车场是一个可停放n辆车的狭长通道,且只有一个年夜门可供汽车进出.在停车场内,汽车按达到的先后次第,由北向南依次排列(假设年夜门在最南端).若车场内已停满n辆车,则后来的汽车需在门外的便道上等待,当有车开走时,便道上的第一辆车即可开入.当停车场内某辆车要离开时,在它之后进入的车辆必需先退出车场为它让路,待该辆车开出年夜门后,其它车辆再按原次第返回车场.每辆车离开停车场时,应按其停留时间的长短交费(在便道上停留的时间不收费).试编写法式,模拟上述管理过程.要求以顺序栈模拟停车场,以链队列模拟便道.从终端读入汽车达到或离去的数据,每组数据包括三项:①是“达到”还是“离去”;②汽车牌照号码;③“达到”或“离去”的时刻.与每组输入信息相应的输出信息为:如果是达到的车辆,则输出其在停车场中或便道上的位置;如果是离去的车辆,则输出其在停车场中停留的时间和应交的费用.(提示:需另设一个栈,临时停放为让路而从车场退出的车.)3.商品货架管理.,栈底商品的生产日期最近.,以保证生产日期较近的商品在较下的位置.,实现上述管理过程.第三章谜底按 3.1(b)所示铁道(两侧铁道均为单向行驶道)进行车箱调度,回答:(1)如进站的车箱序列为123,则可能获得的出站车箱序列是什么?(2)如进站的车箱序列为123456,能否获得435612和135426的出站序列,并说明原因(即写出以“S”暗示进栈、“X”暗示出栈的栈序列把持).【解答】(1)可能获得的出站车箱序列是:123、132、213、231、321.(2)不能获得435612的出站序列.因为有S(1)S(2)S(3)S(4)X(4)X(3)S(5)X(5)S(6)S(6),此时依照“后进先出”的原则,出栈的顺序必需为X(2)X(1).能获得135426的出站序列.因为有S(1)X(1)S(2)S(3)X(3)S(4)S(5)X(5)X(4)X(2)X(1).给出栈的两种存储结构形式名称,在这两种栈的存储结构中如何判别栈空与栈满?【解答】(1)顺序栈(top用来寄存栈顶元素的下标)判断栈S空:如果S->top==-1暗示栈空.判断栈S满:如果S->top==Stack_Size-1暗示栈满.(2)链栈(top为栈顶指针,指向以后栈顶元素前面的头结点)判断栈空:如果top->next==NULL暗示栈空.判断栈满:当系统没有可用空间时,申请不到空间寄存要进栈的元素,此时栈满.3.4 照四则运算加、减、乘、除和幂运算的优先惯例,画出对下列表达式求值时把持数栈和运算符栈的变动过程:A-B*C/D+E↑F 【解答】3.5写一个算法,判断依次读入的一个以@为结束符的字母序列,是否形如‘序列1&序列2’的字符序列.序列1和序列2中都不含‘&’,且序列2是序列1 的逆序列.例如,’a+b&b+a’是属于该模式的字符序列,而’1+3&3-1’则不是.【解答】算法如下:int IsHuiWen(){Stack *S;Char ch,temp;InitStack(&S);Printf(“\n请输入字符序列:”);Ch=getchar();While( ch!=&) /*序列1入栈*/{Push(&S,ch);ch=getchar();}do /*判断序列2是否是序列1的逆序列*/{。

数据结构-用C语言描述习题及答案-耿国华

数据结构-用C语言描述习题及答案-耿国华

第1章绪论习题一、问答题1.什么是数据结构?2.四类基本数据结构的名称与含义。

3.算法的定义与特性。

4.算法的时间复杂度。

5.数据类型的概念。

6.线性结构与非线性结构的差别。

7.面向对象程序设计语言的特点。

8.在面向对象程序设计中,类的作用是什么?9.参数传递的主要方式及特点。

10.抽象数据类型的概念。

二、判断题1.线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。

2.算法就是程序。

3.在高级语言(如C、或 PASCAL)中,指针类型是原子类型。

三、计算下列程序段中X=X+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;[提示]:i=1时: 1 = (1+1)×1/2 = (1+12)/2i=2时: 1+2= (1+2)×2/2 = (2+22)/2i=3时: 1+2+3= (1+3)×3/2 = (3+32)/2…i=n时:1+2+3+……+n= (1+n)×n/2 = (n+n2)/2f(n) = [ (1+2+3+……+n) + (12 + 22 + 32 + …… + n2 ) ] / 2=[ (1+n)n/2 + n(n+1)(2n+1)/6 ] / 2=n(n+1)(n+2)/6=n3/6+n2/2+n/3区分语句频度和算法复杂度:O(f(n)) = O(n3)四、试编写算法求一元多项式Pn(x)=a0+a1x+a2x2+a3x3+…a n x n的值P n(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能的小,规定算法中不能使用求幂函数。

注意:本题中的输入a i(i=0,1,…,n), x和n,输出为P n(x0).通常算法的输入和输出可采用下列两种方式之一:(1)通过参数表中的参数显式传递;(2)通过全局变量隐式传递。

C语言第四章分支结构练习

C语言第四章分支结构练习

C语⾔第四章分⽀结构练习⼀、输⼊语⽂,数学成绩,根据平均分分3档0-59 C60-84 B85-100 A#include "stdio.h"void main(){//接受⽤户输⼊float chinese,math,avg;printf("请输⼊语⽂成绩:");scanf("%f",&chinese);printf("请输⼊数学成绩:");scanf("%f",&math);//判断输⼊是否正确if((chinese>=0&&chinese<=100)&&(math>=0&&math<=100)){//求平均分avg=(chinese+math)/2;//根据平均分分档if(avg>=0&&avg<=59){printf("C");}else if(avg>=60 && avg<=84){printf("B");}else{printf("A");}}else{printf("输⼊错误");}}⼆、使⽤switch实现算术运算/* Note:Your choice is C IDE */#include "stdio.h"void main(){//输⼊部分int d1,d2;char o;printf("d1=");scanf("%d",&d1);fflush(stdin);printf("运算符(+ - * /):");scanf("%c",&o);fflush(stdin);printf("d2=");scanf("%d",&d2);switch(o){case'+':printf("%d%c%d=%d",d1,o,d2,d1+d2);break;case'-':printf("%d%c%d=%d",d1,o,d2,d1-d2);break;case'*':printf("%d%c%d=%d",d1,o,d2,d1*d2);break;case'/':if(d2!=0){printf("%d%c%d=%d",d1,o,d2,d1/d2); }else{printf("除数不能为零");}break;default:printf("系统不⽀持该运算符。

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

练习7 结构
学号姓名
一、阅读程序
#include <stdio.h>
struct student{
int num;
char name[10];
int computer, english, math;
double average;
};
void main(void)
{
int i, n;
struct student s;
printf("Input n: ");
scanf("%d", &n);
printf("Input the student’s number, name and course scores\n");
for(i = 1; i <= n; i++){
scanf("%d%s%d%d%d",&s.num,,&s.math,&s.english,&puter);
s.average = (s.math + s.english + puter) / 3.0;
printf("num:%d, name:%s, average:%.2lf\n", s.num, , s.average);
}
}
(1)若在程序运行时输入:
1<回车>
20130101 张三 90 95 85<回车>
运行结果是:
(2) 简述程序的主要功能:
二、程序填空
1. 该程序的功能是:输入某班学生的姓名及数学、英语成绩,计算每位学生的
平均分;然后输出平均分最高的学生的姓名及数学、英语成绩。

#include <stdio.h>
struct student{
char name[10];
int math,eng;
double ave;
};
int main(void )
{ int i,n,max=0;
struct student s[50];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s%d%d",s[i].name,&s[i].math,&s[i].eng);
for(i=0;i<n;i++){
=(s[i].math+s[i].eng)/2.0; /*计算平均分*/
if( )
max=i;
}
printf("%10s%3d%3d\n",s[max].name,s[max].math,s[max].eng);
return 0;
}
2. 下面的程序定义了一个结构表示参加竞选的候选人信息,程序的功能是先输入3个候选人的基本信息(编号、姓名),再进行10轮投票,每次输入候选人的编号进行投票,最后输出各人得票的结果。

#include <stdio.h>
void main()
{
struct person
{
int num; //候选人编号
char name[20]; //候选人姓名
int count; //候选人得票数
} ;
struct person leader[3];
int i,j,leader_num;
printf(“请输入候选人的基本信息(编号、姓名):\n”);
for(i=1;i<=3;i++)
{
scanf("%d%s",&leader[i].num, );
leader[j].count=0;
}
printf(“开始投票,请输入10次候选人编号:\n”);
for(i=1;i<=10;i++)
{
scanf("%d",&leader_num);
for(j=1;j<=3;j++)
{
if(leader_num==leader[j].num
;
}
}
printf(“3个候选人的得票情况为:\n”);
for(i=1;i<=3;i++)
printf(“%s %d\n”, leader[i].name,leader[i].count);
}
3. 下面程序的功能是从键盘输入学生的人数n,然后输入n个学生的成绩信息,计算并输出每个学生的学号、姓名和平均成绩。

#include <stdio.h>
struct student{
int num;
char name[10];
int computer, english, math;
double average;
};
int main(void)
{
int i, n;
struct student s;
printf("Input n: ");
scanf("%d", &n);
printf("Input the student’s number, name and course scores\n");
for(i = 1; i <= n; i++){
printf("No.%d: ", i);
scanf("%d%s%d%d%d",&s.num,________,&s.math,&s.english,&puter);
s.average = ____________________________;
printf("num:%d, name:%s, average:%.2lf\n", s.num, , s.average); }
return 0;
}。

相关文档
最新文档