《C Primer Plus》源代码问题

《C Primer Plus》源代码问题,第1张

无解

你现在的情况是,为什么这个源文闷芦件运行不了

还是冲罩嫌为什么散手编译不通过

还是为什么编译过后,程序无法在另外一台机器运行

还是为什么编译过后,程序无法进行debug

……

首先,你需要学会c语言的基础语法,那么你就可以写一些简单的程序了。想要进阶就要进一步深入学习算法等。其次,学迅歼习编程语言必须要有兴趣,兴趣不够很容易半途而废。

格式的话,养成良好的缩进改庆习惯有助于别人和自己更容易看懂代码。

推荐一本书<<c primer plus>>写的很不错。

你还需要安装ide,推荐安装vs2012。

拓展资料:

C语言是一门通用计算机编核昌握程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

山上有m只猴子要选大王,选举办法如下:所有猴子从1到m进行编号并围坐一圈,从第一号正盯开始按顺序1,2,...n继续报数,凡是报n号的猴子都退出到圈外,照此循环报数,直到圈内只剩下一只猴子时,这只猴子就是举烂和大王.输出大王的编号。

第历改一种方法:利用循环链表

#include<stdio.h>

#include<malloc.h>

#define M 8//共有8只猴子

#define N 3//数到3只时退出第三只

typedef struct monkey

{int number

int flag

struct monkey* next

}MONKEY

main()

{ MONKEY *head=NULL,*p,*s

int i,sum=0,count=0

clrscr() //清屏

p=(MONKEY *)malloc(sizeof(MONKEY)) //分配内存

p->number=1p->flag=1

p->next=head

head=p

for(i=2i<=Mi++)

{ s=(MONKEY *)malloc(sizeof(MONKEY))

s->number=is->flag=1

s->next=head

p->next=sp=p->next

}

p=head

for()

{if(p->flag==1)

count++

if(count==N)

{p->flag=0

count=0

sum++}

if(sum==M-1)

break

p=p->next

}

p=

head

for(i=1i<=Mi++)

{ if(p->flag==1)

printf("\t%d",p->number)

p=p->next

}

}

第二种方法:数组

#include<stdio.h>

#define M 8

struct monkey

{int number

int nextp

}link[M+1]

void main()

{int i,count,h

for(i=1i<=Mi++)

{ if(i==M)

link[i].nextp=1

else

link[i].nextp=i+1

link[i].number=i

}

printf("\n")

count=0

h=M

printf("依次退出的猴子: \n")

while(count<M-1)

{i=0

while(i!=3)

{ h=link[h].nextp

if(link[h].number)

i++}

printf("%4d",link[h].number)

link[h].number=0

count++

}

printf("\n大王是:")

for(i=1i<=Mi++)

if(link[i].number)

printf("%3d\n",link[i].number)

}

第三种是普通方法for循环

#include<stdio.h>

void main()

{ int i,k,m,n,num[50],q,*p

clrscr()

printf("input number of person: n=")

scanf("%d",&n)

printf("\ninput number of person when how many monkey exit: q=")//输入数到q只时退出第三只

scanf("%d",&q)

p=num

for(i=0i<ni++)

*(p+i)=i+1

i=0

k=0

m=0

while(m<n-1)

{if(*(p+i)!=0) k++

if(k==q)

{ *(p+i)=0

k=0

m++

}

i++

if(i==n)i=0

}

while(*p==0)p++

printf("The last one is NO:%d\n",*p)

getch()

}

BCCN网友 ip:59.59.40.*

2009-1-31 18:54:51 发表

#include <stdio.h>

void main()

{

int m,n

puts("输入猴子的个数:")

scanf("%d",&m)

puts("输入报数:")

scanf("%d",&n)

void choice(int m,int n)

choice(m,n)

}

void choice(int m,int n)

{

int i,j=-1

int num=1

int s[100]

for(i=0i<mi++) s[i]=0

while(num<m)

{

for(i=1i<=ni++)

{

j++

if(j==m) j=0

while(s[j]==1)

{

j++

if(j==m) j=0

}

}

s[j]=1

num++

}

for(i=0i<mi++)

if(s[i]==0) printf("%d号是猴子王!!",i+1)

}

该程序已在Turbo C++3.0中通过编译.

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

1.程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(10岁),再往回推。

2.程序源代码

age(n)

int n

{

int c

if(n==1) c=10

else c=age(n-1)+2

return(c)

}

main()

{ printf("%d",age(5))

}

==============================================================

【程序29】

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

1. 程序分析:学会分解出每一位数,如下解释:(这里是一种简单的算法,师专数002班赵鑫提供)

2.程序源代码:

main( )

