C语言程序设计7

合集下载

C语言程序设计实训教程第7章 指 针

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语言程序设计第四版_谭浩强7章

C语言程序设计第四版_谭浩强7章

➢函数的功能
return z; }
函数体
函数首部,不是语 句,行尾无分号
精选课件ppt
函数的返回值,类 型与首部定义一致14
函数的定义
关于函数类型的说明
无返回值的函数类型为void; 有返回值的函数,其类型根据返回值 类型决定;省略类型时默认为int(建议 不要省略)
精选课件ppt
15
函数的调用
int main( )
{ int max(int a[ ],int n);
int x[6],i;
for(i=0;i<=5;i++)
scanf("%d",&x[i]);
printf("max=%d",max(x,6));
return 0;
}
实参为数组名
精选课件ppt
int max(int a[ ],int n) { int m,i; m=a[0]; for (i=1;i<n;i++)
float fac; fac=1; for(i=1;i<=n;i++)
fac=fac*i; return fac;
printf("c="); scanf("%d",&c);
}
sum=factorial(a)+factorial(b)+factorial(c);
printf("%d!+%d!+%d!=%.0f",a,b,c,sum);
函数1 函数2 函数3
函数1 函数2
精选课件ppt
34
变量作用域——局部变量和全局变量

C语言程序设计实验实验报告7

C语言程序设计实验实验报告7

C语言程序设计实验实验报告7实验名称:链表实现学生信息管理系统实验目的:通过设计链表实现学生信息管理系统,掌握链表的操作方法及其应用。

实验内容:设计一个学生信息结构体,包括学号、姓名、性别、年龄和成绩五个成员变量,并选择链式结构存储这些数据。

实现以下功能:1. 添加学生信息:从键盘输入学号、姓名、性别、年龄和成绩等信息,添加到链表中。

2. 删除学生信息:从链表中删除指定学号的学生信息。

5. 按成绩排序:按学生的成绩从高到低排序,并输出所有学生的信息。

7. 退出程序:退出学生信息管理系统。

实验方法:1. 设计学生信息结构体,定义链表节点结构体,并编写初始化链表和销毁链表的函数。

2. 编写添加学生信息函数,新建链表节点并插入链表末尾。

3. 编写删除学生信息函数,根据学号查找需要删除的节点,先将该节点从链表中删除,再释放节点空间。

4. 编写修改学生信息函数,根据学号查找需要修改的节点,并修改其成员变量。

6. 编写按成绩排序函数,使用冒泡排序法对链表进行排序,并输出所有学生的信息。

7. 编写输出所有学生信息函数,遍历链表并输出每个节点的信息。

8. 完成学生信息管理系统的主函数,实现菜单及相应功能的选择。

实验结果:依次选择菜单中的各个功能,添加、修改、删除、查找、排序和输出学生信息都能实现。

经测试,程序稳定运行,功能正常,符合需求。

本次实验主要让我们掌握了链式结构的概念、链表节点的定义、链表的初始化、插入、查找、删除和销毁链表的操作方法,以及在实际应用中如何使用链表来实现数据管理。

虽然链表操作相对于数组稍微有些繁琐,但其可以灵活处理数据结构的长度变化,具有更高的可扩展性和更好的操作效率,可以更好的适应各种实际需求。

在实验中,还需要注意节点指针的正确使用、各个函数之间的调用关系和输入输出数据格式的合理选择等问题,以保证程序能够正常运行。

同时,还需要保持认真细致的态度,严格按照实验需求和要求来完成每个步骤,以达到更好的实验效果和运行效率。

大学生C语言程序设计(第四版 谭洪强)实验7 答案

大学生C语言程序设计(第四版 谭洪强)实验7 答案

实验七 参考答案(参考答案)(1) (sy7-1.c )请编写函数fun ,它的功能是:计算并输出n (包括n )以内能被5 或9 整除的所有自然数的倒数之和。

例如,若主函数从键盘给n 输入20后,则输出为s=0.583333。

注意:n 的值要求不大于100。

算法分析:使用for 循环i ,遍历n 包含n 以内的所有整数,逐一判断每个i ,是否满足条件(能被5 或9 整除),如果满足,则把它的倒数累加到累加器里。

注意:i 的倒数要表示成:1.0/i;参考子函数如下:double fun(int n){double sum=0;int i;for(i=5;i<=n;i++)if(i%5==0||i%9==0)sum=sum+1.0/i;return sum;}(2) (sy7-2.c ) 请编写函数fun ,其功能是:根据以下公式计算s ,并计算结果作为函数值返回,n 通过形参传入。

n s ⋯++++⋯++++++=321132112111例如:若n 的值为11时,函数的值为1.83333算法分析:等式右边从第二项(i=2)开始,其分母等于前一项的分母加上i ;一共有n 项;求出每项的分母,然后把每项进行累加。

