学习日志 姓名:周甜 日期:0712
|
|
今日学习任务
| 1、辅导老师完成学习内容答疑; 2、 3小时完成C语言摸底测试; |
今日任务完成情况
(详细说明本日任务是否按计划完成,开发的代码量) | 1. 上午按要求完成了老师对前三天内容的回顾; 2. 下午的摸底测试未能及时完成四条编程题 |
今日开发中出现的问题汇总
| 由于C语言基础不扎实,今天一下午只做了两条编程题,一题是书上的例题,所以花了很多时间在计算器加减乘除上,最后的程序还不完整,不能完全达到老师的要求,在这过程中出现了很多问题,主要问题是对数据类型和行缓冲不够理解导致结果出不来。 |
今日未解决问题
| C语言的数据类型有基本类型、枚举类型、空类型和派生类型等四大类,主要研究的是基本类型,又分为基本整型(int)、短整型(short int)、长整型(long int)、字符型(char)、单精度浮点型(float)、双精度浮点型(double);格式符有%d 十进制有符号整数 、%u 十进制无符号整数 、%f 浮点数 、%s 字符串 、%c 单个字符 、%p 指针的值 行缓冲:getchar有缓冲区有回显,如果缓冲区中没有内容,那么等待用户输入;如果有内容,哪怕一个字符,也会直接从缓冲区中读取数据,不会等待用户输入。第一次调用 getchar() 时,会等待用户输入,用户输入的所有字符都被放到标准输入(stdin)缓冲区,直到用户按下回车键为止(回车符也被放入缓冲区)。用户按下回车键,getchar() 函数才开始从缓冲区中读取数据,每次读取一个字符。 |
今日开发收获 | 大一时C语言不扎实导致今天做编程题的时候编不出来,编出来的问题很多等问题,虽然今天下午并没有做完,但是在老师的指导下我学会了不少编程时容易出现的错误以及应该怎么去修改这些错误,收获还是很大的,也让我深刻的看到自己C语言的不足 |
| 今天的课堂测试让我看到了自己知识上的薄弱点,在接下去的一个月我会重新学习C语言来弥补自己在这方面的缺陷。 |
其他
| 无 |
用C语言实现简单的计算器(加、减、乘、除)
#include <stdio.h>//头文件
float add(float a,float b) //子函数加
{
return ( a + b) ;
}
float sub(float a,float b) //子函数减
{
return ( a - b) ;
}
float mul(float a,float b) //子函数乘
{
return (a * b) ;
}
float div(float a,float b) //子函数除
{
return (a / b) ;
}
main() //主函数
{
float a; //定义输入常量
float b;
float c; //定义输出常量
char f; //定义运算符号
while(1) // 循环
{
scanf("%f",&a);//从键盘输入数字常量1
getchar(); //从缓冲区获得该常量1
scanf("%f",&b);//从键盘输入数字常量2
getchar(); //从缓冲区获得该常量2
switch(f = getchar()) //从缓冲区获得运算符号,进行分支选择
{
case'+': //当f='+',即求加法时调用
c = add(a, b); // 调用加法函数
printf("a + b = %f\n",c); //输出加法结果
break; //跳出
case'-': //当f='-',即求减法时调用
c = sub(a,b); //调用减法函数
printf("a - b = %f",c); //输出减法结果
break; //跳出
case'*': //当f='*'时,即求乘法时调用
c = mul(a,b); //调用乘法函数
printf("a * b = %f",c); //输出乘法结果
break; //跳出
case'/': //当f='/'时,即求除法时调用
c = div(a,b); //调用除法函数
printf("a / b = %f",c); //输出除法结果
break; //跳出
}
}
}
用C语言打印出杨辉三角
杨辉三角形是形如:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
的三角形,其实质是二项式(a+b)的n次方展开后各项的系数排成的三角形,它的特点是左右两边全是1,从第二行起,中间的每一个数是上一行里相邻两个数之和。
#include <stdio.h> //头文件
main() //主函数
{
int a[100][100] = {0}; //定义二维数组
int i; //定义变量
int j;
int n; //定义杨辉三角的行数
while(1) //循环,可以求多个杨辉三角
{
printf("请输入杨辉三角的行数:");//输出显示界面
scanf("%d",&n); //输入要求的杨辉三角的行数
for(i = 0;i < n;i ++) //第一列全置一
a[i][0] = 1;
for(i = 1;i < n;i ++)//杨辉三角中每个数所上面两数之和
for(j = 1;j <= i;j ++)
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
for(i = 0;i <= n;i ++) //输出杨辉三角
{
for(j = 0;j <= i;j ++)
printf("%5d",a[i][j]);
printf("\n");
}
}
}
利用递归方法实现一个函数,该函数能够实现n的阶乘,即 n! =n*(n-1)*…*3*2*1;
#include <stdio.h> //头文件
int main() //主函数
{
int fac(int n); //fac函数声明
int n; //定义输入的阶乘的阶数
int y; //定义输出的阶乘
printf("input an integer number:");//输出界面信息
scanf("%d",&n); //输入要求阶乘的数
y=fac(n); //fac函数调用
printf("%d != %d\n",n,y); //输出阶数和阶乘
return 0;
}
int fac(int n) //定义fac函数
{
int f; //定义阶乘
if(n < 0) //n不能小于0
printf("n < 0,data error!");
else if(n == 0 || n == 1) //n=0或1时,n!=1
f = 1;
else f = fac(n - 1) * n; //n>1时,采用函数的递归调用,n!=n*(n-1)
return(f);
}
输入一个字符串,计算字符串中子串出现的次数
#include <stdio.h> //头文件
#include <string.h> //字符的头文件
int main() //主函数
{
char string1[50]; //定义主串
char string2[30]; //定义子串
int i; //定义变量
int j;
int count = 0; //定义子串在主串中出现的次数
printf("input string1:");//输出主串的界面
scanf("%s",string1); //从键盘输入主串
printf("input string2:");//输出子串的界面
scanf("%s",string2); //从键盘输入子串
for(i = 0;string1[i];i ++) //扫描主串
{
for(j = 0;string2[j];j ++) //扫描子串
{
20:59:39
我的手机 2018/7/12 20:59:39
if(string1[i] == string2[j]) //当主串与子串首字母相同时开始继续扫描下面的字符
{
i ++;
j ++;
if(string2[j] == '\0') //当子串扫描结束
{
count ++; //子串在主串中出现的次数加1
break;
}
}
}
}
printf("字符串出现的次数:%d",count); //输出子串在主串中出现的次数
return 0;