1、定义一个函数,任意传递三个整数类型的值,返回这三个值的和、差、平均值。
int demo(int v1, int v2, int v3, int *p1, int *p2);
int main(int argc, const char * argv[]) {
// 要求定义一个函数, 传递三个值, 返回这三个值得和,差,平局值
int a = 10;
int b = 20;
int c = 30;
// int res = demo(a , b , c);
// printf("res = %i\n", res);
// 定义三个变量用于保存计算结果
int res1 = 0; // 和
int res2 = 0; // 差
// int res3 = 0; // 平局值
// *p1 == res1 *p2 == res2
// 我们想要的就是调用完函数之后, 和差平均值对应的变量都被"修改"为对应的值
int res3 = demo(a, b, c, &res1, &res2);
printf("和 = %i, 差 = %i, 平均值 = %i\n", res1, res2, res3);
return 0;
}
int demo(int v1, int v2, int v3, int *p1, int *p2)
{
int sum = v1 + v2 + v3;
*p1 = sum;
int m = v1 - v2 - v3;
*p2 = m;
int average = sum / 3;
return average;
/*
// 因为返回的是一个逗号表达式, 而逗号表达式的值是最后一个表达式的值, 所有返回的是average
// return sum, m, average;
*/
/*
// return 连个作用 1.返回值给调用者 2.结束函数
// 注意点: return后面不可以写任何语句, 因为执行不到
return sum;
printf("--------------\n");
return m;
return average;
*/
}
2、 编写一个函数char_contains(char str[],char key), 如果字符串str中包含字符key则返回数值1,否则返回数值0。
#include <stdio.h>
#include <math.h>
int char_contains(char str[], int length,char key);
int char_contains2(char str[],char key);
int main(int argc, const char * argv[]) {
// 编写一个函数char_contains(char str[],char key), 如果字符串str中包含字符key则返回数值1,否则返回数值0
// 给你一个字符串和一个key, 要求从字符串中找出key, 如果找到就返回1没有找到就返回0
char str[] = "xiaomage";
char key = 'z';
int length = sizeof(str) / sizeof(str[0]);
int res = char_contains(str, length, key);
// int res = char_contains2(str, key);
printf("res = %i\n", res);
return 0;
}
int char_contains2(char str[],char key)
{
/*
xiaomage a
x != a x != \0
i != a i != \0
a != a
xia z
x != z x != \0
i != z i != \0
a != z a != \0
\0 != z \0!=\0
*/
/*
// 1.定义一个变量记录当前的索引
// int index = 0;
// 2.遍历数组, 取出当前的字符判断是否不等于key, 并且当前出去的字符不是\0
while (str[index] != key && str[index] != '\0') {
index++;
}
*/
int index = -1;
while (str[++index] != key && str[index] != '\0');
// a != '\0'
// \0 != \0
// int res = str[index] != '\0' ? 1 : 0;
// return res;
return str[index] != '\0' ? 1 : 0;
}
int char_contains(char str[], int length,char key)
{
for (int i = 0; i < length; i++) {
if (str[i] == key) {
return 1;
}
}
return 0;
}
3、编程实现从键盘输入3个0至9的数字,然后输出0至9中哪些数字没有出现过。
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 从键盘输入3个0~9的数字,然后输出0~9中哪些数字没有出现过
// 从键盘输入100个0~2000的数字,然后输出0~2000中哪些数字没有出现过
/*
输入: 1, 3 ,5
输出: 0, 2, 4, , 6, 7, 8, 9
*/
/*
// 1.接收用户输入的数据
int num1, num2, num3;
printf("输入三个整数, 用逗号隔开\n");
scanf("%i,%i,%i", &num1, &num2, &num3);
// 2.遍历打印0~9
for (int i = 0; i <= 9; i++) {
// 3.判断当前打印的值是否是用户输入的值, 如果是就不打印
if (num1 != i &&
num2 != i &&
num3 != i) {
printf("%i\n", i);
}
}
*/
// 空间换时间
// 1.定义数组保存所有用户输入的数
int nums[10] = {0};
// 2.接收用户输入的数据
int value = -1;
for (int i = 0; i < 3; i++) {
printf("请输入%i个整数\n", i+1);
scanf("%i", &value);
nums[value] = 1;
}
for (int i = 0; i < 10; i++) {
// printf("nums[%i] = %i\n", i , nums[i]);
if (nums[i] != 1) {
printf("%i\n", i);
}
}
return 0;
}
4、已知一个无序的数组, 里面有5个元素, 要求写一个函数对数组进行排序 int nums[8] = {99, 12, 88, 34, 5, 44, 12, 100};
#include <stdio.h>
void selectSort(int nums[], int length);
void printArray(int nums[], int length);
//void swap(int v1, int v2);
void swap(int nums[], int i, int j);
void bubbleSort(int nums[], int length);
int main(int argc, const char * argv[])
{
// 已知一个无序的数组, 里面有5个元素, 要求对数组进行排序
int nums[8] = {99, 12, 88, 34, 5, 44, 12, 100};
int length = sizeof(nums) / sizeof(nums[0]);
printArray(nums, length);
// selectSort(nums, length);
bubbleSort(nums, length);
printf("----------------\n");
printArray(nums, length);
return 0;
}
// 遍历数组
void printArray(int nums[], int length)
{
for (int i = 0; i < length; i++) {
printf("nums[%i] = %i\n", i, nums[i]);
}
}
void bubbleSort(int nums[], int length)
{
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
swap(nums, j, j+1);
}
}
}
}
// 选择排序
void selectSort(int nums[], int length)
{
for (int i = 0; i < length - 1; i++) {
for (int j = i+1; j < length; j++) {
if (nums[i] > nums[j]) {
/*
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
*/
// swap(nums[i], nums[j]);
swap(nums, i, j);
}
}
}
}
// 基本数据类型作为函数的参数, 是值传递, 在函数中修改形参不会影响实参的值
/*
void swap(int v1, int v2)
{
int temp = v1;
v1 = v2;
v2 = temp;
}
*/
// 交换两个数的值
void swap(int nums[], int i, int j)
{
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
5、 写一个函数,对传递任意两个整型类型的数据进行值的交换。
6、 构造一个函数,任意输入一个字符串,判断字符串里面每个字符出现的次数。
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
int count[128] = {0};
char string[200];
int i;
printf("请输入一串字符串:");
//scanf("%s",string);
gets(string);//这个函数有安全隐患warning: this program uses //gets(), which is unsafe.
for (i = 0; string[i] != '\0'; i++) {
count[string[i]]++;
}
for (i = 0; i < 128; i++) {
if (count[i] != 0) {
printf("字符%c出现的次数:%d\n",i,count[i]);
}
}
return 0;
}
7、求1+2!+3!+...+20!的和并返回输出。
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
float n,s=0,t=1;
for(n=1;n<=20;n++)
{
t*=n;
s+=t;
}
printf("1+2!+3!...+20!=%e\n",s);
return 0;
}
8、 编写一个函数有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
#include <stdio.h>
#include <string.h>
int age(int n){
//逆向思维,递归函数
int c;
if(n==1) c=10;
else c=age(n-1)+2;
return c;
}
int main(int argc, const char * argv[]) {
printf("第五个人的年龄是:%d岁\n",age(5));
return 0;
}
9、 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
#include <stdio.h>
#define nmax 50
int main(int argc, const char * argv[]) {
int i,k,m,n,num[nmax],*p;
printf("请输入游戏共计多少成员:");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(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号位\n",*p);
return 0;
}
10、 写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。(不准使用系统的strlen函数)。
#include <stdio.h>
int strLenth(char *p)
{
int n;
n=0;
while(*p!='\0')
{
n++;
p++;
}
return n;
}
int main(int argc, const char * argv[]) {
int len;
char str[20];
printf("请输入字符串\n");
scanf("%s",str);
len=strLenth(str);
printf("你输入的字符串长度为 %d",len);
return 0;
}
11、 计算字符串中子串出现的次数。
#include <stdio.h>
int main(int argc, const char * argv[]) {
char str1[20],str2[20],*p1,*p2;
int sum=0;
printf("请输入两个字符串:");
scanf("%s%s",str1,str2);
p1=str1;p2=str2;
while(*p1!='\0')
{
if(*p1 == *p2){
while(*p1 == *p2 && *p2 != '\0'){
p1++;
p2++;
}
}
else
p1++;
if(*p2=='\0')
sum++;
p2=str2;
}
printf("s2在s1中一共出现了%d次",sum);
return 0;
}