c语言程序设计(关于动态内存分配)问题。高手进
一些基本语法:
(1)用 argc 判断命令行参数个数:if (argc<2) {printf("Usage: %s file_name
",argv[0]); return -1;};
(2)用 !inFile 判断文件打开失败:if (!inFile) { printf("Can not open file %s
",argv[0]);return -1;};
(3)fscanf 返回值等于成功读入的参数个数。用 feof() 判断文件结束
while( fscanf(inFile,"%c",number[i]) ==1){
if (feof(inFile)) break; ....
}
while( fscanf(inFile,"%d",original+j ) ==1){
if (feof(inFile)) break; ....
}
(4)动态分配要用到 sizeof(类型) * 个数:
original=(int*)malloc(sizeof(int)*marker);
if (!original) {printf("no enough memory
");return -1;};
改正这些基本错误后,再查别的问题。
malloc分配内存失败时就会报错阿
(void *) malloc( size_t )
是C中分配堆内存的函数,C++中一般会用new 这个关键字
malloc 返回一个void* 的指针,当然可以强制转为其他类型
如果分配失败,返回一个空指针
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
void main()
{
int n,i,k,m,sum=0,*p,hign_score,low_score; //定义常量
float ave_score;
printf("please input the number of the students:");
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int)); //动态内存分配
if(p==NULL)
{
printf("Insufficient memory avaiable.");
exit(0);
}
printf("please input the scores of the students:
");
for(i=0;i<n;i++)
scanf("%d",p+i); //输入学生的分数
for(k=0;k<n;k++) //找最低的成绩
{
if(*p>*(p+k))
{
m=*p;
*p=*(p+k);
*(p+k)=m;
}
}
for(k=0;k<n;k++) //找最高的成绩,
{
if(*(p+n-1)<*(p+k)) //这个地方你出错了,有n个学生,它的地址应该是
{ //p+n-1,你用的是p+n,指向任何数,出错。
m=*(p+n-1);
*(p+n-1)=*(p+k); //同理,都是p+n-1
*(p+k)=m;
}
}
for(i=0;i<n;i++)
sum+=*(p+i);
ave_score=sum*1.0/n;
hign_score=*(p+n-1); //也应该是p+n-1
low_score=*p;
printf("The average score of the students is %f
",ave_score); //输出
printf("The high score of the students is %d
",hign_score);
printf("The low score of the students is %d
",low_score);
free(p);
}
PS:指针的题目容易出错,用的什么要小心。如果没有语法错误,出错的话,一般就是指针的地址有问题。
程序是对的,有运行结果。结贴吧
*(p+n)=*(p+k);
你的n都没初始化怎么能使用来作为地址的索引呢
我照贴过来的 完全可以运行啊。。。
也能显示结果 就是最高分不对
是随机的,他只是在当前空闲内存中最前的一个内存的空间
是随机的,他只是在当前空闲内存中最前的一个内存的空间
你有什么问题啊?
VB语言程序设计实验指导与习题解答基本信息
以下是关于《VB语言程序设计实验指导与习题解答》的详细信息:该书名为《VB语言程序设计实验指导与习题解答》,隶属于21世纪高等学校规划教材系列,标准书号为ISBN 978-7-115-24677-6。它的编目分类为TP312,适合程序设计学习者查阅。本书由肖红和薄海玲两位作者共同主编,具体翻译工作未标明作者。责任编辑...
C语言程序设计教程:习题解答与上机实验图书信息
这是一本关于C语言程序设计的教程,由同济大学出版社出版,是其计算机系列教材中的一员,于2001年9月1日初次发行。该书以简体中文编写,内容丰富且实用,适合学习者深入理解和实践。图书的纸质版本采用平装设计,共有168页,便于携带和阅读。书本的开本大小为16,这意味着页面布局紧凑,便于在不同尺寸的...
c语言程序设计试题
阐述编程语言的概念,学习进制转换以及程序的基本运行原理,让大家先有一个整体上的认识。下面是我整理的关于c语言程序设计基础知识,希望大家认真阅读!【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、...
面向对象的程序设计语言是一种
1、Smalltalk Smalltalk并不是一种单纯的程序设计语言,而是反映面向对象程序设计思想的程序设计环境。这个系统强调了对象概念的归一性,引入了类、方法、实例等概念和术语,应用了单重继承和动态绑定,成为面向对象程序设计语言(OOPL)发展过程中的一个引人注目的里程碑。2、Eiffel Eiffel的主要特点是全面的...
用Python语言设计程序,5道题,谢谢!
第一题,用input()接受用户输入,int()把输入转换成整型,if... else语句判断条件。能被2整除的是偶数,否则奇数 代码:n = int(input())if n % 2 == 0:..#前面的点表示缩进。..print("是偶数")else:..print("是奇数")第二题input()、int()和嵌套if语句 代码:n = int(input())...
简述计算机程序设计语言(机器语言、汇编语言、高级语言)的优缺点...
2、缺点:是用指令编程,而成千上万条指令很难记住,且一旦出错很难找出错误。不同型号的计算机,指令编码并不相同,因此,针对某一型计算机写的程序移植到另外一种计算机上后,运行结果未必正确,甚至有可能根本不能运行。二、汇编语言 1、优点:可直接访问系统接口,汇编程序翻译成的机器语言程序的效率...
“高级程序设计语言”是什么?
高级语言是面向用户的、基本上独立于计算机种类和结构的语言。其最大的优点是:形式上接近于算术语言和自然语言,概念上接近于人们通常使用的概念。高级语言的一个命令可以代替几条、几十条甚至几百条汇编语言的指令。高级语言易学易用,通用性强,应用广泛。高级语言种类繁多,可以从应用特点和对客观系统的...
各种程序设计语言的区别?
几种程序语言的区别:java语言、python语言、C语言、PHP语言。1、java语言:java语言曾一度家喻户晓,如今虽然潮流已过,但java跨平台的优势以及强大的类库着实不容小觑,其他语言很难超越,java衍生除了非常多周边产品(如jsp),非常多的开源系统都是基于java(hadoop、hive、hbase、lucene等),java和c...
设计c语言程序(输入三位数,分别输出该数各个数位上的数字)
include <stdio.h> int main(){int x,a,b,c;printf("请输入一个三位数:");scanf("%d",&x);a=x\/100;b=x\/10%10;c=x%10;printf("百位是%d\\n十位是%d\\n个位是%d\\n",a,b,c);return 0;}
以下关于高级程序设计语言中的数据成分的说法中,正确的是___。_百度...
以下关于高级程序设计语言中的数据成分的说法中,正确的是数据的名称用标识符来命名;数组是一组相同类型数据元素的有序集合;程序员不能自己定义新的数据类型;答案选择A,B,D;若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也...
侯炒丙戊: 数组定义:int *f; 分配内存:f=malloc(n*sizeof(int));//n是数组长度 赋值:for(i=0;i<=n-1;i++)cin>>f[i]; 重新分配内存:f=realloc(f,m*sizeof(int));//m是新的数组长度
桦南县18919383928: c语言程序怎么实现动态内存分配? - ?
侯炒丙戊: 一、原型:extern void *malloc(unsigned int num_bytes); 头文件:#include功能:分配长度为num_bytes字节的内存块 说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL.当内存不再使用时,应使用free()函数将内存...
桦南县18919383928: C语言:动态内存分配 - ?
侯炒丙戊: 1.p1=(int *)malloc(10*sizeof(int)); //malloc 函数将会在动态存储区中分配一个长度为 10*sizeof(int)的 <连续> 空间. 而且p1的值是 分配域的起始地址;这就有一点像数组名了.2.例如 int temp[10]; int *ptemp; ptemp=temp; //得到数组的首地址.这样 ptemp 就可以 引用 数组的元素了.比如 ptemp[i]; 当然 这是 固定分配内存的.3.scanf("%d",&p1[btc]); 和 printf("%d",p1[btc]); 这两个函数 中 p1 的作用 就 是相当于数组名. 引用动态的数组.
桦南县18919383928: C语言中的动态内存分配的用法举例 - ?
侯炒丙戊: 1、malloc函数:其作用是在内存的动态存储区中分配一个长度为size的连续空间.其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针. 2、free函数:由于内存区域总是有限的,不能不限制地分配下去,而且...
桦南县18919383928: c语言中什么是动态分配内存? - ?
侯炒丙戊: c语言用函数malloc动态分配内存的,要用到指针,释放内存是free指针 malloc 原型:extern void *malloc(unsigned int num_bytes); 用法:#include <malloc.h> 或#include<stdlib.h> 功能:用于向内存申请空间,分配长度为num_bytes字节的内存...
桦南县18919383928: 关于c语言动态内存分配的问题! - ?
侯炒丙戊: 要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数.(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”)1.malloc函数 函数原型为void *malloc(unsigned int size);在内存的动态存储...
桦南县18919383928: 如何用C语言编写动态分配内存的函数 - ?
侯炒丙戊: #include <stdio.h>void main() {int *p;p=new int;*p=3;printf("%d\n",*p);delete p; }
桦南县18919383928: C语言的动态存储分配 - ?
侯炒丙戊: p=(int*)malloc(sizeof(int));分配可以存储一个int类型量的空间,将空间首地址保存到p中.动态分配的空间在程序运行的过程中必须通过free()函数释放,否则会一直占用.看书去吧,这些知识光靠在这里问,不系统地看书学习是不可能掌握的.************************************************* malloc()和calloc()都是用于动态分配连续存储空间的,区别是calloc()会将分配的空间用0初始化,malloc()不进行初始化realloc()函数用于修改用上述两个函数分配的空间大小.free()用于释放上述函数分配的空间.
桦南县18919383928: C语言里动态内存分配的问题 - ?
侯炒丙戊: C语言中动态分配内存的三个函数是:#include <stdlib.h> void *calloc( size_t num, size_t size );#include <stdlib.h> void *malloc( size_t size );#include <stdlib.h> void *realloc( void *ptr, size_t size ); 当发生错误时,这三个函数都会返回NULL(0),...
桦南县18919383928: C语言如何动态分配存储空间 - ?
侯炒丙戊: #include <stdio.h> #include <malloc.h> #include <memory.h> #include <string.h> /* 工程功能:简单学生管理系统, 包含插入,删除,修改操作,采用链表数据模型 */ typedef struct student{int Num;//学号char name[12];//姓名int age;//年龄...