参考子函数如下:float fun(int n){float sum=1; //sum 中已经累加了第一项的值int i,m=1; //m 表示每项的分母;for(i=2;i<=n;i++){ m=m+i;sum=sum+1.0/m;}return sum;}(3) (sy7-3.c)请编写函数fun,其功能是:将两个两位数的正整数a、b 合并形成一个整数放在c 中。

合并的方式是:将 a 数的十位和个位依次放在c 数的十位和千位上,b 数的十位和个位数依次放在c 数的个位和百位上。

例如,当a=45,b=12,调用该函数后,c=5241。

算法分析:对一个两位数n,它的各位可以通过n%10求的,它的十位数可以通过n/10求的;所以分别用上述方法求的a和b的个位和十位,同时按照要求累加到c里。

二级C语言程序设计-7_真题-无答案

二级C语言程序设计-7_真题-无答案

二级C语言程序设计-7(总分100,考试时间90分钟)一、选择题1. 构成C程序的三种基本结构是A.顺序结构、转移结构、递归结构 B.顺序结构、嵌套结构、递归结构 C.顺序结构、选择结构、循环结构 D.选择结构、循环结构、嵌套结构2. C语言编译程序的功能是A.执行一个C语言编写的源程序 B.把C源程序翻译成ASCII 码 C.把C源程序翻译成机器代码 D.把C源程序与系统提供的库函数组合成一个二进制执行文件3. 下列形式中不合法的常量是A.2.E8 B.-.28 C.-028 D.2e-84. 以下不是C语言字符型或字符串常量的是A."It's" B."0" C.'a=0' D.'\010'5. C语言程序中,若函数无返回值,则应该对函数说明的类型是A.intB.doubleC.charD.void6. 若变量已正确定义并赋值,则错误的赋值语句是A.a+=a+1;B.a=sizeof(double);C.a=d‖c;D.a+1=a;7. 若有定义:int a=1,b=2,c=3;,则执行表达式(a=b+c)‖(++b)后a,b,c的值依次为A.1,2,3 B.5,3,2 C.5,2,3 D.5,3,38. 有以下程序#include <stdio.h>main(){ int k=10;printf("%4d, %o, %x\n", k, k, k);}程序的运行结果是(□代表一个空格)A.10,12,a B.□□10,012,a C.010,12,a D.□□10,12,a9. 设有:char s[5], c;,则调用函数scanf能正确给s和c读入数据的是A.scanf("%s%c", s,c); B.scanf("%d%c", &s, &c); C.scanf("%d%c", s, &c); D.scanf("%s%c", s, &c);10. 设x,y,z均为实型变量,代数式在C语言中的正确写法是A.x/y*zB.x%y%zC.x/y/zD.x*z/y11. 有以下程序#include<stdio.h>main(){ int i, j, k, a=5, b=6;i=(a==b)?++a: --b;j=a++; k=b; printf("%d, %d, %d\n", i, j, k);}程序的运行结果是A.7,6,5 B.5,5,5 C.7,5,5 D.5,6,512. 设变量x为long int型并已正确赋值,以下表达式中能将x的百位上的数字提取出的是A.x/10%100B.x%10/100C.x%100/10D.x/100%1013. 有以下程序#include<stdio.h>main(){ int i, j, x=0;for(i=0; i<2; i++){ x++;for(j=0; j<=3; j++){if(j%2==0) continue; x++; }x++;}printf("x=%d\n", x);}程序的运行结果是A.x=4 B.x=6 C.x=8 D.x=1214. 有以下程序#include<stdio.h>main(){ int sum=0, x=5;do{sum+=x; }while(!--x);printf("%d\n", sum);程序的运行结果是A.0 B.5 C.14 D.1515. 有以下程序#include<stdio.h>main(){ char ch='Z';ch=(ch-'A'+1)%26+'A'; putchar(ch);程序的运行结果是A.Z B.Y C.B D.A16. 以下函数的功能是:计算a的n次方作为函数值返回double fun(double a, int n){ int i; double s=1.0;for(i=1; i<=n; i++) s=______;return 8;}为实现上述功能,函数中下划线处应填入的是A.s*i B.s*a C.s+i*i D.s+a*a17. 在C语言程序中,下列说法正确的是A.函数的定义可以嵌套,但函数的调用不可以嵌套 B.函数的定义不可以嵌套,但函数的调用可以嵌套 C.函数的定义和调用均不可以嵌套 D.函数的定义和调用均可以嵌套18. 若主函数中有定义语句:int a[10],b[10],c;,在主函数前定义的fun函数首部为:void fun(int x[]),则以下选项中错误的调用语句是A.fun(b); B.fun(&c); C.fun(&a[3]); D.fun(b[1]);19. 有以下程序#include<stdio.h>main(){int k, n=0; char c, str[]="teach";for(k=0; str[k]; k++){ c=str[k];switch(k){case 1: case 3: case 5: putchar(c); printf("%d", ++n); break;default: putchar('N');}}}程序的运行结果是A.Ne1NN B.e1a2e3 C.Ne1Nc2N D.Na1NNNN20. 以下叙述中错误的是A.同一个数组中所有元素的类型相同 B.不可以跳过前面的数组元素,给后面的元素赋初值 C.定义语句:int a[10]={0};,给a数组中所有元素赋初值0 D.若有定义语句:int a[4]={1, 2, 3, 4, 5};,编译时将忽略多余的初值21. 执行以下程序段后,s的值为int a[]={1, 2, 3, 4, 5, 6, 7, 8, 9}, s=0, k;for(k=0; k<8; k+=2) s+=*(a+k);A.13 B.16 C.17 D.4522. 有以下程序#include<stdio.h>#define N 4void fun(int a[][N], int b[]){ int i;for(i=0; i<N; i++) b[i]=a[i][N-1-i];}main(){ int x[N][N]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}, y[N], i;fan(x, y);for(i=0; i<N; i++) printf(:%d,", y[i]);printf("\n");}程序的运行结果是A.1,2,3,4, B.3,6,9,12, C.4,7,10,13, D.1,5,9,13,23. 有以下程序#include <stdio.h>#include<string.h>main(){char str[]={"Hello, Beijing"};printf("%d, %d\n", strlen(str), sizeof(str));}程序的运行结果是A.13,13 B.13,14 C.13,15D.14,1524. 有以下程序#include<stdio.h>void fun(char(*p)[6]){ int i;for(i=0; i<4; i++) prinff("%c", p[i][i]);printf("\n");}main(){ char s[6][6]={"ABCDE", "abcde", "12345", "FGHIJ", "fghij", "54321"};fun(s);}程序的运行结果是A.A a 1 F B.A b 3 I C.A B C D D.f g h i j25. 有以下程序#include<stdio.h>int fun(int n){ if(n) return fun(n-1)+n;else return 0;}main(){printf("%d\n", fun(3)); }程序的运行结果是A.4 B.5 C.6 D.726. 有以下程序#include<stdio.h>#define M 5#define f(x, y) x*y+Mmain(){ int k;k=f(2, 3)*f(2, 3);printf("%d\n", k);}程序的运行结果是A.22 B.41 C.100 D.12127. 有以下定义struet data{ int i; char c; double d; } x;以下叙述中错误的是A.x的内存地址与x.i的内存地址相同 B.struct data是一个类型名 C.初始化时,可以对x的所有成员同时赋初值 D.成员i、c和d占用的是同一个存储空间28. 有以下程序#include <stdio.h>#include<string.h>typedef struet{ char name[9]; char sex; float score[2]; }STU;void f(STU *a){ strcpy(a->name, "Zhao");a->sex='m'; a->score[1]=90.0;main(){ STU c={"Qian", 'f', 95.0, 92.0}, *d=&c;f(d); printf("%s, %c, %2.0f, %2.0f\n", d->name, c.sex, c.seore[0], c.score[1]);}程序的运行结果是A.Qian,f,95,92 B.Zhao,f,95,90 C.Zhao,m,95,90 D.Zhao,f,95,9229. 若有以下定义struet tt{char name[10]; char sex; } aa={"aaaa", 'F'}, *p=&aa;则错误的语句是 A.scanf("%c", aa.sex); B.aa.sex=getchar(); C.printf("%c\n", (*p).sex); D.printf("%c\n", p->sex);30. 若有说明:typedef struet {int a; char c; }W;则以下叙述正确的是A.编译后系统为W分配5个字节 B.编译后系统为W分配6个字节 C.编译后系统为W分配8个字节 D.编译后系统不为W分配存储空间二、程序填空题1. 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。

电大C语言程序设计 第7章 结构和联合

电大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语言程序设计(向华主编)_第7章_函数

C语言程序设计(向华主编)_第7章_函数

fun1_2() {…… }
fun2() { …… fun2_1(); …… fun2_2(); …… }
fun2_1() {…… }
fun2_2() {…… }
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
函数
7.1
二、C 二、C函数的分类
1.从函数定义的角度分类 从函数定义的角度分类
函数概述
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
函数
习题
P187 3.(1)(2)(3)
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
函数
7.3
一、函数参数
函数参数及返回值
参数的作用: 参数的作用: 函数的参数用于建立函数之间的数据联系。当一个函数调用另一个函数时, 实际参数的值会传递给形式参数,以实现主调函数与被调函数之间的数据通 信。同时,函数参数的运用还可提高一个函数的灵活性和通用性。 [例7.3] 编写一个函数,打印一条由星号构成的横线。 例 编写一个函数,打印一条由星号构成的横线。 main() { pstar() ; /* 第一次调用pstar函数 */ printf(" 欢迎使用本程序!\n") ; 运行结果: 运行结果: pstar() ; /* 第二次调用pstar函数 */ ******************** } 欢迎使用本程序! pstar() /* 定义pstar函数 */ ******************** { printf("********************\n") ; }
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章

c语言程序设计课后习题答案第7章

c语言程序设计课后习题答案第7章

#include<stdio.h>main(){int a[10],n,sum=0,i;float ave;printf("enter n:\n");scanf("%d",&n);printf("enter %d ge zheng shu:\n",n);for(i=0;i<n;i++){scanf("%d",&a[i]);sum=sum+a[i];}ave=1.0*sum/n;printf("ave=%.2f\n",ave);}/*练习7-2*/#include<stdio.h>main(){int a[10],n,i;printf("enter n:\n");scanf("%d",&n);printf("enter %d ge zheng shu:\n",n);for(i=0;i<n;i++){printf("第%d个:\n",i+1);scanf("%d",&a[i]);printf("倒序:\n");while(a[i]!=0){printf("%d",a[i]%10);a[i]=a[i]/10;}printf("\n");}}#include<stdio.h>main(){int a[5],x,i,k=0;printf("enter 5 ge zheng shu:\n");for(i=0;i<5;i++)scanf("%d",&a[i]);printf("enter x:\n");scanf("%d",&x);for(i=0;i<5;i++)if(a[i]==x){printf("xia biao wei : %d\n",i);k=1;}if(k==0)printf("Not Found\n");}/*练习7-4*/#include<stdio.h>main(){int a[10],n,i,k=0,x,max;printf("enter n:\n");scanf("%d",&n);printf("enter %d ge zheng shu:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);max=a[0];for(i=1;i<=n-1;i++)if(max<a[i]){max=a[i];k=i;}printf("max=%d xia biao=%d",max,k);x=a[n-1];a[n-1]=a[k];a[k]=x;printf("\n");for(i=0;i<n;i++)printf(" %d ",a[i]);printf("\n");}/*练习7-11*/#include<stdio.h>main(){char str[80];int i,j,count=0;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;str[i]='\0';printf("再输入一个字符:\n");str[80]=getchar();for(j=0;j<=i-1;j++)if(str[80]==str[j])count++;printf("%c字符在字符串中出现的次数为:%d\n",str[80],count);for(j=0;j<=i-1;j++)putchar(str[j]);printf("\n");}/*习题七1*/#include<stdio.h>main(){int x,y,n,a[10],i,min,max;printf("输入n:\n");scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);min=0;for(i=1;i<n;i++)if(a[min]>a[i])min=i;max=0;for(i=1;i<n;i++)if(a[max]<a[i])max=i;x=a[min];a[min]=a[0];a[0]=x;y=a[max];a[max]=a[n-1];a[n-1]=y;for(i=0;i<n;i++)printf("%4d",a[i]);printf("\n");}/*习题七2*/#include<stdio.h>main(){int x,n,a[10],i,j,max;printf("输入n:\n");scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=1;i<n;i++){ max=i-1;for(j=i;j<n;j++)if(a[max]<a[j])max=j;x=a[max];a[max]=a[i-1];a[i-1]=x;}for(i=0;i<n;i++)printf("%4d",a[i]);printf("\n");}/*习题七4*/#include<stdio.h>main(){int m,n,a[6][6],i,j,b[6]={0};printf("输入m:\n");scanf("%d",&m);printf("输入n:\n");scanf("%d",&n);printf("输入%d和%d的矩阵:\n",m,n);for(i=0;i<m;i++){for(j=0;j<n;j++){scanf("%d",&a[i][j]);b[i]=b[i]+a[i][j];}}printf("shu chu:\n");for(i=0;i<m;i++){for(j=0;j<n;j++)printf(" %d",a[i][j]);printf("\n");}printf("shu chu hang he :\n");for(i=0;i<m;i++)printf("%4d",b[i]);printf("\n");}/*习题7.6*/#include<stdio.h>main(){char str[80];int i,j;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;printf("倒序输出:\n");for(j=i-1;j>=0;j--)putchar(str[j]);printf("\n");}/*新7.6*/#include<stdio.h>main(){int a[10],i,n;printf("输入整数n:\n");scanf("%d",&n);printf("输入%d个整数:\n",n);for(i=0;i<n;i++){scanf("%d",&a[i]);}printf("倒序输出:\n");for(i=0;i<n;i++){printf("%5d",a[n-1-i]);}printf("\n");}/*习题7.7*/#include<stdio.h>main(){char str[80];int i,j,count=0;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;printf("输出其中的大写辅音字母:\n");for(j=0;j<=i-1;j++)if(str[j]>='B'&&str[j]<='Z'&&str[j]!='E'&&str[j]!='I'&&str[j]!='O'&&str[j]!='U'){putchar(str[j]);count++;}printf("\n");printf("大写辅音字母数量为:%d\n",count);}/*习题7.8*/#include<stdio.h>main(){char str[80];int i,j,count=0;printf("输入一个以回车符结束的字符串:\n");i=0;while((str[i]=getchar())!='\n')i++;printf("输出相应交换后的字符串:\n");for(j=0;j<=i-1;j++)if(str[j]>='A'&&str[j]<='Z')str[j]=155-str[j];for(j=0;j<=i-1;j++)putchar(str[j]);printf("\n");}上文已完。

C语言程序设计_课件_第七章(适于清华谭浩强版)

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语言程序设计》第7次上机作业C语言程序设计是计算机科学和技术专业中一门重要的课程,该课程主要教授C语言的基础知识和编程技巧。

通过学习这门课程,学生能够掌握C语言的语法结构和编程思想,提高自己的编码能力和解决实际问题的能力。

本次上机作业要求学生完成以下几个任务:1.打印九九乘法表:要求按格式打印出九九乘法表,并能够根据用户输入的数字,打印出对应大小的乘法表。

这一任务主要考察学生对基本的循环和控制语句的运用能力。

2.求阶乘:要求使用递归函数的方法,编写一个程序来计算给定数字的阶乘。

这一任务主要考察学生对递归函数的理解和运用能力。

3.统计字母个数:要求编写一个程序,可以统计字符串中字母的个数,并生成一个字母频率统计表。

这一任务主要考察学生对于字符串处理和数组运用的能力。

4.生成随机数:要求编写一个程序,能够生成指定范围内的指定个数的随机数,并将其存入一个数组中。

这一任务主要考察学生对于随机数生成和数组运用的掌握能力。

5.循环移位:要求编写一个程序,实现对给定的字符串进行循环右移的功能。

这一任务主要考察学生对于字符串处理的能力。

通过完成上述任务,可以帮助学生巩固和提高C语言的编程能力,培养学生的分析问题和解决问题的能力。

在解题过程中,学生需要注意编码的规范性和程序的健壮性。

合理使用注释,编写清晰易懂的代码。

在测试过程中,注意边界条件和异常情况的处理,确保程序的正确性和稳定性。

总之,完成本次上机作业将有助于学生提高C语言的编程能力,培养学生的解决实际问题的能力,为将来的工作和学习打下良好的基础。

希望同学们能够认真完成本次作业,加深对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语言程序设计基础 第7章

C语言程序设计基础 第7章

模块化程序设计的基本要点是贯彻“自顶向下,逐步细 化”的思想方法,即将一个复杂功能的编程问题,划分成若 干个功能相对简单的子问题。这种划分可以逐层进行,直到 便于编程为止。在C语言中,一个模块的功能由一个函数来 实现。顶层函数是主函数main( )。功能模块与C语言函数的 关系如图7.1所示。
图7.1 模块与函数
第7章 函数——模块化程序设计方法的实现
7.1 模块化程序设计方法与函数 7.2 函数的定义 7.3 函数的调用 7.4 函数调用的条件与函数声明 7.5 函数的嵌套调用和递归调用 7.6 变量的作用域与函数间的数据传递 7.7 用函数实现模块化程序设计 实训任务十三 熟悉函数的功能及其使用方法 实训任务十四 学习模块化程序设计的方法
② 函数功能实现部分,是一个程序段,要依据实现某 种功能的算法进行设计。
③ 函数体最后使用一个“return(返回值);”语句,括 号中的返回值是一个需传带给主调函数的数据对象。如果没 有返回值,可以不要这个语句。VC++ 6.0系统中提倡在 main( )函数体后使用一个“return 0;”语句,表示正常返 回系统,否则会出现警告。如果函数体仅是一对花括号,没 有任何语句,就是空函数。空函数一般是无参函数。
7.2 函 数 的 定 义
怎样定义函数?定义函数要考虑哪些问题?
定义函数要解决两个方面的问题:一是函数间的接口问 题,二是功能实现问题。接口问题包括如何被上层函数调用 ,调用时需传递什么数据,调用返回时需传带什么数据。功 能实现问题就是如何实现模块的过程算法。
函数定义的一般形式为
基类型符 函数名(类型符形式参数 1,类型符形式参数 2,…) {
函数体内数据对象定义或声明部分; 函数功能实现部分; return(返 回值); }

C语言程序设计(第3版)第7章补充习题及答案

C语言程序设计(第3版)第7章补充习题及答案

第7章补充习题及答案习题7.1 选择题(1) 表达式iA<iB||~iC&iD的运算顺序是A. ~, &, <, ||B. ~, ||, &, <C. ~, &, ||, <D. ~, <, &, ||(2) 以下叙述不正确的是A. 表达式iA&=iB等价于iA=iA&iBB. 表达式iA|=iB等价于iA=iA|iBC. 表达式iA!=iB 等价于iA=iA!iBD. 表达式iA^=iB等价于iA=iA^iB(3) 设有以下语句:char iData1=3, iData2=4, iData3 ;iData3 = iData1^iData2<<2;则z的二进制值是。

A. 00010100B. 00011011C. 00011100D. 000110007.2 填空题(1) 在C语言中,&运算符作为单目运算符时表示的是运算;作为双目运算符时表示的是。

(2) 测试char型变量第6位是否为1的表达式是(设最右位是第1位)。

(3) 设二进制数iData1的值是11001101,若想通过iData1&iData2运算使iData1中的低4位不变,高4位清零,则iData2的二进制数是。

(4) 设iData1=10100011,若要通过iData1^iData2使iData1的高4位取反,低4位不变,则iData2的二进制数是。

答案7.1 选择题(1) 表达式iA<iB||~iC&iD的运算顺序是 AA. ~, &, <, ||B. ~, ||, &, <C. ~, &, ||, <D. ~, <, &, ||(2) 以下叙述不正确的是 CA. 表达式iA&=iB等价于iA=iA&iBB. 表达式iA|=iB等价于iA=iA|iBC. 表达式iA!=iB 等价于iA=iA!iBD. 表达式iA^=iB等价于iA=iA^iB(3) 设有以下语句:char iData1=3, iData2=4, iData3 ;iData3 = iData1^iData2<<2;则z的二进制值是 C 。

C语言程序设计知识点—第7章 函数

C语言程序设计知识点—第7章 函数
C 语言程序设计知识点
第 7 章:函数
主讲教师:杨剑
1. 本章目标
熟练掌握函数的定义与调用方法 理解函数的定义、声明和调用的区别 理解函数原型、实参、形参和函数的返回值 了解函数的嵌套调用和递归调用的方法 掌握数组做为函数参数的使用方法 理解变量的作用域和存储方法
2. 函数机制的优点
~6~
C 语言程序设计知识点
主讲教师:杨剑
[练习]若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,
以下选项中错误的程序是( )
A.main()
{……x=fun(2,10); ……}
float fun(int a,int b){……}
B.float fun(int a,int b){……}
int data; scanf(“%d”,&data); printf(“%d”,add(data)); return 0;
~5~
C 语言程序设计知识点
主讲教师:杨剑
} int add(____②_____) {
int i,sum=0; for(i=1;i<=n;i++)
sum=sum+i; _______③__________ } 答案: ①int add(int); ②int n ③retrun sum;
{
printf(“%d\n”,F(3+5));
}
[练习]程序运行后的输出结果是( )
A.192 B.29
C.25
D.编译出错
答案:D
在 C 语言中,函数返回值的类型最终取决于( )
A.函数定义时在函数首部所说明函数类型
B.return 语句中表达式值的类型 C.调用函数时主调函数所传递的实参类型

