练习题

//11.8

#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[5] = { 1,2,3,4,5 };
int p1 = (int)(&a + 1);//数组a的首地址
int p2= (int)((int)a + 1);//将地址转化为int型得到乱码
int p3= (int)(a + 1);//数组中第二个元素
printf("%d,%d,%d\n", p1[-1], p2[0], p3[1]);//p1:后退一个,p2:数组首地址,p3:元素加1
getchar();
return 0;
}

//11.5
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[5] = { 1,2,3,4,5 };
int *ptr = (int )(&a + 1); 行代码中 &a 代表 整个数组的地址,(&a + 1) 就代表数组a下一个int类型数字的地址,把这个地址强转成 int 赋给ptr。这里(ptr - 1),指针减一就是减去它所指向的类型的大小,int类型正好为四个字节;
printf("%d,%d", *(a + 1), *(ptr - 1));
return 0;
}
char 类型的字节为1,char类型的指针字节为4

//11.3
#include <stdio.h>
int g = 0;
int f()
{
return g++;//先引用后++
//g++第一次不改变,g第二次改变;
//++g两者都改变;

}
int main()
{
if (f()&&f())//&&和的意思,两者都为真方可
{
printf("%d\n", g);
}
printf("%d\n", g);
return 0;

}

//11.4
#include<stdio.h>
int main()
{
int i = -2;
unsigned int j = 1;//无符号型
unsigned char b = 0;
if ((i + j) >= 0)//有符号型转化为无符号型(原码,饭吗,补码)
{
printf(“i+j>=0\n”);

}
else
{
	printf("i+j<0\n");
}
printf("i+j=%d\n",i+j);
printf("j-2=%d\n",j-2 );
printf("b-1=%d\n",b-1);//字符型转化为整数型,(原码,反吗,补码)
b = b - 1;
printf("b-1=%d\n", b);
return 0;

}
//逆序输出汉字(汉字在计算机中占两个字符)
#include<stdio.h>
#include<stdlib.h>
int main()
{
char str[80] = “临沂大学信息学院信息工程”;
char t1, t2;
int L, i;
L = strlen(str);
for (i = 0; i < L / 2; i = i + 2)
{
t1 = str[i];
t2 = str[i+1];
str[i] = str[L-2-i];
str[i+1] = str[L-1-i];
str[L-2 -i] = t1;
str[L - 1- i] = t2;
}
printf("%s", str);
return 0;
}
//11.8
//把“LIN临YI沂University大学信息208”倒序打印出来
#include <stdio.h> //定理:如果第一个字符串当做char处理,那么标准的ASCLL字符一定是个整数
#include <string.h>
#define MAX 100 //定义字符串的最大长度

