算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。
一、计数、求和、求阶乘等简单算法
此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结束条件,更要注意用来表示计数、和、阶乘的变量的初值。
例:用随机函数产生100个[0,99]范围内的随机整数,统计个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数并打印出来。
本题使用数组来处理,用数组a[100]存放产生的确100个随机整数,数组x[10]来存放个位上的数字分别为1,2,3,4,5,6,7,8,9,0的数的个数。即个位是1的个数存放在x[1]中,个位是2的个数存放在x[2]中,……个位是0的个数存放在x[10]。
void main()
{ int a[101],x[11],i,p;
for(i=0;i<=11;i++)
x[i]=0;
for(i=1;i<=100;i++)
{ a[i]=rand() % 100;
printf("%4d",a[i]);
if(i%10==0)printf("\n");
}
for(i=1;i<=100;i++) ......
1、int 4字节
long 8字节
float 4字节
double 8字节
long double 16字节
2、一个字符变量只能存放一个字符、一个字节存放一个字节
char c;
c = 'a'; c = '\034' c = '\n'
c = '\x65' c = 65 c = 0101
c = 0x41
3、运算符操作
-i++等价于-(i++)
i = 2;
j = -i++;
运算结果i=3 j=-2
4、优先级
!逻辑非 > 算术运算符 > 关系运算符 > &&逻辑与 > ||逻辑或
a = 0; b = 1; c = 2; d = a++&&b++&&--c
等价于
a = 0; b = 1; c = 2; d = (a++) && (b++) && (--c)
结果为
a = 1; b = 1; c = 2; d = 0;
a = 0; b = 1; c = 2; d = a++||b++||--c;
等价于
a = 0; b = 1; c = 2; d = (a++) || (b++) || (--c);
结果为
a ......
1、int 4字节
long 8字节
float 4字节
double 8字节
long double 16字节
2、一个字符变量只能存放一个字符、一个字节存放一个字节
char c;
c = 'a'; c = '\034' c = '\n'
c = '\x65' c = 65 c = 0101
c = 0x41
3、运算符操作
-i++等价于-(i++)
i = 2;
j = -i++;
运算结果i=3 j=-2
4、优先级
!逻辑非 > 算术运算符 > 关系运算符 > &&逻辑与 > ||逻辑或
a = 0; b = 1; c = 2; d = a++&&b++&&--c
等价于
a = 0; b = 1; c = 2; d = (a++) && (b++) && (--c)
结果为
a = 1; b = 1; c = 2; d = 0;
a = 0; b = 1; c = 2; d = a++||b++||--c;
等价于
a = 0; b = 1; c = 2; d = (a++) || (b++) || (--c);
结果为
a ......
一在c中分为这几个存储区
1.栈 - 由编译器自动分配释放
2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收
3.全局区(静态区),全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放
4.存储常量的地方。- 程序结束释放
在函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。在所有函数体外定义的是全局量,加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数体外定义的static变量表示在该文件中有效,不能extern到别的文件用,在函数体内定义的static表示只在该函数体内有效。另外,函数中的"adgfdf"这样的字符串存放在常量区。
二变量的存储类别:
变量从作用域(空间)角度可以分为全局变量和局部变量。
而从生存期(时间)角度可以分为静态存储方式和动态存储方式
具体包括:
a) 自动的(auto)
b) 静态的(static)
c) 寄存 ......
atof(将字符串转换成浮点型数)
atoi(将字符串转换成整型数)
atol(将字符串转换成长整型数)
strtod(将字符串转换成浮点数)
strtol(将字符串转换成长整型数)
strtoul(将字符串转换成无符号长整型数)
toascii(将整型数转换成合法的ASCII 码字符)
toupper(将小写字母转换成大写字母)
tolower(将大写字母转换成小写字母)
atof(将字符串转换成浮点型数)
相关函数 atoi,atol,strtod,strtol,strtoul
表头文件 #include <stdlib.h>
定义函数 double atof(const char *nptr);
函数说明 atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数
字或正负符号才开始做转换,而再遇到非数字或字符串结束时
('\0')才结束转换,并将结果返回。参数nptr字符串可包含正负
号、小数点或E(e)来表示指数部分,如123.456或123e-2。
返回值 返回转换后的浮点型数。
附加说明 atof()与使用strtod(nptr,(char**)NULL)结果相同。
范例 /* 将字符串a 与字符串b转换成数字后相加*/
#include<stdlib.h>
&nb ......
-------------------------
--------------------------------------
--------------------------------------
viki 2010.1.25 制作 程序里的答案为Y
===================================
程序进去后,先输入16个数每个数按回车。
然后生成一个4x4的数组,
让观众说出心中想的数的排数,
接着程序会将这串数组的行变列,列变行,
因此刚刚观众说的行数成了现在的列数,
让观众再说一道行数,
那个数就出来了。
装怪的地方就不啰嗦了,废话不多,到此结束。
--------------------------------------
--------------------------------------
程序源码:
#include"stdio.h"
void main()
{
char max,z,x,y;
int a[4][4],b[4][4];
int i,r;
printf("请输入viki最讨厌的地方\n具有代表性的一个大写字母即可\n进入程序.\n");
scanf("%c",&max);
x=getchar();
while(max!='Y')
{
printf("错误,你的输入不是viki想要的答案,\n请重新输入\n\n");
scanf("%c",& ......
题目如下:
要求显示出单月的日历,用户说明这个月的天数和本月的起始日是星期几,即可输出该月的日历。
就是这么一道简单的程序,我憋了两天总算弄出来了,结果虽然达到了要求,但距离我预想的还有一段差距,先把程序
代码放在上面,希望大家多提修改意见。
/***********************************************************
* Name: date.c
* Purpose: Print the month day
* Author: zimo
* Date:01/25/2010
* *********************************************************/
#include<stdio.h>
int main(void)
{
int week, month, temp;
printf("Enter number of days in month:");
scanf(" %d", &month);
printf("Enter starting day of the week (1=sun,7=sat):");
scanf(" %d", &week);
if(month==28||month==29||month==30||month==31)
{
switch(week)
{
case 0:
&n ......