int countCattles(int cattles, int years){
return years<=0cattles: countCattles(cattles2,years-4);
}
===
就可以了
printf("20年后有%d只\n ", countCattles(1,20);
本书采用“案例引导,任务驱动”的编写方式,深入浅出地讲解了C程序设计的基本方法;通过“案例展示—归纳总结—模仿练习—自主设计”的学习模式,使读者循序渐进地掌握C语言的编程方法和思想,提高动手能力。全书案例按照“任务要求—问题分析—程序详解—归纳总结”顺序组织,注重培养读者先进行算法描述后进行编程实践的良好编程习惯,使读者逐步掌握用计算机解决实际问题的方法。全书叙述严谨,实例丰富,内容详尽、难易适中、重点突出,并将指针等较难理解的知识分解到多章讲解,降低了读者学习的难度。
全书分为8章,主要内容包括C语言基础知识、算法、C程序的控制结构、数组与指针、函数、结构体与共用体、文件 *** 作和C语言课程设计。
本书适合作为高等院校计算机专业学生的教材,也可作为自学C语言程序设计的参考用书。
你的复制是往后挪了一格的,字符数当然要 +1。
那一句没有起到任何实质性作用,因为 a[0]本来就是'a'。
strcpy(str,"1234");:
初始 str=="",strcpy 内部的指针(指示当前字符)指向"1234"中的'1'
第一步 str=="1"(复制了一个字符),指针往后挪一格('2')
第二步 str=="12"(又复制了一个),指针往后挪('3')
第三步 str=="123",指针往后挪('4')
第四步 str=="1234",指针往后挪('\0')
指针已经跑到字符串"1234"的末尾了,表示复制结束,退出。
结合这个思路理解一下 strcpy(&a[1],a); 复制的结果。
puts(char str)本来传的参就是个地址,你给它个指针,它根据指针指向的内存找到一串字符(当然要以'\0'结尾)输出出去。
第一题:
#include <iostream>
using namespace std;
void main()
{ int i, j, k, count=0;
for( i=1; i<=9; i++)
for( j=0; j<=9; j++)
if ( i==j )
continue;
else
for( k=0; k<=9; k++)
if ( k!=i&&k!=j)
{count++;
cout<<i<<j<<k<<ends;
}
cout<<endl;
cout<<"所有这样的三位数个数有:"<<count<<" 个"<<endl;
}
第二题
#include <iostream>
using namespace std;
int fun(chars,int n)
{
int flag=1;
for(int i=0;i<n;i++)//比较前n个字符是否为
if(s[i]!='')
{
flag=0;
break;
}
if(flag==0)
return 0;
else
{
int k=n;
while(s[k]!='\0')//移动到非字符
{
if(s[k]=='')
k++;
else
break;
}
int j=0;
while(s[k]!='\0')//向前复制
{
s[n+j]=s[k];
k++;
j++;
}
s[n+j]='\0';
}
return 1;
}
void main()
{
static char str[15];
int m;
cout<<"请输入一个只含和字母的字符串:"<<endl;
cin>>str;
cout<<"请输入n值:"<<endl;
cin>>m;
fun(str,m);
cout<<str<<endl;
}
第三题
#include "iostream"
#include "string"
#include "list"
#include "cassert"
using namespace std;
/
编号、姓名、部门、应付工资、保险、税金、实付工资。
其中实付工资由公式计算得到:实付工资=应付工资 - 保险- 税金
/
struct employee{
string m_num;//编号
string m_name;//姓名
string m_dep;//部门
double m_salary;//应付工资
double m_insurance;//保险
double m_tax;//税金
};
/
(1)录入:输入职工数据,其中“实付工资”通过计算得到;
(2)删除:删除指定的职工信息(输入姓名,若找到则删除该信息)
(3) 修改:允许对已经录入的数据重新进行编辑、修改;
(4) 显示:显示全体职工数据;
(5)查询:
a 输入职工姓名,显示该职工的全部数据;
b 输入某部门值,显示该部门职工的数据、工资总额、平均工资。
(6) 退出程序。
/
list<employee> emps;
int main(int argc, char argv[])
{
void print(const employee &e);
void input();
void del();
void mod();
void show_all();
void show_name();
void show_dep();
cout<<"请选择 *** 作:1录入 2删除 3修改 4查询 5显示所有员工 6退出 :"<<endl;
int choose=0;
cin>>choose;
assert(!cinfail());
while (choose!=6)
{
if (choose==1) input();
if (choose==2) del();
if (choose==3) mod();
if (choose==4)
{
int choice=0;
cout<<"请选择 *** 作 1按姓名查询 2按部门查询 3退出:"<<endl;
cin>>choice;
if (choice==1) show_name();
if (choice==2) show_dep();
if (choice==3)
{
cout<<"请选择 *** 作:1录入 2删除 3修改 4查询 5显示所有员工 6退出 :"<<endl;
cin>>choose;
assert(!cinfail());
continue;
}
}
if (choose==5) show_all();
cout<<"请选择 *** 作:1录入 2删除 3修改 4查询 5显示所有员工 6退出 :";
cin>>choose;
assert(!cinfail());
}
return 0;
}
void print(const employee &e)
{
cout<<"编号:"<<em_num<<endl;
cout<<"姓名:"<<em_name<<endl;
cout<<"部门:"<<em_dep<<endl;
cout<<"保险:"<<em_insurance<<endl;
cout<<"税金:"<<em_tax<<endl;
cout<<"应付工资:"<<em_salary<<endl;
cout<<"实付工资:"<<em_salary-em_insurance-em_tax<<endl;
}
void input()
{
string num,name,dep;
double salary,ins,tax;
cout<<"请输入员工编号:"<<endl;
cin>>num;
cout<<"请输入员工姓名:"<<endl;
cin>>name;
cout<<"请输入员工部门:"<<endl;
cin>>dep;
cout<<"请输入员工保险:"<<endl;
cin>>ins;
assert(!cinfail());
cout<<"请输入员工税金:"<<endl;
cin>>tax;
assert(!cinfail());
cout<<"请输入员工应付工资:"<<endl;
cin>>salary;
assert(!cinfail());
employee temp;
tempm_dep=dep;
tempm_insurance=ins;
tempm_name=name;
tempm_num=num;
tempm_salary=salary;
tempm_tax=tax;
empspush_back(temp);
cout<<"员工录入 *** 作完毕"<<endl;
}
void del()
{
if (empssize()==0)
{
cout<<"没有员工记录"<<endl;
return;
}
string name;
bool isfind=false;
cout<<"请输入要删除的员工姓名:"<<endl;
cin>>name;
list<employee>::iterator iter;
for (iter=empsbegin();iter!=empsend();iter++)
{
if (iter->m_name==name)
{
isfind=true;
empserase(iter);
cout<<"姓名为"<<name<<"的员工记录已删除"<<endl;
return;
}
}
if (!isfind)
{
cout<<"没有找到姓名为"<<name<<"的员工"<<endl;
return;
}
}
void mod()
{
if (empssize()==0)
{
cout<<"员工记录为空"<<endl;
return;
}
bool isfind=false;
string name;
cout<<"请输入要修改的员工姓名:"<<endl;
cin>>name;
list<employee>::iterator iter;
for (iter=empsbegin();iter!=empsend();iter++)
{
if (iter->m_name==name)
{
isfind=true;
cout<<"姓名为"<<name<<"的员工记录已找到"<<endl;
break;
}
}
if (isfind)
{
string num,name,dep;
double tax,ins,salary;
print(iter);
cout<<endl;
cout<<"请输入新的员工编号:"<<endl;
cin>>num;
cout<<"请输入新的员工姓名:"<<endl;
cin>>name;
cout<<"请输入新的员工部门:"<<endl;
cin>>dep;
cout<<"请输入新的员工保险:"<<endl;
cin>>ins;
assert(!cinfail());
cout<<"请输入新的员工税金:"<<endl;
cin>>tax;
assert(!cinfail());
cout<<"请输入新的员工工资:"<<endl;
cin>>salary;
assert(!cinfail());
iter->m_dep=dep;
iter->m_insurance=ins;
iter->m_name=name;
iter->m_num=num;
iter->m_salary=salary;
iter->m_tax=tax;
cout<<"1 员工记录被成功修改"<<endl;
}
else
{
cout<<"没有找到姓名为"<<name<<"的员工记录"<<endl;
}
}
void show_all()
{
if (empssize()==0)
{
cout<<"员工记录为空"<<endl;
return;
}
cout<<"显示全体员工数据:"<<endl;
cout<<"--------------------"<<endl;
list<employee>::iterator iter;
for(iter=empsbegin();iter!=empsend();iter++)
{
cout<<endl;
print(iter);
cout<<endl;
}
cout<<"--------------------"<<endl;
}
void show_name()
{
if (empssize()==0)
{
cout<<"员工记录为空"<<endl;
return;
}
bool isfind=false;
string name;
cout<<"请输入要查询的员工姓名:"<<endl;
cin>>name;
list<employee>::iterator iter;
for(iter=empsbegin();iter!=empsend();iter++)
{
if (iter->m_name==name)
{
isfind=true;
cout<<"姓名为"<<name<<"的员工记录已找到"<<endl;
print(iter);
break;
}
}
if (!isfind)
{
cout<<"没有找到姓名为"<<name<<"的员工"<<endl;
return;
}
}
void show_dep()
{
if (empssize()==0)
{
cout<<"员工记录为空"<<endl;
return;
}
double isfind=000;
double total_salary=000;
string dep;
cout<<"请输入要查询的部门名称:"<<endl;
cin>>dep;
cout<<"部门["<<dep<<"]的员工信息:"<<endl;
cout<<"--------------------"<<endl;
list<employee>::iterator iter;
for(iter=empsbegin();iter!=empsend();iter++)
{
if (iter->m_dep==dep)
{
isfind++;
total_salary+=iter->m_salary;
print(iter);
cout<<endl;
continue;
}
}
cout<<"--------------------"<<endl;
if (isfind==0)
{
cout<<"没有找到名称为["<<dep<<"]的部门"<<endl;
}
else
{
cout<<"部门["<<dep<<"]工资统计:"<<endl;
cout<<"工资总额:"<<total_salary<<endl;
cout<<"平均工资:"<<total_salary/isfind<<endl;
}
}
好了 我都运行过的
scanf输入一个整数,他会根据地址去存储这个数。
首先找到pvalue指向的地址&value,&value也是一个指针,最后赋值给value。
于是可以得到这个结论:你无论多少重指针,他都是赋值给最后一个符合类型的变量。
以上就是关于C语言编程实例全部的内容,包括:C语言编程实例、c语言程序设计的内容简介、关于C语言中strcpy的用法以及一个简单案例分析。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)