C程序设计第七&九章
C语言程序设计(第3版)何钦铭 颜 晖 第7章 数组

第7章数组【练习7-1】将例7—3 程序中的break 语句去掉,输出结果有变化吗?假设输入数据不变,输出什么?解答:当去掉break 语句后,一旦找到数据将不跳出循环,而是继续往下找值为x 的元素,因此程序输出会有变化。
当输入数据仍为2 9 8 1 9 时,输出将是index is 1 index is 4。
【练习7—2】将数组中的数逆序存放.输入一个正整数n(1<n<=10),再输入n个整数,存入数组a中,输出最大值及其对应的最小下标,下标从0开始.试编写相应程序。
解答:#include<stdio。
h〉int main(void){int i,n,temp;int a[10];printf("Input n:");scanf(”%d",&n);printf(”Input %d integer:",n);for(i=0;i<n;i++)scanf(”%d”,&a[i]);printf(”After reversed:");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]);return 0;}【练习7-3】求最大值及其下标.输入一个正整数n(1〈n<=10),再输入n个整数,存入数组a中,将先数组a中的这n个数逆序存放,在按顺序输出数组a中的n各元素.试编写相应程序.解答:#include〈stdio.h>int main(void){int i,index,n;int a[10];printf("Enter n:”);scanf(”%d",&n);printf(”Enter %d integrs:”,n);for(i=0;i〈n;i++)scanf("%d",&a[i]);for(i=n—1;i〉=0;i++)printf("%d ”,a[i]);return 0;}【练习7-4】找出不是两个数组共有的元素。
C语言程序设计实训教程第7章 指 针

12
2)指针与一维数组 【例 7.6】 下列程序的运行结果是( )。[读 程序写结果,重庆市 2001年第 2次等级考试]
13
14
3)指向字符的指针
15
16
17
18
4)指针与二维数组
19
5)指向一维数组的指针(行指针) 【例 7.18】 对 int(﹡p)[5];的正确描述 是( )。[多选题,重庆市 2003年第 1次等级考 试] A. p是数组名 B. p是指针变量名 C. p数组中有 5个元素 D .p指向一个包含 5个元素的整型数组 E. p是一个整型数组 答案:B D
22
7)指针数组 当数组的元素类型为指针时,叫做指针数组。 【例 7.21】 下列程序的运行结果是( )。 [读程序写结果,重庆市 2004年第 2 次等级考试]
23
8)指针做函数参数 指针做函数参数的主要目的是利用在函数中, 利用指针去操作主调函数中的变量。 【例 7.22】 下列程序在数组中同时查找最大 值下标和最小值下标,并分别存放在 main函数的 变量 max和 min中,请填空。[读程序写结果,重 庆市 2003年第 2次等级考试]
10
【例 7.3】 由于指针的数据类型实际上是指定 指针所能指向对象的数据类型,所以不同数据类型 的指针变量不能相互赋值。( )[判断题,重庆市 2005年第 2次等级考试] 答案:对 分析:在某些特定情况下,可以在不同数据类 型指针之间通过强制类型转换赋值。
11
【例 7.4】 若有定义:long intj,﹡p;,则操 作 j=(long int)p;是合法操作。( )[判断题, 重庆市 2004年第 1次等级考试] 答案:对 【例 7.5】 在 C 语言中,程序
C语言程序设计教程 第七章 课后习题参考答案