{

long a,b,c,d,e,x

scanf("%ld",&x)

a=x/10000/*分解出万位*/

b=x%10000/1000/*分解出千位*/

c=x%1000/100/*分解出百位*/

d=x%100/10/*分解出十位*/

e=x%10/*分解出个位*/

if (a!=0) printf("there are 5, %ld %ld %ld %ld %ld\n",e,d,c,b,a)

else if (b!=0) printf("there are 4, %ld %ld %ld %ld\n",e,d,c,b)

else if (c!=0) printf(" there are 3,%ld %ld %ld\n",e,d,c)

else if (d!=0) printf("there are 2, %ld %ld\n",e,d)

else if (e!=0) printf(" there are 1,%ld\n",e)

}

==============================================================

【程序30】

题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。 

1.程序分析:同29例

2.程序源代码:

main( )

{

long ge,shi,qian,wan,x

scanf("%ld",&x)

wan=x/10000

qian=x%10000/1000

shi=x%100/10

ge=x%10

if (ge==wan&&shi==qian)/*个位等于万位并且十位等于千位*/

 printf("this number is a huiwen\n")

else

 printf("this number is not a huiwen\n")

}

C 程序开发经典实例之七

【程序61】

题目:打印出杨辉三角形(要求打印出10行如下图) 

1.程序分析:

  1

1  1

1  2  1

1  3  3  1

1  4  6  4  1

1  5  10 10 5  1 

2.程序源代码:

main()

{

 int i,j

 int a[10][10]

 printf("\n")

 for(i=0i<10i++)

 {

a[i][0]=1

a[i][i]=1}

for(i=2i<10i++)

 for(j=1j<IJ++)

a[i][j]=a[i-1][j-1]+a[i-1][j]

for(i=0i<10i++)

{

 for(j=0j<=ij++)

printf("%5d",a[i][j])

printf("\n")

}

 }

}

【程序66】

题目:输入3个数a,b,c,按大小顺序输出。 

1.程序分析:利用指针方法。

2.程序源代码:

/*pointer*/

main()

{

 int n1,n2,n3

 int *pointer1,*pointer2,*pointer3

 printf("please input 3 number:n1,n2,n3:")

 scanf("%d,%d,%d",&n1,&n2,&n3)

 pointer1=&n1

 pointer2=&n2

 pointer3=&n3

 if (n1>n2) swap(pointer1,pointer2)

if(n1>n3) swap(pointer1,pointer3)

 if(n2>n3) swap(pointer2,pointer3)

printf("the sorted numbers are:%d,%d,%d\n",n1,n2,n3)

}

swap(p1,p2)

int *p1,*p2

{

 int p

 p=*p1*p1=*p2*p2=p

}

题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

1.程序分析:谭浩强的书中答案有问题。

2.程序源代码:

main()

{

 int number[10]

 input(number)

 max_min(number)

 output(number)

}

input(number)

int number[10]

{

 int i

 for(i=0i<9i++)

scanf("%d,",&number[i])

scanf("%d",&number[9])

}

max_min(array)

int array[10]

{

 int *max,*min,k,l

 int *p,*arr_end

 arr_end=array+10

 max=min=array

 for(p=array+1p<ARR_ENDP++)

if(*p>*max) max=p

else if(*p<*min) min=p

k=*max

l=*min

*p=array[0]array[0]=ll=*p

*p=array[9]array[9]=kk=*p

 return

}

output(array)

int array[10]

{

 int *p

 for(p=arrayp<ARRAY+9P++)

printf("%d,",*p)

 printf("%d\n",array[9])

}

【程序68】

题目:有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数

1.程序分析:

2.程序源代码:

main()

{

 int number[20],n,m,i

 printf("the total numbers is:")

 scanf("%d",&n)

 printf("back m:")

 scanf("%d",&m)

 for(i=0i<N-1I++)

scanf("%d,",&number[i])

scanf("%d",&number[n-1])

move(number,n,m)

 for(i=0i<N-1I++)

printf("%d,",number[i])

printf("%d",number[n-1])

}

move(array,n,m)

int n,m,array[20]

{

 int *p,array_end

 array_end=*(array+n-1)

 for(p=array+n-1p>arrayp--)

*p=*(p-1)

*array=array_end

m--

if(m>0) move(array,n,m)

}

【程序69】

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

1. 程序分析:

2.程序源代码:

#define nmax 50

main()

{

 int i,k,m,n,num[nmax],*p

 printf("please input the total of numbers:")

 scanf("%d",&n)

 p=num

 for(i=0i<NI++)

*(p+i)=i+1

i=0

k=0

m=0

while(m<N-1)

{

 if(*(p+i)!=0) k++

 if(k==3)

 {

*(p+i)=0

k=0

m++

 }

 i++

 if(i==n) i=0

}

while(*p==0) p++

 printf("%d is left\n",*p)

}

【程序70】

