篇一:C语言Structure的功能
第十章 C語言Structure
的功能
假設我們有一組學生的資料,包含學生的學號、姓名和體重,我們要如何表示這種資料呢?對很多電腦語言而言,我們必須要有三個陣列。這三個陣列分別表示學生的學號,姓名和體重。舉例而言,假如我們有五位學生,他們的資料如表10-1:
表10-1
我們就需要三個陣列,如表10-2所示:
表10-2
麻煩的是:這三個陣列是互有關聯的。如果我們要將學生的資料按照學號的大小排列,學號陣列當然會改變,但是我們必須跟著同時改變姓名、陣列和體重陣列。改過以後的三個陣列如表10-3。
表10-3
所以,我們只好承認這是一件很複雜的事情。可是,在C語言中,我們有
一個簡單的辦法,我們可以利用一種叫做structure的功能,一下子就解決了這個問題。
Structure使我們可以宣告學生的資料有三個欄位:學號、姓名、體重。學號
和體重都用整數來代表,姓名用文字來表示,所以我們可以作以下的宣告。
struct student { int idnum;
char name[20]; float weight; }
從以上的宣告看來,學生的姓名最長不能超過20個英文字。
一旦對student下定義,我們就宣告一個陣列有student的結構,這個陣列當
然也要有一個名字,我們不妨將它叫做sdata,sdata內容有如表10-1所示。假設我們要找第i個sdata的資料,我們只要找sdata[i]即可。如果我們要找第i個學生的學號,我們就要指定sdata[i].idnum,他的姓名是sdata[i].name,而他的體重則是sdata[i].weight。有了sdata以後,我們可以根據其中任何一個欄位排列。假設我們用學號排列,就可以得到以下的sdata,如表10-4
表
10-4
如果用體重來排列,我們會得到如表10-5所示的資料。
表10-5
至於sdata如何會有資料的?當然是靠讀入的,我們通常應該宣告一個文字檔,用讀檔案的方法可以將資料讀到sdata去。
例題10-1 讀入學生資料檔,根據學號將學生資料排列,並將結果輸出至另一檔案
要使用structure來表示學生資料,我們必需在主程式的外面先註明,所以我們會在主程式的前面,有以下的指令:
struct studentdata {
int idnum;
char name[20]; float weight; }
主程式的流程圖如圖10-1。
圖10-1
至於排序的副程式,它的流程圖如圖10-2所示。
圖10-2
當然,我們還要有一個輸出結果至文字檔的副程式,這個副程式非常簡單,我們就不再討論它的流程圖了。
以下是這個程式。
程式 10-1
#include <stdio.h>
#define MAX_ARRAY_SIZE 256
#define STUDENT_DATA_FILE_NAME "student.txt" #define OUTPUT_FILE_NAME "student_output.txt"
struct student
{
int idnum;
char name[20]; float weight; }; int read_all_student_data(struct student A[MAX_ARRAY_SIZE], FILE *fp);
篇二:C_语言程序设计实验答案
C 语言程序设计
上机实验指导与习题(第二版)
参考答案
(仅供教师内部参考) 实验 1 C 语言程序初步
一、实验目的
(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。
(2)了解在该系统上如何编辑、编译、连接和运行一个C 程序。
(3)通过运行简单的C 程序,初步了解C 程序的特点。
(4)在教师的指导下,学会使用JudgeOnline 实验系统。
二、实验内容
1. 运行第一个C 程序
略
2. 在JudgeOnline 系统中提交实现了计算a+b 功能的程序
略
2
实验2 基本数据类型、运算和表达式
一、实验目的
(1)掌握C 语言数据类型,熟悉如何定义一个整型和实型的变量,以及对它们赋值的方法。
(2)掌握不同的类型数据之间赋值的规律。
(3)学会使用C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运
算符的使用。
(4)进一步熟悉C 程序的编辑、编译、连接和运行的过程。
二、实验内容
[题目1117:变量定义,按要求完成程序]
下面给出一个可以运行的程序,但是缺少部分语句,请按右边的提示补充完整缺少的语句。 #include "stdio.h"
main()
{
int a, b; /*定义整型变量a 和b*/
int i, j; /*定义实型变量i 和j*/
a=5;
b=6;
i=3.14; j=i*a*b;
printf("a=%d,b=%d,i=%f,j=%f\n", a, b, i, j);
}
[具体操作步骤]
(1)将代码补充完整;
(2)在TC 或VC++上运行通过;
(3)在JudgeOnline 实验系统上提交;
[题目6568:在显示屏上显示指定字符]
要求编写一个程序,在显示屏上显示如下内容(全为半角字符,且不包含空格): C:\ABC.TXT
[提示] 注意转义字符在程序中的使用。
参考程序:
#include "stdio.h"
main()
{ printf("C:\\ABC.TXT"); }
3
[题目1118:赋值表达式与赋值语句,写出程序运行结果]
阅读下面程序,写出运行结果:
#include "stdio.h"
main()
{ float a;
int b, c;
char d, e;
a=3.5;
b=a;
c=330;
d=c;
e='\141';
printf("%f,%d,%d,%c,%c", a,b,c,d,e);
}
运行结果为:
3.500000,3,330,J,a
[提示]赋值语句具有类型转换的功能,但可能会改变数据。
[题目1119:基本运算,写出程序运行结果]
阅读下面程序,写出运行结果:
#include "stdio.h"
main()
{ int a, b, c;
float d=15, e, f;
a=35%7;
b=15/10;
c=b++;
e=15/10;
f=d/10;
printf("%d,%d,%d,%f,%f,%f", a,b,c,d,e,f);
}
运行结果为:
0,2,1,15.000000,1.000000,1.500000
[提示]除法分整除与普通除法之分。
4
实验3 基本输入与输出
一、实验目的
(1)熟练掌握putchar、getchar、printf、scanf 函数的使用方法。
(2)掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。
二、实验内容
[题目1126:字符的输入与输出]
编程实现由键盘输入一个字符后,在屏幕上输出该字符。
[第一组自测数据]
[键盘输入]
a↙
[正确输出]
a
[第二组自测数据]
[键盘输入]
+↙
[正确输出]
+
参考程序:
#include "stdio.h"
main()
{ char ch;
ch = getchar();
putchar(ch);
}
[题目1127:计算加法]
编程实现由键盘输入一个加法式,输出正确的结果。(两个加数均为整数)
[第一组自测数据]
[键盘输入]
10+20↙
[正确输出]
30
[第二组自测数据]
[键盘输入]
-15+60↙
[正确输出]
45
参考程序:
#include "stdio.h"
main()
{ int a, b;
scanf("%d%*c%d", &a,&b);
printf("%d", a+b);
}
[题目1014:求圆面积]
由键盘输入圆半径r,请计算该圆的面积。(注:π 取3.14159,结果保留两位小数位;另外,程序只
要能对r 在0 到10000 范围的情况输出正确答案即可)
[第一组自测数据] [键盘输入]
2
65.2↙
[正确输出]
13355.02
[第二组自测数据]
[键盘输入]
11.2↙
[正确输出]
394.08
[提示]结果保留两位小数可采用printf 函数的格式控制字符来实现。
参考程序:
#include "stdio.h"
main()
{ float area,r;
scanf("%f",&r);
area=3.14159*r*r;
printf("%0.2f",area);
}
[题目1015:计算摄氏温度值]
从键盘输入一个华氏温度值,要求按格式输出其对应的摄氏温度值,精确到小数点后两位。 数学公式描述为:
( 32)
9
C = 5 F ?
[第一组自测数据]
[键盘输入]
100↙
[正确输出]
37.78
[第二组自测数据]
[键盘输入]
100↙
[正确输出]
37.78
[提示]注意公式中的除为普通除法。
参考程序:
#include<stdio.h>
main()
{ float f,c;
scanf("%f",&f);
c=5.0/9*(f-32);
printf("%.2f",c);
}
3
实验4 选择结构程序设计
一、实验目的
(1)了解C 语言表示逻辑的方法(以0 代表“假”,以非0 代表“真”)。
(2)学会正确使用逻辑运算符和逻辑表达式。
(3)熟练掌握if 语句和switch 语句。
(4)结合程序掌握一些简单的算法。
二、实验内容
[题目1120:判断点是否在圆上]
由键盘输入一个点的坐标, 要求编程判断这个点是否在单位圆上,点在圆上输出Y, 不在圆上输出
N。使用小数点后3 位精度进行判断。
[第一组自测数据]
[键盘输入]
0.707,0.707↙
[正确输出]
Y
[第二组自测数据]
[键盘输入]
0.5,0.5↙
[正确输出]
N
[提示](1)平面上的点与圆的关系分为在圆内、在圆上、在圆外三种,本题要求判断是否在圆上;(2)
判断两实数相等采用判断这两实数的差的绝对值小于规定误差精度(本题为0.001)的方法实现。
参考程序:
#include "stdio.h"
#include "math.h"
main()
{ float a,b;
scanf("%f,%f",&a,&b);
if(fabs(a*a+b*b-1)<1e-3)
printf("Y\n");
else printf("N\n");
}
[题目1017:求数的位数]
由键盘输入一个不多于9 位的正整数,要求输出它是几位数。
[第一组自测数据]
[键盘输入]
349213↙
《c》
由:免费论文网互联网用户整理提供,链接地址:
http://m.csmayi.cn/show/93815.html
转载请保留,谢谢!
- 上一篇:cad实习报告3000字