{
for(j=0;j<N;j++)
{
printf("%4d",a[i][j]);
}
printf("\n");
}
for(i=0;i<M;iபைடு நூலகம்+)
{
for(j=0;j<N;j++)
{
if(i==j)
m+=a[i][j];
}
}
printf("主对角线元素之和为:%d\n",m);
批注本地保存成功开通会员云端永久保存去开通
P198 3求主、副对角线元素之和
#include<stdio.h>
#define M 4
#define N 4
int main()
{
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;
{
if(a[j]>a[j+1])
{
tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
printf("\n");
printf("排序后的数组为:\n");
for(i=0;i<N;i++)
{
printf("%4d",a[i]);
}
}
P76 3成绩
#include<stdio.h>
void input(int cla[50][3],int n);
C程序设计(第四版)第7章结构体与共用体

7.1.1
结构体类型的定义
结构体在说明和使用之前,必须先由用 户自己定义。结构体定义的一般形式如下: struct 结构体名 { 成员类型说明符 成员项1; 成员类型说明符 成员项2; …… 成员类型说明符 成员项n; };
其中: 1、struct是C语言中定义结构体的关键字。 2、成员类型说明符是说明每个成员项的数 据类型,可以是基本数据类型,也可以是数组 类型,还可以是另一个已定义的结构体类型。 3、成员名可以和程序中的变量名相同,两 者不代表同一对象。 4、要注意,在结构体定义中的右括号后应 该有分号。
7.1.6
指向结构体的指针
一个结构体类型的数据在内存中都占据一定 的存储空间,我们可以定义一个指针来指向该 结构体类型的数据,该指针变量称为指向结构 体的指针,简称之为结构体指针。我们可以通 过结构体指针来访问结构体类型的数据,如结 构体变量、结构体数组。指向结构体的指针变 量说明形式如下: struct 结构体类型名 *结构体指针变量名;
main() { struct student stu1; struct student *p; p=&stu1; stu1.num=50201001; gets(); stu1.score=89.5;
printf(“No:%ld\nName:%s\nScore:%4.1f\n”,stu1 .num,,stu1.score); printf(“No:%ld\nName:%s\nScore:%4.1f\n”,(*p). num,(*p).name,(*p).score);
3、结构体数组应用举例 【例7-2】现有三个候选人(每个候选人的ID 号分别是1、2、3),选举人投票进行选举, 编写程序统计出每个候选人的得票结果。 程序如下: #define NUM 30 #include <stdio.h> struct elector { int id; char name[20]; int count;
电大C语言程序设计 第7章 结构和联合

第7章 结构和联合 章 7.3 结构成员的访问 1.访问结构成员:通过点操作符“.”进行。 访问结构成员: 进行。 访问结构成员 通过点操作符“ 进行 访问code成员 例:person.code//访问 访问 成员 person.salary//访问 访问salary成员 访问 成员 2. 同类型的结构变量可相互赋值。 同类型的结构变量可相互赋值。 struct person { char name[20]; unsigned long id; float salary; }; person pr1={“Frank voltaire”,12345678,3.35}; person pr2; pr2=pr1; //同类型的结构变量可相互赋值 同类型的结构变量可相互赋值
第7章 结构和联合 章 7.2 结构变量的定义和初始化 结构变量定义方法有三种。 结构变量定义方法有三种。 1. 先定义结构类型,再定义变量 先定义结构类型, struct Arith { char op; int a,b; }; int xx=40; (1)struct Arith x,y; (2)struct Arith z1={'+',10,xx},z2={'*',60},z3=z1; (3)struct Arith *d=&z1; (4)struct Arith a[4]={{'+',3,7},{'-',10,5},{'*',6,4}, {'/',8,5}}; (5)struct Arith *b[ ]={&z1,&z2,a+2,&a[3]};
struct D{ int * a; int * ap; int maxsize; }; struct E{ int d,* e; struct B b; }; struct F{ double data; struct F * next; };
C语言程序设计数组

课程名称:C语言程序设计 课型与教法:讲授,经过程序扩展,进行对比学习 课时:2课时 讲课题目:
第7章 数组 基本教材:C语言程序设计(高等教育出版社)廖雷主编 教学目旳与要求:经过本章旳学习使学生了解数组旳意义和 基本概念,掌握数组旳定义和元素旳引用,掌握数组在实际 问题处理中旳应用。 教学难点:二维数组概念旳了解 教学要点:数组旳定义和元素旳引用、数据旳排序
例 int data[5a][;1]=7p8r.0in; tf(“%d”,a);
()
data[5]必=1p须0ri;nt/f/f(没o“r%p有(jrl=fi错n\n0t”;f误(j,<a“提[%120]醒d);;\j,t+使”,+a用)[j]时);要注意 () 5
第七章 数组
一维数组
一维数组旳初始化
int a[N]={7,3,2,5,9,1,6,10,4,8}; for(i=0;i<N-1;i++)
for(j=N-1;j>i;j--) if(a[j-1]>a[j]) { k=a[j-1]; a[j-1]=a[j]; a[j]=k; }
printf(“\n”); for(i=0;i<N;i++)
❖数组元素旳存储顺序
原二因维:数内组存例:是按i一nt行维a[序3旳]优[4]先; float b[2][5];
元素个数=行数*列数
例:int a[3]i[n2t]a[3,4];
a[0][0] a[0][1]
0 () a[0][0]
1
a[0][1]
2
a[1][0]
a[1][0] a[1][1] a[2][0] a[2][1]
一维数组旳引用
C语言程序设计_课件_第七章(适于清华谭浩强版)

注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。
问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:
《C语言程序设计》第7次上机作业

《C语言程序设计》第7次上机作业C语言程序设计是计算机科学和技术专业中一门重要的课程,该课程主要教授C语言的基础知识和编程技巧。
通过学习这门课程,学生能够掌握C语言的语法结构和编程思想,提高自己的编码能力和解决实际问题的能力。
本次上机作业要求学生完成以下几个任务:1.打印九九乘法表:要求按格式打印出九九乘法表,并能够根据用户输入的数字,打印出对应大小的乘法表。
这一任务主要考察学生对基本的循环和控制语句的运用能力。
2.求阶乘:要求使用递归函数的方法,编写一个程序来计算给定数字的阶乘。
这一任务主要考察学生对递归函数的理解和运用能力。
3.统计字母个数:要求编写一个程序,可以统计字符串中字母的个数,并生成一个字母频率统计表。
这一任务主要考察学生对于字符串处理和数组运用的能力。
4.生成随机数:要求编写一个程序,能够生成指定范围内的指定个数的随机数,并将其存入一个数组中。
这一任务主要考察学生对于随机数生成和数组运用的掌握能力。
5.循环移位:要求编写一个程序,实现对给定的字符串进行循环右移的功能。
这一任务主要考察学生对于字符串处理的能力。
通过完成上述任务,可以帮助学生巩固和提高C语言的编程能力,培养学生的分析问题和解决问题的能力。
在解题过程中,学生需要注意编码的规范性和程序的健壮性。
合理使用注释,编写清晰易懂的代码。
在测试过程中,注意边界条件和异常情况的处理,确保程序的正确性和稳定性。
总之,完成本次上机作业将有助于学生提高C语言的编程能力,培养学生的解决实际问题的能力,为将来的工作和学习打下良好的基础。
希望同学们能够认真完成本次作业,加深对C语言的理解和应用能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void main(){ //用指针实现赋值 Bookcard book[N], *b; float meanprice=0; for (b=book;b<book+N;b++){ gets(b->num); gets(b->name); gets(b->author); gets(b->publisher); scanf("%f",&b->price); meanprice=meanprice+b->price; getchar(); //fflush(stdin); } meanprice=meanprice/N; printf("%.2f",meanprice); }
9.2b.
void print(Bookcard *p){ Bookcard *b; for (b=p;b<p+N;b++){ puts(b->num); puts(b->name); puts(b->author); puts(b->publisher); printf("%.2f\n",b->price); printf("%d %d %d\n",b->date.year,b>date.month,b->date.day); } }
head B0 B1
r B2 p B3
9.4b.
void print(Bookcard *p){ Bookcard *b; b=p; while(b!=NULL){ puts(b->num); puts(b->name); puts(b->author); puts(b->publisher); b=b->next; } }
9.3b.
void sort(Bookcard *p){ Bookcard *b, *d; for (b=p;b<p+N-1;b++) for(d=b+1;d<p+N;d++) if (strcmp(b->num,d->num)>0 exchange(b,d); }
void main(){ Bookcard book[N]; read(book); sort(book); print(book); }
9.1b.
#include <stdio.h> #include <string.h> #define N 10 typedef struct Bookcard{ char num[10]; char name[30]; char author[30]; char publisher[60]; float price; } Bookcard;
ቤተ መጻሕፍቲ ባይዱ
9.4c.
Bookcard *delet(Bookcard *p){ Bookcard *b ,*pb; char num[10]; gets(num); pb=p; b=p; while(b!=NULL){ if (strcmp(num,b->num)==0){ if (b==p) p=b->next; else pb->next=b->next; return p; } pb=b; b=b->next; } }
7.2.程序输出结果(36)。
#include <stdio.h> #define f(x) x*x void main(){ int a=6,b=2,c; c=f(a)/f(b); //a*a/b*b printf("%d\n",c); }
7.3.程序输出结果(9.840000)。
#include <stdio.h> #define PR(a) printf(“%f",a) #define F(y) 3.84+y #define PRINT(a) PR(a); putchar('\n') void main(){ int x=2; PRINT(F(3)*x); }
void main(){ Bookcard book[N]; read(book); print(book); }
9.3a. 在第2题的基础上,增加一个按书号递增排序的排序函数sort,在 主函数中调用排序函数再输出图书信息。
void exchange(Bookcard *b, Bookcard *d){ Bookcard book1; strcpy(book1.num,b->num); strcpy(,b->name); strcpy(book1.author,b->author); strcpy(book1.publisher,b->publisher); book1.price=b->price; book1.date.year=b->date.year; book1.date.month=b->date.month; book1.date.day=b->date.day; strcpy(b->num,d->num); strcpy(b->name,d->name); strcpy(b->author,d->author); strcpy(b->publisher,d->publisher); b->price=d->price; b->date.year=d->date.year; b->date.month=d->date.month; b->date.day=d->date.day; strcpy(d->num,book1.num); strcpy(d->name,); strcpy(d->author,book1.author); strcpy(d->publisher,book1.publisher); d->price=book1.price; d->date.year=book1.date.year; d->date.month=book1.date.month; d->date.day=book1.date.day; } book1=*b; *b=*d; *d=book1;
9.2a. 在第1题定义的结构体类型中增加一个成员出版日期,该日期是一 个嵌套的结构类型变量,其中包括年、月、日;设计一个输入/输出图书 馆信息的函数read和print;并编写主函数定义一个10个元素的结构数组, 分别调用输入/输出函数输入和输出图书信息。
#include <stdio.h> #include <string.h> #define N 10 typedef struct Date{ int year; int month; int day; }Date; typedef struct Bookcard{ char num[10]; char name[30]; char author[30]; char publisher[60]; float price; Date date; } Bookcard; void read(Bookcard *p){ Bookcard *b; for (b=p;b<p+N;b++){ gets(b->num); gets(b->name); gets(b->author); gets(b->publisher); scanf("%f",&b->price); scanf("%d%d%d",&b->date.year,&b>date.month,&b->date.day); getchar(); //fflush(stdin); } }
第七章 预处理命令 第九章 结构体与共用体
7.1.宏调用实现变量a、b内容的交换。
#include <stdio.h> #define MYSWAP(z,x,y) {z=x;x=y;y=z;} void main(){ float a=5,b=16,c; MYSWAP(c,a,b); printf("%f %f %f\n",a,b,c); }
7.5.编写宏定义MyLpha(c),以判定c是大写字母还是小写字母,当c是小 写字母时宏调用取值为1,当c是大写字母时宏调用取值为0。
#include <stdio.h> #define MyLpha(c) (c>=97)?1:0 void main(){ char c; scanf("%c",&c); if (MyLpha(c)) printf("%c\n",c-32); else printf("%c\n",c+32); }
7.4.swap(a,b)实现两个参数互换。
#include <stdio.h> #define swap(a,b) {a=a^b; b=b^a;a=a^b;} //异或,对a和b类型有限制 //#define swap(a,b) {a=a+b;b=a-b;a=a-b;} //求和,对a和b上界有限制 void main(){ int a, b; scanf("%d%d",&a,&b); swap(a,b); printf("%d %d\n",a,b); }
9.1a. 定义一个图书馆相关信息的结构体类型和结构体变量,其中包括 成员书号、书名、作者、出版社和价格;从键盘输入10本图书信息,计 算并输出这10本图书的平均价格。
#include <stdio.h> #include <string.h> #define N 10 typedef struct Bookcard{ char num[10]; char name[30]; char author[30]; char publisher[60]; float price; } Bookcard; void main(){ Bookcard book[N]; int i=0; float meanprice=0; for (i=0;i<N;i++){ scanf("%s",book[i].num); scanf("%s",book[i].name); scanf("%s",book[i].author); scanf("%s",book[i].publisher); scanf("%f",&book[i].price); meanprice=meanprice+book[i].price; } meanprice=meanprice/N; printf("%.2f",meanprice); }