烟台大学计算机学院教师,建设系列学习资源,改革教学方法,为IT菜鸟建跑道,让大一的孩子会编程,为迷茫的大学生出主意,一起追求快乐的大学。 著书《逆袭大学:传给IT学子的正能量》,帮助处于迷茫中的大学
【来信】 贺老师: 你好!我是一名普通二本软件工程学生。现在大二下学期,马上要大三了。 客套话我就不说了,直奔主题吧 我是一名农村的孩子,在上大学的时候,就想努力学习,找一份工作(是不是好幼稚?)。所以,大一上期乖乖上课,编写了一些小程序。在大一下学期,无意间看到了一些培训机构的视频:c++,Java,php,Android.......然后就开始学习了,当时就想走开发方向,
返回:贺老师课程教学链接 【项目3-为动态数组扩容】下面的程序,利用动态数组保存学生的成绩。当再有一批学生成绩需要保存时,要为之扩容(和吃自助一样,用多少,取多少,这好),请补充完整下面的程序,实现如图所示的功能。#include <stdio.h> #include <malloc.h> int main( ) { int num,i,addNum; /
返回:贺老师课程教学链接 【项目2-动态数组排序】编一个程序,输入某班某门课的成绩,进行排序后输出。成绩可能为小数。班级人数不定,要求采用动态数组完成。在下面代码基础上完成#include<stdio.h> #include<malloc.h> int main() { int count, i,j; float *pf;
返回:贺老师课程教学链接 【项目1-学生人数没个准】输入学生成绩,输出高于平均成绩的学生序号和成绩。其中学生人数不定,可能10个,可能1000。在录入成绩之前,学生人数由键盘输入。由于要先求出平均成绩,然后才能确定输出哪些学生的信息,所以需要一个数组先将学生信息保存下来。考虑学生人数不定,用动态数组是个更适合的方案下面的程序结构供参考:#include<stdio.h> #i
返回:贺老师课程教学链接 【项目1-学生人数没个准】输入学生成绩,输出高于平均成绩的学生序号和成绩。其中学生人数不定,可能10个,可能1000。在录入成绩之前,学生人数由键盘输入。由于要先求出平均成绩,然后才能确定输出哪些学生的信息,所以需要一个数组先将学生信息保存下来。考虑学生人数不定,用动态数组是个更适合的方案下面的程序结构供参考:#include<stdio.h> #i
返回:贺老师课程教学链接 【项目2 - 带行号显示文件】(1)设计一个程序,读取命令行中给出的文件,将其内容在屏幕上显示出来,并在其行首显示行号(行号从1开始); [参考解答] #include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { FILE *in; cha
返回:贺老师课程教学链接 【项目3 - 命令行加法器】建立项目add,设计一个用命令行能运行的加法器,其中加数的个数不定:输入:add 1 3输出 4输入:add 1 3.1 2 6输出 12.1输入:add 1 3 a 6输出:命令行中出现非法运算量![参考解答] #include <stdio.h> #include <stdlib.h> #include
返回:贺老师课程教学链接 【项目1-用命令行运行程序】下面的程序,用于复制命令行中给出的文件。请利用命令行的方式运行程序。#include<stdio.h> #include<string.h> int main(int argc,char *argv[]) { FILE *p1,*p2; int c; p1=fopen(argv[1], "r
返回:贺老师课程教学链接 【项目1-用命令行运行程序】下面的程序,用于复制命令行中给出的文件。请利用命令行的方式运行程序。#include<stdio.h> #include<string.h> int main(int argc,char *argv[]) { FILE *p1,*p2; int c; p1=fopen(argv[1], "r
返回:贺老师课程教学链接 【项目1-带姓名的成绩单】设score数组中存储8名同学的C语言成绩,字符串数组name中存储同学们的姓名。这两个数组中,每名同学的姓名与成绩的下标要始终保持一致(例如name[i]和score[i]表示同一位同学(下标为i)的姓名和C语言成绩,否则会张冠李戴)。(1)输出按成绩排序后的同学的名单;(2)输出按同学姓名排序后的成绩单(排序对象是字符串)。#inclu
返回:贺老师课程教学链接 【项目2-电子词典】做一个简单的电子词典。在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用’\t’隔开。编程序,将文件中的内容读到两个数组e[]和c[]中,分别代表英文和中文,由用户输入英文词,显示中文意思。运行程序后,支持用户连续地查词典,直到输入“0000”结束,如图: 提示:文件中的词汇已经排序,故在查
返回:贺老师课程教学链接 【项目1-带姓名的成绩单】设score数组中存储8名同学的C语言成绩,字符串数组name中存储同学们的姓名。这两个数组中,每名同学的姓名与成绩的下标要始终保持一致(例如name[i]和score[i]表示同一位同学(下标为i)的姓名和C语言成绩,否则会张冠李戴)。(1)输出按成绩排序后的同学的名单;(2)输出按同学姓名排序后的成绩单(排序对象是字符串)。#inclu
返回:贺老师课程教学链接 写出下面程序的运行结果。(1)#include <stdio.h> int main() { int i,c,j=0; char s1[2][5]= {"8980","9198"}, s2[5]= {'\0'}; for (i=3; i>=0 ; i--) { c=s1[0][i]+s1[1][i]-
返回:贺老师课程教学链接 【项目3-各种“棋盘”】定义一个8行8列的二维数组a[8][8]。(1)为二维数组中的数据赋50以内的随机数(程序模板中setdata()函数已经完成,利用产生随机数的系统函数实现),可能的取值如图所示;(2)设计函数out()按行输出二维数组中的数据;(3)设计函数outDiagonal()输出从左上到右下对角线上的元素的值,如对图的数据而言,输出为48 34 1
返回:贺老师课程教学链接 【项目2-多科成绩单】某班不超过100名同学。用二维数组score[][4]保存同学们的高数、英语、C语言成绩及总成绩(在此假设学生的学号为整型的连续值,用数组的行下标作学号)。在此基础上,完成下面的操作:(1)输入学生的实际人数num,在输入各科的成绩时,输入3科成绩后可以自动求出总分,并将数据全保存到数组中;(2)输出各门课及总分的最高成绩、最低成绩、平均成绩。
返回:贺老师课程教学链接 【项目1-二维数组当函数参数】定义一个函数来完成对参数数组中元素的排序工作,函数声明如下:int sum(int array[ ][4],int m,int n); //该函数完成对array数组中的前m行和n列元素求和在以下程序的基础上,完成对sum函数的定义。#include <stdio.h> int sum(int array[ ][4],in
返回:贺老师课程教学链接 【项目1-二维数组当函数参数】定义一个函数来完成对参数数组中元素的求和工作,函数声明如下:int sum(int array[ ][4],int m,int n); //该函数完成对array数组中的前m行和n列元素求和在以下程序的基础上,完成对sum函数的定义。#include <stdio.h> int sum(int array[ ][4],in
返回:贺老师课程教学链接 (1) #include <stdio.h> int aa[3][3]= {{2},{4},{6}}; int main() { int i ,*p=&aa[0][0]; for(i=0; i<2; i++) { if(i==1) aa[i][i+1]=*p+1;
返回:贺老师课程教学链接 //随机数发牌游戏的C语言实现: #include<stdio.h> #include<stdlib.h> #include<time.h> void initial(int* p)//初始化一付牌 { int i; for(i=0; i<52; i++) p[i]=(i/13+3)*
返回:贺老师课程教学链接 【项目2-矩阵运算】 在数学中,一个矩阵由若干行和若干列数据组成,可以直接存储为一个二维数组。(1)矩阵相加 两个矩阵相加,要求其行、列数均相等。运算规则为:一个n行m列的矩阵A加上另一个n行m列的矩阵,得到的结果是一个n行m列的矩阵C,C中的第i行第j列位置上的数等于A和B矩阵第i行第j列上数相加的和。例如: 请编程序,实现两个矩阵的加法。 [参考解答]
返回:贺老师课程教学链接 【项目1-折腾二维数组】创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后: 通过键盘输入,使后两列的10个元素获得值; 按行序优先输出数组元素; 将所有元素值乘以3后保存在数组中; 按列序优先输出(输出的第一行是数组中的第一列……,其实输出的就是“转置”); 将数组“倒”着输出(即最后一行最后一列的最先输出,第0行第0列的最后
返回:贺老师课程教学链接 【项目1-折腾二维数组】创建一个5行4列的二维整型数组,通过初始化,为数组中的前两列的10个元素赋初值,然后: 通过键盘输入,使后两列的10个元素获得值; 按行序优先输出数组元素; 将所有元素值乘以3后保存在数组中; 按列序优先输出(输出的第一行是数组中的第一列……,其实输出的就是“转置”); 将数组“倒”着输出(即最后一行最后一列的最先输出,第0行第0列的最后输出
返回:贺老师课程教学链接 1、下面的程序,要输出行、列号之和为3的数组元素,请将程序补充完整。#include <stdio.h> int main( ) { char ss[4][3]= {'A','a','f','c','B','d','e','b', 'C','g','f','D'}; int x,y,z; for (x=0; ______(1)__
返回:贺老师课程教学链接 阅读下面的程序,写出输出结果。在阅读中,建议“画”出二维数组,其中有不少精彩的处理手法等待你去发现。(1)#include <stdio.h> int main( ) { int a[6][6],i,j ; for (i=1; i<6 ; i++) for (j=1 ; j<6 ; j++)
返回:贺老师课程教学链接 实践要求 【项目5-编程处理C源代码】在CodeBlocks等IDE中都提供了代码格式整理的功能。我们可以编写程序,处理的数据就是用C写的源代码文件。C源文件是一种文本文件,可以通过程序进行操作。(1)读入一个C程序,判断其中是否只有一个main()函数,输出“暂时没有发现问题”,或者“没有main()函数”,或者“不能定义多个main()函数”;提示1:简单处
返回:贺老师课程教学链接 实践要求 【项目4-字符串处理函数】指针是神奇的,指向整型的指针int *p1,可以操作整型数组int a[];指向字符型的指针char *p2,可以操作字符数组(字符串)char str[];更灵活的是,在函数的传递中,指针、数组名在一定程度上可以互换。请编制函数,对字符串的进行各种操作。 序 功能 用数组名作形参 用指针作形参 1 字符串str1和str
返回:贺老师课程教学链接 实践要求 【项目3-字符串复制】下面的程序,将str1中除空格外的所有字符,复制到了str2中。#include <stdio.h> int main() { char str1[100]="I am a happy boy\'s daddy.",str2[100]; int i=0,j=0; while(str1[i]!='\
返回:贺老师课程教学链接 实践要求 【项目2-字符统计】下面的程序可以统计出一个字符串中数字字符的个数:#include <stdio.h> int main() { char str[50]; int i=0,n=0; printf("输入字符串:"); gets(str); while(str[i]!='\0') {
返回:贺老师课程教学链接 实践要求 【项目1-M$pszi$y是嘛意思?】背景:小明让同学传纸条给小丽。小丽接到会心一笑,大家却不知所云。纸条上写着M$pszi$y,两人暗中约定是,真实字符为实际字符前面的第4个!M$pszi$y是神马意思?推算一下,或从ASCII码表中查一下,自然是I love u。(1)小明请你写一个程序,在给小丽写情书时,再不用费功夫自己“翻译”,原信中每一个字符加
返回:贺老师课程教学链接 【项目1-M$pszi$y是嘛意思?】背景:小明让同学传纸条给小丽。小丽接到会心一笑,大家却不知所云。纸条上写着M$pszi$y,两人暗中约定是,真实字符为实际字符前面的第4个!M$pszi$y是神马意思?推算一下,或从ASCII码表中查一下,自然是I love u。(1)小明请你写一个程序,在给小丽写情书时,再不用费功夫自己“翻译”,原信中每一个字符加密为其后的第
返回:贺老师课程教学链接 1、编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述的结果。请将下面的程序补充完整。#include<stdio.h> #include<string.h> #include<ctype.h> void fltj(char str[], int a[]) {
返回:贺老师课程教学链接 项目要求 【项目4 - 查成绩】(1)score1.txt提供了某大学两个班某次测验的数据,包括每位同学的学号及成绩。请编程序,输入学号,查找出该同学的成绩。提示1:可以定义两个int型数组,其中一个n存放学号,另一个s存放成绩,可以保证两个数组中,元素下标相同,对应的是同一位同学。例如n[18]值为3123,s[18]为98,说明学号为3123的同学成绩为98
返回:贺老师课程教学链接 项目要求 【项目3 - 数组的排序】(1)编写函数,完成冒泡排序要求不能改变下面的main函数。 //两个函数bubble_sort和output_array的声明 int main( ) { int a[20]={86,76,62,58,77,85,92,80,96,88,77,67,80,68,88,87,64,59,61,76};
返回:贺老师课程教学链接 项目要求 【项目2 - 删除数组元素】del函数的作用是删除数组a中的指定元素x,n为数组a的元素个数。函数的返回值,为删除元素后的有效元素个数(数组中可能有重复元素)。函数的原型为:int del (int a[10],int n,int x)(1)请实现这个函数,并完成测试。 [参考解答] #include<stdio.h> int del(i
返回:贺老师课程教学链接 【项目1-有序数组中插入数据(函数版)】 有一个足够“大”的数组a,其中已经存储了n个呈升序排列的数据。调用函数insert(a, n, m),可以将数m插入到a中的合适位置,使其仍然保持升序,并且返回值为数组中有效数字的个数(即原先的n加1)。 例如,若a中数据为1 7 8 17 23 24 59 62 101,n=9,需要插入的数字m为50,调用函数inse
返回:贺老师课程教学链接 项目要求 【项目 - 让吃货失望的菜单】 计算机中的应用程序,常常用“菜单”的形式,提供给用户便捷的操作。当然, 里面没有菜。下面的程序段给出了一些提示,请在此基础上拓展,使程序的运行如图所示(不限于此,可以拓展) int main() { char cChioce; while(1) { cChioce = getCho
返回:贺老师课程教学链接 项目要求 【项目5 - 发奖金】 (1)过年了,村里要庆祝一下。村长对村里的128个村民说:做一个游戏,让每个人把出生年+月+日得到一个数。例如:1995年11月8日=1995+11+8=2014。然后把这个数报上来。村里有一笔钱要作为游戏的奖金,数额为M元(在程序中可以用常量固定为一个数)。如果有人报上来的数字与M相同,就把这笔钱发给这些人。如果只
返回:贺老师课程教学链接 项目要求 【项目4- 一副扑克牌】 下面的程序,输出了52张扑克牌(如图),请补充完整程序。 #include <stdio.h> int main( ) { char c[4]= {'H','S','D','C'}; int v[13]= {1,2,3,4,5,6,7,8,9,10,11,12,13}; int i,j
返回:贺老师课程教学链接 项目要求 【项目3-当年第几天(数组方案)】 当年第几天中定义一个函数,其参数为年、月、日的值,返回这一天为该年的第几天。要求在main函数中输入年月日,然后调用这个函数求值,并在main函数中输出结果。 #include<stdio.h> int days(int y, int m, int d); int main() { int
返回:贺老师课程教学链接 项目要求 【项目2 - 成绩处理函数版】 在数组score中将要存储了某小组C程序设计的成绩,请设计实现下面的各功能函数,并在main函数中调用,组合成一个完整的应用:(1)输入小组人数及成绩,要保证成绩在0-100之间;(2)输出该小组的最高成绩、最低成绩、平均成绩;(3)输出考得最高成绩和最低成绩的同学的人数;(4)输出考得最高成绩和最低成绩的同学的学号(设
返回:贺老师课程教学链接 项目要求 【项目1-有序数组中插入数据(函数版)】 有一个足够“大”的数组a,其中已经存储了n个呈升序排列的数据。调用函数insert(a, n, m),可以将数m插入到a中的合适位置,使其仍然保持升序,并且返回值为数组中有效数字的个数(即原先的n加1)。 例如,若a中数据为1 7 8 17 23 24 59 62 101,n=9,需要插入的数字m为50,调用
返回:贺老师课程教学链接 项目要求 【项目1-翻转数组】 下面的程序的输出为10 9 8 7 6 5 4 3 2 1。也就是说,调用reverse(b,10);后,b数组中的元素正好“翻转”过来了。请定义reverse函数,实现这个功能。 int main( ) { int b[10]= {1,2,3,4,5,6,7,8,9,10}; int i; rever
返回:贺老师课程教学链接 【项目1-翻转数组】 下面的程序的输出为10 9 8 7 6 5 4 3 2 1。也就是说,调用reverse(b,10);后,b数组中的元素正好“翻转”过来了。请定义reverse函数,实现这个功能。 int main( ) { int b[10]= {1,2,3,4,5,6,7,8,9,10}; int i; reverse(b,1
返回:贺老师课程教学链接 (1) #include <stdio.h> int main() { int a[]= {2,4,6,8,10}; int y=1,x,*p; p=&a[1]; for(x=0; x<3; x++) y+=*(p+x); printf("y=%d\n",y); return 0
返回:贺老师课程教学链接 项目要求 【项目4-工资的排序】从文件salary.txt中读入工人的工资(不超过500人),全部增加20%(好事),然后对工资数据进行排序,将排序后的结果保存到文件ordered_salary.txt中。做完打开文件看看结果,玩这么多数据于股掌之间,相信你会有成就感的。 [参考解答] #include <stdio.h> #include <
返回:贺老师课程教学链接 项目要求 【项目3-有序数组中插入数据】定义好一个有10个元素的数组,先输入9个呈升序的数作为前9个元素,再输入一个数,要求按原来排序的规律将它插入数组中。例如,9个呈升序的数为1 7 8 17 23 24 59 62 101,需要插入的数字为50,输出的序列则为1 7 8 17 23 24 50 59 62 101。 [参考解答] #include <
返回:贺老师课程教学链接 项目要求 【项目1-有几个】请编程序,输入若干个正数(不超过100个,以0结束),保存在数组中。再输入一个正数n,输出n在前面出现过多少次? [参考解答] 思路:将输入的数保存到数组中,并且需要记录下一共有多少个数。由于不能保证这些数的顺序,n出现的次数需要通过顺序查找的方法进行,且需要考察所有的数字。 #include <stdio.h> #de
返回:贺老师课程教学链接 项目要求 【项目2-二分法解方程】 二分法是在计算机科学中很重要的一种方法,用于查找产生二分查找算法,还可以用在很多场合。 可以用二分法解方程。 对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通过不断地把函数f(x)的零点所在的区间一分为二,使区间的两个端点逐步逼近零点,进而得到零点近似值的方法叫二分法。 假设要求方程f(
返回:贺老师课程教学链接 【项目1-有几个】请编程序,输入若干个正数(不超过100个,以0结束),保存在数组中。再输入一个正数n,输出n在前面出现过多少次? [参考解答] 【项目2-二分法解方程】 二分法是在计算机科学中很重要的一种方法,用于查找产生二分查找算法,还可以用在很多场合。 可以用二分法解方程。 对于区间[a,b]上连续不断且f(a)·f(b)<0的函数y=f(x),通
返回:贺老师课程教学链接 1、下面的程序是输出数组中最大元素的下标(p表示最大元素的下标),请将程序补充完整。 #include<stdio.h> int main() { ______(1)_______; int s[]= {1,-3,0,-9,8,5,-20,3}; for(i=0,p=0; i<8; i++) if(s[i]&