编程练习3
来源:互联网 发布:手机直播辅助软件 编辑:程序博客网 时间:2024/06/15 15:38
一、编写函数void count(char a[],char w[][10],int n,int b[])。功能是:统计w指向的数组中的n个单词在a指向的字符串中各自出现的次数(将非字母字符看作单词分割符),拧将统计结果依次保存在b指向的数组中。
#include <stdio.h>#include <string.h>#define N 4 //宏定义N为4void count( char a[], char w[N][10], int n, int b[N] ){ int i = 0; int j = 0; int k = 0; int count = 0; int len = strlen(a); int len_w[N] = {0}; //定义数组len_w,存放字符数组w中每个字符串的长度 for( i = 0; i < N; i++ ) { len_w[i] = strlen(w[i]); //求出字符数组每个字符串的长度依次存入数组len_w中 } for( k = 0; k < N; k++ ) { count = 0; //让count清零 for( i = 0; i < len - len_w[k] + 1; i++ ) { for( j = 0; j < len_w[k]; j++ ) //当j小于数组w中第k个字符串的长度时进行循环 { if( w[k][j] != a[i + j] ) { break; //当a中从i开始的字符不和w[k]中的字符相等时,说明不是相同字符串,退出本次循环 } } if( j == len_w[k] ) //当j等于w[k]字符串的长度时,代表a从i开始的字符和w[k]相同 { count++; //count+1 } } b[k] = count; //将累计的count值传到数组b中 }}int main(){ char a[] = "hello world hello date hi world date"; //定义字符串a char w[N][10] = {"hello","world","hi","date"}; //定义字符串数组w int b[N] = {0}; int i = 0; count( a, w, N, b ); //调用count函数 for( i = 0; i < N; i++ ) { printf("%s----%d\n",w[i],b[i]); //输出字符串数组w和其中字符串在a中出现的次数b } return 0;}
二、编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的整数,从而生成有n/2个元素组成的整数数列;统计该数列中不同整数各自出现的次数,并将统计结果保存到c指向的二维数组中。函数返回不同整数的个数。
#include <stdio.h>#define N 10 //宏定义N为10int stat(int a[N], int n,int c[N / 2][2]){ int i = 0; int j = 0; int k = 0; int count = N / 2; for( ; i < n; j++, i += 2 ) { c[j][0] = a[i] * 10 + a[i + 1]; //合并a[i]和a[i+1] c[j][1] = 1; //合并后该数出现了一次,让c[j][1]等于1 } for( i = 0; i < N / 2; i++ ) { for( j = i + 1; j < count; j++ ) { if( c[i][0] == c[j][0] ) { c[i][1]++; //有一个相同的数就让c[i][1]加1 for( k = j; k < count; k++ ) { c[k][0] = c[k + 1][0]; c[k][1] = c[k + 1][1]; //把跟前面相同的c[j]覆盖 } count--; //有相同的数,count - 1 } } } return count; //返回共有几个不同的整数}int main(){ int a[N] = {5,8,4,9,2,7,1,3,6,0}; int c[N / 2][2] = {0}; int i = 0; int num = 0; num = stat( a, N, c ); //调用stat函数,并让num等于其返回值 for( i = 0; i < num; i++) { printf("%d appear %d times.\n",c[i][0],c[i][1]); //输出合并后的整数各出现了几次 } return 0;}
三、编写函数fun(int *a, int n, int *odd, int *even),功能是:求出数组a[]中所有奇数之和以及所有偶数之和。并利用指针odd返回奇数之和,利用指针even返回偶数之和。 例如:a[]的值依次为:1,9,2,3,11,6;则利用指针odd返回奇数之和24;利用指针even 返回偶数之和 8。
#include <stdio.h>void fun( int *a, int n, int *odd, int *even ){ int i = 0; for( i = 0; i < n; i++ ) { if( *(a + i) % 2 != 0 ) { *odd += *(a + i); //当*(a + i)为奇数时,累加给odd } else { *even += *(a + i); //当*(a + i)为偶数时,累加给even } }}int main(){ int a[] = {1,9,2,3,11,6}; int odd = 0; int even = 0; fun( a, 6, &odd, &even ); //调用fun函数 printf("奇数和为:%d\n",odd); //输出odd的值 printf("偶数和为:%d\n",even); //输出even的值 return 0;}
四、程序功能:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中。
#include <stdio.h>#include <stdlib.h>struct node //定义结构体,作为链表中的节点{ char c; struct node * next;};typedef struct node Node; //重定义类型名typedef struct node * Link;void creat_link(Link *head){ *head = NULL; //创造头节点}void judge_malloc(Link newnode) //判断动态分配空间是否完成{ if( newnode == NULL ) //如果newnode为空,没有动态分配空间,输出error返回-1 { printf("malloc error!\n"); exit(-1); }}void creat_newnode(Link *newnode) //创建新的节点{ *newnode = (Link)malloc(sizeof(Node)); judge_malloc(*newnode); //调用judge_malloc函数,判断动态空间是否完成}void insert_node_tail(Link *head,Link newnode) //将新节点从尾节点插入链表{ Link temp; temp = *head; if( temp == NULL ) //判断链表是否为空,如果是空链表,头节点和尾节点相同 { newnode->next = *head; *head = newnode; } else //如果不是尾节点,就遍历到尾节点的前一个节点,开始插入节点 { while( temp->next != NULL ) { temp = temp->next; } temp->next = newnode; newnode->next = NULL; }}void display_node(Link head){ Link temp; temp = head; while( temp != NULL ) { printf("%c",temp->c); temp = temp->next; //遍历链表并且输出每个节点的值 } printf("\n");}int main(){ Link head = NULL; //定义头指针 Link newnode = NULL; //定义新节点 char s[10] = {"qwertyuio"}; int i; creat_link(&head); //调用creat_link函数,创建新链表 for( i = 0; i < 10; i++ ) { creat_newnode(&newnode); //调用creat_newnode函数,创建新节点 newnode->c = s[i]; //将数组里面的值赋给新节点的char型变量 insert_node_tail(&head,newnode); //调用insert_node_tail函数,从尾节点插入 } display_node(head); //调用display_node函数,输出整个链表每个节点的值 return 0;}
五、编写程序STUDENT *Create(STUDENT studs[],int n)。STUDENT是一个结构类型,包含姓名、成绩和指针域。studs数组中存储了n个STUDENT记录。create函数的功能是根据studs数组建立一个链表,链表中结点按成绩降序排列,函数返回链表头指针。
#include <stdio.h>#include <stdlib.h>struct student{ char name[20]; int score; struct student * next;}; //创建学生结构体typedef struct student STUDENT; //重定义类型名STUDENT *Creat( STUDENT *studs,int n ){ int i = 0; int j = 0; STUDENT t; STUDENT *head; for( i = 0; i < n - 1; i++ ) //冒泡排序,由大到小 { for( j = 0; j < n - 1 - i; j++ ) { if( studs[j].score < studs[j + 1].score ) { t = studs[j]; studs[j] = studs[j + 1]; studs[j + 1] = t; } } } head = &studs[0]; for( i = 0; i < n - 1; i++ ) //链接成链表 { studs[i].next = &studs[i + 1]; } studs[i].next = NULL; return head;}void Display( STUDENT *head ) //打印链表节点数据{ STUDENT *p= head; while( p != NULL ) { printf("%s %d",p->name, p->score); printf("\n"); p = p->next; }}int main(){ STUDENT studs[40]; int n = 0; int i = 0; STUDENT * head; printf("number of students :\n"); scanf("%d",&n); //录入n的值 printf("please input students name and score:\n"); for( i = 0; i < n; i++ ) { getchar(); scanf("%s,%d",studs[i].name,&studs[i].score); //录入学生的姓名和成绩 } head = Creat( studs, n ); //调用Creat函数,对学生成绩由大到小排序,返回头节点给head printf("the result is:\n"); Display( head ); //调用Display函数,输出链表节点数据 printf("\n"); return 0;}
阅读全文
0 0
- 初学者编程练习3
- 编程进阶练习3
- C++ 编程练习3
- 编程小练习(3)
- 编程练习3
- 编程练习2.7.3
- 编程小练习3
- 编程练习3 1010
- 编程练习3 1013
- 编程练习3 1015
- 编程练习3
- 编程练习(3)
- 网络编程的练习3
- 编程练习3--括号匹配
- java基础编程练习3
- Python核心编程-练习3
- 第九章编程练习(3)
- 第十章编程练习(3)
- js ==和===比较
- HDU6069 Counting Divisors(素数筛+二次筛)
- oracle中的decode的使用
- cocos js Spine sp.SkeletonAnimation
- 2017多校四 1011题 hdu 6077 Time To Get Up 感谢数电老师(。
- 编程练习3
- 分布式架构真正适用于大型互联网项目的架构 dubbo+zookeeper+springmvc+mybatis+shiro+redis
- SpringMVC4.3x教程之七国际化的三种实现详解
- Linux服务器--I/O复用(select、poll、epoll)
- PHP 循环 之 While 循环方法的使用
- 1976-函数训练之被甩
- HDU1698 Just a Hook_线段树
- BW:传输到Open Hub的DTP,怎么删除?
- Android常用网站