题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。 

1.程序分析:

2.程序源代码:

main()

{

 int len

 char *str[20]

 printf("please input a string:\n")

 scanf("%s",str)

 len=length(str)

 printf("the string has %d characters.",len)

}

length(p)

char *p

{

 int n

 n=0

 while(*p!='\0')

 {

n++

p++

 }

 return n

}

C 程序开发经典实例之八

【程序71】

题目:编写input()和output()函数输入,输出5个学生的数据记录。

1.程序分析:

2.程序源代码:

#define N 5

struct student

{

 char num[6]

 char name[8]

 int score[4]

} stu[N]

input(stu)

struct student stu[]

{

 int i,j

 for(i=0i<NI++)

 {

printf("\n please input %d of %d\n",i+1,N)

printf("num: ")

scanf("%s",stu[i].num)

printf("name: ")

scanf("%s",stu[i].name)

for(j=0j<3j++)

 {

printf("score %d.",j+1)

scanf("%d",&stu[i].score[j])

 }

printf("\n")

 }

}

print(stu)

struct student stu[]

{  

 int i,j

 printf("\nNo. Name Sco1 Sco2 Sco3\n")

 for(i=0i<NI++)

 {

printf("%-6s%-10s",stu[i].num,stu[i].name)

for(j=0j<3j++)

 printf("%-8d",stu[i].score[j])

printf("\n")

 }

}

main()

{

 input()

 print()

}

【程序72】

题目:创建一个链表。

1.程序分析: 

2.程序源代码:

/*creat a list*/

#include "stdlib.h"

#include "stdio.h"

struct list

{

 int data

 struct list *next

}

typedef struct list node

typedef node *link

void main()

{

 link ptr,head

 int num,i

 ptr=(link)malloc(sizeof(node))

 ptr=head

 printf("please input 5 numbers==>\n")

 for(i=0i<=4i++)

 {

scanf("%d",&num)

ptr->data=num

ptr->next=(link)malloc(sizeof(node))

if(i==4) ptr->next=NULL

else ptr=ptr->next

 }

 ptr=head

 while(ptr!=NULL)

 {

printf("The value is ==>%d\n",ptr->data)

tr=ptr->next

 }

}

【程序73】

题目:反向输出一个链表。 

1.程序分析:

2.程序源代码:

/*reverse output a list*/

#include "stdlib.h"

#include "stdio.h"

struct list

{

 int data

 struct list *next

}

typedef struct list node

typedef node *link

void main()

{

 link ptr,head,tail 

 int num,i

 tail=(link)malloc(sizeof(node))

 tail->next=NULL

 ptr=tail

 printf("\nplease input 5 data==>\n")

 for(i=0i<=4i++)

 {

scanf("%d",&num)

ptr->data=num

head=(link)malloc(sizeof(node))

head->next=ptr

ptr=head

 }

 ptr=ptr->next

 while(ptr!=NULL)

 { printf("The value is ==>%d\n",ptr->data)

ptr=ptr->next

 }

}

【程序74】

题目:连接两个链表。

1.程序分析:

2.程序源代码:

#include "stdlib.h"

#include "stdio.h"

struct list

{

 int data

 struct list *next

}

typedef struct list node

typedef node *link

link delete_node(link pointer,link tmp)

{

 if (tmp==NULL) /*delete first node*/

return pointer->next

 else

 {

if(tmp->next->next==NULL)/*delete last node*/

 tmp->next=NULL

else /*delete the other node*/

 tmp->next=tmp->next->next

return pointer

 }

}

void selection_sort(link pointer,int num)

{

 link tmp,btmp

 int i,min

 for(i=0i<NUMI++)

 {

tmp=pointer

min=tmp->data

btmp=NULL

while(tmp->next)

{

 if(min>tmp->next->data)

 {

min=tmp->next->data

btmp=tmp

 }

 tmp=tmp->next

}

printf("\40: %d\n",min)

pointer=delete_node(pointer,btmp)

 }

}

link create_list(int array[],int num)

{

 link tmp1,tmp2,pointer

 int i

 pointer=(link)malloc(sizeof(node))

 pointer->data=array[0]

 tmp1=pointer

 for(i=1i<NUMI++)

 {

tmp2=(link)malloc(sizeof(node))

tmp2->next=NULL

tmp2->data=array[i]

tmp1->next=tmp2

tmp1=tmp1->next

 }

 return pointer

}

link concatenate(link pointer1,link pointer2)

{

 link tmp

 tmp=pointer1

 while(tmp->next)

tmp=tmp->next

 tmp->next=pointer2

 return pointer1

}

void main(void)

{

 int arr1[]={3,12,8,9,11}

 link ptr

 ptr=create_list(arr1,5)

 selection_sort(ptr,5)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8279970.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存