int main()
{
int len;
char str[80] = “LIN临YI沂University大学信息208”;
len = strlen(str);
int min = 0;
int max = len - 1;
int temp;
while (min < max) //字符串逆序(按字节长度)
{
temp = str[min];
str[min++] = str[max];
str[max–] = temp;
}

int i = len;
while (i != 0)          //从后开始扫描,遇到小于0的字符,则逆序自其往前二字符(中文字符占2个字节长度)
{
	i--;
	if (str[i] < 0)
	{
		temp = str[i];
		str[i] = str[i - 1];
		str[i - 1] = temp;
		i = i - 1;
	}
}
printf("%s\n", str);       //输出逆序后的字符

return 0;

}//十进制变二进制;根据其在电脑中数据的存在形式;
#include<stdio.h>
void func(unsigned int x, int cnt)
{
if (cnt > 31)
return;
if (cnt != 0 && cnt % 4 == 0)
{
printf(" “);
}
printf(”%u", (x >> (31 - cnt)) & 0x01);
func(x, ++cnt);
}
int main()
{
int x = 0;
scanf_s("%d", &x);
func(x, 0);
return 0;
}
//递归问题
//第一天做了一道题,每天做题数是前一天的两倍,总数不超过100道,一共做了多少道?做了几天?
#inclue <stdlib.h>
int main()
{
int day, ans, sum;
for (day = 1, ans = 1, sum = 1; day++; sum <= 100)//sum<=63,结果将正常输出
// 条件限制有问题
{
ans = ans * 2;
sum + = ans;
}

printf("第%d天做了%d道题,一共做了多少道");
return 0;

}//循环问题
5个强盗一起抢了1家银行。
因为太累了,他们商量决定,先回家睡一觉再分钱。
过了不知多久,1个强盗醒过来了。
他将这1堆钱平均分成5份,结果多了1元,就将多的一元自己拿了,又拿走其中的1堆。
又过了不知多久,第2个强盗来了。
他不知道有1个同伴已经来过,还以为自己是第1个到的呢。
于是将地上的钱堆起来,平均分成5份,发现也多了一元,同样独吞了这一元,拿走其中的1堆。
第3个、第4个、第5个强盗都是这样……问这5个强盗至少抢了多少元钱?第5个强盗走后还剩下多少元?
输出至少抢了多少元钱?第5个强盗走后还剩下多少元,中间用空格隔开
#include<stdio.h>
int main()
{
int first, i, t;
for (i = 1; i < 5000; i++)
{
first = i;
for (t = 1; t <= 5; t++)//五个强盗,控制五次循环
if (first % 5 == 1)//必须每次分的时候对5求余为1
{
first = (first - 1) / 5 * 4;//第一个人拿走以后剩的钱
if (t == 5)
printf("%d %d\n", i, first);
}
else
break;
}
return 0;
}

///实现一个字符串查找的简单函数,在字符串s中查找字符串t,返回字符串t在s中的首地址。若未找到,则返回NULL
#include<stdio.h>
#include<stdlib.h>
char search(chars, char*t);
#define MAXS 30
int main()
{
char s[MAXS], t[MAXS], pos;
get(s);
get(t);
pos = search(s, t);
if (pos != NULL)
{
printf("%d\n", pos - s);
}
else
{
printf("-1,\n");
}
system(“pause”);
return 0;
}
char search(chars, char
t);
{
int i = 0, j;
while (s[i] != ‘\0’)
{
j = 0;
while (t[j] != ‘\0’)
{
if (s[i + j] != t[j])
break;
j++;
}
if (t[j] == ‘\0’)
return s + i;
j++;
}
return NULL;

}
//C语言特定函数
#include<string.h>
#include<stdio.h>
char str(const charstrs, const charstrt);
void ReadString(char s[]);
int main()
{
char * p;
char strs[30], strt[30];
ReadString(strs);
ReadString(strt);
p = strstr(strs, strt);
if (p != NULL)
{
printf("%d\n", p - strs);
}
else
{
printf("-1\n");
}
return 0;
}
char str(const charstrs, const char
strt)
{
charm;
m = str(strs, strt);
return m;
}
11.17
// 请输入一个ea15de
#@$^sdf中存在的字符,并输出它所在的位置,要求当输入ea15de*^#@$sdf不存在的sc字符时可以不断的输入。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//请输入一个ea15de*^#@KaTeX parse error: Expected group after '^' at position 71: … str = "ea15de*^̲#@^sdf";
int i = 0;
int IsFind = 0;
printf(“请输入一个ea15de*#@$sdf中存在的字符:\r\n”);
scanf_s("%c", &data);
getchar(); //除去空格
for (i = 0; i < strlen(str); i++)
{
if (str[i] == data)
{
IsFind = 1;
break;
}
}
if (IsFind)
{
printf(“你所查找的字符位于:%d位置!\r\n”, i);
}
else
{
while (1)
{
scanf_s("%c", &data);
}

}

}
/// 买包子。.cpp : 定义控制台应用程序的入口点。

//今日小题:wya去买包子,第一天买了x个包子(x<10),第二天买了xx个包子,第三天买了xxx个包子,

//以此类推(如2+22+222+2222+…),买了y次。x,y由用户输入,求第y次买的包子数及买的包子的总数。

#include “stdafx.h”

#include “math.h”

#include “stdio.h”

int _tmain(int argc, _TCHAR* argv[])

{

int a[99] = { 0 };						//将每天买包子的数量放在一个数组中

int sum = 0, n, x, y;					//sum买包子的总数

scanf_s("%d", &x);					//第一天买了x个包子(x<10)

scanf_s("%d", &y);					//买了y次包子

for (n = 0; n<y; n++)					//第一个for循环 当求出第y天买包子数时跳出

{

	a[0] = 1 * x;						//n=0时 为第一天

	a[n + 1] = x*pow(10.0, n + 1) + a[n];  // 10.0 pow  要求输入浮点型数据

	if (n + 1 == y)

	{

		printf("第%d次买了%d个包子\n", y, a[n]);

	}

}

for (n = 0; n<y; n++)					//第二个for循环 累加求出买包子总数

{

	sum += a[n];

}

printf("一共买了%d个包子\n", sum);

return 0;

}
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
考核题
//请输入一个ea15de*^#@KaTeX parse error: Expected group after '^' at position 78: …ring = "ea15de*^̲#@^sdf";
int i = 0;
int IsFind = 0;
printf(“请输入一个ea15de*#@$sdf中存在的字符:\r\n”);
scanf("%c", &data);
getchar(); //除去空格
for (i = 0; i < strlen(string); i++)
{
if (string[i] == data)
{
IsFind = 1;
break;
}
}
if (IsFind)
{
printf(“你所查找的字符位于:%d位置!\r\n”, i);
}
else
{
while (1)
{
scanf("%c", &data);
}

}
system("pause");

}
//wya买车,50万一辆,第一天买一辆,第三天买一辆,第五天买3辆;并且每天的最后一辆可以根据天数打折,依次为九折,八折,七折,要求用户输入天数,并且天数只能是基数,求其当天买车数量以及一共花费多长金钱

#include <stdio.h>
#define Q 50
double car(int x);

int main(void) {
int x;
int i;
double m, n = 0;
scanf_s("%d", &x);
m = car(x);
printf(“当天所花费金额为%.2lf\n”, m);
for (i = 1; i <= x; i += 2) {
n += car(i);
}
printf(“之前买车所花费的所有金额为%.2lf”, n);
return 0;
}
double car(int x) {
double m;
if (x == 1) {
m = Q;
}
else {
double a, b; // a为当天购买车数,b为折扣数目
a = 0.5*(x + 1); //天数和车数的关系
b = 1.1 - 0.1*a; //车数和折扣的关系
m = (a + b - 1)*Q; //(a-1)Q+Qb
}
return 0;
}//本题要求实现求Fabonacci数列项的函数。Fabonacci数列的定义如下:

f(n) = f(n−2) + f(n−1) (n≥2),其中f(0) = 0,f(1) = 1。
#include <stdio.h>

int f(int n);

int main()
{
int n;

scanf_s("%d", &n);
printf("%d\n", f(n));

return 0;

}
int f(int n)
{
if (n = 0)
{
return 0;
}
else if (n = 1)
{
return 1;
}
else
{
return f(n - 2) + f(n - 1);//f(3)=f(1)+f(2)//f(2)=f(0)+f(1)从入口进,会返回入口
}
return 0;
}//输入一个上底和下底为n的等腰梯形
#include <stdio.h>
int main()
{
int a, b, c, n;//a为行数,b为空格数,c为星号
printf(“input n:”);//输入一个高和上底都为n的等腰梯形
scanf_s("%d", &n);
for (a = 1; a <= n; a++)
{
for (b = 1; b <= n - a; b++) { //打印行前的空格
printf(" “);
}
for (c = 1; c <= 2 * a + n - 2; c++) { //每一行的星号与行数与n的关系
printf(”* *");
}
printf("\n");
}
while (1);
return 0;
}
11.27//程序解读
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char * argv[])
{
int a[3][2] = { (0, 1), (2, 3), (4, 5) }; //花括号里面是圆括号,所以这里就组成了逗号表达式。一行用逗号隔开的表达式的运算是从左到右的,但结果只取最右边的那个逗号的右边的表达式的值。这是逗号表达式最基本也是最重要的用法。
int *p; //定义一个指针
p = a[0]; //指到a[0]地址
printf("%d\n", p[0]); //输出地址里的值

system("pause");   //暂停  
return 0;
//最后数组里面的值是 a[3][2] = {1, 3, 5, 0, 0, 0}; 所以a[0] = 1  

}
//考核题
 //请编写程序,实现以下功能:在字符串中的所有数字字符前加一个$字符。例如,输入 A1B23CD45,输出 A$1B$2$3CD$4$5。
#include <stdio.h>
#include <stdlib.h>
int fun(char *s)
{
char t[80];
int i, j;
for (i = 0; s[i]; i++)
t[i] = s[i];
t[i] = ‘\0’;
for (i = 0, j = 0; t[i]; i++)
{

	if (t[i] >= '0' && t[i] <= '9')
	{
		s[j++] = '$';
		s[j++] = t[i];
	}

	else
	{
		s[j++] = t[i];
		s[j] = '\0';
	}
}
return 0;

}
int main()
{
char s[80];
printf(“Enter a string:”);
scanf("%s", s);
fun(s);
printf(“The result: %s\n”, s);
return 0;
}
#include<stdio.h>
#include<stdio.h>
int main(void)
{
char a[100];
int i;
int len;
scanf_s("%s")

}

//求S=2+22+222+2222+22222的值
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int result = 0.0f;
int i, j;
int sum = 0;
int n, a;
scanf_s("%d %d", &n, &a);
for (i = 0; i < n; i++)
{

	sum = a *pow(10.0, i) + sum;
	result += sum;
}

printf("%d", result);
return 0;

}
}//数组指针的理解
#include “stdafx.h”
int _tmain(int argc, _TCHAR* argv[])
{
char a[] = “imj”;//字符串变量

*a = 'L';

printf("%s", a);

return 0;

}//
#include “stdafx.h”
#include “stdlib.h”

int main()
{
char *a = “imj”;//字符串常量,不可更改
*a = ‘L’;
printf("%s", a);

system("pause");

}

//12.3
#include “stdafx.h”
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>

int main()
{
char *c[] = { “ENTER”, “NEW”, “POINT”, “FIRST” };
char **cp[] = { c + 3, c + 2, c + 1, c };
char ***cpp = cp;
printf("%s\n", **++cpp);
printf("%s\n", ++cpp + 3);
printf("%s\n", *cpp[-2] + 3);
printf("%s\n", cpp[-1][-1] + 1);
system(“pause”);
return 0;
}
//12.4冒泡排序
#include “stdafx.h”
#include <stdio.h>
void Bubblesort(int s[], int n);
int main()
{
int a[5];
int i;
for (i = 0; i < 5; ++i)
{
scanf_s("%d", &a[i]);
}
Bubblesort(a, 5);
for (i = 0; i < 5; ++i)
{
printf("%d", a[i]);
}

printf("\n");
return 0;

}
void Bubblesort(int s[], int n)
{
int i, j, t;
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - i - 1; j++)
{
if (s[j] > s[j + 1])
{
t = s[j];
s[j] = s[j + 1];
s[j + 1] = t;
}
}

}

}
//大小端问题
#include <stdio.h>
int main()
{
int a[4] = { 1,2,3,4 };
int ptr1 = (int)(&a + 1); //4
int ptr2 = (int)((int)a + 1);//2000000

printf("%x, %x\n", ptr1[-1], *ptr2);

}
小端输出:12345在电脑中存入为54321,输出时从左向右输出图解
#include “stdafx.h”
#include “stdio.h”
#include “string.h”
int main()
{

	char str[20] = { '\0' };
	char p[20] = { '\0' };
	gets_s(str);
	int s = 0;
	int mark;
	int i = 0;


	for (int j = 0; j < sizeof(str) + 1; j++)
	{
		if (str[j] == '-')
		{
			s++;
		}


		if (s == 2)
		{
			mark = j;
			break;
		}
	}


	for (int k = mark + 1; k < strlen(str); k++)
	{
		p[i++] = str[k];
	}


	p[i++] = '-';


	for (int k = 0; k < mark; k++)
	{
		p[i++] = str[k];
	}


	p[i] = '\0';
	printf("%s", p);
	getchar();

	return 0;

}