中国矿业大学(北京)《C语言程序设计》课件第7章指针与数组

中国矿业大学(北京)《C语言程序设计》课件第7章指针与数组

a[1] a[2] a[3]
mmaainn(()) {{iinntt aa[[1100] ],,ii;;
ppuuttss((““pplleeaassee iinnppuutt %%dd ssccoorree::””,,N1)0;);
ffoorr ((ii==00;;i<i1<01;0i;++i+) +) ssccaannff(“(%"%d”d,"a?,+i&a[)i;]);
main()
{
int i = 0;
printf("%c%s\n",*a, b + 1);
while (putchar (*(a + i)))
{ i++;
Program
}
printf("i = %d\n",i);
PROGRAM
while ( -- i)
{ putchar (*(b + i));
i=7
} printf("\n%s\n", &b[3]);
1,2,3,3,2,3,4,4
20
读程序-3
#include <stdio.h>
char b[] = "program";
char *a = “PROGRAM”;
/*定义一个指针变量指向字符串,与上边定义的区别是:前者是先申请内存空间, 后存入字符串,而后者是先将字符串存入在内存的某个地方,然后再用a指向 该字符串所在内存的开始位置。另外。b是常量,a是变量*/
–指针变量指向哪儿?
–所指向的变量里存储的数据是多少?

高树芳C语言程序设计--第七章

高树芳C语言程序设计--第七章
[解决方案] 一行需要两个函数。一个函数显 示星号左面的空格,一个函数显示星号。
程序代码
11
7.2函数的定义、声明和调用
相关知识:
1.有参、无返回值函数的定义 2.有参、无返回值函数的调用 3.有参、无返回值函数的声明
12
7.2函数的定义、声明和调用
案例7-4 求组合数
[案例任务]
键盘输入m和n两个整数, 计算并显示下面的组合数, C 要求运用函数编程。
n m m! n! (m-n)!
[解决方案] 定义一个求阶乘的函数。它有一个 形参,而且有返回值。
程序代码
13
7.2函数的定义、声明和调用
[课堂训练7-2]
修改案例7-3的主函数,使之显示一个与案例7-3 形状相似的倒三角“*”号图案(要求显示4行)。
14
7.2函数的定义、声明和调用
相关知识: 1.有参、有返回值函数的定义 2.有参、有返回值函数的调用 3.无参、有返回值函数的调用
15
7.2函数的定义、声明和调用
案例7-5
显示100~200间的素数
[案例任务]
参照案例5-9判断素数程序,将其改造成一个函数如 prime,其功能是对给定的整数x,判断它是否是素数,如 是则返回1,不是则返回0。然后利用下面给出的主函数 调用函数prime ,显示100至200之间的全部素数。
[解决方案] 设计一个函数用于判断一个整数是
案例7-2 用函数实现简易菜单 [案例任务]
对案例5-3进行简化和改造。要求循环显示菜单并等 待用户选择,然后显示用户选择了第几项功能,如选 择0则结束程序。要求用函数实现菜单的显示内容。
[解决方案]定义无形参、无返回值的函数显示菜单。
程序代码

《C语言程序设计》课件 《C语言程序设计》课件 第7章 函数的使用

《C语言程序设计》课件 《C语言程序设计》课件 第7章 函数的使用
各种自定义函数
<<C语言程序设计>>
电脑模块化组装
模块化程序
Page 4
7.1 为什么使用函数
【例7-1】打印输出如下所示超市购物小票的票头
某某超市欢送您 *****************************
*
分析
1、第一行为欢送词,自定义一个函数print_welcome来实 现欢送词的输出功能 2、第二行为一定数量的“*〞号,自定义一个函数 print_star来实现 “*〞号的输出功能
第7章 函数的使用
<<C语言程序设计>> 课程
<<C语言程序设计>>
Page 1
主要内容
1 为什么使用函数 2 函数的根本使用 3 函数递归调用 4 用带参数的宏定义代替公式型函数 5 函数和变量的作用域及存储类型
<<C语言程序设计>>
Page 2
问题引入
数学函数sqrt()、字符串处理函数strlen() 等。这些具有通 用功能的函数称之为标准库函数,是由C语言开发环境提供, 标准库函数给编程带来了极大的方便。
形式参数 实际参数
<<C语言程序设计>>
Page 17
7.3 函数的调用
函数调用的形式
函数名(参数表) – 对实参的要求
• 实参个数和形参个数相等。 • 实参的类型要和形参的类型一
致。 • 被调用函数无形参,实参表是
空的,但括号不能省略。
main( ) { int a=1,b=3,c;
函数调用
c=max(a,b);
{ int n=1, i; for(i=1;i<=a;i++) n=n*i; return n;
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

char tel[12c]h; ar、float、double等)一样具有同样的地
};
位和作用,都可以用分来号定不义可变少量的类型。
定义一个结构体类型的一般形式为:
struct 结构体名 { 成员表列 };
说明: (1)struct为结构体类型说明的关键字,是结构体类型定义的标识符。 (2)结构体名由用户定义,它与struct一起形成特定的结构体类型, 在以后的结构体变量定义中可以被使用。 (3)成员列表为本结构体类型所包含的若干个成员的列表,必需用{ } 括起来,并以分号结束。每个成员的形式为
222
B
s
str{u22c2t,s'Btu',d'se'}n,t aatd[10]={{“zhan3g08ming”,18,’Pm’},{“Lipiabng”,20,’f’}};
{308,'P','b'}
s}t;ruct student aatd[]={{“zhang ming”,18,’m’},{“Lipiang”,20,’f’}};
}stu; }stu;
2.结构体变量初始化
定义结构体变量后,就可给变量中的各个成员初始化。其初始化形式 如: struct stu {int num; char name[8]; char sex; float score; } p={1001,"Lili",'F',99.5};
3.结构体成员的引用
用无名结构体直接定义 变量只能一次
1.结构体变量的定义
– 说明
结构体类型与结构体变量概念不同
– 类型:不分配内存;
变量:分配内存
例{str例iuii{nnnctsttt结结timcdynr–dhe构构autoaaa类ycntrrn体体;tet型;unhs可成ma;:t不um;嵌 员d能ee[套名赋n2t0值与];、程存序取中、变运算量;名可变相量:同可以,不会混淆
共用体:其中所有成员均放在以同一地址开始的存储空间 中,使用 “共享”和“覆盖”的方式共享存储单元。共用体所 占的空间的大小取决于占存储空间最大的那个成员。
共用体类型的定义
union [共用体类型名] { 类型名 成员名; …… };
union u { char ch;
int i; float f; };
形式二 定义结构体类型的同时定义结构体变量
成员名;
类型标识符 成员名;
例 struct student
……………. }变量名表列;
{ int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
图 7-1
7.1.1 结构体类型的定义
结构体是一种构造数据类型
用途:把不同类型的数据组合成一个整体-------自定义数 据类型
– 结构体类型定义:
struct是关键字, 不能省略
struct [结构体名]
{ 类型标识符 成员名; 类型标识符 成员名;
……………. };
合法标识符 可省:无名结构体
第7章
结构体、共用体与枚举
第7章 结构体、共用体与枚举
本章学习C语言的三种数据类型,分别是构造类型中的结 构体和共用体类型,以及基本类型中枚举类型。
本章先给出结构体类型的定义,着重讲述结构体变量的定 义、引用、初始化,结构体数组及结构体的应用;然后讲述共 用体和枚举类型;同时介绍动态分配内存的函数和typedef语 句。
int month;
int day; }; struct stu
date
name
sex score
year month day
{
char name[20];
struct birthday date;
char sex;
float score;
};
7.1.2 结构体变量
有了结构体类型,它仅相当于一个模型,但其中并无具体 数据,系统对它不分配实际内存单元,为了能在程序中使用结 构休类型的数据,就须在此类型基础上定义变量。结构体类型 变量因其所基于的类型是自定义的,故有三种形式的定义方法, 分别是:
形式一 先定义结构体类型,再定义结构体变量
1.结构体变量的定义
struct 结构体名
{
类型标识符 成员名;
例 struct student { int num;
例类型#d标e识fin符e S成T员U名D;ENT struct student }; …S…T…U…D…EN. T struct 结{ 构体i名nt n变u量m名; 表列;
int i;
printf("number color type\n");
for(i=0;i<5;i++)
printf("%-9d%-c\n",car[i].num,car[i].color,car[i].type);}
7.2 共用体
7.2.1 共用体类型的定义 7.2.2 共用体变量
7.2.1 共用体类型的定义
方式。如结构体类型既可以定义结构体变量,也可以定义结构 体数组,用以存储批量的数据,每个结构体数组元素又包含多 个成员。
1.结构体数组的定义
形式二一三:: stsrtuructctstsutuddenent t
{ int num; char name[20]; char sex; int age;
() ()
}stu}1s,tsutu12,s;tu2;
7.1.3 结构体数组
结构体数组的定义 结构体数组的初始化 结构体数组的应用
1.结构体数组的定义
结构体类型既可以定义结构体变量,也可以定义结构体数组,用
以存储批量的数据,每个结构体数组元素又包含多个成员。结
构体数组中的各元素在内存中是连续存放的。 定义结构体数组的方法和定义结构体变量的方法相同,也有三种
字符型 char 实型 float 双精度型 Double 空值型 void
共用体(联合)型 union
指针类型
枚举型
enum
用户定义类型 构造数据类型(导出类 typedef 型):由基本数据类型 按一定规则组合而成的 。广义上包括表中的构 造类型和派生类型。
7.1 结构体
如我们可以规定学号(num)为字符型数组、姓名(name)为
};
m{ 2asti.nat(结i)c st构ruc体t s c数ar[]组={ 的初始n化umber
color
type
{{s12t01r10u,,''cGYt ''结,,''mc'构}'}, , 体名
101
G
c
数组名[元素210个数]={{…Y },{…},…,m{…}};
105
R
l
{105,'R','l'},
}s; tu[2]; struct student stu[2];
num 29B name
sex age num name sex age
stu[0] stu[1]
2.结构体数组的初始化
struct s
{
cih1nat.rn结cuomlo构;r; 体数组的定义
cshtarrutcytp结e;构体类型名 结构体数组名[元素个数];
定这样一种包含若干个类型不同(当然也可以相同)的数据项的
数据结构,它称为结构体(structure)。组成结构体的数据项成
为结构体成员。在其他高级语言中称其为“记录”。
num
name
sex birthday
score
tel
04010538
Liu li hua
F
83/05/28
78
90.5 85583173
第7章 结构体、共用体与枚举
7.1 结构体 7.2 共用体 7.3 枚举类型 7.4 类型的重新命名
7.1 结构体
7.1.1 结构体类型的定义 7.1.2 结构体类型变量 7.1.3 结构体数组
类型不同但相 基本互类型关联
整型 int
构造类型
结构体 struct
派生类型 数组类型
同一类型 数据的顺 序排列
类型标识符 成员名;
7.1.1 结构体类型的定义
【(4例)7整.1个】结构结体构类体型类的型定的义用嵌分套号。结束,花括号后边的分号不能缺省。
s(t5r)uc结t 构b体ir中th的d成ay员本身还可以是结构体,这称为结构体的嵌套。而且
{内嵌结构体成员的名字可以和外层成员名字相同。 int year;
对结构体的变量不能整体引用,必须逐级地访问到成员名。其引用形 式为:
结构体变量名.成员名
其中,圆点符号称为成员运算符。
3.结构体成员的引用
– 引用方式: 结构体变量名.成员名
例 例
s{}s{ttsrrtu例uuc{c1可结tt,iccifcisccifcsn{}nnnllthhhhhhicst以构oorsbtstntuttaaahaaautatarinta2naurrrurrracut将体tgiiiug;utdrdsatsacnnnnsshnenmemeeededctnctttu一嵌d;a;saxn例xnododa;mmdy;tammd;t;turrmrr个套aeya[ee[;odeeya3;3例t;e;n[e[re;结 时00[22;ts{}n2]h]0t0st;;0r构逐;t]]u]u;;s{};c1t体级str,ticcifcusunnlhhh变引tco1sttsu成 优 结aaattat,niaccifc2uurrrs量用tnnl员 先 合ghhhsu1;tdosasttstu=nseaaamueedtapc赋(级 性na2t{;urrra2nxn分rtuod;g1u;i=umdsa;tns::1rr0值nemms从e量ede[ct1.1et;fa3xnbu;od(,;[左m)给““01;ti2rr运Wr%;e[]0et向3;;另h算ad[]n0n2;d,右a(%]符m0一aL;sy]ie,;n.%个m”) ,cm‘os结,Ms%tontuun’dt1s构s,1tht1,.thu%s.u=9ac1体1g,fo1i….8.,fesnbr%27(c+e变uis….d;or++5stmtaur\=h,;en.y量“1=.ds=”D=t1a,8u=sa0y25tLs;u..t5siy1uac;e)2(no;a)”rr)e};;
相关文档
最新文档