一年级第一学期。
作者:谢潇渔。
班级:08计算机科学与技术4班。
学号:40809010419
2024年12月28日。
目录(contents)
概述3第一题输出九九乘法表4
第二题任意进制数的转换5
第三题判断字符串是否回文7
第四题统计文件的字数8
第五题约瑟夫问题9
第六题三天打渔两天晒网11
第七题绘制余弦曲线12
第八题验证哥德**猜想14
第九题输出能被整除的数16
第十题绘制椭圆17
概述。本人采用了visual c++ 6.0为开发环境解决了这些问题,将前9个问题以各个独立的函数形式放置在一个工程中,在主函数调用这些函数即可运行相关试题的程序。
第10题程序的编辑环境为visual c#
运行环境:启动visual c++6.0,新建一个win32 console application工程。创建9个函数,使用以下**导入头文件:
#include ""
#include ""
#include ""
之后再主函数书写如下**以调用这些函数:
int main(int argc, char* ar**)
int i;
printfn");
printf("输入要运行的程序:1.九九乘法表");
printf("2.任意进制的数的转换3.判断回文");
printf("4.统计文件字数5.约瑟夫问题");
printf("6.三天打鱼两天晒网7.绘制余弦曲线");
printf("8.正偶数分解9.10-1000内能被整除的数");
scanf("%d",&i);
switch (i)
scanf("%d",&i);
return 0;
运行结果如图所示,输入相关题目的序号并按回车键即可执行相关程序。
试题一:输出九九乘法表。
难度系数:1/21
问题分析。使用双层循环,外层循环控制被乘数,内层循环控制乘数,逐项输出。每当被乘数变化时即切换到下一行,同时控制乘数不大于被乘数,即可输出标准的三角形乘法表。
程序**。void ex1()
//输出9*9乘法表。
int i,j;
printf九九乘法表");
for (i=1;i<=9;i++)
运行结果:试题二:将一个无符号数转换成任意d进制数。
难度系数:4/21
问题分析。本程序采用的方法为:先将输入的任意进制数转换成十进制数,之后将十进制数转换成d进制数。
1.将任意进制数转换成十进制。
可以采用带权相加法。将输入的数据保存在一个字符数组内,设转换前的数字是k进制数,转换后的十进制数为tmp,则。
其中i表示从高位到地位的第i位,n表示从低位到高位的第n位。
程序具体处理过程中,可从低位向高位处理,另设置一个变量delta,初值为1,每处理一位自乘k,则处理到第i位时的算法为。
tmp=tmp+(orinum[i]-'0')*delta;
2.将十进制数转换成任意进制数。
采用短除法。将结果保存到另外一个字符数组中,每除一次将求余结果存在字符数组的末尾,直到被除数为0,最后逆序输出即可得到转换结果。
3.其他问题。
当处理大于十进制数时,需要用字母abc……表示数字,这就是为什么用字符数组存储转换前后的数据而不是使用整型数组的原因。在程序计算过程中要将字符与数组进行相应的转换。
程序**。void ex2()
//任意进指数的转换。
char orinum[21], desnum[21];
long tmp=0;
long delta=1;
int ori,des,i,p=0;
printf("任意进制数之间的转换");
printf("将m进制的数转换成n进制:m n=")
scanf("%d %d",&ori,&des);
printf("输入待转换的%d进制数:",ori);
gets(orinum);
gets(orinum);
for (i=strlen(orinum)-1;i>=0;i--)
while (tmp!=0)
desnum[p]='0';
printf("(s)%d=("orinum,ori);
for (i=strlen(desnum)-1;i>=0;i--)
printf("%c",desnum[i]);
printf(")d",des);
运行结果如图所示。由于最多有26个英文字母,本程序最多可处理36进制数。
试题三:判断字符串是否回文。
难度系数:2/21
问题分析。此题较简单,使用两个指针分别指向字符串的首尾,将指针逐个向前与向后移动,判读两个指针指向的字符是否相等。如果中途遇到不相等的情况,则该字符串不回文,如果两个指针到达字符串的末尾与起始位置,则这个字符串是回文的。
本程序将字符串存储在字符数组str中,并定义两个字符指针变量分别指向首尾位置,此外设置一个布尔型变量t,t是字符串是否回文的标志,初值为true,如果程序中途检测到不相等的字符则置t为false,并结束循环。如果全部处理完后t仍为true则可判定此字符串回文,否则不回文。按照上面的设计思路,即可得到程序的**如下。
运行结果如图所示。
程序**。void ex3()
char str[50];
char *p1,*p2;
bool t=true;
printf("请输入待判断的字符串:")
gets(str);
gets(str);
p1=str;
p2=str+strlen(str)-1;
while (*p1!=0)
p1++;p2--;
if (t) printf("%s回文。",str);
else printf("%s不回文。",str);
试题四:编程实现统计一个文件的字数。
难度系数:2/21
问题分析。首先定义一个文件指针变量fp,之后用fopen函数以只读方式打开指定的文本文件。随后逐个字符地将内容读入,直到到达文件末尾(feof(fp)的返回值为真)。
读入一个字符采用的函数为fread。
在读入某一个字符时,如果该字符是英文字母,且上一个字符是空格或是文件开始位置,则单词数累加1。在具体实现过程中,设置一个last变量记录上一次的字符,如果是空格则值为0,否则为1,当读入一个字母时,如果last为0则新单词出现,并置值为1,当读入一个空格时,置last的值为0,程序如下:
程序**。void ex4()
char filename[30];
file *fp;
char tmp;
int last=0;
printf("需要统计的文件名:")
gets(filename);
gets(filename);
int sum=0,a=0;
if ((fp=fopen(filename,"r"))null)
while (!feof(fp))
elselast=0;
fclose(fp);
printf("文件中包含的单词数=%d",sum);
在g盘下新建一个名称为的文本文件,输入内容:“ i am a boy.”并保存,运行程序,其结果如图所示。
试题五:约瑟夫问题。
难度系数:5/21
问题分析。根据此题的特性,使用指针型链表能够非常容易地写出程序并得到结果。但是如果不使用指针方法,此题即为这十个题中一道较难的模拟题。
对于大规模的数据(例如人数达到500000),则只能采用指针的办法。本程序采用非指针方法实现。本题可采用数组模拟法,即每次间隔9个人选出一个人扔入大海,如此反复进行15次,剩下的位置即为教徒应该站的位置。
问题的关键是模拟这些操作,其难点在于如何跳过已经被扔入大海的人“数出”存活下来的9个位置并将第9个位置的人扔入大海。采用此方法实现需要一定的调试能力。
C语言课程课程设计
课程设计报告。课程名称 c语言程序设计 系别 xxx 专业班级 xxx班 学号 xxxxxxxxxx 姓名 xxx 课程题目 10或100以内儿童加减乘除算术游戏。完成日期 2013.6.14 19 指导老师 xxx 2013年 6月 21日。附件 一 程序模块图。二 源程序。include inc...
C语言课程设计
目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。xx xx学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 课程类别 专业基础课。制订时间 2010年11月 计算机科学与技术系制。c语言程序课程设计教学...
C语言课程设计
目录。1 c语言程序课程设计教学大纲。2 c语言程序课程设计说明书。3 c语言程序课程设计报告 模板 4 c语言程序课程设计成绩评定表。珠海学院。课程教学大纲。课程名称 c语言程序课程设计。适用专业 2010级计算机科学与技术系各专业。课程类别 专业基础课。制订时间 2010年11月 计算机科学与技...