日期反转,虽然麻烦但是很有意思
02-29-1999
1999-02-29
另外在月份输出时要考虑%02d,两个字节
//pta
7-7 龟兔赛跑
乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

输入格式:
输入在一行中给出比赛时间T(分钟)。

输出格式:
在一行中输出比赛的结果:乌龟赢输出@@,兔子赢输出_,平局则输出--;后跟1空格,再输出胜利者跑完的距离。

输入样例:
242
输出样例:
@_@ 726

#include"stdafx.h"
#include<stdio.h>
  int main()
	{
		int t = 0, t1 = 0, t2 = 0, W = 0, T = 0;
		scanf_s("%d", &t);
		while (t1<t&&t>0) {
			if (t1 % 10 == 0 && T>W) {
				t2 = t1 + 30;
				while (t1<t2&&t1<t) {
					W += 3;
					t1++;
				}
			}
			else {
				t2 = t1 + 10;
				while (t1<t2&&t1<t) {
					W += 3;
					T += 9;
					t1++;
				}
			}
		}
		if (W>T) {
			printf("@_@ %d", W);
		}
		else if (W == T) {
			printf("-_- %d", W);
		}
		else {
			printf("^_^ %d", T);
		}
		return 0;
	}
虽然很变态,但是思路为判断兔子的时间,如果十分钟后的,st大于sw,则让sw变大,并使t1增大,若st<sw,则两者都跑。
给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。

//结构体:
输入格式:
输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。

输出格式:
在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。

输入样例:
5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75
输出样例:
zhangfeng 10001 258

#include <stdio.h>
#include <string.h>
int main()
{

	struct stdent
	{
		char num[10];
		char name[100];
		int s[3];
		int max;
	}str[10];
	int n = 0;
	scanf_s("%d", &n);
	for (int i = 0; i < n; i++)
	{
		char num[10];
		char name[100];
		scanf_s("%s %s %d %d %d", num, name, &str[i].s[0], &str[i].s[1], &str[i].s[2]);
		strcpy_s(str[i].num, num);
		strcpy_s(str[i].name, name);
	}
	for (int i = 0; i < n; i++)
	{
		str[i].max = str[i].s[0] + str[i].s[1] + str[i].s[2];
	}
	int index = 0;
	int max = 0;
	for (int i = 0; i < n; i++)
	{	if (str[i].max >max)
		{
			index = i;
			max = str[i].max;
		}
	}
	printf("%s %s %d", str[index].name, str[index].num, max);
	return 0;
}
快速排序`在这里插入代码片#include <stdio.h>
void sort (int *a,int left,int right);
int main (void){
	//freopen ("2.txt","r",stdin);
	int b[10];
	int n;
	for(n=0;n<10;n++){
		scanf ("%d",&b[n]);
	}
	sort(b,0,9);
	for(n=0;n<10;n++){
		printf ("%d ",b[n]);
	}
	return 0;
}
void sort (int *a,int left,int right){
	if(left >= right){
        return ;
    }
    int i = left;
    int j = right;
    int key = a[left];
    while(i < j)
    {
        while(i < j && key <= a[j]){
            j--;
        }
        a[i] = a[j];
        while(i < j && key >= a[i]){
            i++;
        } 
        a[j] = a[i];
    }
    a[i] = key;
    sort(a, left, i - 1);
    sort(a, i + 1, right);
}
`

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值